Formation SYSTEME D'EXPLOITATION Linux
Les origines Tout a commencé en 1991 avec un étudiant Finlandais Linus Torvalds DOS sur son PC, c'est trop simple il étudie Minix mais c'est trop limité il décide d'écrire un système d'exploitation de type Unix sur PC
Le Noyau Linux S'insère dans le projet GNU Noyau Unix sur PC Publié sous la licence Publique GNU (GPL)
Caractéristiques Principales Système ouvert Multi tâches Multi utilisateurs Multi processeurs Multi plateformes Versions 32 bits et 64 bits Norme POSIX
Les utilisateurs Nom de connexion Mot de passe UID identifiant utilisateur GID identifiant de groupe primaire Répertoire principal (home directory) Programme de connexion Super Utilisateur: root
Connexion Login Prompt Shell
Commandes Commande = Nom + [argument(s)] Exemples: # cat /etc/passwd # cat /etc/passwd cut f1,5 d: sort Enchainement inconditionnel # date ; whoami Enchainement conditionnel # date && whoami # date whoami
Compte utilisateur Nom de l'utilisateur: logname, whoami Infos complètes sur l'utilisateur: id Interface terminal : tty Infos sur le système d'exploitation : uname Liste des utilisateurs sur la machine: who Modification de son mot de passe: passwd Page de manuel: man
Le système de fichier
Propriétés Sensible à la casse: Document document Noms longs Fichiers dans des répertoires Structure arborescente, cycles possibles Répertoires spéciaux: /... Chemin d'accès absolu ou relatif Fichiers invisibles Fichiers spéciaux Liens (hard et soft) Gestion de disques : système de fichiers
Manipulation de fichiers et de répertoires Création d'un répertoire mkdir <nom du répertoire> mkdir p rep1/rep2/rep3 mkdir tient compte du mask: umask 022 Suppresion d'un répertoire rmdir <nom du répertoire> supprime le répertoire uniquement s'il est vide
Manipulation de fichiers et de répertoires Copie de fichiers et de répertoires cp <fichier source> cp <fichier source> cp <liste de fichiers> options: i interactif p conserve les attributs r récursif <fichier destination> <répertoire destination> <répertoire destination>
Manipulation de fichiers et de répertoires Déplacement de fichiers et de répertoires mv <fichier source> mv <fichier source> <fichier destination> <répertoire destination> mv <liste de fichiers> <répertoire destination> options: i interactif f force
Manipulation de fichiers et de répertoires Suppression de fichiers et de répertoires rm <fichier(s)> options: i interactif f force r récursif
Manipulation de fichiers et de répertoires Visualisation de fichiers ou de répertoires ls [option] [fichiers/répertoires] options: l affiche les informations a liste tous les fichiers r ordre inverse t tri par date d liste le nom du répertoire i liste les inodes
Manipulation de fichiers et de répertoires Nature des fichiers file <fichier>
Manipulation de fichiers et de répertoires Création de fichiers ou modification touch [option] <fichier> options: a modification de la date de dernier accès c ne crée pas le fichier s'il n'existe pas m change la date de modification par la date courante t change la date au lieu de la date courante format de la date : MMDDhhmm[YY] exemple: touch t 04010000 ~/test.txt
Manipulation de fichiers et de répertoires Recherche de fichiers ou de répertoire find <répertoire de recherche> <options> <actions> options: type nature de l'objet (f=fichier, d=directory,l=lien) name nom de l'objet size taille de l'objet perm permission de l'objet atime date de création ctime date de modification des attributs mtime date de dernière modification actions print affiche le résultat de la commande exec effectue une commande Unix sur les fichiers ok = exec mais demande confirmation
Les expressions régulières
Les expressions régulières Expression régulière = reconnaissance d'expression Caractères spéciaux: Méta caractères Facteurs d'occurence Les méta caractères:. Caractère quelconque sauf fin de ligne. $ Fin de ligne. ^ Début de ligne, sauf dans [], négation [] Un des caractères contenus dans les crochets. Intervalle de caractères dans []
Les expressions régulières Les facteurs d'occurences:? Expression régulière précédente optionnelle * Répétition 0, 1 ou plusieurs fois + Répétition 1 ou plusieurs fois {n} Répétition de exactement n fois {n,} Répétition de au moins n fois {n,m} Répétition de au moins n mais au plus m fois Alternative \c Suppression de la spécificité du caractère 'c' () Groupement d'expressions
Expressions régulières ab(cd)*ef abcdef, abcdcdef, abcdefg, abef ab[c d]ef abcef, abdef ab[^a z]ef ab1ef, abcef ^From:.*.com$ From: robert@prolibre.com grep i '^ro*bash$' /etc/passwd grep '05\/Feb[^:]*:23.*scripts.*\+dir' /var/log/apache/access.log 62.195.62.11 [05/Feb/2002:23:30:50 +0100] "GET /scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 312 " " " " 62.195.62.11 [05/Feb/2002:23:30:50 +0100] "GET /scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 404 312 " " " " 62.195.62.11 [05/Feb/2002:23:30:50 +0100] "GET /scripts/..%%35%63../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 400 296 " " " " 62.195.62.11 [05/Feb/2002:23:30:51 +0100] "GET /scripts/..%%35c../winnt/system32/cmd.exe?/c+dir HTTP/1.0" 400 296 " " " "
Caractères spéciaux ' empêche l'évaluation des méta caractères " empêche l'expansion des méta caractères sauf \ ` et $ ` évalue et fournit le résultat de la commande $ (cmd) \ empêche l'interprétation du caractère spécial $préfixe une variable
Caractères spéciaux exemples: ls l `which firefox` ls l $HOME echo nom de la connexion: $USER echo nom de la connexion: `whoami` echo nom de la connexion: $(whoami) echo 'nom de la connexion: $USER '
Redirection d'entrée/sortie Flux d'une commande
Redirection d'une commande Redirection de sortie: ls l 1> fichier ou ls l > fichier ls l 2> /tmp/test Ajout à la fin d'un fichier (concaténer): ls l 1>> fichier Redirection de l'entrée wc < /tmp/test > /tmp/test1
Redirection d'une commande Réunion de canaux grep 'linux' /usr/doc/* > /tmp/result 2>&1 Redirection des erreurs grep 'linux' /usr/doc/* > /tmp/result 2> /dev/null
Groupes et utilisateurs A qui appartient le fichier que l'on crée? directory (admin,admin) tux (tux,pingoo) crée le fichier toto.txt Linux: toto.txt user:tux group:pingoo
Droits d'accès des fichiers Droits: lecture (r) écriture (w) exécution (x) U G O rwx rwx rwx A qui : utilisateur (u) groupe (g) autre (o)
Modifications des droits d'accès La commande: chmod <droits> <fichier(s)> qui u(ser) g(roup) o(ther) Comment = force les droits + ajoute les droits retire les droits quoi r(ead) w(rite) x(execute)
Modifications des droits d'accès Commandes: Change le owner du fichier chown <user> <fichier(s)> ex: chown billou /tmp/windows ex: chown billou.gates /tmp/winnt Change le groupe du fichier chgrp <group> <fichier(s)> ex: chgrp gates /tmp/win2000 Change le mask de création des fichiers umask <droits> ex: umask 037
Droits d'accès étendus SUID (s) exécute une commande sous l'id du propriétaire SGID (s) exécute une commande sous le groupe du propriétaire le répertoire créé appartiendra au groupe du répertoire principal Sticky Bit (t) présence en mémoire droit de n'effacer des fichiers que si on en est propriétaire (/tmp)
Commandes Alias, unalias, history!! réexecution de la dernière commande!n réexecution de la commande numéro n! n réexecution de la nième dernière commande!chaîne réexecution de la dernière commande commençant par la chaîne!?chaîne réexecution de la dernière commande contenant la chaîne
Initialisation de l'environnement Cela est dépendant du shell utilisé. shell de commande.bashrc
Personnalisation du prompt Par défault le prompt fini par le caractère $ (# pour root). Le prompt par défaut: '\s\w\$' \d Affichage de la date \h Nom de la machine \n Saut de ligne \s Nom du shell \t Heure \u Nom de l'utilisateur \w Répertoire courant \# Numéro de commande depuis la connexion \! Numéro de commande (historique) Exemple: $ PS1= "[\#] \u(\h)\w: "
Traitement du contenu des fichiers cat affiche sur le canal de sortie, des octets lus sur le canal d'entrée concaténation de fichiers head affiche les premières lignes d'un fichier tail affiche les dernières lignes d'un fichier more affiche des octets lus sur l'entrée standard wc affiche le nombre de lignes, de mots, de caractères split division d'un fichier en plusieurs fichiers sort tri des lignes d'un fichier grep recherche d'occurence
Traitement du contenu des fichiers cut extraction de colonnes ou de champs diff comparaison de fichiers comm comparaison ligne à ligne de 2 fichiers triés uniq rend unique les ligne trié d'un fichier tr traitement des caractères d'un fichier sed substitution de caractères pr mise en page
Gestion du temps date affiche la date cal affiche le calendrier pour le mois en cours time temps d'exécution d'une commande at diffère l'exécution d'une commande crontab exécution cyclique d'une commande
Compression des fichiers gzip, gunzip, zcat, zless, zgrep exemple: cat file1 file2 gzip > foo.gz gzip cr IMG > IMG.gz Bzip2, bunzip2, bzcat
Archivage La commande standard est : tar Exemples: archive le répertoire /home/robert tar czvf robert.tar.gz /home/robert extrait le contenu de l'archive tar xzvf robert.tar.gz tar xyvf robert.tar.bz2 liste le contenu de l'archive tar tzvf robert.tar.gz
Installation logiciels depuis la source A lire: REAME ou readme.txt INSTALL Installation standard:./configure help Make make install (en tant que root)
Gestion des processus
Gestion des processus Ps : liste les processus en cours Ctrl z stoppe l'execution du processus en cours kill envoie un signal à un processus (TERM, HUP, KILL, INT ) jobs liste les processus en arrière plan bg l'execution du processus est placé en background fg relance l'exécution d'un processus stoppé stty configuration du terminal
Le Fork Un fork est une fonctionnalité sous les systèmes Unix ou Linux qui permet de dupliquer un processus. Pour expliquer son fonctionnement, on va partir d'un processus qu'on appellera "Le Papa". Ce processus va simplement se dupliquer et les deux processus (le père et le fils) afficheront chacun leur statut (père ou fils).
Le Fork Lancement du père Nous allons partir d'un processus père. Afin de bien déterminer les enjeux du fork, on va également observer ses descripteurs de fichiers, ou plutôt l'un des plus importants: celui du flux de sortie (stdout) c'est à dire l'écran. On va aussi lui mettre une petite variable globale qui servira plus tard pour l'affichage du statut du processus (père ou fils). Voici à quoi va ressembler notre processus de départ:
Le fork
Le fork
Le fork Le père a appelé fork et il s'est dupliqué. Cela implique plusieurs choses: Un nouveau processus a été créé, il est considéré comme le fils du processus qui a appelé fork() Ce processus est une copie conforme de son père. D'ailleurs, la prochaine instruction à exécuter sera la même pour les deux : la condition if. La fonction fork() ne retourne pas la même chose pour les deux processus. Pour le fils, il retournera 0. Pour le père, il retournera le pid du fils (son numéro de processus). Cette duplication implique certaines choses concernant les variables et les descripteurs de fichiers. Nous allons y venir.
Le Fork
Le Fork L'appel système getpid() retourne le PID du processus appelant. getppid() retourne le PID du père du processus. La primitive exec() La primitive execlp() permet le recouvrement d'un processus par un autre exécutable (voir 6.2). int execlp( char *comm, char *arg,..., NULL ); comm est une chaîne de caractères qui indique la commande à exécuter. arg spécifie les arguments de cette commande (argv). Exemple : exécution de ls l /usr execlp( "ls", "ls", " l", "/usr", NULL );
Le Fork La primitive exit() exit() est une autre fonction qui ne retourne jamais, puisqu'elle termine le processus qui l'appelle. #include <stdlib.h> void exit(int status); L'argument status est un entier qui permet d'indiquer au shell (ou au père de façon générale) qu'une erreur s'est produite. On le laisse à zéro pour indiquer une fin normale.
Le Fork La primitive wait() #include <sys/types.h> #include <sys/wait.h> int wait( int *st ); L'appel wait() permet à un processus d'attendre la fin de l'un de ses fils. Si le processus n'a pas de fils ou si une erreur se produit, wait() retourne 1. Sinon, wait() bloque jusqu'à la fin de l'un des fils, et elle retourne son PID. L'argument st doit être nul.
Le Fork La primitive sleep() #include <unistd.h> int sleep( int seconds ); L'appel sleep() est similaire à la commande shell sleep. Le processus qui appelle sleep est bloqué durant le nombre de secondes spécifié, sauf s'il reçoit entre temps un signal. Notons que l'effet de sleep() est très différent de celui de wait() : wait bloque jusqu'à ce qu'une condition précise soit vérifiée (la mort d'un fils), alors que sleep attend pendant une durée fixée. sleep ne doit jamais être utilisé pour tenter de synchroniser deux processus.
Le Fork Bombe fork en C : #include <unistd.h> int main(void) { while(1) { /* ici on peut ajouter un malloc pour utiliser plus de ressources */ fork(); } return 0; }
Le Fork Bombe fork en bash :(){ : :& };: :() définit une fonction nommée :. { : :& } est le corps de la fonction. Dans celui ci, la fonction s'appelle elle même (:), puis redirige la sortie à l'aide d'un pipe ( ) sur l'entrée de la même fonction : et cache le processus en fond avec &. La fonction, ensuite appelée avec :, s'appelle récursivement à l'infini.
Quelques notions de réseau Adresse IP: exemple: 192.168.1.2 Netmask: exemple: 255.255.255.0 DNS Domain name server exemple: 192.168.1.1 Gateway: exemple: 192.168.1.1
Quelques notions de réseau DHCP: les informations réseau sont assignés dynamiquement par un serveur (provider Internet lors d'une connexion par modem) Informations sur le hostname hostname i hostname d getent hosts /sbin/ifconfig a /sbin/route n
Quelques notions de réseau Quelques fichiers importants /etc/hosts /etc/resolv.conf /etc/network/* ou /etc/sysconfig/* /etc/init.d/* Quelques programmes importants drakconf linuxconf yast2 webmin
Quelques notions de réseau Connexion à distance rsh, telnet, ssh ftp, ncftp, scp
Structures de contrôles case mot in [ modèle [ modèle ]... ) suite_de_commandes ;; ]... esac #!/bin/bash read p Entrez votre réponse : rep case $rep in o O ) echo OUI ;; n N) echo NON ;; *) echo Indefini esac
Structures de contrôles while suite_cmd1 do suite_cmd2 done while who grep fasm >/dev/null do echo l utilisateur fasm est encore connecte sleep 5 done
Structures de contrôles while read [ var1... ] do commande(s) de traitement de la ligne courante done <fichier_à_lire #!/bin/bash who > tmp while read nom reste do echo $nom done < tmp rm tmp
Structures de contrôles for var in liste_mots do suite_de_commandes Done #!/bin/bash for a in toto tata do echo $a done
Structures de contrôles if suite_de_commandes1 ; then suite_de_commandes2 [ elif suite_de_commandes ; then suite_de_commandes ]... [ else suite_de_commandes ] fi
Structures de contrôles #!/bin/bash if [[ f $1 ]] then echo $1 : fichier ordinaire cat $1 elif [[ d $1 ]] then echo $1 : repertoire ls $1 else echo $1 : type non traite fi
Fonction function nom_fct { suite_de_commandes } c=coucou function f1 { echo $c => utilisation dans la fonction d une variable externe c }
Fonction #!/bin/bash function ping { echo ping if (( i > 0 )) then ((i )) pong fi } function pong { echo pong if (( i > 0 )) then ((i )) ping fi } declare i i=4 ping # (1) ping et pong sont definies