Nadia GUEALIA
Cours système d'exploitation by Guillaume Chanel, Jean-Luc Falcone and University of Geneva is licensed under CC BY-NC-SA 4.0
Tapez la commande suivante:
$ git clone https://gitlab.unige.ch/outils-info/bash.git
man
)man [section] <sujet>
q
/montexte
(valider par entrer)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 |
/tmp
/tmp
Les conventions suivantes (POSIX) s'appliquent:
/
/
/
est relatif au répertoire courant..
..
~
$cd ~/././././bash
$ls ~/./bash/../bash/../.
Les noms de fichiers suivent les règles suivantes:
.
*
?
/
!
On peu référencer plusieurs fichiers en utilisant les symboles suivants:
* | remplace zéro, un ou plusieurs caractères |
---|---|
? | un seul caractère |
ls
qui permet de lister les fichiers cachésls -lh
home
Accès au mot de passe root: faille de sécurité majeure.
Les utilisateurs peuvent faire partie d'un ou plusieurs groupes:
Ceci permet par exemple de:
whoami
obtenez votre logingroups
obtenez vos groupesid
La commande cat
permet d'afficher un ou plusieurs fichiers à l'écran (concatenation, voir manuel):
Fichier:
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) |
Répertoire:
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. |
La commande chmod
permet de changer les droits des fichiers:
$ chmod 754 monficher.c
ls -l
touch file | Crée un fichier vide si le fichier n'existe pas, sinon met à jour sa date de modification |
---|---|
mkdir folder | Crée le dossier spécifié |
mv source [sources] dest | Déplace les sources vers la destination si la destination est un dossier, sinon renomme le fichier source en dest (possible changement de dossier) |
cp source [sources] dest | Copie les sources vers la destination (la destination peut être un fichier ou un dossier) |
touch
mkdir
mv
cp
rm fichier | Supprime le fichier indiqué |
---|---|
rmdir dossier | Supprime le dossier indiqué |
rm
, supprimez le dossier images-backup et son contenu en une commande$ rm -rf ~/*.txt
$ rm -rf ~/* .txt
Plusieurs éditeur shell sont disponibles, on peut mentionner:
nano | Editeur léger, le plus facile a appréhender, les raccoucis clavier sont indiqués en bas |
---|---|
vi | Editeur historique, forte courbe d'apprentissage |
vim | Nouvelle version de vi avec de nombreux plugins disponibles |
emacs | Editeur historique, forte courbe d'apprentissage, plus qu'un éditeur, il fait même le café |
Le flux de sortie d'un programme est dirigée par défaut sur le terminal
La commande echo
affiche les paramètres sur la sortie standard
$ echo ce cours est vraiment génial
ce cours est vraiment génial
$ echo "ce cours est vraiment génial"
ce cours est vraiment génial
Ce flux peut être redirigé vers un fichier avec '>'
:
$ echo ce cours est vraiment génial > /tmp/qualite_du_cours.txt
cp
cp
Le flux d'entrée d'un programme est par défaut associé au clavier du terminal
La plus part des commandes nécéssitant une entrée en paramètre (par exemple un nom de fichier) utilisent l'entrée standard si le parmètre n'est pas donné
$ cat # va attendre et répeter les entrées utilisateur
$ cat > livre.txt # va concatener tous ce qui est tapé dans livre.txt -> UN NOUVEL EDITEUR :-) !
Un fichier peut-être redirigé vers ce flux d'entrée en utilisant '<'
:
$ cat < livre.txt # l'entrée standard est le fichier livre
$ cat livre.txt # le programme lit depuis le fichier livre, pas depuis l'entrée standard
$ # LE RESULTAT EST LE MEME
Ctrl+D
permet d'intérrompre le flux d'entrée
Les message d'erreur des programme ne sont pas redirigées vers le flux de sortie mais vers un flux d'erreur
Par défaut le flux d'erreur est redirigé vers le terminal
Ce flux peut être redirigé vers un fichier avec '2>'
:
$ ls non_existant_folder > /tmp/error.txt # produit une erreur sur le terminal et un fichier vide
$ ls non_existant_folder 2> /tmp/error.txt # produit un fichier contenant l'erreure
ls -R /tmp
pour lister récursivement le contenu de /tmpC | C++ | Java | Python | Ruby | |
---|---|---|---|---|---|
Entrée | stdin | std::cin | System.in | sys.stdin | $stdin |
Sortie | stdput | std::cout | System.out | sys.stdout | $stdout |
Erreur | stderr | std::cerr | System.err | sys.stderr | $stderr |
Exemple:
System.out.println( "Hello world!");
$ java HelloWorld > hello.txt
Les pipes permettent de rediriger la sortie standard d'un programme vers l'entrée standard d'un autre
On utilise le symbole '|' entre deux commandes pour les utiliser:
$ less file # affiche le contenu du fichier file avec scrolling
$ ls -R /tmp | less # affiche la sortie de ls AVEC scrolling
Combinés à la phylosophie UNIX, les pipes sont au coeur de la puissante des interfaces en ligne de commande
grep fichier pattern | cherche et affiche les lignes du fichier qui contienne un pattern (e.g. un mot) |
---|---|
grep pattern | cherche le pattern dans l'entrée standard et affiche les lignes le contenant |
Quelques commandes utiles pour ces exercices (voir le manuel):
sort, uniq, grep, head, du
Utilisez la commande ls -l
pour lister les fichiers de chats du dossier images
mais sans ajouter d'arguments à ls
Le dossier mails
contients des listes d'adresses. A partir de ces fichiers obtenez une seule liste des membres de HEPIA, triée par ordre alphabétique, sans doublons
Lister les 2 plus gros fichiers contenus dans le dossier mails
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 | Interplanetary file system - système de fichiers distribué et décentralisé. |
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…) |
/dev/
/proc/
/sys/
/dev/
mount
, trouvez où sont montés les systèmes de fichier de type ext4, fat et tmpfs ?zero
, remplissez un fichier de 1MB de zeros (attention la commande peu donner lieu à de GROS fichier si mal utilisée).null
, lister recursivement le contenu de /tmp sans que le terminal n'affiche de sortie d'erreur.La commande ps
permet de lister les processus
Sous unix, tous les processus ont:
ps
. Qu'est ce que les processus affichés ont en commun ?ps -ef
(voir man). Trouvez un processus qui est l'enfant d'un autre.pstree
que c'est bien le cas. Quel est le PID du processus initial (le plus ancien parent de tous les processus)?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
gedit
depuis le terminal&
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-plangedit
depuis le terminal, cette fois en arrière plankill
vim
$ ssh login@mon.server.com
exit
ou Ctrl+D)10.136.26.133
, dont le fingerprint est:SHA256:dMjJfl/CweskwJK6g+L4vtCh0CgYsYYR7R8aoHISA2U
votre_nom_prenom
en utilisant un editeur de texteLa commande SCP
permet de copier des fichier d'un serveur vers la machine locale et vice-versa
$ scp login@mon.server.com:/path/to/my/file /path/to/destination
$ scp /path/to/my/file login@mon.server.com:/path/to/destination
Les formats de chemin habituels sont disponibles (*, ?, ~, etc.)
votre_nom_prenom
localementvotre_nom_prenom
Vous avez a disposition une clef publique et une clef privée:
Il n'est donc pas grave de distribuer sa clef publique, en revanche la clef privée est personelle et ne doit jamais quitter la machine
Utilisée de plus en plus fréquement par des services en ligne (e.g. github, gitlab, etc.)
Créer une paire de clef publique / privée (de préférence avec passphrase)
$ ssh-keygen
Plusieurs questions vous sont posées.
Copier la clef publique sur le serveur
$ ssh-copy-id login@mon.server.com
Se connecter au serveur
$ ssh login@mon.server.com