Usage Unix
Usage Unix
à Sun et à HP, constitue, à ce jour, la référence en termes Pour tirer convenablement parti d’Unix, il faut connaître les
d’environnement graphique sous unix. objets qu’il manipule : les fichiers et les processus. Nous
commencerons donc par présenter ces deux entités. Nous
pourrons alors commencer à donner des exemples pour expli-
quer ce qu’est et comment fonctionne un interpréteur de
commandes (shell). Nous passerons ensuite en revue les
commandes de base permettant de manipuler des fichiers ou
des processus, avant de présenter des outils un peu plus évo-
lués. Nous terminerons par la présentation des outils du pro-
grammeur : le compilateur C et les utilitaires associés ainsi
que par quelques exemples.
Remarque : bien que de plus en plus d’outils graphiques (à la
Windows) permettent d’accéder aux ressources de la ma-
chine, nous ne parlerons ici que des outils « alphanumé-
riques » accessibles depuis une fenêtre Terminal.
Avant de quitter la salle, il faut là aussi veiller à terminer la 2. Système de gestion de fichiers
session correctement. Pour toutes les sessions alphanuméri- a) Qu’est ce qu’un fichier ?
ques, la déconnexion se fait en tapant la commande logout Un fichier est une suite d’octets8 (de 0 à plus de 2 Go). Au-
(abrégé lo) ou la commande exit. Dans le cas d’une session cune structure n’est imposée à un fichier par le système, et
« graphique », la déconnexion se fait en clickant sur le petit aucune signification n’est attachée à son contenu – la signifi-
bouton Exit de la fenêtre principale de CDE (Common Desk- cation des octets dépend uniquement des programmes qui
top Environment). manipulent le fichier. Unix reconnaît cinq grandes catégories
II - Unix et son utilisation de fichiers.
Les fichiers ordinaires ou réguliers sont des fichiers sur
1. Présentation d’unix
disque dont le contenu est non structuré et correspond donc à
Unix est à l’origine (1969) un système d’exploitation déve- une suite de caractères caractérisée par sa longueur (qui per-
loppé à usage interne pour les laboratoires Bell. Les universi- met en particulier de détecter la fin de fichier).
tés de Berkeley et Columbia ont ensuite pris le relais de son Les répertoires voient leur contenu interprété par un certain
développement. Aujourd’hui, Unix est disponible sur un nombre de fonctions du système : ils permettent de structurer
grand nombre de machines sous des noms divers : SunOS, l’ensemble des fichiers en arborescence et définissent un mé-
Solaris, Linux, FreeBSD, HP-UX, Ultrix, etc. Tous ces OS7 canisme de désignation des fichiers indépendant de leur loca-
peuvent être classés en deux familles : les descendant de la lisation dans les tables du système et sur le disque.
version de Berkeley (BSD) et les descendants de la version de
Les fichiers spéciaux : l’une des originalités du système
AT&T (System V). Solaris 2.8 appartient à cette deuxième
UNIX réside dans le traitement qu’il réserve aux périphéri-
famille.
ques (terminaux, imprimantes, disques). Pour l’utilisateur, et
Unix est un système d’exploitation multi-utilisateurs et multi- donc d’un point de vue externe, il n’y a pas de différence en-
tâches. A ce titre, son rôle principal est d’assurer aux différen- tre les fichiers ordinaires, et les organes périphériques dans la
tes tâches et aux différents utilisateurs une bonne répartition façon de les référencer. Un fichier spécial est associé à un
des ressources de l’ordinateur (mémoire, processeur(s), es- dispositif physique. Il est traité par le système comme un fi-
pace disque, imprimante(s), programmes utilitaires, accès chier ordinaire, mais les opérations de lecture ou d’écriture
au(x) réseau(x)…) et cela sans intervention des utilisateurs : il activent le dispositif physique associé. Plus finement, on dis-
les prend totalement en charge et lorsque les demandes sont tingue les fichiers spéciaux en mode bloc comme les disques,
trop importantes pour être satisfaites rapidement, l’utilisateur pour lesquels les échanges sont réalisés par blocs de 512 ou
le ressent par un certain ralentissement (qui peut être impor- 1024 caractères, et les fichiers spéciaux en mode caractère
tant, voire insupportable), mais le système (en principe) ne se comme les terminaux pour lesquels les échanges sont réalisés
bloque pas. caractère par caractère.
Unix est, par ailleurs, un système de développement et les Les tubes nommés ou fifo permettent la communication entre
utilisateurs y ont à leur disposition un très grand nombre processus9.
d’outils, pour la plupart assez simples à utiliser, leur permet-
Les liens symboliques sont des fichiers dont le contenu est
tant d’écrire, mettre au point et documenter leurs programmes
interprété comme un nom de fichier (absolu ou relatif au ré-
(éditeurs, langages de commande, compilateurs, débogueurs,
pertoire qui contient le lien symbolique). Il s’agit d’un
systèmes de traitement de textes). Le principal problème au-
concept différent mais qui vient compléter celui de lien phy-
quel les utilisateurs peuvent se heurter est en fait de savoir ce
sique dont nous parlerons dans la section suivante.
que contient précisément la boite à outils à leur disposition.
C’est une des raisons d’être du présent document qui contient, b) Comment est codé un fichier ?
outre une présentation rapide des principales caractéristiques Du point de vue le plus interne, un fichier est constitué de
d’Unix, un résumé des outils disponibles pour le program- deux parties : son contenu proprement dit et un bloc
meur.
8
Octet : une quantité d’information de 8 bits. Pour nous, un octet est équiva-
lent à un caractère.
7 9
OS : abréviation de Operating System, soit « Système d’exploitation ». Tubes : l’utilisation de tubes nommés sera abordée en 2ème année.
d’informations10 le décrivant. Ce bloc, appelé inode (pour commençant pas par / : elle correspond à un chemin allant du
index-node, c’est-à-dire nœud d’index) est stocké dans une répertoire de travail à un fichier. La référence absolue d’un
table propre au disque contenant le fichier. Un fichier est fichier se déduit d’une référence relative en lui ajoutant en
donc identifié par un couple constitué de l’identification de la préfixe la référence absolue du répertoire de travail. Ainsi,
table dans laquelle sont enregistrées ses caractéristiques (on dans l’exemple précédent, si le répertoire de travail est
parle de disque logique) et de l’indice d’une entrée dans cette /U/paul, le fichier dont nous avons donné la référence absolue
table (numéro de l’inode). aura comme référence relative travail/toto.c.
c) Répertoires et hiérarchie des fichiers Ce type de repérage est encore facilité par un mécanisme
Pour aussi simple et efficace qu’elle soit, la façon de désigner permettant de remonter dans l’arborescence. Le lien « .. »
un fichier décrite ci-dessus ne serait pas très pratique pour contenu dans un répertoire est toujours associé au répertoire
l’utilisateur : comment se rappeler que le fichier 23542 du unique dont il est le descendant. De plus, le lien « . » est uti-
disque 3 contient la recette de la soupe au pistou, tandis que le lisé par le répertoire pour se désigner lui même. Ainsi,
25432 du même disque contient les résultats de simulation du ../claude/C est une référence relative parfaitement valide si le
décollage d’Ariane ? La solution adoptée consiste à stocker répertoire de travail est, par ex. /U/denise. De même, et bien
dans certains fichiers les noms des autres… qu’elles soient inutilement compliquées, les références
.././denise/../../soft ou jeux/../travail/toto.c sont valides…
Un répertoire n’est rien d’autre qu’un fichier contenant une
liste de couples formés d’un chaîne de caractères11 (appelée Il découle de ce qui précède qu’un répertoire Unix n’est ja-
lien physique ou « nom de fichier ») et d’un nombre (numéro mais vide, puisqu’il contient toujours au moins les deux liens
de l’inode décrivant le fichier). La désignation d’un fichier est . et .. qui ne peuvent être détruits.
ainsi réalisée en utilisant un lien associé à ce fichier dans un Notons enfin que chaque utilisateur possède un répertoire
répertoire, ce répertoire étant lui même désigné par le même particulier que nous appellerons son répertoire privé (home
mécanisme à partir d’un autre répertoire. L’organisation qui directory) qui devient automatiquement son répertoire de tra-
s’ensuit est donc arborescente et suppose, pour être opéra- vail lors de sa connexion au système. Le symbole ~ permet de
tionnelle, l’existence d’une origine symbolique. Cette origine faire référence, de manière abrégée, à ce répertoire. Pour faire
est appelée racine absolue du système de gestion de fichiers. référence au répertoire privé d’un autre utilisateur on place
d) Référence absolue ou relative son nom après le tilde (ex : ~cathebra/toto).
La figure ci-contre fournit un exemple d’arborescence de fi- e) Droits d’accès
chiers. Pour tout Sous Unix, tout utilisateur possède une identification (uid) et
/
fichier, il existe au appartient à un groupe particulier (gid). Aussi, pour un fichier
moins un chemin donné, les utilisateurs du système peuvent être classés en trois
usr bin U dev soft
menant de la racine catégories : le propriétaire du fichier (user), les membres du
jusqu’à lui. La liste paul denise claude
groupe propriétaire du fichier (group), les autres utilisateurs
des liens physiques (others). Trois types d’opérations élémentaires sont contrô-
qu’il faut utiliser jeux travail C Algo lées par le système : la lecture (r), l’écriture (w) et
pour arriver à ce l’exécution12 (x). Il y a donc neuf combinaisons possibles, qui
fichier l’identifie tetris D&D toto.c sont codées en utilisant 9 bits de l’inode du fichier.
sans ambiguïté : Ce masque de protection est affiché par la commande ls –l
elle constitue un chemin d’accès long (full-pathname) ou sous la forme de neuf lettres : rwxrwxrwx, les trois premières
référence absolue du fichier. Si les liens rencontrés sur un correspondent aux permissions de l’utilisateur propriétaire,
chemin de la racine vers un fichier sont successivement U, les trois suivantes aux permissions du groupe propriétaire et
paul, travail et toto.c, la référence absolue du fichier s’écrit les trois dernières aux autres utilisateurs. Si une permission
symboliquement /U/paul/travail/toto.c . Une référence abso- n’est pas accordée, la lettre correspondante est remplacée par
lue commence toujours par le caractère /. un tiret : rwxr-x---13 est un masque de permission assez cou-
Afin de faciliter les repérages, à tout processus (activité dans rant qui signifie que le propriétaire a tous les droits, le groupe
le système) est associé un répertoire de travail. La désigna- propriétaire a les droits de lecture et d’exécution et les autres
tion d’un fichier par rapport au répertoire de travail est appe- utilisateurs n’ont aucun droit14.
lée référence relative (short pathname) et s’écrit sous la 3. Processus
forme d’une suite de liens séparés par le caractère / et ne
Un processus est un objet dynamique qui correspond à
l’exécution d’un programme. Il est constitué, outre du pro-
10
Attributs d’un fichier : il s’agit de
• l’identification du propriétaire et du groupe propriétaire du fichier ; 12
Pour un fichier ordinaire, le droit de lecture donne la possibilité de lire le
• le type du ficher et les droits d’accès des différents utilisateurs ; contenu du fichier, le droit d’écriture celui de le modifier et le droit
• la taille du fichier exprimée en octets ; d’exécution celui de faire exécuter par le processeur les instructions qu’il
• le nombre de liens physiques sur le fichier ; contient. Pour un répertoire, le droit d’exécution signifie que l’utilisateur
• les dates de lecture, modification du fichier et modification de l’inode ; concerné a la permission de faire figurer ce répertoire dans une référence ou
• l’adresse des blocs utilisés pour ce fichier sur le disque ; de s’y positionner (en faire son répertoire de travail). Le droit de lecture est
• l’identification de la ressource associée (fichiers spéciaux). le droit de lire les noms référencés dans ce répertoire et le droit d’écriture la
Ces informations sont contenues dans le nœud d’index associé au fichier et possibilité d’écrire dans ce répertoire et en particulier de détruire un fichier,
ne comprennent aucun nom pour celui-ci. même sans aucun droit de lecture ou d’écriture sur celui-ci.
11 13
Les noms de fichiers peuvent contenir n’importe quel caractère (à Ce masque rwxr-x--- est adapté à un fichier exécutable ou à un répertoire.
l’exception du /). Le point n’a pas de signification particulière. Ainsi, to- Dans le cas d’un fichier de données, on aura plutôt : rw-r-----.
14
[Link] est un nom acceptable. Il n’y a pas de limitation de longueur Aucun droit. Il faut cependant noter qu’il existe un utilisateur privilégié
pour un lien physique. Par contre, la référence absolue d’un fichier ne doit disposant de tous les droits : le super utilisateur, de numéro d’identification 0
pas excéder 512 caractères. et dont l’un des noms de connexion est root.
nom de la machine sur laquelle il est connecté et le nom du est remplacée, avant l’exécution de la commande, par le der-
répertoire courant26. nier argument de la commande précédente.
cathebra-{23}-measn6:~ > passwdpasswd: Changing password for cathebraEnter
login(NIS) password:New password:Re-enter new password: Il y a bien d’autres commandes permettant de manipuler
La commande passwd permet à un utilisateur de changer son l’historique : Cf. man tcsh et man csh.
mot de passe. Le système demande tout d’abord l’ancien mot e) Redirections des entrées-sorties
de passe, puis deux fois le nouveau mot de passe choisi. Il n’y Comme cela a été dit lors de la présentation des processus, il
a pas d’écho des mots de passe pour d’évidentes raisons de est possible de demander à associer les fichiers standard
sécurité. d’une commande à autre chose que le terminal. Les métaca-
cathebra-{24}-measn6:~ > echo exemple d'effet de la commande echo ractères ci-dessous indiquent que le mot suivant est le nom
Unmatched '.
cathebra-{25}-measn6:~ > echo exemple d\'effet de la commande echo d’un fichier sur lequel doit être redirigé l’un des fichiers stan-
exemple d'effet de la commande echo dard de la commande simple qui précède.
La commande echo imprime simplement ses paramètres sur < associe l’entrée standard de la commande au fichier. Par
la sortie standard en les séparant par un espace. Cet exemple exemple, monprog < toto exécute la commande monprog
montre qu’un nombre quelconque d’espaces peut séparer (qui n’est pas une commande standard, mais peut être un
deux paramètres et que le caractère ′ est interprété par le shell. programme créé par l’utilisateur) en lui fournissant les
Pour empêcher cette interprétation, on le fait précéder du ca- données contenues dans le fichier toto exactement
ractère \. On peut aussi remarquer, dans le prompt, comme si ces données étaient frappées au clavier.
l’incrémentation du numéro de commande. > associe la sortie standard au fichier. Si le fichier n’existe
c) Edition des commandes pas, il est créé. S’il existe, il est écrasé : son contenu pré-
En cas d’erreur dans la frappe d’une commande, il est possi- cédent est perdu. La variable noclobber, lorsqu’elle est
ble de revenir en arrière en utilisant la touche [backspace] définie, prévient la destruction de fichiers existant. Elle
(située en haut à droite du clavier) ou [ctrl-H] ou la touche interdit aussi les redirections sur des terminaux ou
[Del] (ou [Suppr]). On efface ainsi, un à un, les caractères /dev/null27, à moins que la forme >! soit utilisée.
qui viennent d’être frappés. On peut aussi déplacer le curseur >& associe à la fois la sortie standard et la sortie d’erreur
dans la ligne de commande à l’aide des touches [←] et [→], standard au fichier. Le reste du comportement est iden-
puis modifier le texte en détruisant des caractères et en en tique à > . Pour écraser un fichier quand la variable
insérant d’autres. Il n’est pas nécessaire de ramener le curseur noclobber est définie, on utilise la forme >&! .
en fin de ligne avant de frapper la touche [return]. >> et >>&
Des caractères de contrôle permettent de rendre cette édition Ces redirections sont similaires aux précédentes, à ceci
encore un peu plus facile : [ctrl-A] ramène le curseur au dé- près qu’elles ajoutent les résultats de la commande à la
but de la ligne et [ctrl-E] à la fin. [ctrl-U] permet d’effacer fin du fichier, plutôt que de l’écraser. Si noclobber est
toute la ligne. définie, le fichier doit exister, à moins que l’une des
Un système de complément automatique permet d’éviter de formes >>! ou >>&! soit utilisée.
frapper les noms de commande, de fichier, de variable ou f) Substitution de commande
d’utilisateur en entier : seule une abréviation non ambiguë est Une commande délimitée par des guillemets inversés (`) est
nécessaire. Quand on frappe une tabulation ([TAB], ou [ctrl- exécutée dans un sous-processus. Sa sortie standard est dé-
I]), tcsh complète automatiquement le nom. Si le préfixe in- coupée en mots à chaque espace, tabulation ou retour à la li-
diqué ne correspond pas à un nom existant, un bip le signale. gne. Les mots vides sont éliminés. Ce texte remplace alors la
Si le préfixe correspond à plusieurs noms, le mot est complété chaîne de caractères initiale et sera interprété comme une par-
de façon partielle jusqu’à l’ambiguïté et un bip est émis. Si la tie de la ligne de commande.
variable autolist est définie (ce qui sera le cas dans la configu-
ration initiale de votre compte), frapper sur [TAB], alors que g) Substitution de nom de fichier
plusieurs mots correspondent au préfixe indiqué, fait aussi Les mots contenant au moins l’un des caractères *, ?, [ ou {
afficher la liste des possibilités. Dans le cas où autolist n’est sont remplacés par une liste, triée en ordre alphabétique, de
pas définie, c’est [ctrl-D] qui permet de faire afficher cette noms de fichiers (cette opération est appelée globbing). Tcsh
liste. utilise ces mots comme des motifs que doivent satisfaire les
d) Historique noms des fichiers.
Les caractères spéciaux (métacaractères) utilisés sont :
Tcsh maintient une liste des dernières commandes exécutées.
Les touches [↑] (ou [ctrl-P]) et [↓] (ou [ctrl-N]) permettent de * correspond à n’importe quels caractères (0 ou plus) ;
remplacer la ligne de commande par une copie de l’une des ? correspond à un seul caractère quelconque ;
lignes de cette liste (et donc de répéter une commande). Il est [ … ] correspond à un seul caractère parmi l’ensemble indi-
possible d’utiliser les mécanismes d’édition de la section pré- qué. Si dans la liste, deux caractères sont séparés par
cédente pour modifier une commande ainsi rappelée. un -, ils désignent tout un intervalle dans la série des
On peut réexécuter très rapidement une commande dont on caractères ASCII. Si le premier caractère est un ^, il
connaît le numéro en frappant un point d’exclamation suivi inverse la condition de correspondance : le caractère
du numéro de la commande (sans espace).
Il arrive assez souvent que l’on ait besoin d’un même argu- 27
/dev/null : pourrait être appelé la « poubelle à bits ». En effet, il s’agit d’un
ment dans plusieurs commandes successives. L’abréviation !$ fichier spécial dans lequel les données écrites sont perdues sans aucun com-
mentaire, alors que les programmes qui lisent depuis /dev/null rencontrent
une fin de fichier immédiate car la lecture de /dev/null retourne toujours zéro
26
Répertoire courant : nous verrons, dans la description du tc-shell que ~ octet. Une utilisation habituelle de /dev/null est la suppression des sorties
est une abréviation permettant de désigner le répertoire privé de l’utilisateur. normales pour voir les messages d’erreur.
ne doit pas appartenir à l’ensemble. (ex : [a–z] = toutes j) Comment est exécutée une commande ?
les minuscules, [^123] = tout caractère sauf le chiffre S’il s’agit d’une commande interne, le shell l’exécute direc-
1, le chiffre 2 ou le chiffre 3). tement. Sinon, il se met à la recherche d’un fichier, de même
{str1,str2, …} nom, pour lequel l’autorisation d’exécution est positionnée.
correspond à l’une des chaînes de caractères indiquées • Si le nom de la commande contient au moins un /, le shell
(str1 ou str2, etc.). considère qu’il s’agit d’un chemin d’accès à un fichier et
Il faut savoir que, dans ces recherches, le caractère . en début va le chercher.
de mot ou après un / et le caractère / lui même ne sont pas • Si le nom de la commande ne contient pas de /, alors le
couverts par les abréviations et doivent donc être explicite- shell tente d’en faire un chemin d’accès en lui plaçant suc-
ment écrits. cessivement en préfixe tous les noms de répertoires stockés
Les expressions utilisant ces métacaractères peuvent être es- dans une variable spéciale appelée path.
sayées sans danger en les utilisant comme paramètres de la Quand un chemin d’accès, qui a les permissions appropriées,
commande echo. est trouvé, le shell crée un nouveau processus pour exécuter la
Il est possible de faire afficher la « traduction » d’un mot commande.
contenant des métacaractères au cours de la frappe d’une • S’il s’agit d’un exécutable binaire, le processus l’utilise
commande en frappant successivement les deux touches [ctrl- pour se « recouvrir » et démarre son exécution.
X][g]. Le remplacement du mot par la liste de noms corres-
• S’il s’agit d’un fichier de texte dont la première ligne
pondante est obtenu par [ctrl-X][*].
commence par #!, le mot suivant est pris comme un che-
h) Variables min d’accès à un shell capable d’interpréter ce script. Le
Tcsh maintient un ensemble de variables qui sont des couples reste des mots de la première ligne est pris comme une liste
nom – valeur. Le nom d’une variable est formé d’au plus 20 d’options pour ce shell. Le processus se recouvre alors
lettres ou chiffres. Il commence par une lettre (le souligné, _, avec le shell indiqué et exécute le script.
étant considéré comme une lettre). La valeur d’une variable est • Si aucune des conditions précédentes n’est remplie, le pro-
une liste (qui peut être vide) de mots séparés par des espaces. cessus tente une dernière fois d’exécuter le script en se re-
Pour faire référence à la valeur d’une variable (on parle de couvrant avec un c-shell, si le premier caractère du fichier
substitution de la variable), on fait précéder son nom du mé- est un #, ou un bourne shell dans tous les autres cas.
tacaractère $28. Des accolades peuvent être utilisées pour iso- k) Où sont les commandes externes ?
ler le nom de la variable des autres caractères à l’intérieur
Une commande externe est simplement un fichier régulier
d’un mot. Les variables peuvent être manipulées à l’aide des
pour lequel il existe une autorisation d’exécution (son masque
commandes internes set, unset, setenv et unsetenv. Certaines
de protection contient au moins un x). Comme nous venons
variables sont maintenues ou utilisées par le shell. Les autres
de le voir, chaque processus maintient une liste de répertoires
sont créées par l’utilisateur pour simplifier l’écriture de cer-
dans lesquels il recherche les commandes externes. Cette liste
taines commandes.
est appelée chemin de recherche (search path) et est stockée
Les substitutions de commande ou de nom de fichier sont en dans la variable path30. Pour connaître le contenu de cette
général appliquées aux mots qui résultent de la substitution de variable, il suffit de taper echo $path.
variable29.
La commande which permet d’identifier la « provenance »
Lors de l’édition de la commande, il est possible de remplacer d’une commande : commande interne, alias, full pathname
une variable par son contenu en utilisant la séquence de tou- d’une commande externe.
ches [ctrl-X][$].
La commande where permet, quant à elle, de lister toutes les
i) Aliases versions de la commande qui lui est donnée en paramètre.
Un alias (pluriel aliases) est un surnom, ou un raccourci, pour Toutes deux attendent comme argument le nom d’une com-
une commande. Tcsh maintient une liste d’aliases que mande et utilisent les mêmes mécanismes de recherche que le
l’utilisateur peut créer, afficher ou modifier en utilisant les shell (il s’agit en fait de commandes internes au tc-shell).
commandes alias et unalias. l) Exercice à titre d’exemples
Quand tcsh rencontre un nom de commande défini comme
Dans un premier temps, supposons que nous disposons d’un
une alias, il le remplace par la définition de celui-ci, en
répertoire nommé test, dont le contenu nous est donné par la
conservant les arguments de la ligne de commande. Il est pos-
commande ls31. Voici l’ensemble des transactions d’une ses-
sible, dans un alias, de modifier la liste d’arguments, mais
sion. Expliquer, en relisant si nécessaire la section « II -4 Le
cela ne sera pas expliqué ici (Cf. man csh).
turbo-c-shell (tcsh) », ce qu’il se passe. Seuls sont en gras les
On peut définir de cette façon des commandes relativement caractères frappés au clavier. On a placé à la fin de l’exercice
complexes et même redéfinir le comportement des comman- quelques explications sur certaines commandes rencontrées.
des de base. L’auteur de ce document conseille cependant de cathebra-{22}-measn6:~ > cd test
se limiter à la définition de nouvelles commandes qui seront cathebra-{23}-measn6:~/test > ls
[Link] bin cmd lib memos
alors des raccourcis pour des commandes existantes. [Link] chaos cmtest mail netnews
30
Path : ce chemin de recherche est ordonné, c’est-à-dire que, si deux fi-
28
Variables : D’autres métacaractères peuvent être utilisés pour sélectionner chiers exécutables de même nom, se trouvent dans deux répertoires différents
des mots spécifiques dans la valeur de la variable ou bien pour en extraire référencés dans le chemin de recherche, c’est celui qui est dans le répertoire
d’autres informations. Pour plus de précisions, on se reportera au manuel. dont le nom apparaît en premier dans la variable path qui sera sélectionné.
29 31
Substitutions : la substitution de commande ou de noms de fichier n’est Commande ls : l’utilisation de cette commande sera détaillée par la suite.
pas appliquée après la substitution de variable si la variable noglob est définie Pour l’instant, il nous suffit de savoir que, sans paramètres, elle provoque
ou bien si l’expression est entre guillemets doubles. l’affichage de tous les liens (noms de fichiers) du répertoire courant.
/bin/echo: ELF 32 bits MSB exécutable SPARC Version 1, un lien sont mémorisés les courriers qui lui sont adressés35. Le mes-
dynamique a été défini., fichier réduit
/usr/ucb/echo: ELF 32 bits MSB exécutable SPARC Version 1, un lien sage doit être terminé par une pression sur [ctrl-D] en début
dynamique a été défini., fichier réduit de ligne.
cathebra-{51}-measn6:~ > ll !$
ll `where echo | grep -v built-in` La commande write est à la précédente ce que l’interphone
-r-xr-xr-x 1 bin bin 5148 juil 16 1997 /bin/echo* est au courrier. Elle permet de correspondre en temps réel
-rwxr-xr-x 1 bin bin 3896 juil 16 1997 /usr/ucb/echo*
cathebra-{52}-measn6:~ > who avec un utilisateur donné actuellement logé sur le même sys-
hmugnier pts/1 août 19 15:08 ([Link]) tème et à la condition qu’il accepte les messages. Ici,
cathebra pts/4 août 19 15:47 ([Link])
berthelo pts/7 août 10 10:06 (pcmic211)
l’exemple est un peu biaisé car le destinataire et l’expéditeur
pmaurine pts/18 août 19 09:38 (pcmic209) sont identiques. Une limitation de write est qu’il ne permet de
pillemen pts/21 juil 31 13:41 (pcmic203) communiquer qu’avec des utilisateurs logés sur la même ma-
cathebra-{53}-measn6:~ > mail toto cathebra@[Link]: essai de
messagetexte du message sur plusieurs lignes si nécessaire. chine (d’où l’intérêt de la commande who). La commande
envoyé à l'utilisateur local toto et talk permet d’entrer en communication avec des utilisateurs
à l'utilisateur cathebra du site [Link]
[ctrl-D]EOT de systèmes distants en utilisant les mécanismes de désigna-
cathebra-{54}-measn6:~ > write toto tion de l’internet.
toto is not logged on.
cathebra-{55}-measn6:~ > write cathebra La commande mesg permet de se protéger contre la réception
Message from cathebra on measn6 (pts/4) [ Wed Aug 26 [Link] ] de messages intempestifs expédiés sur la console par le biais
hello
hello
de la commande write. Sans argument, mesg retourne la va-
si on allait prendre un café ? leur de la protection (y ou n). Avec l’argument y ou n elle fixe
si on allait prendre un café ? la protection. On a profité de cet exemple pour montrer la
ctrl-d<EOT>
cathebra-{56}-measn6:~ > mesg valeur que prend la variable status (qui contient le code de
is y retour de la commande qui vient d’être exécutée) après un
cathebra-{57}-measn6:~ > mesg n
cathebra-{58}-measn6:~ > write cathebra échec (ligne 59) et après une commande qui s’est déroulée
Permission denied. correctement (echo).
cathebra-{59}-measn6:~ > echo $status
1 Quand les paramètres d’une commande sont incorrects, on
cathebra-{60}-measn6:~ > echo $status obtient en général (c’est une convention et non un fait de
0
cathebra-{61}-measn6:~ > mesg
l’OS) un message, tel que celui de la ligne 64, qui indique
is n quelles valeurs peuvent prendre les paramètres de la com-
cathebra-{62}-measn6:~ > mesg y mande. En revanche, si une commande n’existe pas, on ob-
cathebra-{63}-measn6:~ > mesg
is y tient le message explicite : Command not found.
cathebra-{64}-measn6:~ > mesg a m) Obtenir de l’aide
usage: mesg [-y | -n | y | n]
cathebra-{65}-measn6:~ > msg
msg: Command not found.
La totalité de la documentation Unix est disponible en ligne.
La commande cd permet de changer de répertoire de travail. Pour obtenir la documentation d’une commande, il suffit
de taper man suivi du nom de la commande :
Les commandes ls et ll permettent de lister le contenu d’un cathebra-{43}-measn6:~ > man mesg
répertoire d’une manière plus ou moins détaillée. Reformatting page. Wait... done
mesg(1) User Commands mesg(1)
La commande more affiche le contenu d’un fichier page par NAME
page. Le passage d’une page à l’autre se fait en pressant la mesg - permit or deny messages
SYNOPSIS
barre d’espacement. Le retour en arrière par la touche [b] et mesg [ -n | -y | n | y ]
l’arrêt du programme, avant la fin du fichier, s’obtient par une AVAILABILITY
pression sur [q]. SUNWcsu
DESCRIPTION
La commande cp permet de copier des fichiers. L’option –R The mesg utility will control whether other users are
allowed to send messages via write, talk(1) or other utili-
indique qu’il s’agit d’une copie récursive de répertoires. ties to a terminal device. The terminal device affected is
La commande set permet de fixer la valeur d’une variable. determined by searching for the first terminal in the
sequence of devices associated with standard input, standard
La commande file analyse les premiers caractères d’un fi- output and standard error, respectively. With no arguments,
chier pour en déduire le type du contenu34 : programme exé- mesg reports the current state without changing it.
Processes with appropriate privileges may be able to send
cutable, script tcsh, programme source, image (gif, tiff, messages to the terminal independent of the current state.
pict…), document, données, etc. OPTIONS
The following options are supported:
La commande grep permet de sélectionner des lignes dans un -n | n Deny permission to other users to send message to
(des) fichier(s), ou sur son entrée standard, en fonction de leur the terminal. See write(1).
-y | y Grant permission to other users to send messages
contenu. to the terminal.
La commande who permet de connaître la liste des utilisa- ENVIRONMENT
See environ(5) for descriptions of the following environment
teurs effectivement connectés au système. variables that affect the execution of mesg: LC_CTYPE,
La commande mail permet d’envoyer du courrier à un autre LC_MESSAGES, and NLSPATH.
EXIT STATUS
utilisateur. Chaque utilisateur possède une boite à lettres où 0 if messages are receivable
1 if messages are not receivable
2 on error.
FILES
/dev/tty* terminal devices
34
Type de fichier : il importe de rappeler que, sous Unix, le nom d’un fichier
35
n’a pas forcément de rapport avec son contenu. Contrairement à Windows, Mail : il n’est pas nécessaire qu’un usager soit effectivement logé pour
où l’extension du nom du fichier est la seule information utilisée pour connaî- pouvoir lui adresser un courrier. Au cours de la procédure de connexion, un
tre son type, ici, c’est seulement l’analyse du contenu qui fournit cette infor- utilisateur qui a reçu du courrier en est averti et pourra consulter sa boite et
mation. réaliser différentes manipulations en utilisant la commande mail ou d’autres.
ln peut créer des liens physiques ou symboliques. Un lien virgules. Les opérations indiquées sont effectuées dans
physique ne peut pas porter sur un répertoire. Par défaut, l’ordre indiqué.
ln crée des liens physiques. Les options disponibles sont : qui est une combinaison des caractères u (user), g (group),
-f : force. Tente de créer le lien, même si les permissions o (others) et a (all = user, group and others) indiquant
de la cible interdisent l’écriture. quelles permissions doivent être changées.
-n : si la cible est un fichier existant, interdit son écrase- opérateur est l’un des caractères + (ajoute les permis-
ment. Cette option est annulée par l’usage de –f. sions), - (retire les permissions), = (fixe les permissions de
-s : crée un lien symbolique. Il est possible de créer des manière absolue).
liens symboliques sur des répertoires. permissions est n’importe quelle combinaison, des caractè-
res suivants : r (read), w (write), x (execute), X (execute si
mkdir [ -m mode ] [ -p ] répertoire…
la permission d’exécution existe déjà parmi les permissions
La commande mkdir crée les répertoires nommés en mode
du fichier) u, g, o (la permission est à prendre sur la valeur
rwxrwxrwx (qui peut être altéré par le masque de création
user, group ou others du mode courant)40
de fichier fixé par la commande umask). La création d’un
Avec l’option –f (force), chmod ne donne pas de message
répertoire demande l’autorisation d’écriture dans son réper-
d’erreur s’il échoue dans la modification des permissions
toire père. L’option –p permet de créer tous les répertoires
d’un fichier. Avec l’option –R, chmod descend récursi-
intermédiaires inexistants, tandis que l’option –m permet de
vement dans les répertoires qui lui sont donnés en argu-
fixer le mode de protection du fichier en utilisant la même
ment et change les permissions pour tous les fichiers de
syntaxe que la commande chmod.
ces répertoires et de leurs sous répertoires. Quand un lien
rm [ -f ] [ -i ] fichier… symbolique est rencontré, les permission de la cible du
rm –rR [ -f ] [ -i ] répertoire… [ fichier… ] lien sont changées, mais il n’y a pas de descente récursive
rmdir [ -ps ] répertoire… s’il s’agit d’un répertoire.
La commande rm détruit les liens physiques spécifiés par Quelques exemples :
chaque argument. Si un fichier est un lien symbolique, ce- chmod a-x toto
lui-ci est détruit, mais le fichier ou le répertoire auquel il chmod go+rw *.c
chmod u=rwx,g=rx,o= .
faisait référence n’est pas modifié. chmod –R g+rX .
La commande rmdir détruit les répertoires dont les noms chmod –R go-rwx .
lui sont donnés à la condition qu’ils soient vides. d) Manipulation de tâches
Il est impossible de détruire les répertoires . et .. Le shell associe un numéro de tâche (job) à chaque séquence
Les options suivantes sont applicables à rm : de commandes afin de garder une trace des commandes qui
-f : force la destruction des fichiers sans confirmation (à la continuent de fonctionner en tâche de fond ou qui ont été
condition que cela soit possible…). stoppées par [ctrl-Z]. Quand une commande, ou une sé-
-i : interactive. Avec cette option, rm demande confirma- quence de commandes est lancée en tâche de fond en utilisant
tion avant chaque destruction de fichier. Contrairement à le métacaractère &, le shell affiche une ligne avec le numéro
ce qui est affirmé dans certains livres, il n’est pas sage de de tâche entre crochets et la liste des numéros de processus
définir un alias de cette commande forçant cette option. associés.
En effet, cela ne conduit qu’à perdre du temps et à répon- Pour connaître la liste de tâches en cours on utilise la com-
dre bêtement y à toutes les questions posées (souvent sans mande interne jobs. Pour manipuler les tâches, on utilise les
même les lire). Il vaut mieux réfléchir avant de taper une commandes bg, fg et kill. Pour ces commandes, on peut dési-
commande que de demander au système de nous y forcer gner les tâches par %n où n est le numéro de la tâche tel qu’il
après… est donné par la commande jobs.
-r ou –R : destruction récursive des répertoires spécifiés dans Il est aussi possible, à l’aide de la commande ps d’obtenir la
la liste d’arguments. Les répertoires sont d’abord vidés avant liste de tous les processus en cours d’exécution sur la machine.
d’être détruits. L’utilisateur est normalement questionné Les processus appartenant à l’utilisateur peuvent être interrom-
avant la destruction des fichiers protégés en écriture, sauf s’il pus par la commande kill en spécifiant son numéro (pid).
indique l’option –f. Les liens symboliques rencontrés sont jobs [ -l ]
simplement détruits et jamais traversés. Si la destruction d’un Liste les tâches actives. L’option –l fait afficher les numé-
répertoire non-vide protégé en écriture est tentée, la com- ros de processus en plus de numéros de tâche. La tâche
mande échoue avec un message d’erreur. Les options –r et – stoppée le plus récemment est appelée tâche courante et
R ont strictement le même effet. est indiquée par le signe +. La tâche précédente est indi-
Les options suivantes s’appliquent à rmdir : quée par un -. Quand la tâche courante est terminée ou
-p : permet de détruire les répertoires spécifiés ainsi que placée en tâche principale (foreground) la tâche marquée –
leurs répertoires parents s’ils deviennent vides. Un mes- devient la tâche courante.
sage est imprimé sur la sortie d’erreur standard indiquant fg [ %job ]
si la totalité du chemin a été supprimée ou si une partie place le job spécifié (par défaut le job courant) comme tâ-
reste et pour quelle raison. che principale (foreground).
-s : supprime les messages produits par l’option –p. bg [ %job… ]
chmod [ -fR ] mode fichier… place le (ou les) job(s) spécifié(s) (par défaut le job cou-
Permet de modifier les permissions associées à un (des) rant) en tâche de fond (background).
fichier(s). Le paramètre mode est une liste d’expressions
de la forme [qui]opérateur[permissions] séparées par des 40
permissions : trois autres lettres (l, s ou t) peuvent être utilisées, mais elles
ne concernent quasiment que l’administrateur système. Cf. man chmod.
41
id : abréviation de identificateur.
lp42 [-c] [ -d dest] [-n nombre] [-m] [ -o opt ] [ fichier…] 6. Boite à outils Unix
lance une requête d’impression des fichiers référencés. La
Nous allons passer en revue une partie des outils disponibles
commande renvoie sur sa sortie standard l’identification
sous Unix. Certains outils seront détaillés, d’autres simple-
qui a été attribuée à la requête (cette identification pourra
ment cités. Dans tous les cas, le lecteur est invité à se reporter
être utilisée pour annuler ou suspendre la requête). En
au manuel (man) des commandes citées.
l’absence de nom de fichier, c’est l’entrée standard qui est
« envoyée » à l’imprimante. Les principaux paramètres a) Editeurs de texte
optionnels de la commande sont interprétés de la manière Un éditeur de texte est un outil qui sert à créer et à modifier
suivante (Cf. man lp pour les autres) : des fichiers contenant du texte, c’est à dire des caractères,
-c : une copie des fichiers est réalisée immédiatement, organisés en lignes séparées par le caractère linefeed (souvent
alors que par défaut seul un lien symbolique est créé. noté \n). Nous nous bornerons à présenter ici les différentes
-d : dest correspond au nom de l’imprimante à utiliser possibilités.
(cette option doit obligatoirement être utilisée). La manière la plus simple (rudimentaire) de créer un fichier
-m : un courrier est adressé à l’utilisateur lorsque tous les consiste à utiliser cat sans argument en redirigeant sa sortie
fichiers ont été imprimés. sur un fichier.
-n : indique le nombre de copies à imprimer. L’éditeur ed est le plus ancien éditeur disponible sous Unix. Il
s’agit d’un éditeur interactif en mode ligne, raison pour la-
-o : permet de spécifier des options telles que nobanner quelle il n’est plus tellement utilisé.
pour éviter l’impression d’une page d’en-tête.
L’éditeur vi (pour visual editor) est un éditeur pleine page
lpstat [ -o liste ] [ -u liste ] [ -t ] fourni en standard avec toutes les versions d’Unix. Il présente
fournit des informations sur l’état du système de gestion l’avantage d’être disponible sur toutes les machines et de
des impressions. Utilisée sans paramètres, lpstat fournit pouvoir fonctionner sur presque n’importe quel terminal,
les informations sur les requêtes soumises par l’utilisateur. même le plus rudimentaire. L’annexe « résumé de l’utilisation
Les principaux paramètres optionnels sont (Cf. man de vi » donne un mode d’emploi de cet éditeur.
lpstat pour les autres) :
sed est le stream editor. Il utilise la même syntaxe que ed,
-o : imprime l’état des requêtes d’impression. liste est une mais ne travaille pas en mode interactif. Les fichiers édités ne
liste de nom d’imprimantes et d’identificateurs de requêtes sont pas modifiés : leur contenu est simplement utilisé pour
séparés par des virgules. La valeur all implique toutes les construire un flux sur la sortie standard. Il s’agit donc d’un
requêtes d’impression. filtre permettant de réaliser des opérations d’édition sur les
-t : imprime toutes les informations disponibles. résultats d’autres applications. Il est particulièrement adapté à
-u : imprime l’état des requêtes d’impression par utilisa- la modification automatique de textes à partir de scripts de
teur. liste est une liste de noms d’utilisateurs séparés par commandes.
des virgules ou le mot clef all. dtpad est un éditeur de texte qui n’est utilisable qu’au cours
cancel [ ident-requête… ] d’une session graphique. Il s’utilise plus avec la souris
annule les requêtes d’impression spécifiées. Les identifi- qu’avec le clavier (ce qui n’est pas toujours un avantage pour
cations de requêtes sont celles qui ont été attribuées lors aller vite). Il peut être activé directement à partir des menus
de leur soumission par la commande lp. de l’interface graphique et possède une aide en ligne relati-
a2ps43 [-P dest] [-1|2|4|8] [-t titre] [ fichier… ] … vement complète qui s’active par un bouton.
convertit des fichiers de texte en document PostScript. Enfin, xemacs est lui aussi un éditeur « graphique ». Son
Une page contient 64 lignes de 80 caractères. Par défaut, principal avantage est d’être intégré à l’environnement de
deux pages sont imprimées sur une feuille. Normalement programmation et de reconnaître la syntaxe du langage C.
a2ps s’adapte au type de fichier qui lui est fourni (et peu, Ceci lui permet d’offrir des facilités au niveau de
si on lui donne les options adéquates, faire du « pretty- l’indentation des programmes et de faire apparaître avec des
printing », c’est à dire adapter les polices de caractères au couleurs ou des polices différentes les variables, mots clefs,
contenu du fichier pour, par exemple, imprimer en italique chaînes de caractères ou commentaires du programme. C’est
les commentaires d’un programme… cet éditeur qui sera utilisé en travaux pratiques.
-P : dest est le nom de l’imprimante à laquelle envoyer le b) Comparaison de fichiers
résultat de la conversion. Si cette option est omise, le fi- cmp [ -l ] [ -s ] fichier1 fichier2
chier PostScript est envoyé sur la sortie standard. compare deux fichiers. cmp n’écrit rien s’ils sont identi-
-t : titre est le titre à donner au fichier. ques. S’ils sont différents, le numéro de la première ligne
-1, 2, 4 ou 8 : spécifie le nombre de pages imprimées sur contenant une différence est affiché, ainsi que la position
une feuille A4. La valeur par défaut est 2. (dans le fichier) du caractère différent. Si l’un des deux fi-
chiers est le début de l’autre, un message spécifique
l’indique. L’option –l provoque l’affichage de toutes les
différences. Au contraire, l’option –s interdit tout affi-
chage. Dans tous les cas, le code de retour donne aussi le
résultat de la comparaison : 0 les fichiers sont identiques ;
42
1 ils sont différents ; 2 ou plus dénote une erreur.
lp. L’une des seules commandes redéfinies par un alias dans le fichier
~/.cshrc : Quand l’utilisateur frappe lp c’est en fait lp –o nobanner qui est
exécutée pour éviter l’impression systématique d’une page d’en tête.
43
a2ps : cette commande dispose d’un manuel en ligne. On peut aussi obtenir
un aide mémoire des options par la commande : a2ps –help.
-c : écrit sur la sortie standard. Aucun fichier n’est modi- l’archivage de tous les fichiers et sous-répertoires qu’il
fié, aucun fichier d’extension .Z n’est créé. Le comporte- contient.
ment de zcat est identique à celui de uncompress –c. r : remplacement. Les fichiers indiqués sont placés à la fin
-f : force la compression des fichiers, même si cela ne fait du fichier tar (archive).
pas gagner de place ou si le fichier .Z correspondant existe u : update. Les fichiers indiqués sont ajoutés en fin
déjà. Lors de la décompression, ne demande pas de d’archive s’ils n’y figurent pas encore ou si la date de mo-
confirmation avant d’écraser un fichier existant. dification de la dernière version archivée est antérieure à
-v : verbeux. Écrit sur l’erreur standard des messages in- celle du fichier sur disque.
diquant le taux de compression de chaque fichier. t : liste le contenu de l’archive.
-b : bits est la longueur maximale du code utilisé (entre 9 x : extraction des fichiers de l’archive. S’il est fait réfé-
et 16 bits ; par défaut 16). réduire la longueur du code, en rence à un répertoire, son contenu est extrait de manière
général, dégrade le taux de compression. récursive. Les dates originales du fichier sont restituées. Si
uncompress [ -cfv ] [ fichier… ] aucun nom de fichier n’est donné, tous les fichiers de
permet la décompression et la reconstruction d’une série l’archive sont extraits.
de fichiers à partir de leurs formes compressées Les qualificatifs qui peuvent être appliqués (tous ne
d’extension .Z obtenues par la commande compress. Les s’appliquent pas à toutes les fonctions) :
options ont la même signification que pour compress. f : utilise l’argument fichier_tar comme nom de l’archive.
zcat [ fichier… ] Si f est omis, tar tente d’accéder au lecteur de bandes du
affiche sur la sortie standard la version décompressée d’un système. Si le nom de l’archive est ‘-’, alors tar écrit sur
fichier compressé par compress. zcat est l’équivalent de sa sortie standard ou lit sur son entrée standard, suivant ce
uncompress –c. qui est approprié.
gzip [ -cdfhlLnNrtvV19 ] [ -S suffixe ] [ fichier… ] h : suit les liens symboliques comme s’il s’agissait de fi-
tente de réduire la taille des fichiers référencés en les co- chiers ordinaires. Par défaut, tar ne suit pas les liens sym-
dant. Chaque fois que c’est possible, le fichier est rempla- boliques.
cé par un fichier de même nom auquel est rajouté m : remplace la date de modification des fichiers par leur
l’extension .gz. Si aucun fichier n’est spécifié, ou si l’un date d’extraction (valide seulement lors d’une extraction).
d’eux est -, l’entrée standard sera compressée sur la sortie p : restitue les permissions originales du fichier.
standard. Pour les options, on se reportera au résultat de la
commande gzip –help. A noter que le meilleur taux de v : verbeux.
compression est obtenu avec l’option –9 (par défaut on w : what. demande confirmation à l’utilisateur avant cha-
obtient un taux de compression un peu moins bon…). que archivage ou extraction.
gunzip [ -cfhlLnNrtvV ] [ -S suffixe ] [ fichier… ] Exemples d’utilisation :
est l’équivalent de gzip –d. gunzip prend une liste de fi- tar cvf [Link] .
chiers et remplace tous ceux dont le nom se termine en crée dans le répertoire courant une archive du répertoire
.gz, .z ou .Z par un fichier décompressé. Il reconnaît aussi courant nommée [Link].
les extensions .tgz et .taz comme des raccourcis de .[Link] tar tvf [Link]
et .tar.Z. Enfin, gunzip est capable de décompresser les liste le contenu de l’archive [Link].
fichiers créés par gzip, zip, compress et pack. La détec- gzcat [Link] | tar xvf -
tion du format d’entrée est automatique. extrait directement tous les fichiers de l’archive compres-
Pour les options, on se reportera au résultat de la com- sée [Link] (sans passer par la version non compressée
mande gunzip –help. [Link] : économise de la place disque).
gzcat [ -fhLV ] [ fichier… ] f) Outils divers
est l’équivalent de gunzip –c. touch [ -acm ] [ -r ref_file ] fichier…
e) Archivage de fichiers touch [ -acm ] [ -t time ] fichier…
touch [ -acm ] [ date_time ] fichier…
Les informations données ici correspondent à une utilisation
change les dates d’accès et de modification de chacun des
simplifiée des commandes d’archivage. Pour une utilisation
fichiers spécifiés. Le fichier est créé s’il n’existe pas. En
plus pointue, on se reportera au manuel.
l’absence d’options, touch utilise la date (et l’heure !)
tar c[fhvw ] [ fichier_tar ] fichier… courante. date_time est un nombre décimal de la forme
tar r[fhvw ] [ fichier_tar ] fichier… MMDDhhmm[YY]. Si YY est compris entre 69 et 99,
tar u[fhvw ] [ fichier_tar ] fichier… l’année correspondante est entre 1969 et 1999. Si YY est
tar t[fhv ] [ fichier_tar ] [ fichier…] compris entre 00 et 38, l’année correspondante est entre
tar x[fhmpvw ] [ fichier_tar ] [ fichier… ] 2000 et 2038.
permet de générer des archives de fichiers (à l’origine sur
-a : change seulement la date d’accès.
bande, d’où le nom « tape archive », mais aussi dans un
fichier). Immédiatement après tar apparaît une chaîne de -c : ne crée pas les fichiers qui n’existent pas.
caractères, appelée la clef, définissant la fonction (l’un des -m : change seulement la date de modification.
caractères c, r, u, t ou x) et des qualificatifs pour cette -r : prends les dates d’accès et de modification sur le fi-
commande. Viennent ensuite les arguments. Les fonctions chier ref_file.
disponibles sont : -t : utilise l’heure spécifiée. time est un nombre décimal de
c : création d’une nouvelle archive. Si le fichier tar existe, la forme : [[CC]YY]MMDDhhmm[.SS].
il est écrasé. l’archivage d’un répertoire implique
basename nom [ suffixe ] pondent aux valeurs suivantes de classe : digit chiffres
retire de nom le plus long préfixe se terminant par /, et le décimaux ; xdigit chiffres hexadécimaux ; cntrl carac-
suffixe donné en second argument s’il se trouve à la fin de tères de contrôle ; alpha lettres ; alnum caractères al-
cette référence. Cette opération est purement syntaxique et phanumériques ; print caractères imprimables ; upper
ne suppose pas que les répertoires et fichiers existent. lettres majuscules ; lower lettres minuscules.
dirname nom Un exemple :
extrait de l’argument, interprété comme une référence, la tr "[:upper:]" "[:lower:]"
composante répertoire la plus longue. Cette opération est réaffiche toutes les lignes frappées au clavier en convertis-
purement syntaxique. sant les majuscules en minuscules.
cal [ [ mois ] année ] 7. Développement de programmes C
affiche le calendrier correspondant au mois courant, ou à Nous présentons ici les grandes lignes des outils disponibles
une année (1 – 1999), ou à un mois (1 – 12) d’une année. pour la vérification, la compilation et le déboguage de pro-
factor [ nombre ] grammes écrits en C (la plupart de ces outils sont cependant
fournit la décomposition du nombre (ou de nombres lus utilisables dans d’autres langages). Une annexe contient une
sur l’entrée standard) s’il n’y a pas de paramètre) en fac- copie des manuels Unix concernant les commandes qui vont
teurs premiers. être évoquées ici.
comm [ -123 ] fichier1 fichier2 a) Compilation
Cet utilitaire affiche sur trois colonnes le résultat de la La compilation est réalisée par la commande cc. Il s’agit d’une
comparaison de deux fichiers supposés triés : la première commande de base enchaînant automatiquement l’appel des
colonne contient les lignes n’appartenant qu’au premier différents outils réalisant la traduction d’un programme source
fichier, la deuxième celles n’appartenant qu’au deuxième en un binaire exécutable. Il y a quatre étapes :
et la troisième les lignes communes. Il est possible
• la précompilation réalisée par le préprocesseur (cpp) qui
d’occulter l’affichage sur certaines colonnes en faisant
traite les directives de la forme #directive. Il peut s’agir de
suivre le caractère – de leur numéro. Si on remplace fi-
macro-définitions (#define), d’inclusion de fichiers (#in-
chier1 ou fichier2 par le caractère -, c’est l’entrée standard
clude) ou de compilation conditionnelle (#ifdef, …).
qui est utilisée.
Exemple d’utilisation. Supposons trois fichiers f1, f2 et f3 • la compilation proprement dite qui traduit chaque fonction
contenant des noms triés par ordre alphabétique. de chaque fichier source en langage d’assemblage (en op-
comm –23 f1 f2 | comm –23 – f3 imprimera tous timisant le code éventuellement).
les noms de f1 qui ne sont ni dans f2 ni dans f3. • l’assemblage qui consiste à traduire les fichiers assembleur
comm –12 f1 f2 | comm –12 – f3 imprimera tous en code binaire. On parle alors de fichiers objet.
les noms communs aux trois fichiers. • l’édition de liens qui rassemble les différents fichiers objet et
comm –12 f1 f2 | comm –23 – f3 imprimera tous extrait des bibliothèques les fonctions utilisées (en particu-
les noms communs à f1 et f2 qui ne sont pas dans f3. lier de la bibliothèque standard libc pour le langage C).
tee [ -ai ] [ fichier… ] Les noms de fichiers fournis en paramètres à la commande de
copie son entrée standard sur sa sortie standard. Au pas- compilation peuvent avoir différentes extensions (suffixes)
sage, les données sont écrites dans les fichiers spécifiés. qui indiquent à partir de quelle étape du processus décrit ci-
-a : ajoute les données à la fin des fichiers au lieu de les dessus ils doivent être traités :
écraser. • l’extension .c indique un fichier source à soumettre à tou-
-i : ignore les interruptions. tes les phases ;
tr [ -cds ] [ chaine1 ] [ chaine2 ] • l’extension .i indique que le fichier correspondant a été
copie l’entrée standard sur la sortie standard en substi- produit par le préprocesseur ;
tuant, ou en éliminant, certains caractères. Les options et • l’extension .s indique un fichier assembleur (produit par le
les arguments chaine1 et chaine2 contrôlent les substitu- compilateur) ;
tions. A chaque occurrence du i-ème caractère de chain1, • l’extension .o indique un fichier objet auquel ne sera appli-
est substitué le i-ème caractère de chaine2. quée que la phase d’édition de liens.
-c : complémente l’ensemble de caractères spécifié par • l’extension .a caractérise une archive44 constituée au
chaine1. moyen de l’utilitaire ar.
-d : supprime toutes les occurrences des caractères spéci- • l’extension .h n’est pas reconnue par le compilateur, mais
fiés dans chaine1. elle désigne conventionnellement un fichier destiné à être
-s : remplace les ensembles de caractères répétés par un inclus dans un source C par la directive #include <nom.h>.
seul caractère. Conventionnellement encore, un tel fichier ne contient pas
Les conventions suivantes sont applicables à l’écriture de de code, mais seulement des macro-définitions (#define) et
chaine1 et chaine2 (que l’on aura intérêt à enclore de guil- des déclarations de variables ou de fonctions (prototypes).
lemets simples). Chaque fichier source traité donne naissance à un fichier .o
• \ccc désigne le caractère dont le code ASCII est ccc (en construit sur le même nom de base. Le fichier objet généré
octal). n’est supprimé que dans le cas où la commande ne traite
• [c1-c2] définit l’intervalle des caractères entre c1 et c2. qu’un fichier et qu’il y a création d’un exécutable (c’est-à-
• [:classe:] permet de désigner un ensemble prédéfini de dire une édition de liens effective).
caractères. Les principaux ensembles prédéfinis corres-
44
archive : un fichier contenant plusieurs modules objet.
Un exemple : la commande de compilation les fonctions qu’elle appelle (ce qui n’était donc pas le cas
cc toto.c avec prof).
crée, à condition que le fichier toto.c existe et ne contienne La granularité des informations dont on dispose avec les deux
pas d’erreurs, un fichier [Link] exécutable. Pour créer un exé- utilitaires précédents est limitée à l’objet « fonction ». Si l’on
cutable de nom toto on utilisera la commande souhaite descendre un peu plus « bas », c’est à dire au niveau
cc –o toto toto.c de la ligne dans le fichier source, on peut compiler le pro-
b) vérification de syntaxe gramme avec l’option –xprofile=tcov (cc étant toujours le
Il est très rare d’écrire un programme sans erreur de syntaxe compilateur). Lors de l’exécution du programme, supposons
empêchant sa compilation. De plus, et pour des raisons à la que l’exécutable ait été nommé toto, un répertoire [Link]
fois historiques et d’efficacité, le compilateur ne localise pas sera créé. A l’intérieur, un fichier [Link] sera placé. Ce
toujours très précisément les erreurs qu’il détecte dans un fichier est destiné à être interprété par l’utilitaire tcov (on uti-
programme, ce qui rend leur correction parfois difficile (une lisera précisément la commande tcov –x toto source1.c
parenthèse ou un point virgule oubliés peuvent n’être détectés source2.c…où source1.c, source2.c etc. sont les fichiers sour-
qu’après plusieurs lignes de code…). L’utilitaire lint permet ces du programme toto). Celui-ci produira, pour chaque fi-
de vérifier la syntaxe d’un programme avant sa compilation. chier source indiqué un fichier de même nom auquel aura été
Il donne, en général, des messages d’erreur plus clairs que rajoutée l’extension .tcov. Dans ce fichier, chaque segment de
ceux de cc. Avec les options adéquates, il peut aussi recher- code (ou chaque ligne si l’option –a de tcov est utilisée) sera
cher des erreurs telles que l’utilisation de variables non initia- préfixé par le nombre de fois où il aura été exécuté. Ces sta-
lisées ou des portions de codes non atteignables. tistiques s’étendent sur plusieurs exécutions du programme
(pour remettre le compteur à zéro, il faut détruire le fichier
En bref, il est vivement conseillé d’utiliser lint pour vérifier
[Link]). Attention, tcov ne fournit aucune indication sur
la syntaxe d’un programme source et de n’utiliser cc que lors-
les temps d’exécution.
que lint ne signale plus d’erreur.
e) Gros projets…
c) Mise en forme des programmes
Dans le cas de gros programmes, formés de plusieurs fichiers
L’utilitaire indent permet de mettre en forme un fichier
sources, il est rarement nécessaire, lors d’une modification
source C, de façon à faire apparaître « visuellement » sa struc-
d’une partie du code, de recompiler l’ensemble des fichiers
ture. Il est très fortement conseillé de soumettre ses program-
source (cela peut demander plusieurs heures sur de très gros
mes à cet utilitaire avant de les imprimer… L’annexe
programmes) Il suffit, en fait de rechercher les fichiers sour-
« manuels » décrit toutes les options de mise en forme dispo-
ces qui sont plus récents que l’exécutable et se contenter de
nibles sur cette commande.
recompiler ceux-là. L’utilitaire make automatise cette tâche.
d) Analyse des programmes Il est décrit en détails dans l’annexe « Manuels ».
L’utilitaire cxref permet de construire, à partir d’un ensemble f) Déboguage d’un programme
de fichiers source C destinés à constituer un même pro-
La commande ctrace construit, à partir d’un source C, un
gramme, une table des références croisées indiquant pour
nouveau source, affiché sur la sortie standard, qui, une fois
chaque variable ou fonction, sous la forme de couples (nom
compilé, donnera un programme affichant des informations
de fichier, numéro de ligne), l’emplacement de la déclaration
sur son exécution (lignes exécutées, valeurs des variables,
pour une variable, celui de la définition pour une fonction, et
etc.). Pour les programmes simples, cet utilitaire permet
les emplacements d’affectation ou d’utilisation.
d’éviter le recours au débogueur.
La commande cflow fournit un graphe des appels des fonc-
debugger est un utilitaire qui permet de contrôler l’exécution
tions dans l’ensemble de fichiers source C qu’on lui a fourni.
d’un programme, d’y placer des points d’arrêts, de le faire exé-
Lorsque l’argument optionnel –p de la commande cc est utili- cuter pas par pas, de visualiser les données qu’il manipule, etc.
sé, l’exécution du programme commence et se termine par un Il s’agit d’une interface « graphique » pour l’utilitaire dbx. On
appel à une fonction de monitoring (la fonction standard mo- trouvera dans l’annexe « Manuels » les options de la com-
nitor) qui permet d’obtenir des statistiques sur les appels de mande debugger. La section suivante décrit l’utilisation de
fonctions réalisés pendant l’exécution du programme. Plus dbx. Sous debugger, la plupart de ces commandes sont rem-
précisément, à l’exécution du programme, un fichier de statis- placées par des boutons portant le même nom.
tiques de nom [Link] est créé. Les performances d’un pro-
gramme compilé avec cette option sont évidemment moins g) Utilisation de dbx
bonnes que celles de son équivalent sans cette option. La (1) Utilisation
commande prof permet d’interpréter le contenu de ce fichier Les commandes essentielles à connaître sont : run pour exé-
en s’appuyant sur la table des symboles de l’exécutable. Le cuter le programme à deboguer ; where, pour obtenir une
résultat, fourni sur la sortie standard, est un tableau donnant, image de la pile d’appel des sous-programmes, avec indica-
pour chaque fonction, le temps passé à exécuter cette fonction tion des numéros de ligne ; print, pour visualiser le contenu
et la proportion correspondante du temps total d’exécution, le des variables ; et stop pour placer des points d’arrêt. Ce pro-
nombre d’appels de la fonction et enfin la durée moyenne gramme sera utilisé depuis son interface graphique debugger.
d’un appel. (2) Expressions
Si l’on utilise l’option –xpg de cc, on enregistrera, à la fin de Dans dbx, une expression est une combinaison de variables,
l’exécution du programme, des informations encore plus dé- constantes, appels de procédures et opérateurs. Les variables
taillées dans le fichier [Link]. Ces informations pourront peuvent être des variables du programme en cours de debo-
alors être exploitées par l’utilitaire gprof. L’avantage de guage ou des variables propres à dbx dont les noms commen-
gprof sur prof vient de ce qu’il est capable d’incorporer, dans cent par $. Une constante hexadécimale doit commencer par
le temps d’exécution d’un fonction le temps passé à exécuter
’0x’ et une constante octale par ’0’. Les constantes de type ou affiche la valeur de chacune des expressions chaque
caractère doivent être placées entre guillemets simples. Une fois que l’exécution s’arrête.
expression ne peut pas contenir de chaîne, de structure ou de undisplay [ expression [, expression ...]]
tableau. Cependant des éléments de structures ou de tableaux Annule l’affichage de chaque expression à chaque fois
peuvent être utilisés. que l’exécution s’arrête. Si expression est une constante, il
(3) Opérateurs s’agit d’un numéro d’expression qui est affiché par la
Ce sont les mêmes qu’en langage C. commande display sans arguments.
+ - * / div % whatis identificateur
Addition, soustraction, multiplication, division, division whatis type
entière et modulo. dbx a deux opérateurs de division : ’/’ Imprime la déclaration de l’identificateur ou du type.
dont le résultat est toujours un réel et div qui donne tou- which identificateur
jours un résultat entier. Imprime le nom complet (‘fichier‘fonction‘nom) de
<< >> & | ~ l’identificateur.
Décalage à gauche, décalage à droite, ET bit-à-bit, OU whereis identificateur
bit-à-bit, et complément bit-à-bit. Imprime le nom complet de tous les symboles corres-
& * pondant à identificateur.
Opérateurs ’Adresse de’ et ’Contenu de’. assign variable = expression
< > <= >= == != ! set variable = expression
Inférieur, supérieur, inférieur ou égal, supérieur ou égal, Assigne la valeur de l’expression à la variable. Il n’y a pas
égal, différent, et négation. de conversion pour des opérandes de types différents.
&& || dump [ fonction ]
ET logique, OU logique Affiche les noms et les valeurs de toutes les variables lo-
sizeof cales et paramètres de la fonction courante ou de celle qui
Taille d’une variable ou d’un type est spécifiée.
(type) expression (7) Placer des point d’arrêt
forçage de type (cast). stop at lignesource [ if condition ]
. -> stop in fonction [ if condition ]
Référence à un champ d’une structure, et référence à un stop variable [ if condition ]
champ d’une structure pointée. stop if condition
La précédence et l’associativité des opérateurs est la même Arrête l’exécution quand la lignesource est atteinte, la
qu’en C. Les parenthèses peuvent être utilisées pour regrou- fonction est appelée, la variable est changée, ou quand la
per des termes. condition devient vraie.
(4) Règles de visibilité when in fonction { commande ; [ commande ; ... ] }
when at lignesource { commande ; [ commande ; ... ] }
dbx résout les conflits de visibilité en considérant une fonc- when condition { commande ; [ commande ; ... ] }
tion et un fichier courants. Ces valeurs sont mises à jour au fil Exécute les commandes dbx indiquées quand la fonction
de l’exécution du programme. L’utilisateur peut aussi les est appelée, la ligne atteinte, ou la condition vraie.
changer explicitement en utilisant les commandes file et func.
Quand la fonction courante est changée, le fichier courant est status [ > nomfichier ]
modifié en conséquence. L’inverse n’est pas vrai. Affiche les trace, stop et when actifs, ainsi que leurs nu-
méros de commande associés.
(5) Liste des procédures actives
delete all
where [n] delete numcmd [ [,] numcmd ... ]
Liste toutes, ou les n premières, fonctions actives de la Supprime tous les trace, stop ou when actifs si all est
pile. spécifié. Si des numéros de commande (numcmd) sont
up [n] spécifiés, seules les commandes ainsi indiquées sont dé-
Remonte (vers le pgm principal) de n niveaux dans la pile. truites (Cf. status).
S’il est omis, n est pris égal à un. clear [ lignesource ]
down [n] Efface tous les points d’arrêt au point d’arrêt courant si
Descend de n niveaux dans la pile. S’il est omis, n est pris aucun argument n’est donné, à la ligne indiquée sinon.
égal à un. (8) Exécuter et tracer un programme
(6) Manipulation de données [ctrl-C]
Des variables d’une autre fonction ou procédure, avec le Interruption. Arrête le programme en cours de deboguage
même nom qu’une variable de la fonction courante peuvent et retourne le contrôle à dbx.
être référencées de la sorte : run [ args ] [ < infile ] [ > outfile | >> outfile ]
[‘fichiersource‘]fonction‘variable Démarre l’exécution du programme en cours de debo-
print expression [, expression ...] guage. Si aucun argument n’est spécifié, dbx utilise les
Imprime la valeur de chaque expression. Ceci peut impli- arguments de l’appel précédent. args est la liste
quer des appels de fonctions. d’arguments passée au programme comme s’ils étaient
display [ expression [, expression ...]] donnés sur la ligne de commande. L’opérateur <, > ou >>
Imprime une liste des expressions actuellement affichées redirige l’entrée, la sortie ou ajoute la sortie à la fin d’un
fichier. cd [ répertoire ]
rerun [ args ] [ < infile ] [ > outfile | >> outfile ] Change le répertoire courant pour dbx. Si aucun argument
identique à la commande run à ceci près que, si args est n’est donné, change pour le répertoire de login.
omis, aucun argument n’est passé au programme. pwd
cont [ at lignesource ] Imprime le nom du répertoire courant pour dbx.
Continue l’exécution là où elle avait été arrêtée (par un /exp-reg[/]
point d’arrêt ou un ^C). Lignesource indique le point d’où Recherche vers le bas, dans le fichier courant, une chaîne
doit repartir l’exécution. de caractères correspondant à l’expression régulière indi-
trace [ in fonction ] [ if condition ] quée. La recherche commence immédiatement après la li-
trace lignesource [ if condition ] gne courante et continue, si nécessaire, jusqu’à la fin du
trace fonction [ if condition ] fichier. La ligne trouvée devient la ligne courante.
trace expression at lignesource [ if condition ] ?exp-reg[?]
trace variable [ in fonction ] [ if condition ] Recherche une chaîne de caractères correspondant à
Affiche une trace du programme. Si aucun argument n’est l’expression régulière en remontant vers le début du fi-
spécifié, chaque ligne est affichée avant d’être exécutée. chier.
Le mode trace est annulé quand la fonction ou la procé- (10) Commandes diverses
dure se termine.
sh [ commande ]
• in fonction active le mode trace pour chaque ligne de Passe la commande au shell pour exécution. La variable
fonction. d’environnement SHELL détermine le shell invoqué.
• lignesource active le mode trace pour cette ligne. Les li-
alias nom séquence
gnes d’un autre fichier sont indiquées sous la forme : fi-
Crée une nouvelle commande. dbx répondra à la com-
chier:n.
mande nom comme si toute la séquence indiquée avait été
• fonction trace l’appel et le retour de la fonction frappée au clavier. Si la séquence contient des caractères
• expression at lignesource affiche la valeur de spéciaux, elle doit être placée entre guillemets simples ou
l’expression chaque fois que la ligne est exécutée. doubles. La séquence peut aussi contenir une référence à
• variable affiche le nom et la valeur de la variable à cha- un autre alias.
que fois qu’elle change.
help [ commande ]
step [n] Affiche une liste des commandes de dbx ou une brève ex-
Exécute n lignes source. S’il est omis, n est pris égal à un. plication sur la commande.
Step descend dans les fonctions.
setenv nom chaîne
next [n] Assigne la chaîne à la variable d’environnement nom.
Exécute n lignes source. S’il est omis, n est pris égal à un.
source fichier
Next considère les fonctions comme une instruction uni-
Lit et exécute les commandes dbx contenues dans fichier.
que.
Utile quand le fichier a été créé en redirigeant le résultat
call fonction(parametres) d’une commande status (pour retrouver des points
Exécute la fonction indiquée. Les paramètres sont passés d’arrêt...).
conformément aux règles du langage utilisé pour écrire la
quit
fonction.
quitte dbx.
(9) Fichiers sources et répertoires
dbxenv
edit [ fichier ] dbxenv case sensitive | insensitive
edit [ fonction ] dbxenv speed seconds
Edite le fichier source courant, le fichier indiqué, ou le fi- dbxenv stringlen num
chier qui contient la fonction. Affiche les attributs de dbx ou assigne l’attribut indiqué.
file [ fichier ] case indique si les majuscules et minuscules doivent être
Imprime le nom du fichier courant ou en change. traitées comme des valeurs différentes. Le défaut est sen-
func [ fonction ] Imprime le nom de la fonction courante ou sitive.
en change. Le domaine de visibilité s’en trouve aussi speed assigne l’intervalle entre deux exécutions en mode
changé. trace. Le défaut est 0,5 secondes.
list [ lignedepart [ , lignefin ]] stringlen indique le nombre maximum de caractères im-
list fonction primés pour une variable du type char * dans un pro-
Affiche les lignes du fichier courant en commençant à li- gramme C. Le défaut est 512.
gnedepart et en s’arrêtant à lignefin. Si lignefin est omis, debug [ execfile [ corefile | pid ] ]
affiche seulement lignedepart. Si aucun argument n’est Sans arguments, imprime le nom du programme courant.
donné, affiche les 10 prochaines lignes. Si le nom d’une Avec des arguments, relance dbx et re-lit le module spéci-
procédure ou fonction est donné, imprime cinq lignes fié. Optionnellement peut deboguer execfile en utilisant un
avant et cinq lignes après la première ligne de la fonction fichier core ou le process pid.
indiquée.
kill
use [ répertoire ] Arrête le deboguage et l’exécution du programme courant,
Initialise la liste de répertoires où chercher les fichiers mais reste prêt à en deboguer un autre.
source.