Utilisation du système Linux - École des Mines de Saint

Transcription

Utilisation du système Linux - École des Mines de Saint
École Nationale
Supérieure des Mines
SAINT-ÉTIENNE
Cycle ISMIN Première année
GP : Concepts et Outils pour l’Informatique
UP : Environnement Informatique et Réseaux
Utilisation du système Linux
Philippe Lalevée
Septembre 2016
Table des matières
I
Définitions et vocabulaire
3
1 Système informatique
3
1.1 Rôles d’un système informatique . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2 Support pour les applications
6
3 Langages de programmation
7
II
8
Utilisation de Linux
4 Présentation de Linux (Unix)
9
5 Première utilisation
11
5.1 Premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.2 Interface graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.3 Commandes Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6 Système de fichiers
15
6.1 Présentation et concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.2 Manipulation des éléments
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.3 Gestion des droits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4 Le shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.5 Gestion des activités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Prologue
Ce cours constitue les premiers pas de la plupart des apprenants dans le monde des systèmes
d’exploitation, en particulier les systèmes Unix. Même si beaucoup utilisent déjà des logiciels de
bureautique ou de calcul mathématique, il est important d’étudier les principaux concepts du
logiciel de base supportant ces applications, c’est-à-dire le système d’exploitation.
2
L’objectif majeur du cours est de rendre l’utilisateur indépendant ; c’est-à-dire, maîtrisant
correctement l’utilisation des principales commandes et la consultation des pages du manuel
en ligne de Unix. Pour atteindre cet objectif, les principales commandes Unix sont présentées
avec leurs concepts afférents. C’est votre pratique régulière qui vous permettra de maîtriser et
d’approfondir ce qui est vu en cours pour convenablement utiliser les commandes.
Même si les environnements graphiques multifenêtres permettent de ne taper que peu de
commandes, l’utilisateur averti connaît les commandes correspondantes. En outre, aucun
environnement graphique multifenêtre ne pourra atteindre la puissance d’expression du « mode
commande ». Enfin, les commandes permettent de mieux appréhender et comprendre les
concepts des systèmes d’exploitation et leur utilisation quotidienne. C’est pourquoi le cours
est une séquence de paires concept et suite de commandes.
Voici quelques ouvrages et lectures recommandés.
Bibliographie (et sources du cours)
—
—
—
—
Principes des systèmes d’exploitation, A Silberschatz, P Galvin et G Gagne
Les systèmes d’exploitation, A Tanenbaum
Mon système Linux, P Lalevée et C Schüller
Unix et Linux, JM Léry
3
Première partie
Définitions et vocabulaire
1 Système informatique
Définition
— Un système informatique est un ensemble de matériels et de logiciels destiné à réaliser
des tâches mettant en jeu le traitement automatique de l’information.
— La communication d’un tel système avec le monde extérieur est assurée par des organes
d’accès
— Ces organes doivent « adapter » le monde réel au monde numérique
— Nécessité de codage, numérisation, échantillonnage, etc.
Données
Système
Données
Informatique
1.1 Rôles d’un système informatique
Fonctions d’un système
La fonction d’un système informatique est la fourniture de prestations (services) capables
d’aider à la réalisation de problèmes usuels.
Quelques exemples :
— gestion de l’information : stockage, désignation, recherche, communication, protection
contre les intrusions ou les incidents
— préparation et mise au point de programmes
— gestion de l’ensemble des ressources pour permettre l’exploitation des programmes
(c’est-à-dire création d’un environnement nécessaire à l’exécution du programme)
— gestion et partage de l’ensemble des ressources (matériels, informations...) entre
l’ensemble des usagers
Composants matériels d’un ordinateur
Un ordinateur est composé de
— Unité centrale : traitements
4
— Mémoire centrale : stockage des données
— Périphériques : unités externes (disques, son, écran...)
Périphérique
Unité
Mémoire
Centrale
Centrale
Périphérique
Périphérique
Composants d’un Système Informatique
Programmes application
Logiciel
Programmes système
Langage machine
Matériel
Équipements physiques
Un système informatique est composé de
— Matériel : exécutions des tâches
— Les équipements physiques
— Le langage machine, interface permettant de piloter les équipements
— Programmes système : machine virtuelle
— Programmes d’application : besoins utilisateur
Rôle du système d’exploitation
Fonction des programmes système
Les programmes système sont des programmes qui remplissent deux grandes fonctions :
— gérer les ressources matérielles en assurant leur partage entre les applications et/ou les
utilisateurs (sécurité, performance, fiabilité)
— présenter aux utilisateurs une interface simplifiée que celle de la machine physique =⇒
Machine virtuelle
Définition
Un Système d’exploitation (ou système) est composé de l’ensemble des programmes système.
L’objectif global de l’architecture logicielle est de fournir une machine virtuelle comme
abstraction du matériel utilisé (processeurs, disques, réseaux...).
5
La machine virtuelle a pour rôle d’offrir aux utilisateurs des fonctionnalités adaptées à leurs
besoins. Le premier de ces besoins est de masquer les caractéristiques physiques du matériel
afin que l’utilisateur ne voit pas de différences entre les différents ordinateurs qu’il utilise.
Par exemple, le système Unix est utilisé de la même façon, que l’on travaille sur une machine
monoprocesseur dans les salles de TP ou sur le serveur de calcul du service informatique, qui
est une machine « multiprocesseurs ».
Le second besoin est la distinction des différents niveaux d’abstraction. Un informaticien utilise
sans doute directement les commandes du système d’exploitation. En revanche, un utilisateur
néophyte accèdera, par exemple, à une application de comptabilité, qui s’occupera des appels
des commandes de base du système d’exploitation. En conséquence, l’architecture logicielle suit,
telle que dessinée dans ce transparent, une structure en couches logicielles, chacune offrant des
services de plus en plus évolués au niveau supérieur.
Plus les services sont évolués, moins les utilisateurs ont besoin de connaissances sur la gestion
des ressources matérielles. Ce cours étudie la couche logicielle de base constituée du système
d’exploitation. Les cours de programmation présenteront des langages et la méthodologie
permettant de construire des logiciels applicatifs. Un cours de deuxième année sera consacré à
la programmation système proprement dite.
Les deux objectifs majeurs d’un système d’exploitation sont de transformer le matériel
en une machine utilisable, c.-à-d. fournir des outils adaptés aux besoins des utilisateurs
indépendamment des caractéristiques physiques, et d’optimiser l’utilisation des ressources
(matérielles et logicielles), donc les partager principalement pour des raisons économiques.
Prenons l’exemple d’un service présent sur tous les ordinateurs, le service d’impression.
L’utilisateur demande des impressions de documents avec diverses options : titre, bannière,
nombre de copies... Le premier objectif du système d’exploitation est de proposer à l’utilisateur
une commande d’impression simple offrant les options citées ci-dessus. Le deuxième objectif
est de permettre l’accès à tous de toutes les imprimantes disponibles. Cela suppose la mise en
oeuvre de mécanismes de gestion des problèmes posés par le partage (synchronisation, gestion
des conflits...).
D’autres aspects peuvent aussi être considérés dans les objectifs d’un système d’exploitation,
comme la sécurité (ne pas mélanger deux impressions), la fiabilité (obtenir un listing correct
en cas d’incident, comme par exemple un bourrage papier) et la performance (obtenir le
document imprimé dans un délai raisonnable). Ces derniers objectifs ne sont pas toujours
obtenus sans faire des compromis. Par exemple, l’intégrité et les contrôles d’accès peuvent
obliger l’administrateur de l’ordinateur à supprimer temporairement l’accès aux imprimantes
lorsque des utilisateurs malveillants essaient de perturber le fonctionnement normal de cet
ordinateur. Autre exemple, ces mêmes contrôles d’intégrité et d’accès prennent du temps et
diminuent d’autant les performances de l’ordinateur.
L’unité d’exécution (ou de traitement) gérée par le système d’exploitation est l’activité (ou
tâche). Une activité correspond à l’exécution d’un ou plusieurs programmes. Un programme
est la matérialisation du résultat de l’analyse, de la conception et de la programmation
de tout ou partie d’une application. Il est possible que plusieurs activités simultanées et
indépendantes correspondent à des exécutions du même programme. Ces différentes exécutions
doivent ne pas mélanger leurs données : données en entrées, données intermédiaires pour les
traitements, données d’accès aux périphériques, résultats... En outre, un programme peut lancer
6
l’exécution d’autres programmes. Ces derniers peuvent être exécutés successivement dans la
même activité ou dans d’autres activités créées pour l’occasion en progressant simultanément
et indépendamment.
La « multiprogrammation » signifie avoir simultanément en mémoire centrale plusieurs activités
candidates à l’exécution et pouvoir faire progresser indépendamment ces différentes exécutions.
Le principe de base est d’attribuer l’unité centrale tour à tour aux différentes activités exécutant
les différents programmes. Une activité est appelée un processus en Unix. Dans la suite du
cours, le terme « processus » sera préféré au terme « activité » puisque le système d’exploitation
étudié est Unix.
L’une des caractéristiques les plus déterminantes pour classer les systèmes d’exploitation est
le nombre d’utilisateurs pouvant potentiellement exécuter des commandes simultanément. Sur
un ordinateur individuel, l’exécution d’une commande ne commence que lorsque l’exécution de
la commande précédente est terminée. Dans le cas où une commande est en attente pendant
une interaction avec un périphérique, par exemple en attente de données que l’utilisateur entre
au clavier, le processeur n’est pas utilisé. Un tel système d’exploitation qui ne gère qu’un seul
processus à la fois est dit mono-tâche.
Avec un système multi-utilisateur, comme Unix par exemple, plusieurs utilisateurs peuvent
travailler en même temps. Les services du système d’exploitation tels que le service d’impression
peuvent aussi s’exécuter concurremment aux commandes des utilisateurs. Un tel système
d’exploitation qui doit gérer plusieurs processus à la fois (système multitâche) est dit
multiutilisateur ou à temps partagé. Le processeur est partagé par plusieurs processus qui en
obtiennent le contrôle par quantums de temps. Ce type de système d’exploitation comporte
entre autre une entité appelée un moniteur multitâche qui optimise l’utilisation de l’unité
centrale.
2 Support pour les applications
Architecture d’un système d’exploitation
Util. 1
Util. 2
...
...
Programmes d’application
Système d’exploitation
Matériel
7
Util. n
Comme cela a été montré précédemment, le système d’exploitation est une couche intermédiaire
entre les applications des utilisateurs et le matériel. Du « haut » vers le « bas », le système offre
une machine virtuelle aux applications ; et du « bas » vers le « haut », le système gère les
ressources entre les applications.
Un développeur doit donc connaître la machine virtuelle sur laquelle seront exécutées ses
applications.
Support pour les applications
Interface de Programmation d’Applications (API)
— Le système propose une interface de programmation pour accéder aux services, fournis
dans des bibliothèques (libraries)
— Il propose une « vision uniforme » des données et de leur accès
Communication avec le système
— Entrée-sortie : échange d’informations entre l’application et le « monde extérieur » selon
un protocole précis
— Deux interfaces sont privilégiées : le clavier et l’écran (terminal)
Sauf exception, les applications n’ont pas d’accès direct au matériel ; parmi ces exceptions, on
peut trouver des raisons de performance, de sécurité ou encore de portabilité. Tous les accès
au matériel se font donc par l’intermédiaire du système d’exploitation, qui offre pour cela des
bibliothèques de services, utilisables par les programmes et les outils. Cela permet en outre de
fournir une vision uniforme des flux de données. Par exemple, la copie d’un fichier mp3 vers le
fichier arte son utilise le même service que la copie d’un document vers l’imprimante.
Ces échanges de et vers les organes externes d’un ordinateur s’appellent les entrées-sorties.
Il existe très peu de programmes qui n’en effectuent pas. Pour utiliser les ressources d’un
ordinateur, il faut donc maîtriser les instructions que sait traiter un processeur et la gestion
des entrées-sorties.
3 Langages de programmation
Concept de programme
Un programme permet la réalisation d’une tâche : il peut être écrit dans différents
langages
Langages
— sous la forme d’un algorithme : séquence d’actions élémentaires
— sous la forme d’un exécutable : ensemble d’instructions permettant la réalisation du
programme
8
— sous la forme d’un source : utilisation d’un langage de programmation, intermédiaire
entre les deux
Nécessité de passer d’un langage à un autre
— algorithme −→ source : programmation
— source −→ exécutable : compilation
Programmation
Définition
La programmation consiste à traduire un algorithme dans un langage de programmation choisi
Équation de Wirth (livre du même nom)
Structures de données + Algorithmes = Programmes
Étapes de programmation
— Analyse des données (flux) du programme
— Analyse de l’algorithme permettant de produire les données en sortie à partir des
données en entrée
Chaîne de développement
Étapes du développement
Nécessité de disposer d’outils (applications) pour cela...
9
Deuxième partie
Utilisation de Linux
4 Présentation de Linux (Unix)
GNU/Linux : système multiutilisateur
Linux, issu d’Unix, est un système d’exploitation multi-utilisateur et multi-tâche
— Le noyau contient les fonctionnalités du système
— Les bibliothèques : interface de programmation (API)
— Des interfaces homme/machine (IHM) textuelles ou graphiques
— Des applications de gestion du système (outils)
Applications
Outils
IHM
Bibliothèques (API)
Noyau (kernel)
Matériel
Le système d’exploitation étudié dans ce cours est Unix. Plus particulièrement, la version utilisée
à l’EMSE s’appelle GNU/Linux. GNU signifie « Gnu is Not Unix » et comprend une suite très
importante de logiciels dits libres.
Cette suite de logiciels a d’abord été développée autour d’Unix, d’où son nom pour ne pas la
confondre avec Unix. Linux vient des quatre premières lettres du prénom de l’initiateur du projet
(Linus Thorsvald, finlandais) et de la dernière lettre de Unix. Plus précisément, la distribution
installée est celle du distributeur Ubuntu. Les raisons de ce choix sont multiples, mais n’excluent
pas l’intérêt de l’étude d’une autre distribution ou d’une autre version ou encore d’un autre
système d’exploitation.
La première raison du choix de Unix est son ancienneté et sa stabilité. Unix a été conçu en
1969 aux Bell Labs, chez AT&T par et pour des ingénieurs de développement. Le langage de
programmation C a d’ailleurs été conçu initialement pour la refonte de Unix et son portage
sur de nombreuses architectures matérielles. Unix a évolué grâce à d’importantes contributions
de l’Université de Berkeley. Ces apports ont été capitalisés dans les versions notées BSD et
fortement repris par la suite par d’autres versions. Parmi les nouveautés de BSD, il faut noter
l’apparition de TCP/IP, qui deviendra plus tard Internet. Les principales versions actuelles sont
System VR4, OSF/1, Linux, Solaris, FreeBSD, IBM AIX, HP UX...
Pour qu’un système d’exploitation puisse être un Unix, il faut qu’il respecte la norme POSIX.
La deuxième raison du choix de Unix est donnée par les orientations qui prévalent dès son
origine : simplicité, nombreux logiciels dans le domaine dit « public » (voire « logiciel libre
»), documentation importante, boîte à outils étendue, universalité (nombreuses architectures
matérielles), confiance (normalisation et certification)...
10
L’architecture logicielle du système d’exploitation Unix possède une structure en couches.
Entourant le matériel et en donnant le premier niveau d’abstraction, le noyau Unix ne fait
pas l’objet de ce cours, si ce n’est par la présentation générale de quelques concepts tels que les
inode du système de fichiers et les processus. Pour ceux que cela intéresse, des enseignements
sont dispensés en deuxième année du cycle ISMIN sur la construction interne du noyau Unix.
Le noyau Unix est programmé en langage C, c’est donc tout naturellement que son interface est
décrite et accessible en langage C. Le langage C est le premier langage de programmation étudié
dans le cycle ISMIN. Les logiciels de base au-dessus du noyau sont, classiquement, classés en
interpréteurs de commande appelés shell en Unix, et outils et les utilitaires. Le cours porte
surtout sur ces deux parties. D’autres couches logicielles existent au-dessus de ces couches
basses pour donner des personnalités de gestion de la persistance avec les bases de données,
de gestion de la répartition avec les middleware. . . Ces éléments sont étudiés à l’EMSE en
deuxième et troisième années.
Pourquoi choisir Linux ?
Caractère universel d’Unix/Linux
Multi-plateforme
— Le système est structuré en couches =⇒ portabilité
— Unix est présent sur (presque) tous les matériels existants
Vision uniforme des données
— Tous les flux de données sont « vus » comme des fichiers, avec la même sémantique
— L’accès aux services utilise toujours le même mécanisme
— Le système est écrit à 95% en langage C
La plupart des système Unix sont open source, dont Linux
Unix est le premier système d’exploitation qui n’ait pas été conçu pour une architecture
matérielle particulière. Le caractère universel de Unix en fait l’un des rares systèmes
d’exploitation (voire le seul) rencontré dans presque tous les types d’architecture matérielle
existants à ce jour : des micro-ordinateurs aux super-calculateurs, en passant par les
smartphones (sous Android) et les box Internet. Cette performance est obtenue par la
programmation en un langage lui-même très largement répandu (le langage C), par les
nombreux outils en standard et dans le domaine public, par la présence d’outils de
communication locale très puissants (les tubes) et par des interpréteurs de commandes aussi
très puissants (les shell). Les tubes et le shell sont étudiés plus loin.
Utilisation de Linux
Postes des salles informatiques
— Démarrez l’application VirtualBox
— et activez une machine virtuelle Linux
11
Votre machine personnelle
— Installation fortement conseillée !
— Machine virtuelle : solution plus simple, mais nécessite des ressources =⇒ virtualbox
(www.virtualbox.org)
— Double boot : solution plus efficace, mais complexe à mettre en oeuvre =⇒ voir les rootz
(install party)
5 Première utilisation
5.1 Premiers pas
Session - Connexion
— Tout utilisateur doit être « déclaré », enregistré avec un nom de compte (login) et un mot
de passe (password)
— La session débute par une connexion effectuée à partir d’un nom de compte et du mot
de passe associé
— La fin de la session intervient lorsque l’utilisateur clôt la session par le sous-menu « clore
la session » dans le menu
— D’autres connexions sont possibles dans un « terminal »
— L’interpréteur de commande dans une fenêtre « terminal » s’appelle le shell
— Le shell attend une commande en affichant une invite de commande (prompt) par défaut
«$»
— À chaque frappe sur ENTRÉE, le shell exécute la commande et affiche l’invite de
commande
— La connexion se termine avec la commande exit
— Attention, Unix distingue les minuscules des MAJUSCULES dans l’écriture des
commandes.
À l’invitation de la fenêtre graphique d’ouverture de session, l’utilisateur s’identifie en donnant
son nom de compte et son mot de passe. Toutes les commandes lancées par l’environnement
graphique qui suivent appartiennent à la même session. La session débute par une connexion
effectuée à partir du nom de compte. Lorsque l’utilisateur ouvre une fenêtre de terminal
en tapant la commande xterm (ou une commande équivalente) ou en cliquant sur l’icône
correspondant, une nouvelle connexion est ouverte et présente un message de bienvenue
(tenu à jour par l’administrateur système) contenant des informations générales sur les services
offerts. Si aucun message ne s’affiche, c’est que l’administrateur système n’a aucune information
particulière à donner. L’interpréteur de commande, appelé shell en Unix, indique qu’il attend
une commande en affichant un prompt (invitation à taper une requête) qui est par défaut
la chaîne de caractères « $ ». La connexion se termine lorsque l’utilisateur se déconnecte
normalement par la commande exit, et lorsqu’autorisée, par la commande CTRL-D. La session
se termine lorsque l’utilisateur clique sur l’icone de fin de session. La terminaison de la session
ferme toutes les fenêtres, y compris les terminaux, c.-à-d. les connexions, non encore fermés.
Premières commandes sur l’environnement
12
— id : affiche le nom de connexion et le numéro d’identifiant de l’utilisateur et du groupe
auquel il appartient
— logname : affiche le nom de connexion
— hostname : affiche le nom de la machine
— uname : affiche le nom du système d’exploitation
— clear : efface l’écran
— who : liste les utilisateurs connectés sur le même site
sam onsole Aug 2 09:45
pol ttyp2
Aug 2 12:17 (elia)
lo ttyp3
Aug 3 11:52 (:0.0)
|
|
|
|
nom terminal date
mahine ou éran
— exit : termine le shell (idem CTRL-D si configuré)
— su - nom_connexion : change temporairement l’identité de l’utilisateur
Voici une première liste de commandes à taper pour connaître son environnement de travail.
Pour chacune de ces commandes, il est intéressant de noter les informations suivantes :
— id : le nom de l’utilisateur est le nom de connexion ; chaque utilisateur appartient à un
groupe d’utilisateurs ; à chacun de ces noms correspond un numéro utilisé par le système
d’exploitation.
— logname : c’est le même nom d’utilisateur que celui fourni par id. hostname : chaque
machine porte un nom pour être repérée dans le réseau.
— uname : la commande uname -a donne plus d’informations : le type de machine, le
nom de la machine fourni aussi par la commande précédente, le numéro de version
du noyau du système d’exploitation (à ne pas confondre avec le numéro de version
de la distribution), le nom du système d’exploitation (ici GNU/Linux) et la date de
construction (par compilation) du noyau du système d’exploitation.
— date : les informations affichées sont relatives au fuseau horaire indiqué avant l’année.
— clear : les commandes étant tapées dans une fenêtre de terminal, la commande clear
permet d’effacer l’affichage des commandes précédemment tapées et de leurs résultats :
la fenêtre ne présente plus que le prompt sur la première ligne.
— who : toutes les connexions sont listées ; il y en a donc au moins deux pour la personne
utilisant le poste de travail : la connexion d’ouverture de session et la connexion de la
fenêtre de terminal utilisée pour taper la commande who ; si un autre utilisateur s’est
connecté à distance, son nom apparaît aussi dans la liste.
— exit : il est préférable de taper cette commande plutôt que CTRL-D car lorsque plusieurs
shell sont démarrés en cascade dans la même fenêtre de terminal, il est plus facile de
compter le nombre de exit tapés que de CTRL-D.
— su : la commande su permet un changement temporaire d’identité ; la commande
demande le mot de passe de cet utilisateur et n’effectue le changement d’identité que
si la réponse est correcte ; l’option tiret (su - domy) permet un changement d’identité
équivalent à une connexion ; le retour à l’identité réelle s’effectue par exit ou CTRL-D.
— xdpyinfo : c’est un utilitaire qui affiche des informations sur le serveur XWindow de
la machine sur laquelle la commande est exécutée. Il est utilisé pour examiner les
capacités d’un serveur, les valeurs prédéfinies pour les différents paramètres utilisés en
communication entre les clients et le serveur et les différents types d’écrans.
Mot de passe
13
— Mot de passe = clef d’accès au compte (fichiers, courrier...)
— Doit être fiable (pas de prénom, pas de nom usuel, pas de mot courant, pas
d’anagramme...)
— Le même sur toutes les machines de l’EMSE !
— Attention, le changer régulièrement et dès qu’il existe un doute (que quelqu’un le
connaisse)
— Pour changer son mot de passe, procédure spécifique à l’EMSE
— Avoir un compte implique des droits et des devoirs : se rappeler la charte signée lors de
l’ouverture du compte
L’école fournit un nom de compte et un mot de passe à chaque utilisateur à l’arrivée à l’EMSE.
Pour changer de mot de passe, il faut utiliser un navigateur Web et suivre les instructions :
— donner deux fois son mot de passe courant (la première fois pour la connexion distante
par telnet, la deuxième pour autoriser le changement de mot passe)
— puis deux fois le nouveau mot de passe (la première fois pour le choisir et la deuxième
pour le confirmer et éviter les erreurs de frappe donnant un mot de passe non voulu
voire non connu).
5.2 Interface graphique
Environnement graphique
Un environnement graphique consiste en :
— Un programme appelé le serveur qui gère l’affichage et contrôle le clavier et la souris
— Des programmes appelés clients qui offrent diverses fonctionnalités (terminal, édition de
texte, messagerie...)
— Un client particulier, le gestionnaire de fenêtres, qui gère les fenêtres (déplacement, «
iconification »...) et permet de lancer d’autres clients grâce à des menus.
Un environnement de bureau intégré permet l’accès convivial à des applications
— Il y en a plusieurs sous Linux : gnome ou KDE
— Un environnement de bureau utilise un gestionnaire de fenêtre. gnome utilise metacity
— gnome propose un certain nombre d’applications :
— nautilus est le gestionnaire de fichiers proposé par gnome
— gnome-terminal exécute une fenêtre de terminal.
Éditeurs de texte
— Un éditeur de texte permet de saisir un texte brut, codé en ASCII ou Unicode, et de
l’enregistrer dans un fichier texte. Les styles offerts (souligné, italique...) sont très limités
et aucune mise en forme n’est possible. Plusieurs éditeurs de texte sont disponibles sur
Unix
— L’éditeur Unix standard vi est très puissant mais peu convivial : le mode par défaut au
lancement est le mode « commande »
— L’autre éditeur parmi les plus populaires est emacs. Il est très puissant aussi ; à l’inverse
du précédent, le mode « saisie » est prépondérant
— gedit, un client gnome permet aussi de faire de l’édition de texte, sans disposer des
14
fonctionnalités d’Emacs
— eclipse est un environnement de développement intégré, comprenant un éditeur
5.3 Commandes Unix
Syntaxe des commandes
— La syntaxe générale d’une commande Unix est la suivante : nom [-options]
[argument1...] où nom est le nom de la commande options représente une ou
plusieurs options argument1 est le premier argument
— Les options sont composées d’un caractère après un tiret
— Il est possible d’accoler plusieurs options Par exemple, -asli pour les options -a -s -l -i
— Si l’option demande un paramètre, il est séparé par un espace comme dans -o fichier
— Les crochets désignent un élément facultatif, ils ne doivent donc pas être tapés.
— Les points de suspension indiquent une répétition possible Par exemple, ls /etc /usr
pour plusieurs arguments.
— Dans une commande, chaque mot est séparé des autres par un espace ou une tabulation
La syntaxe type d’une commande Unix comprend le nom de la commande (premier mot) suivi
éventuellement d’options (sous la forme -x) et complété par des arguments parfois optionnels.
Dans cette description, les points de suspension (...) signifient qu’un élément (option ou
argument) peut être répété plusieurs fois et un nom donné entre crochets ([ nom ]) correspond
à un élément facultatif. Le séparateur de mots est le caractère espace et il s’utilise aussi bien
pour séparer la commande et les options que les différents arguments entre eux. On peut aussi
utiliser la tabulation. Cependant, il existe quelques différences de syntaxe selon les versions,
le plus souvent liées à des origines différentes et gardées dans un souci de compatibilité. Par
exemple, un argument d’option est le plus souvent séparé par un espace (-x arg) mais il arrive
qu’il soit collé à l’option (-xarg). Enfin, les commandes peuvent accepter le format des options
à la GNU avec deux tirets (–xxx). Les noms d’option avec un seul tiret contiennent le plus
souvent un seul caractère alors que les noms d’option à la GNU sont des mots anglais en entier
à plusieurs caractères.
Documentation
— Toutes les commandes, tous les concepts système... sont documentés dans un manuel
accessible en ligne.
— Les principales sections de cette documentation sont :
— La section 1 pour les commandes Unix utilisés dans ce cours
— La section 2 pour les appels système utilisés dans les cours de deuxième année
— La section 3 pour les sous-programmes de bibliothèques utilisés dans les cours
d’algorithmique et de programmation en langage C
— La section 4 pour les formats de fichiers Unix : passwd, host...
— La section 7 concerne les fichiers spéciaux
— La section 8 concerne l’administration (démarrage, génération...)
Les commandes Unix présentent quelques différences, particulièrement au niveau des options
selon l’origine des systèmes (System V, OSF/1, BSD, GNU/Linux...). Chaque utilisateur a donc
15
intérêt à consulter la documentation propre au système utilisé qui est la documentation de
référence absolue. Cette documentation est disponible sous forme électronique.
Avant d’étudier la commande man permettant de la consulter, voici son organisation. Tout
d’abord, la documentation est classée en huit sections numérotées de 1 à 8. On peut également
trouver d’autres sections, comme la section l pour les ajouts locaux ou la section n pour les
logiciels diffusés par les news. De même, on trouve parfois un suffixe précisant le domaine (M
pour maintenance, C pour communication. . .). D’autre part, chaque section contient une entrée
intro définissant la liste des éléments de la section avec leurs particularités.
Utilisation de la documentation
— Dans une fenêtre de terminal, la commande man permet d’accéder à une page du manuel
en ligne
Par exemple, man id pour la page de la commande id
— Les rubriques des pages du manuel en ligne sont :
— NAME pour le nom de la commande
— SYNOPSIS pour le syntaxe
— DESCRIPTION pour le fonctionnement détaillé.
— Chaque page du manuel en ligne est présentée par morceau selon la taille de la fenêtre
de terminal.
— Pour se déplacer dans une page du manuel, utilisez les touches suivantes :
— ENTRÉE ou RETURN pour avancer d’une ligne
— ESPACE pour avancer d’une page
— b pour reculer d’une page
— / suivi d’un mot pour rechercher ce mot
— n pour rechercher l’occurrence suivante du même mot
— q pour quitter l’aide
6 Système de fichiers
6.1 Présentation et concepts
Présentation et concepts
root
/
users
ismin2013
boot
dev
bin
dupont
src
lib
etc
prog.c
var
— Un élément de l’arborescence est repéré par son nom précédé de
— Son chemin « absolu » et unique depuis la racine commençant par « / » Par exemple :
/users/ismin2013/dupont/src/prog.c
— Son chemin « relatif » par rapport au répertoire courant Par exemple : src/prog.c,
prog.c...
— Remarquez le double rôle de « / »
— Au début du nom absolu pour indiquer la racine de l’arborescence
16
— Ailleurs comme séparateur de répertoires
L’un des rôles importants du système d’exploitation est de donner accès aux données à
manipuler, sachant que les programmes, dont font partie les commandes, sont eux aussi repérés
par leur contenant, les fichiers. Cette section présente les concepts afférents à l’organisation et
la manipulation (copie, renommage...) des données : les répertoires, les fichiers (ordinaires) et
les fichiers spéciaux. La section se termine par le concept de droit d’accès aux données.
La structure du système de fichiers se présente comme un arbre inversé comportant des noeuds
qui repèrent les répertoires et des feuilles les fichiers. Le point d’entrée de l’arborescence est
appelé racine et est noté par un slash (/). Tout élément de l’arborescence peut être référencé
de deux façons, soit par rapport à la racine (le nom de l’élément est dit « absolu »), soit par
rapport au répertoire de travail courant (le nom est alors dit « relatif »). On peut remarquer que
le caractère slash joue un double rôle : en premier caractère d’un nom, il symbolise la racine et
caractérise un nom absolu alors que partout ailleurs il ne sert que de séparateur de noms.
Commandes pwd, cd et ls
Dans un terminal, essayez les commandes suivantes :
— pwd : affiche le nom absolu du répertoire de travail
— cd : change le répertoire de travail
— Avec argument : nom du répertoire destination (en absolu ou en relatif)
— Sans argument : retour au répertoire de connexion
— ls : liste les entrées d’un répertoire
— Sans argument : les entrées du répertoire de travail
— Avec arguments : les entrées repérées par les arguments Par exemple, ls, ls /, ls /usr,
ls .bashrc
— Dans la commande précédente (ls .bashrc), le fichier dont le nom commence par un
point (« . ») est appelé un fichier caché
— La commande ls possède de nombreuses options par exemple, –a pour visualiser les
fichiers cachés, –l pour tous les attributs (type, droits, liens physiques, propriétaire,
groupe, taille, date, nom)
L’utilisateur qui se connecte est situé sous son répertoire de connexion et il peut en connaître le
nom avec la commande pwd (print working directory) qui affiche le nom absolu du répertoire
courant (ou répertoire de travail).
Pour en connaître le contenu, il doit utiliser la commande ls qui liste les entrées (non cachées)
du répertoire courant. L’utilisateur qui veut visualiser le contenu d’autres répertoires peut
utiliser la commande ls avec le nom de ces répertoires en arguments ou se déplacer dans
l’arborescence avant d’utiliser cette commande sans argument.
La commande cd permet un déplacement sous le répertoire passé en argument. Quelle que
soit sa position dans l’arborescence, l’utilisateur peut à tout moment revenir directement à son
répertoire de connexion grâce à la commande cd sans argument.
La commande ls permet d’afficher les entrées d’un répertoire avec plus ou moins d’informations
selon les options utilisées. Par défaut, ls affiche seulement le nom des entrées dites non cachées,
c.-à-d. celles dont le nom ne commence pas par un point. Pour visualiser les entrées cachées, il
17
faut ajouter l’option -a pour les afficher toutes. La commande ls dispose de beaucoup d’options
dont la plus utilisée est l’option -l qui permet d’afficher les principaux attributs des entrées :
type, droits, liens, propriétaire, groupe, taille, date et nom.
Structure de l’arborescence
— L’arborescence contient 3 types d’éléments :
— Des répertoires qui sont des sortes de dossiers ou classeurs
— Des fichiers ordinaires contenant une suite séquentielle d’octets
— Des fichiers spéciaux repérant les périphériques
— Le système d’exploitation possède une vision uniforme de ces entrées grâce au concept
d’inode : même syntaxe, mêmes commandes, mêmes protections
— Un inode contient ces informations :
— Type de l’élément (fichier, répertoire, fichier spécial)
— Identité du propriétaire et du groupe
— Droits d’accès Dates de modification...
— Autres (taille, liens, adresses...)
La caractéristique principale du système de fichiers Unix est d’offrir une vision uniforme à
l’utilisateur malgré la diversité des types d’éléments : répertoires, fichiers (traditionnels ou
ordinaires) ou fichiers spéciaux.
Les fichiers spéciaux représentent les périphériques. Ainsi, l’utilisateur dispose des mêmes
commandes ou primitives, d’une même syntaxe et des mêmes possibilités (protection,
identification. . .) pour accéder à un élément qu’il soit un répertoire, un fichier ordinaire ou
un fichier spécial. Ensuite, le noyau effectue en interne un aiguillage sur le programme adapté
selon la nature de l’élément. Cette uniformité est assurée grâce à la notion d’inode qui est
une structure de 64 octets servant de descripteur pour toute entrée du système de fichiers.
Clairement, cette uniformité a des limites : par exemple, on ne peut pas créer une entrée
associée à un périphérique comme on crée un fichier ordinaire et certaines commandes sont
spécifiques à un type d’élément (comme par exemple changer de répertoire courant).
On retrouve aussi quelques différences au niveau de l’inode, en particulier l’adressage des blocs
de données d’un fichier ordinaire est remplacé dans le cas d’un périphérique par un couple
d’entiers servant d’index pour repérer le bon pilote. De même, certaines informations n’ont pas
de signification pour tous les types d’éléments comme par exemple la taille d’un fichier qui ne
représente rien pour les fichiers spéciaux.
Pour pouvoir stocker des informations sur un support magnétique tel qu’un disque, celui-ci doit
d’abord être formaté. Ensuite, le disque est découpé en partitions (ou disques virtuels), chacune
étant alors utilisée comme un disque à part entière et se présente comme une suite de N blocs
numérotés de 0 à N-1.
Pour stocker des données sur une partition, il faut y créer une structure adaptée au type de
système de fichiers. Cette opération a pour objet de distinguer quatre parties sur le disque et
d’y créer un répertoire racine. Le premier bloc (bloc 0) est réservé pour contenir un programme
chargeur (amorce) qui sert au démarrage du système. Bien que seul le disque de démarrage
ait besoin de cette amorce, le bloc 0 de chaque système de fichiers est réservé pour des raisons
d’homogénéité.
18
Le bloc suivant (bloc 1), appelé « super-bloc », sert de descripteur du système de fichiers. Il est
pour un système de fichiers l’équivalent de l’inode pour un fichier. Il contient les caractéristiques
du système de fichiers telles que son nom, la date de mise à jour, la taille des blocs...
S’y trouvent également des informations de gestion telles que le début des listes d’inodes et de
blocs libres. Un certain nombre de blocs à partir du numéro 2 sont réservés pour contenir la liste
des inodes. Ce nombre d’inodes détermine le nombre maximal de fichiers que peut contenir ce
système de fichiers. Les blocs suivants (du premier bloc après la liste des inodes jusqu’au dernier)
servent pour stocker les blocs de données, ce qui comprend les blocs de données effectives,
c.-à-d. le contenu réel des fichiers, les blocs libres et les blocs de chaînage qui servent pour
l’adressage.
Unix permet la création de fichiers vides : il suffit de créer un inode seul sans lui associer de
données. Un système de fichiers peut être saturé de deux manières, soit par manque de blocs
de données libres, soit par manque de blocs d’inodes.
Fichiers ordinaires
Un fichier ordinaire ne possède aucune structure particulière : c’est une suite d’octets
Voici les commandes de base pour consulter le contenu d’un fichier de texte :
— cat fich, more fich : affichage simple et page par page
— head fich, head –n fich : affichage des 10/n premières lignes
— tail fich, tail –n fich : affichage des 10/n dernières lignes
— wc fich : affichage du nombre de lignes, de mots, de caractères
— Options –l, –w et –c pour les nombres de lignes, de mots et de caractères.
Un fichier ordinaire ne comporte aucune structure particulière, c’est une suite d’octets et le seul
type d’accès est la lecture séquentielle. Un fichier ordinaire est composé d’une référence dans
un répertoire (association entre son nom et son numéro d’inode), d’un inode et des blocs de
données associés.
Périphériques
— Un périphérique est un matériel (physique) connecté à l’unité centrale d’un ordinateur :
disque, souris, écran...
— Les périphériques sont repérables par un nom dans l’arborescence (sous /dev)
— Un pilote de périphériques (driver) est une fonction du système d’exploitation via les
opérations classiques autorisées par les inodes : open, read, write, close
— Un pseudo-périphérique est une entrée gérée comme un périphérique bien que non
associée à un élément physique
— La première utilisation est le repérage de périphériques dits virtuels, c.-à-d. des
parties de périphériques (physiques), par exemple : les écrans virtuels de l’écran
(physique), les partitions (logiques) du disque (physique)...
— La seconde utilisation est la mise en évidence de fonctionnalités du système
d’exploitation dans l’arborescence, par exemple : la « poubelle » qui a pour nom
/dev/null, ou la génération de nombres aléatoires (/dev/random)
19
Unix offre à l’utilisateur une vision uniforme des entrées-sorties en attribuant un nom dans
l’arborescence à tous les périphériques, ce qui leur confère les mêmes attributs qu’aux fichiers.
Sous GNU/Linux, le répertoire /dev (devices) est prévu pour contenir toutes les entrées des
périphériques tels que hdX (X : a à z) pour les disques, fd9 (0 à 9) pour les lecteurs de
disquettes...
Le système d’exploitation effectue un aiguillage interne soit vers le système de fichiers, soit vers
les pilotes de périphériques, en distinguant deux modes d’utilisation : bloc et caractère.
Il existe un pilote pour chaque type de périphérique. L’inode d’un périphérique contient deux
entiers qui sont le majeur (major number) et le mineur (minor number). Le majeur sert d’index
dans l’une des tables afin de sélectionner le pilote du périphérique concerné. Un pilote de
périphérique pouvant gérer plusieurs unités du même type, par exemple plusieurs écrans ou
plusieurs disques, le mineur permet de caractériser l’unité particulière du type de périphérique
concerné.
Parmi les périphériques en mode bloc, on trouve principalement les disques physiques, les
partitions, les bandes magnétiques, les disquettes... La dernière caractéristique du mode bloc
est la plus importante car elle signifie un accès aux informations en deux étapes : un transfert
du disque vers la mémoire du système d’exploitation et une copie entre la mémoire du système
d’exploitation et l’espace utilisateur. Le noyau garde la mémoire des données qu’il a lues. La
lecture d’une information peut donc ne pas conduire à un accès au disque mais seulement à une
copie de mémoire à mémoire.
Il peut alors arriver qu’en cas de coupure de courant par exemple, il y ait incohérence, car
des données en mémoire n’ont pas été écrites sur le disque. Aussi, lors du démarrage du
système d’exploitation, si celui-ci s’aperçoit qu’il y a eu arrêt brutal de la machine, donc
potentiellement des incohérences, la commande fsck (file system check) teste et rétablit si
possible automatiquement la cohérence.
Les principaux périphériques en mode caractère sont les écrans, les imprimantes, les lignes de
communication... Les accès sont quasiment identiques à ceux liés aux fichiers ordinaires. La
lecture standard sur ce type de périphérique s’effectue par ligne, c.-à-d. que les caractères lus
ne sont transmis qu’après la lecture d’un code de validation (NEWLINE).
Lors de la lecture, diverses opérations, en particulier des corrections (effacement de caractères,
de mots ou de la ligne) sont possibles grâces à des codes de contrôle. Il existe un autre mode
de lecture, appelé brut (raw), dans lequel les caractères sont transmis au fur et à mesure. Ce
mode de lecture caractère par caractère est utilisé par divers utilitaires tels que des éditeurs,
des logiciels de communication...
Les périphériques en mode bloc peuvent aussi être gérés en mode caractère pour permettre
certaines opérations avec de meilleures performances. Pour cela, un périphérique dispose d’une
entrée dans chacune des deux tables.
Le terme pseudo-périphérique qualifie des entrées qui sont gérées comme des périphériques
donc par des pilotes bien qu’elles ne soient pas associées à des éléments physiques. On distingue
deux catégories de pseudo-périphériques, ceux associés à des périphériques virtuels et d’autres
liés à des fonctionnalités du système d’exploitation. Un périphérique virtuel correspond à une
partie d’un périphérique physique et les principaux sont les écrans (ou terminaux) virtuels
20
et les partitions (ou disques logiques). Un terminal virtuel correspond à une fenêtre dans un
environnement multifenêtre ou à une connexion distante via un réseau local.
Tous les systèmes de fichiers disposent de quatre autres pseudo-périphériques standards,
groupés comme les périphériques sous /dev et qui s’appellent null, zero, mem et tty. L’élément
null sert de poubelle. Par exemple, il sert à créer des fichiers vides comme ceci : cp /dev/null
fichier_vide. Les éléments tty et mem repèrent respectivement le terminal et l’image mémoire
associés au processus en cours d’exécution. L’élément zero permet de générer des valeurs nulles.
Répertoires
— Le contenu d’un répertoire est un catalogue qui met en correspondance des noms de
fichiers, de sous-répertoires avec des numéros d’inode
— Dès la création par la commande mkdir rep, deux entrées existent :
— La référence au répertoire parent (du répertoire créé) notée « .. »
— La référence au répertoire lui-même notée « . »
— La suppression s’effectue avec la commande rmdir rep
— Pour supprimer un répertoire, il faut qu’il soit « vide » : ne contenir que « .. » et « . »
— L’affichage du contenu d’un répertoire s’effectue par la commande ls
— L’option -a permet de visualiser les entrées . et ..
— L’option -l permet d’afficher les informations des inodes
Un répertoire Unix est en fait un catalogue, c.-à-d. la mise en correspondance entre des noms
de fichiers et des numéros d’inode. Dès sa création avec la commande mkdir, tout répertoire
contient deux entrées qui sont notées « . » (point) pour le répertoire lui-même (auto-référence)
et « .. » (point point) pour le répertoire de rattachement (parent) dans l’arborescence.
Pour supprimer un répertoire avec la commande rmdir, il faut que celui-ci soit vide, c.-à-d. ne
contienne que les deux éléments de départ (« . » et « .. »).
Pour la racine (/), les deux éléments « . » et « .. » sont confondus.
Principaux répertoires
—
—
—
—
—
—
—
—
—
—
/boot : fichiers de démarrage du système
/root : espace de travail de l’administrateur
/etc : fichiers de configuration des programmes système
/dev : périphériques
/var : fichiers de données des programmes système
/usr : programmes et outils pour les utilisateurs
/bin et /usr/bin : commandes Unix standards
/lib et /usr/lib : bibliothèques
/home : espaces de travail des utilisateurs
/tmp : fichiers temporaires
21
6.2 Manipulation des éléments
Copie d’éléments
Commande cp
NOM
cp - Copier des fichiers et des répertoires
SYNOPSIS
cp [OPTION]... [-T] SOURCE CIBLE cp [OPTION]... SOURCE... RÉPERTOIRE cp
[OPTION]... -t RÉPERTOIRE SOURCE...
DESCRIPTION
Copier la SOURCE vers la CIBLE, ou de multiples SOURCEs vers le RÉPERTOIRE.
La commande cp accepte deux syntaxes :
— La première forme avec deux noms de fichiers en arguments (cp fic1 fic2) permet de
dupliquer le premier fichier pour créer le deuxième. Cette commande crée une nouvelle
entrée dans le répertoire, un nouvel inode et duplique les blocs de données.
— La deuxième forme accepte deux arguments ou plus dont le dernier est un nom de
répertoire (cp fic1 ... rep), ce qui permet de copier tous les arguments précédents (des
fichiers) sur ce répertoire en leur donnant le même nom relatif. Si on se place sur le
répertoire de destination avant de faire la copie, on peut donner le nom du répertoire
courant avec son auto-référence (point).
Il est intéressant d’utiliser les options -l et -i de la commande ls pour constater les différences
entre un original et sa copie au niveau des attributs.
En particulier, la comparaison montre que les numéros d’inode (premier champ) sont différents,
ce qui prouve une duplication des données.
Renommage ou déplacement d’éléments
Commande mv
NOM
mv - Déplacer ou renommer des fichiers
SYNOPSIS
mv [OPTION]... [-T] SOURCE CIBLE mv [OPTION]... SOURCE... RÉPERTOIRE mv
[OPTION]... -t RÉPERTOIRE SOURCE...
DESCRIPTION
Renommer la SOURCE en CIBLE ou déplacer la SOURCE vers le RÉPERTOIRE.
Renommer un fichier correspond en réalité au déplacement d’une entrée d’un répertoire.
D’ailleurs, la commande s’appelle mv (move). Cette commande accepte les deux mêmes
syntaxes que cp, c.-à-d. soit deux arguments pour renommer le premier fichier par le second,
22
soit deux arguments ou plus avec en dernier un nom de répertoire, ce qui revient à déplacer les
premiers arguments sur le répertoire donné en dernier avec les mêmes noms relatifs.
De la même manière que pour cp, si on se place sur le répertoire de destination avant de faire
le déplacement, on peut donner le nom du répertoire courant avec son auto-référence (point).
La commande mv permet aussi de renommer des répertoires. La commande ls -li permet de
montrer que le numéro d’inode n’a pas changé, ce qui confirme que ni l’inode, ni les blocs de
données sur disque n’ont été modifiés.
Liens et raccourcis
— Lien = chemin d’accès à un fichier
— Commande ln : création d’un lien, c.-à-d. ajout d’une entrée dans un répertoire $ ln
R1/fbis R2/lien
— Deux (ou plus de deux) chemins d’accès à un même contenu
— Nom « local » (alias) plus court, nom « générique » (par exemple, console)
— Pas de liens entre SF différents
— À noter : les liens symboliques avec l’option -s, équivalents aux raccourcis Windows
Une entrée d’un répertoire permettant l’accès à un fichier via son inode s’appelle un lien
(référence ou chemin d’accès) et Unix permet la création de liens multiples sur un même
élément.
Chaque création d’un lien (avec la commande ln) consiste à ajouter une entrée dans un
répertoire avec le même numéro d’inode et le même nom (possible uniquement si répertoires
différents) ou un autre nom. Dans l’inode, le compteur de lien qui vaut un à la création du
fichier est incrémenté d’une unité à chaque nouveau lien.
Il y a plusieurs raisons d’utiliser des liens :
— Un premier usage permet d’utiliser un nom local donc plus court pour référencer un
élément. Ici, le lien joue le rôle d’alias et il évite une frappe longue, ce qui diminue le
risque d’erreur.
— Les liens servent aussi à définir différents noms logiques pour un même élément. Par
exemple, un administrateur qui représente ses partitions par des noms logiques n’a que
des liens à modifier lorsqu’il veut changer un disque et toutes ses procédures (démarrage,
sauvegarde. . .) continuent à être opérationnelles si elles utilisent les noms logiques.
Suppression d’éléments
Commande rm
NOM
rm - Effacer des fichiers et des répertoires
SYNOPSIS
rm [OPTION]... FICHIER...
23
DESCRIPTION
Le programme rm efface chaque fichier listé. Par défaut, il n’efface pas les
répertoires.
Exemples de rm
— Suppression d’un lien : $ rm R1/fbis Fichier toujours accessible par R2/lien
— Suppression du dernier lien = libération totale $ rm R2/lien
La suppression d’un élément de l’arborescence, avec la commande rm (remove), est en fait la
suppression d’un lien, c.-à-d. la mise à zéro du numéro d’inode, la décrémentation du nombre
de liens et dans le cas où ce lien est le dernier, la libération des blocs de données et de l’inode.
Par conséquent, un fichier ordinaire existe tant qu’il existe au moins un lien sur celui-ci, qu’il
s’agisse du nom initial ou d’un lien établi ensuite. Ce type de lien présente trois limitations. Tout
d’abord, on ne peut pas établir de liens entre systèmes de fichiers différents, chacun numérotant
ses inodes à partir de deux. Ensuite, on ne peut pas non plus établir un lien sur un répertoire.
D’ailleurs, pour un répertoire, le nombre de liens correspond au nombre de sous-répertoires
qu’il contient (y compris les deux entrées « . » et « .. »). Enfin, l’inode contenant l’identifiant
du propriétaire des données, si un autre utilisateur crée un lien sur le même fichier, le premier
propriétaire ne peut pas seul décider de diminuer son quota de blocs de données.
On trouve souvent un alias qui redéfinit la commande rm en intégrant l’option -i (alias
rm=’rm -i’). Cette précaution est très utile pour des utilisateurs débutants car elle permet
d’éviter des suppressions effectuées par erreur comme par exemple à la suite d’une erreur
de frappe. Avec l’alias ci-dessus, l’utilisateur va s’apercevoir de son erreur quand le système
d’exploitation demandera confirmation avant de supprimer un fichier à garder et il pourra
arrêter la commande avec CTRL-C.
Accès au contenu
— Quelques commandes simples :
— cat fich : affichage simple (et concaténation)
— more fich ou less fich : affichage par page Requêtes avec touches espace, RETURN,
help...
— head fich : affichage début (10 lignes)
— head -n fich : affichage début (n lignes)
— tail fich : affichage de la fin (10 lignes)
— tail -n fich : affichage de la fin (n lignes)
— wc fich : affichage du nombre de lignes, de mots, de caractères
— wc -l fich : affichage du nombre de lignes
— wc -w fich : affichage du nombre de mots
— wc -c fich : affichage du nombre de caractères
— file fich : affichage de la nature du fichier
Les premières commandes de ce transparent sont des premières commandes du type filtre. Un
filtre est un programme qui réalise un traitement sur un flot de données, ici caractérisé par un
fichier texte en entrée, pour fournir un flot de données en sortie. Ce concept plutôt classique
prend tout son intérêt grâce aux différentes formes que peuvent prendre les flots de données.
Ce point sera détaillé dans la section sur le shell avec les redirections et les tubes.
24
Les filtres présentés maintenant sont des filtres dits « simples ». Ces commandes acceptent
de très nombreuses options que nous n’avons pas le temps ni l’espace de décrire ici. La
commande de base pour afficher le contenu d’un fichier de texte est cat suivie du nom du
fichier. Cette commande accepte plusieurs noms de fichiers comme arguments, ce qui permet de
les concaténer (cat signifie concatenate) en un seul flot de sortie. Sans argument, la commande
cat lit ce que l’on appelle l’entrée standard, c.-à-d. par défaut le clavier, ce qui permet de créer
rapidement des petits fichiers. La fin de fichier ou fin de saisie est matérialisée par la frappe
des touches CTRL-D. La commande cat n’est guère pratique avec des fichiers dont la taille
dépasse celle de l’écran car l’affichage défile de façon ininterrompue et seules les dernières
lignes affichées restent visibles sur l’écran à la fin de la commande.
La commande more (ou less) prend en compte le nombre de lignes de l’écran pour offrir
un affichage page par page. Cette commande affiche une page du fichier suivie d’une ligne
d’information avec le pourcentage de texte déjà affiché et elle attend une requête du clavier.
Si la commande est appelée avec plusieurs arguments, elle affiche en plus un en-tête avec
le nom du fichier entre deux lignes constituées de caractères deux points ( :). Les requêtes
les plus utilisées sont espace (ou z) pour afficher la page suivante, d pour afficher la demipage suivante, RETURN pour afficher la ligne suivante, v pour appeler un éditeur sur le fichier
courant et q (ou Q) pour quitter la commande avant la fin. Enfin, la requête h donne toutes les
requêtes disponibles.
La commande tail affiche la fin du fichier passé en argument. Par défaut, tail affiche les dix
dernières lignes. Cette commande permet également de suivre dynamiquement l’évolution d’un
fichier. En utilisant l’option -f, elle affiche la fin du fichier puis elle entre dans une boucle infinie
avec affichage chaque seconde de toute nouvelle information qui est ajoutée au fichier.
La commande head affiche le début du fichier passé en argument. Par défaut, head affiche les
dix premières lignes. Cette commande ressemble à la commande tail mais elle est plus limitée
au niveau des options. En revanche, elle peut accepter plusieurs fichiers comme arguments.
Dans ce cas, la commande head affiche avant le début de chaque fichier, un en-tête avec le nom
du fichier.
Toujours pour un fichier de texte, la commande wc (word count) permet de compter les lignes,
les mots et les caractères. Lorsque la commande est appelée avec plusieurs arguments, elle
affiche également un total cumulé.
Avant d’appliquer un filtre sur un fichier, il est préférable de s’assurer que le fichier contient du
texte. La commande file permet de le savoir. Dans le cas d’un fichier texte, elle précise si les
caractères sont uniquement des caractères ASCII ou s’ils contiennent d’autres caractères, par
exemple des caractères accentués ISO-8859-X (X dans [1-15]).
6.3 Gestion des droits
Droits d’accès
— À tout élément de l’arborescence sont associés trois droits d’accès
— En lecture : r pour read
— En écriture : w pour write
— En exécution : x pour execute
25
— Pour trois catégories d’utilisateurs
— Le propriétaire : u pour user
— Le groupe : g pour group
— Les autres : o pour others
— Par exemple : rwx r-x r–
— lecture, écriture et exécution autorisées pour le propriétaire
— lecture et exécution autorisées pour le groupe
— lecture seule autorisée pour les autres
— Un groupe est un ensemble d’utilisateurs ayant les mêmes droits d’accès par rapport à
un fichier d’un utilisateur ; vous appartenez au groupe de votre promotion
Parmi les informations contenues dans l’inode de tout élément de l’arborescence, on trouve les
droits d’accès dont les deux principes de base sont la simplicité et la confiance accordée aux
utilisateurs.
La protection d’un élément repose sur trois droits d’accès qui contrôlent les trois opérations de
lecture (droit r pour read), d’écriture (droit w pour write) et d’exécution (droit x pour execute).
Ces trois droits (rwx) sont appliqués à trois catégories d’utilisateurs qui sont le propriétaire (u
pour user), (les membres de) son groupe d’appartenance (g pour group) et les autres utilisateurs
(o pour other). Les identifiants des deux premières catégories sont donnés par la commande id.
Le système de fichiers distingue trois catégories d’utilisateurs mais sans aucune hiérarchie entre
elles. Ainsi, le contrôle des accès s’effectue en commençant par la recherche selon un ordre
déterminé de la catégorie (propriétaire, groupe puis les autres), et ensuite, il se poursuit par la
vérification du droit concerné.
Les droits d’accès pour une catégorie ne servent à rien pour les autres catégories. Par exemple,
si un fichier possède le droit d’exécution pour les catégories o et g mais pas pour le propriétaire,
alors le propriétaire se voit refuser une demande d’exécution alors que tous les autres peut
exécuter ce fichier.
Tout système de protection doit offrir des mécanismes permettant certaines opérations avec des
droits différents, en général plus puissants, comme par exemple la lecture du fichier contenant
les mots de passe lors de la connexion. Ces mécanismes ne sont pas étudiés dans ce cours. Nous
ne verrons pas les droits s pour l’utilisateur (bit SUID) ni pour le groupe (bit SGID).
Pour information, il existe un dernier droit, le droit t (sticky bit) qui ne sera pas non plus
présenté. Pour des informations sur ces droits, se référer à la bibliographie et aux pages du
manuel en ligne.
Tout système d’exploitation a également besoin de comptes spécialisés, avec des droits
importants, pour des tâches d’administration. Sous Unix, il existe un compte root dit compte
du super-utilisateur (ou administrateur), caractérisé par son numéro d’utilisateur (l’UID zéro)
qui lui confère les pleins pouvoirs. Pour toute action avec cette identité, le système ne contrôle
pas les droits d’accès et autorise l’opération.
Modification des droits
Modification avec la commande chmod selon 2 méthodes :
26
1. Valeur numérique calculée sur le poids de rwx : r = 4, w = 2, x = 1. Par exemple :
— chmod 741 fichier −→ rwx r– –x
— chmod 600 fichier −→ rw- — —
2. Valeur littérale :
— Catégories : u, g, o, ou tous (a = all = ugo)
— Opérations : ajout (+), retrait (-), ou affectation (=)
— Droits : r, w, x et d’autres (t, s...) Par exemple : (fichier avec les droits rw- — —)
— chmod g+r fichier −→ rw- r– —
— chmod ug+x fichier −→ rwx r-x —
— chmod a=r fichier −→ r– r– r–
— chmod u+wx fichier −→ rwx r– r–
— chmod go-r fichier −→ rwx — —
La commande chmod (chmod droits fichier...) permet de modifier les droits d’accès qui
peuvent être donnés sous une forme numérique absolue ou sous une forme littérale relative.
La modification des droits d’un fichier n’est autorisée qu’à son propriétaire et bien sûr au superutilisateur.
Une valeur numérique est composée de trois chiffres indiquant dans l’ordre, les droits du
propriétaire, ceux du groupe et ceux des autres. Chaque chiffre est obtenu par addition des
valeurs des droits à positionner en sachant que le droit r (lecture) vaut quatre, le droit w
(écriture) deux et le droit x (exécution) un.
La valeur littérale est composée de trois caractères précisant dans l’ordre la catégorie concernée,
l’opération à effectuer et le droit à modifier. La catégorie peut prendre une ou plusieurs valeurs
parmi les lettres u pour le propriétaire, g pour le groupe, o pour les autres ou a pour l’ensemble
(a équivaut à ugo et c’est la valeur par défaut). L’opération peut prendre une valeur parmi
les caractères + pour l’ajout, - pour le retrait ou = pour l’affectation qui correspond au
positionnement du droit indiqué et au retrait des autres. Le droit peut prendre une ou plusieurs
valeurs parmi les lettres r pour la lecture, w pour l’écriture ou x pour l’exécution. Le droit peut
être omis si on souhaite supprimer tous les droits.
Cas particuliers
— Toute opération sur un fichier contrôlée à partir des droits r, w et x
— Création d’un fichier = ajout du numéro d’inode et du nom dans un répertoire −→
création contrôlée par le droit w du répertoire d’accueil
— Idem pour le renommage (changement de nom) et la suppression (mise à 0 du numéro
d’inode) Attention : suppression d’un fichier conditionnée par les droits du répertoire et
non pas ceux du fichier
— Pour un répertoire, x autorise la traversée et le positionnement sous celui-ci
— Pour un fichier spécial, x n’a pas de signification
Toutes les opérations sur un fichier sont contrôlées à partir des droits r, w et x. Aussi, pour
toute opération autre qu’une lecture, une écriture ou une exécution, il faut examiner à quoi elle
correspond exactement.
La création d’un fichier qui correspond à l’écriture d’une entrée dans un répertoire est contrôlée
par le droit d’écriture dans ce répertoire. Le renommage ou le déplacement d’un fichier sont
27
aussi contrôlés par le droit d’écriture dans les répertoires.
En outre, la suppression d’un fichier étant réalisée par la mise à zéro du numéro d’inode dans le
répertoire, c’est encore le droit d’écriture qui s’applique. Un utilisateur peut donc avoir le droit
de supprimer un fichier même s’il n’a pas le droit de le lire, de le modifier ni de l’exécuter.
D’autre part, le droit x d’un répertoire autorise la traversée et le positionnement sous celuici. Un utilisateur peut donc avoir accès à un fichier sans avoir le droit de lire le contenu du
répertoire qui le référence ni des répertoires parents dans l’arborescence. C’est une manière de
protéger par le secret des données tout en donnant accès à certains utilisateurs avertis.
6.4 Le shell
Généralement, les systèmes d’exploitation proposent deux manières de lancer des commandes.
La première d’entre elles a été décrite précédemment : c’est l’interface graphique gnome pour
GNU/Linux à l’EMSE. La deuxième forme a aussi commencé à être utilisée, c’est ce que l’on
appelle le « mode commande » via les fenêtres de terminal.
Le « mode commande » est présenté plus en détail dans cette section par le biais de l’interface
correspondante appelée le shell en Unix. Comme cela a déjà été indiqué auparavant, même si
les environnements graphiques multifenêtres permettent de ne taper que peu de commandes,
l’utilisateur averti connaît les commandes correspondantes et aucun environnement graphique
multifenêtre ne pourra atteindre la puissance d’expression du « mode commandes ».
En outre, les commandes permettent de mieux appréhender et comprendre les concepts. Cette
section définit le double rôle d’un shell : interpréteur et langage de programmation.
Le shell est l’interface homme/machine Unix. Il en existe plusieurs qui diffèrent par la syntaxe
mais aussi par les fonctionnalités offertes. Ici, nous étudions bash. Le shell possède un double
rôle, celui d’interpréteur de commandes ainsi que celui de langage de programmation et à
ce titre, il gère des variables et des fonctions et dispose de structures de contrôle (boucles,
conditionnelles...). Ces fonctionnalités servent essentiellement pour l’écriture de procédures
(appelées shell-scripts) qui permettent à chacun de paramétrer une session et de développer
ses propres outils. Dans ce module d’introduction, le shell est principalement étudié dans son
premier rôle d’interpréteur de commandes.
Espace de travail
— Chaque utilisateur dispose de son propre espace de travail
— qu’il doit gérer : permissions, contenus, archiver, organiser...
— qu’il doit utiliser : documents, TP, projets...
— Chaque utilisateur appartient à un groupe : promotion P2013
— Représenté par un noeud dans l’arborescence du système
— Pas de quota à l’école, mais surveillance...
Interprète de commande
28
Principe : boucle infinie :
1. Affichage du prompt (« $ ») d’attente de lecture au clavier
2. Lecture d’une commande (RETURN)
3. Analyse syntaxique (découpe en mot)
4. Substitution (caractères spéciaux)
5. Exécution de la commande
Exemple :
— Le shell affiche « $ » et se met en attente
— L’utilisateur tape ls -l /usr
— Le shell reconnaît trois mots : commande, option et argument
— Il crée un processus qui exécute la commande ls avec l’option -l et l’argument /usr
— Il attend la fin du processus avant d’afficher « $ »
Sortie de la boucle (déconnexion) par exit ou par CTRL-D (à éviter)
L’algorithme général du shell est relativement simple. On sort de la boucle infinie soit par
l’exécution de la fonction exit, soit par la frappe de la touche CTRL-D.
Si le shell associé est celui de la connexion, cette sortie provoque la déconnexion de l’utilisateur
et la fin de ce processus (et la fermeture de la fenêtre dans laquelle s’exécutait le shell).
Pour analyser les commandes lues au clavier, le shell découpe la ligne lue en mots, dont le
premier est considéré comme la commande à exécuter. Pour effectuer ce découpage en mots, le
shell prend en compte les caractères définis comme séparateurs (par défaut espace, tabulation
et NEWLINE) mais aussi certains caractères spéciaux, appelés méta-caractères qui sont alors
substitués pour remplir leur rôle.
Redirections
— À la connexion, le shell dispose de deux flots de données : l’entrée standard (clavier) et
la sortie standard (écran)
— Redirection = association de l’entrée ou de la sortie standard vers d’autres flots
— Entrée : utilisation de < Exemple : write paul < message
— Sortie : utilisation de > (écrasement du fichier) Exemple : ls -l /usr > fichier
— Sortie : utilisation de > > (ajout à la fin du fichier) Exemple : ls -l /etc > > fichier
— Tubes (pipes) : utilisation de | entre deux commandes, dont la sortie de la première est
associée à l’entrée de la seconde Exemple : wc -l /etc/password | wc -l
Lorsque le shell est activé, il dispose de deux flots de communication qui sont l’entrée standard
et la sortie standard. L’entrée standard est associée par défaut au clavier et la sortie standard
est associée par défaut à l’écran. La modification de l’une de ces affectations par défaut s’appelle
une redirection et elle n’est valable que le temps de la commande sur laquelle elle porte.
Dans son travail d’interprétation, le shell traite en premier les redirections et cela
indépendamment du résultat des commandes associées. Par conséquent, lorsqu’une commande
échoue, la redirection associée a quand même été effectuée.
La redirection la plus utilisée est celle de la sortie standard avec pour objectif la récupération
du résultat d’une commande ailleurs qu’à l’écran, le plus souvent dans un fichier. Pour cela, il
29
suffit d’ajouter sur la ligne d’une commande le caractère supérieur suivi du nom du fichier de
redirection (> nom_fich). L’exécution de la commande avec la redirection entraîne la création
d’un fichier de nom nom_fich.
Dans le cas de la sortie standard, si un tel fichier existe déjà, son contenu initial est perdu.
Si l’on souhaite conserver l’information contenue dans un fichier de redirection, il faut utiliser
deux fois le caractère supérieur (» nom_de_fichier) pour que le résultat soit ajouté à la fin du
fichier. Comme pour une redirection simple, si le fichier de redirection n’existe pas, il est créé
automatiquement.
La redirection de l’entrée standard permet à une commande d’utiliser comme données le
contenu d’un fichier à la place d’une lecture clavier. Pour cela, il suffit de placer le caractère
inférieur suivi du nom de fichier de redirection (< nom_fich). À la différence d’une redirection
en sortie, le fichier de redirection doit exister sinon cela provoque une erreur avec un message
du style « no such file » ou « cannot open ». La redirection de l’entrée standard est peu utilisée car
la plupart des commandes acceptent un nom de fichier en argument. Par exemple, la commande
cat permet de visualiser soit l’entrée standard (appel sans argument), soit le contenu d’un fichier
(dont le nom est passé en argument. Une redirection ne ferait qu’alourdir l’écriture (cat <
fichier est équivalent à cat fichier).
Un tube est une zone mémoire permettant à deux processus de communiquer de façon
synchronisée, c.-à-d. que l’écrivain est mis en attente lorsqu’il n’y a plus de place disponible
et de même, le lecteur est mis en attente quand il n’y a pas d’information prête. Ce principe
est utilisable au niveau du shell avec le caractère barre verticale (« | ») entre deux commandes.
Cela permet de rediriger la sortie standard de la première sur l’entrée standard de la seconde.
Avec un tube, le résultat de la première commande n’est pas accessible.
Parfois, il est utile de garder une telle information intermédiaire. Pour cela, la commande tee
duplique l’entrée sans la modifier. L’information fournie en entrée à tee est répercutée en sortie
et une copie est faite dans un fichier dont le nom est passé en argument : par exemple, ls | tee
fichier | wc -l.
Les tubes sont très utilisés avec les filtres. Le principal intérêt des filtres est de pouvoir
les combiner grâce à des tubes pour cumuler leurs effets sans avoir besoin de fichiers
intermédiaires. En effet, le principe consiste à décomposer un traitement complexe en plusieurs
actions plus simples et à développer un outil pour chaque action de base, ce qui est plus
facile que d’écrire directement un programme adapté au traitement global. Ensuite, les filtres
développés peuvent être réutilisés dans la décomposition d’un autre traitement. En revanche,
on rencontre une certaine redondance qui provient soit du développement simultané d’outils
analogues dans des milieux différents, soit d’une volonté d’isoler certaines fonctions jugées très
importantes.
Caractères spéciaux
Caractères spéciaux : permettent de paramétrer l’interprétation des commandes
— Le texte entre deux simples quotes (’texte’) n’est pas interprété
— Après un \, le caractère qui suit n’est pas interprété
— Dans un texte entre guillemets ("texte"), le caractère \ et les séparateurs ne sont pas
30
interprétés.
— Pour référencer des noms de fichiers :
— * : chaîne de caractères quelconques
— ? : un seul caractère, quelconque
— [...] : un seul caractère parmi ceux cités
— [...] : un seul caractère hors de ceux cités
— Le caractère ˜ est remplacé par le répertoire de connexion ; ˜user est remplacé par le
répertoire de connexion de user
— Le caractère ; permet de placer plusieurs commandes sur une même ligne
En dehors des caractères utilisés pour les redirections et les tubes, le shell gère de nombreux
autres caractères spéciaux, permettant de paramétrer l’interprétation des commandes.
Un texte donné entre quotes (’...’) n’est pas interprété par le shell mais considéré comme un
simple mot. Cela permet en particulier d’inclure dans un argument des caractères spéciaux
(espace, caractères de redirection. . .).
Le caractère antislash («\n») précise que le caractère suivant ne doit pas être interprété par le
shell, ce qui permet d’utiliser un caractère spécial comme la quote. La caractère antislash n’est
effectif que pour le caractère suivant, il faut le répéter autant de fois que de caractères à ne pas
interpréter.
Les caractères d’un texte donné entre double quote ("...") ne sont pas interprétés sauf \
(annulation du sens).
Plusieurs caractères jouent le rôle de « jokers » pour référencer des noms de fichiers, en
particulier le caractère étoile (« * ») remplace une chaîne de caractères quelconque et le
caractère point d’interrogation (« ? ») remplace un caractère quelconque. Le caractère étoile
peut représenter la chaîne vide. Par ailleurs, utiliser seul, le caractère étoile représente la liste
des fichiers non cachés du répertoire courant (équivalent au résultat de la commande ls). Il faut
noter que le caractère point en début du nom d’un fichier doit être donné explicitement et non
pas avec un « joker ». C’est pourquoi l’étoile seule ne repère pas les fichiers cachés. Il en est de
même pour le caractère slash. Par contre, ailleurs qu’au début du nom, le point est traité comme
les autres caractères.
L’utilisation des crochets permet de définir un caractère quelconque appartenant à l’ensemble
défini entre les crochets. Cet ensemble peut être défini à partir d’une liste de caractères
juxtaposés ([aeiou]), ou à partir d’un intervalle pour inclure tous les caractères selon l’ordre
ASCII entre les deux bornes séparées par un tiret ([0-9]), ou un mélange des deux ([09aeiou]). On peut également spécifier le complément de l’ensemble indiqué en mettant un point
d’exclamation ( !) en premier caractère juste après le crochet ouvrant ([ !...]). Pour prendre en
compte dans l’ensemble l’un des caractères servant à définir cet ensemble, il suffit de les placer
ailleurs que là où ils ont une signification. Ainsi, le crochet ouvrant peut être placé n’importe
où et le point d’exclamation n’importe où sauf en premier, le crochet fermant doit être placé
en premier et le tiret en premier ou en dernier. Pour ces deux derniers éléments, la notion de
premier caractère est étendue au deuxième lorsque le premier est le point d’exclamation.
Une redirection (en entrée ou en sortie) ne faisant intervenir qu’un seul fichier, il n’est pas très
logique d’utiliser les caractères spéciaux d’interprétation des noms de fichiers qui servent le plus
souvent pour représenter en ensemble d’éléments. Mais s’ils sont utilisés quand même, le shell
ne les interprète pas (les caractères correspondants étant alors des caractères ordinaires) sauf
31
si l’interprétation conduit à un seul nom de fichier.
La touche ESCAPE offre un mécanisme de complémentation des noms de fichiers selon le
principe suivant : lorsque l’utilisateur tape un nom de fichier, deux appuis successifs sur la
touche ESCAPE entraînent l’affichage automatique du reste du nom. Si plusieurs solutions sont
possibles (cas de plusieurs fichiers avec même début de nom), le shell affiche tous les caractères
communs et attend que l’utilisateur continue la frappe. Et dans le cas où aucun nom de fichier
ne commence par le texte déjà tapé, un « bip » est émis.
Historique
— Le shell mémorise les commandes tapées, et permet de les afficher et de les relancer.
— La commande history permet d’afficher l’historique
— Les touches « flèche vers le haut » ou « vers le bas » permettent de « naviguer » dans
l’historique
— Sur une ligne sélectionnée,
— les touches « flèches vers la gauche » ou « vers la droite » permettent de « naviguer »
sur cette ligne
— Les touches Début, Fin, Suppr, Backspace ont leur signification usuelle
— La touche Entrée relance l’exécution de la commande
Configuration du compte
Étapes du démarrage lors d’une connexion initiale
— Les commandes placées dans le fichier /etc/profile sont exécutées
— Les commandes placées dans le fichier ˜/.profile sont ensuite exécutées
Étapes du démarrage lors d’une autre connexion
— Les commandes placées dans le fichier ˜/.bashrc sont ensuite exécutées
Ces fichiers permettent de configurer le compte au démarrage (man bash)
6.5 Gestion des activités
Gestion des processus
— Toute commande lancée conduit à la création d’un processus Unix
— La commande ps permet de visualiser les processus de la machine
— ps : les processus actifs de l’utilisateur
— ps x : tous les processus de l’utilisateur
— ps ax : tous les processus de tous les utilisateurs
— La commande top permet un affichage répété des processus
— Sous gnome, sous le menu Système / Administration, l’application Moniteur système
gère les processus
32
— La commande kill permet d’arrêter un processus, en indiquant son numéro (pid)
Exécution différée
Exécution synchrone
— Dans un terminal, le shell attend la fin de la commande, pour passer à la suivante =⇒
exécution synchrone
— La commande s’exécute en mode foreground
Exécution différée
—
—
—
—
—
Dans le cas d’une exécution asynchrone, le shell n’attend pas la fin =⇒ mode background
Ajout de & à la fin de la commande
jobs : liste des tâches du shell
fg et bg : changement de mode
CTRL-Z : stopper la commande active −→ choisir ensuite un mode
Recherche de fichiers
— find
— find répertoire critères... : recherche de fichiers satisfaisant les critères sous le
répertoire indiqué
— Exemples de critère : -name, -type
— Exemple : find . -type f -name ’*.c’
— locate : recherche dans tout le système, à partir d’une base de données journalière
— which commande : affiche le nom absolu de la commande
— Rechercher des fichiers dans le menu Raccourcis de gnome
Commandes « bien » utiles
—
—
—
—
Recherche de données : grep
Gestion des données : sort, cut, awk
Archivage et sauvegarde : tar, rsync
Espace de travail : df, du, gzip
33

Documents pareils