1.14k likes | 1.32k Views
Avertissement. Ce document est un support de cours. Il ne constitue en aucun un ouvrage de référence à la programmation en exploitation. Son exploitation est subordonnée à la présence au cours dispensé par l’enseignant.
E N D
Avertissement • Ce document est un support de cours. Il ne constitue en aucun un ouvrage de référence à la programmation en exploitation. Son exploitation est subordonnée à la présence au cours dispensé par l’enseignant. • Il est fortement conseillé d’annoter ce document grâce aux explications et exemples fournis durant le cours. • Pour toute remarque, envoyer un courrier à abchiche@lami.univ-evry.fr ou à gilney@iup.univ-evry.fr
Programmation en exploitation sous UNIX Nadia Abchiche Mimouni Gilney Damm Département GEII IUT Évry
Le Shell Un programme C non intégré au noyau • Interpréteur de commandes • Langage de programmation • Permet d’étendre les commandes du système d’exploitation Nombreuses versions • sh shell Bourne (disponible sur toutes les machines) • csh Berkeley (Bill Joy) • rsh exécution à distance • tcsh, ksh, bash, vsh,…
Caractéristiques de l’interprète • Analyse et interprète des lignes de commandes • Création et lancement des processus associés aux commandes (contrôle de processus) • Distinction entre processus bloquant et tâche de fond • Redirection des E/S • Mécanisme de substitution de chaînes de caractères • Accès aux ressources de la machine : le processeur (implicitement), le(s) disque(s), imprimantes,… via des commandes. • Affiche un prompt pour signifier qu'il est prêt à interpréter une commande • Permet d’étendre les commandes du système l’exploitation • Propose un véritable langage de programmation • Nombreuses versions (sh, csh, ksh, bash,…)
Structure de la boucle d’interprétation • Le shell est un programme dont l’algo pourrait être : Tant que vrai • Lire une ligne • Identifier la commande (vérifier la syntaxe et sémantique) • Création d’un processus exécutant le fichier associé à la commande • Attente de la fin d’exécution de ce processus Fin Tant que
Choix du shell Nombreuses versions • sh shell Bourne (disponible sur toutes les machines) • csh Berkeley (Bill Joy) • bash (bourne again shell) • rsh exécution à distance • tcsh, ksh, bash, vsh,…
Langage shell : généralités • Variables utilisateurs (chaînes de caractères) • Contenu obtenu en préfixant $ à la variable • Affectation par l’opérateur = ( autrement selon le shell) Exemple : v=bonjour echo $v Afficher bonjour • Variables prédéfinies • Affectées par le shell : # ? $ ! – • Affectées avant l’exécution : HOME PATH MAIL TERM PS1 PS2 IFS (variables de configuration) • Macroprocesseur de substitution • Commandes internes break continue cd eval exit export login newgrp read shift set wait unmask trap • Structure de contrôles : if-then-else for-do-done while-do-done case-in-esac
Variables d'environnement prédéfinies • HOME chemin d'accès au répertoire initial de l'utilisateur • PATH suite de chemins d'accès aux répertoires des exécutables • PS1 invite principale du shell en mode interpréteur • PS2 invite secondaire du shell en mode programmation • IFS séparateurs de champ des arguments • MAIL chemin d'accès à la boite aux lettres utilisateur • MAILCHECK intervalle en sec au bout duquel le mail est contrôlé • DISPLAY nom de l’écran d’affichage • TERM nom du type de terminal
Quotage Rôle le quotage est utilisé pour supprimer les fonctionnalités de certains caractères spéciaux du shell, dont les métacaractères. Méta-caractères: \ $ * ` " ' Caractère d ’échappement: \ le caractère \ préserve la valeur littérale du caractère qui le suit Simples quotes '...' les caractères inclus entre 2 simples quotes ne sont pas évalués Doubles quotes "..." les caractères inclus entre 2 doubles quotes conservent leur valeur à l'exception de $ ` et \. ExempleTOTO='bonjour ’ echo '$TOTO et ' "$TOTO" $TOTO et bonjour
Syntaxe des commandes $ <cmde> [<option> [<option[… ]]] [<fichier> [<fichier> […]]] • $ est le prompt shell (modifiable par PS1) • <cmde> correspond à un nom de commande (fichier exécutable) • Une commande peut contenir plusieurs lignes (utiliser \) le prompt devient alors « > » (modifiable par PS2) • Une option est une lettre précédée par « - » • Les espaces sont des séparateurs • Pour les noms de fichiers, il existe des caractères génériques (métacaractères) : • « * » pour n’importe quelle chaîne • « ? » pour n’importe quel caractère • « […] » n’importe quel caractère de la liste • « - » séparateur d’intervalle
Les commandes • Le symbole $ invite l’utilisateur à taper une commande (interprète de commandes) • Les commandes sont tapées en minuscules • $ <nom de la commande> [options] [paramètres] • $ man <nom de la commande> donne une documentation en ligne. Exemple : man login • La variable MANPATH contient le répertoire où est installé le manuel • Voir les commandes whatis et catman • Pour stopper la saisie de paramètres faire ctrl D
Les méta caractères (ou jockers) Un méta caractère est un caractère qui a une signification particulière • Le caractère * représente un nombre quelconque de caractère quelconques • Le caractère ? représente un et un seul caractère quelconque • Le caractère [ commence une définition d’ensemble qui se termine par ] • Exemple1 : a[bc]d = abd acd • Exemple2 : a[0-9] représente tous les fichier dont le nom commence par a suivi d’un chiffre.
La commande man • Name synatxe et arguments • Synopsis usage • Description exemples, fichiers, exit values • See also Fichiers et autres commandes liés • Variable MANPATH contient le chemin d’accès aux sources la documentation • Documentation organisés par thèmes en chapitres Exemple : les commandes utilisateurs sont dans le chapitre 1 et les primitives système dans le chapitre 2.
Pour savoir dans quel répertoire vous vous trouvez, utiliser la commande pwd : pwd pour print working directory pwd donne le chemin absolu de ce catalogue • Pour changer de répertoire, utiliser la commande cd • cd pour change directory Syntaxe : cd <nom du répertoire destination> Exemple1 : cd /users/ens/ Exemple 2 : cd ramène dans le répertoire de login
Lister le contenu d’un répertoire • La commande ls –l liste les fichiers en donnant des informations. • Exemple : Si on est dans gesinfo, ls –l donne : total 2 -rwx r-x r-x 1etud1 51 Oct 1 12:00 planing drwxr-xr-x2etud1512Oct 1 12:00src Propriétaire du fichier Taille du fichier Nom du fichier Date dernière modification Nombre de liens Spécification d’accès pour le autres Spécification d’accès pour le groupe Spécification d’accès pour le propriétaire Spécification du type de fichier
Les options de la commande ls • –a affiche tous les fichiers même ceux cachés (commençants par .) • -A affiche tous les fichiers même ceux cachés sauf les répertoires . et .. • -d affiche les répertoires en tant qu’objets et non pas répertoire • -l format long, donne toutes les informations sur les objets. • -t trie les fichiers selon la date de dernière modification • -R (Récursif) affiche le contenu des répertoires et sous- répertoires associées.
Créer un répertoire • mkdir pour make directory crée un répertoire ou un sous répertoire • Exemples : $ mkdir sources $ mkdir lettres jeux $ mkdir /users/cours projets $ mkdir –p lettres /jeux
Supprimer un répertoire • rmdir pour remove directory supprime tout répertoire vide • $ rmdir projets
Changer les attributs d’un fichiers • Possibilité de modifier les droits d’accès à un fichier avec la commande chmod pour change mode • chmod <utilisateurs> [+-=][rwx] • Paramètres :
Exemples d’utilisation de la commande chmod $ chmod o-r toto retire le droit de lecture pour les autres utilisateurs pour le fichier toto $ chmod ug+w toto ajout du droit d’écriture pour le proriétaire et le groupe $ chmod –rwx toto enlève tous les droits pour tout le monde $ chmod =r toto positionne pour tout le monde le droit de lecture $ chmod u=rw,go-rwx toto positionne les droits de lecture/écriture pour le propriétaire, et retire tous les droits pour le groupe et les autres
Afficher le contenu d’un fichier • cat pour concatenate, admet plusieurs paramètres • Pour arrêter le défilement, taper ctrl s • Pour reprendre le défilement, taper ctrl q
La commande more • more accepte plusieurs fichiers : met en en tête de chaque fichoer une bannière avec le nom du fichier courant. • Offre plusieurs options • ? Permet de voire toutes les options • Return passe à la ligne suivante • Espace passe à la page suivante • q sort de l’affichage prématurément
Copier un fichier Deux utilisations de la commande cp • cp fichier1 fichier2 duplique fichier1 dans fichier2 • cp fichier1 fichier2… fichiern repertoire • cp –R rep1 rep2
Renommer/déplacer un fichier • mv (move) • Exemples : • mv toto titi (renome toto en titi) • mv essai toto (renome essai en toto) • mv toto titi /tmp (déplace deux fichiers) • mv toto /tmp/titi (déplace et renomme)
Détruire un fichier • rm (remove) efface un ou plusieurs fichiers • Exemples : • rm toto • rm essai1 essai2 • rm –r users/ens • Options possibles : • -f (force malgré les protections) • -i pour confirmer la destruction • -r pour détruire récursivement un répertoire
Commandes de manipultion de fichier • basename permet d’extraire le nom le plus relatif d’un fichier : $ basename <nom de fichier> [suffixe] • Exemples : • $ basename /users/ens/moncompte moncompte • $ basename moncompte/src/pgme.c .c pgme • $ basename moncompte/src/pgme.c e.c pgm Pas de vérification de l’existence des fichiers
La commande dirname • Extrait le chemin du fichier • Exemple : • dirname /etc/passwd /etc
La commande cut • Découpe des lignes d’un fichier ou de l’entrée standard • $ cut –cliste [<nom de fichier>] • $ cut –fliste [-d<caractère>] [-s] [<nom de fichier>] liste est une liste d’entiers séparés par des virgules correspondant aux caractères • Exemples de valeurs de liste : • 1,4,7 1 et 4 et 7 • 1-3, 8 1 à 3 et 8 • -5,10 1 à 5 et 10 • 3- 3 à la fin
Les options de la commande cut • -c découpe selon les caractères • -f découpe par champ selon le caractère séparateur de champ donné par –d. Par défaut le caractère séparateur est le caractère tab • -s supprime les lignes qui ne contiennent pas de séparateur
Exemples d’utilisation de cut • $ cut –c-5 /etc/passwd extrait les 5 premiers caractères de chaque ligne du fichier /etc/passwd • $ cut –f1,5 –d: /etc/passwd extrait le premier champ (nom de login) et le cinquième champ (nom réél de l’utilisateur) du fichier /etc/passwd
La commande find • Exécute une recherche selon les critères définis dans une expression depuis le chemin indiqué. • Syntaxe : find <chemin> [<expression>]
Les expressions possibles pour find • -name <nom> recherche le fichier portant un nom • -links <n> recherche les fichiers possédant n liens • -user <utilisateur> recherche les fichiers appartenant à un utilisateur • -group <groupe> recherche les fichiers appartenant à un groupe • -type <type> recherche les fichiers ayant un type (f=fichier, d=répertoire, b=périphérique) • -ctime <date> recherche les fichiers créés avant ou après une date de création • -print affiche le fichier pour lequel l’expression est réalisée • -exec <commande> exécute une commande pour le fichier trouvé • -perm <masque> recherche les fichier ayant le mode correspondant à un masque (3 chiffres en octal)
Exemples commande find • $ find / -name passwd –print • $ find .. –user u1 –print • $ find . –type d –print –exec ls –l {}; -print • $ find / -name core –exec rm {} \; -print • $ find / -name core –exec ls -l \; -exec rm {}\;
La commande grep • Recherche une chaîne de caractères dans un ou plusieurs fichiers • $ grep [<options>] <chaine> [<fichier>] • Les options : • -i ignore majuscules et minuscules • -h supprime le nom du fichier devant chaque lligne • -n affiche le numéro de ligne dans le fichier • -v affiche toutes les lignes sauf celles contenant la chaîne
Exemples commande grep • $ grep ‘^u’ /etc/passwd • $ grep –v « ; » *.c • $ grep ksh$ /etc/passwd
La commande head • Extrait les n premières lignes d’un fichiers • Syntaxe : head [-<n>] [<fichier>] • Par défaut n=10 et c’est l’entrée standard qui est prise • Exemples : • $ head –2 prog.c • $ head lettre
La commande od • Affiche le contenu d’un fichier sous des format de données • Les options : • -o affiche le contenu en octal (option par défaut) • -c caractères ascii • -d, -D contenu affiché en décimal • -x, -X contenu affiché en hexadécimal • Exemples : • od –c pgme • od –x prog.c
La commande sort • Trie et fusionne des fichiers • Syntaxe : $ sort [<options>] [+pos1] [-pos2] [<fichier>] • Les options : • -d ordre lexicographique (par défaut) • -n, -b trie suivant la valeur numérique des champs • -r trie selon l’ordre inverse • -tx le caractère x devient le caractère séparateur de champs par défaut c’est l’espace) • +pos1-pos2 restreint la zone qui est utilisée pour le tri aux champs qui commencent avec ppos1 et se terminant à pos2
Exemples commande sort • $ sort /etc/passwd • $ sort –r toto • $ sort +0 –1 +3 –4 toto
La commande tail • Copie une partie d’un fichier depuis un certain point jusqu’à la fin • Syntaxe : $ tail [+-n [lbc] [fr]] [<fichier>] • +n à partir du début • -n à partir de la fin • L’unité l pour les lignes (10 par défaut), b pour les blocs (512 octets), et c pour les caractères • Si r est indiqué tail affiche alors en commençant par la fin • f indique que tail ne s’arrête pas en fin de fichier, mais boucle en attendant que le fichier grossisse
Exemples commande tail • $ tail –10 prog.c • $ tail +10 prog.c • $ cat >> /tmp/essai • $ tail –2lf /tmp/essai
tr remplace un caractère ou un ensemble de caractères par un autre. • Syntaxe :tr [-cds] [chaine1] [chaine2]
Commandes de surveillance • who, w, ps • nice, renice, kill • vmstat : statistiques sur la mémoire virtuelle • swapon, swapoff gestion espace pour la pagination • du espace sur les répertoires • df espace sur le système de fichiers
Commandes et flux • Tubes nommés • Redidections • Arguments de commandes et entrées de commandes
Toute commande Unix, dès son lancement, possède 3 fichiers ouverts : • L’entrée standard (stdin) ou 0 • La sortie standard (stdout) ou 1 • La sortie erreur (stderr) ou 2 • Dans le shell sh, tout fichier ouvert par un programme est représenté par &X, où X est un numéro qui s’incrémente à chaque ouverture de fichier. • stdin, stdout et stderr sont respectivement pour toute commande lancée dans le shell &0, &1 et &2.
Exemples : • Rediriger la sortie : • $ ls –l 1>listeFich.txt • Rediriger les deux flux dans un même fichier (en tapant une commande erronée) • $ ls –l >>erreur 2>&1
Exemple 3 : compter le nombre d’utilisateurs connectés • $ who | wc –l 6 • $ who | wc –l >temp $ cat temp 6
$ ls ; who >temp bin users tmp • $ cat temp u1 tty05 Oct 8 08:35 u2 tty05 Oct 8 09:55 Seule la sortie de la dernière commande est redirigée vers le fichier temp • $(ls;who)>temp; cat temp bin users tmp u1 tty05 Oct 8 08:35 u2 tty05 Oct 8 09:55
Exécution des commandes Différents modes d’exécution des commandes • Interactif (foreground) • Asynchrone (arrière plan, background) • Différé • cyclique