0% ont trouvé ce document utile (0 vote)
9 vues23 pages

Usage Unix

Transféré par

abdel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
9 vues23 pages

Usage Unix

Transféré par

abdel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER

DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

Manuel d’utilisation d’Unix


I - L’outil informatique en MEA Avant de quitter la salle, on n’oubliera pas :
• de fermer correctement la session X11 (Xwin)
1. Infrastructure
• de clore la session Windows NT par la commande Arrêter
Deux salles d’informatique sont mises à la disposition des du menu Démarrer, puis en précisant Fermer toutes les
étudiants du département MEA1. Ces deux salles sont inter- applications et ouvrir une session sous un nom différent.
connectées par un réseau de fibres optiques, ce qui permet de
b) Unix (Solaris 2.8)
disposer des mêmes ressources (en ce qui concerne Unix tout
au moins) quelle que soit la salle utilisée. Les stations de travail de la salle CAO1 fonctionnent sous
Solaris 2.8. Il s’agit d’un avatar4 du système Unix que nous
• La salle CAO1, à l’extrémité Est du bâtiment 14, est équi-
présenterons plus en détail dans la suite de ce document.
pée de quatorze stations de travail Sun (système
d’exploitation Solaris 2.8). Elle est accessible en libre ser- Il est possible d’ouvrir deux sortes de session sous Unix : une
vice2, mais reste réservée aux étudiants de troisième année session alphanumérique ou une session graphique (X11).
jusqu’au mois de février. La session alphanumérique peut être ouverte depuis :
• La salle CAO3, située dans la moitié Ouest du bâtiment 12 • une fenêtre xterm d’une session graphique, par la com-
est accessible par le côté Nord du bâtiment 12. Elle est mande telnet ou rlogin ; une telle opération permet alors
équipée de micro-ordinateurs PC (système d’exploitation d’ouvrir une session sur la machine « b », alors qu’on uti-
Windows NT 4.0). Ces machines ont été configurées de fa- lise les ressources d’affichage de la machine « a ».
çon à pouvoir être utilisées en terminaux X pour toutes les • une application telnet sur un PC (Démarrer→Exécuter…
stations Unix du département. On ne peut accéder à cette telnet)
salle qu’en présence d’un enseignant. Dans tous les cas, il sera nécessaire à l’utilisateur de
Une imprimante laser PostScript est disponible dans chaque s’identifier en répondant aux deux questions :
salle. Les noms de ces imprimantes sont tout simplement lw1 • Login : tartenpi5
et lw3. Leur numéro indiquant leur localisation. On se repor- • Password :6
tera à la section II -5.e) Impression de documents, page 13
Chacune de ces réponses doit être terminée par le caractère
pour leur utilisation.
« Return ». En retour, le système doit vous afficher un certain
2. Utilisation des machines nombre d’informations (comme les noms des utilisateurs
a) Windows NT connectés sur la machine), puis une invite (prompt) vous in-
Les PC de la salle CAO3 utilisent Windows NT comme sys- diquant qu’un interpréteur de commandes (shell) est prêt à
tème d’exploitation. Cet OS souffre d’un défaut congénital : il exécuter vos ordres.
est produit par Microsoft ! Il s’agit cependant du seul OS de Une session X11 (graphique) peut être ouverte depuis :
la famille Windows (avec aujourd’hui Windows 2000-Pro) • L’écran d’une station de travail (salle CAO1),
qui offre un niveau de sécurité raisonnable en identifiant et en • L’application Xwin sur un PC.
cloisonnant les utilisateurs3. Dans chacun de ces cas, il est possible de choisir la machine
Pour ouvrir une session sous Windows NT, il faut presser sur laquelle se fera la connexion. Sur une station de travail, ce
simultanément les touches Ctrl, Alt et Suppr, puis fournir choix se fait à partir d’un menu sur la bannière de login ; sur
son nom d’utilisateur et son mot de passe dans la fenêtre qui un PC on utilise la commande Sessions→XDMCP-broadcast
apparaît. On se retrouve alors dans un environnement bien accessible depuis le menu associé à l’en tête de la fenêtre
connu que nous ne détaillerons pas ici. Xwin32 (clicker, avec le bouton de droite, dans la bande
L’application qui permet d’utiliser le PC en terminal X se bleue au sommet de la fenêtre).
nomme Xwin. Celle qui permet de transférer des fichiers en- Dans tous les cas, on finit par se retrouver avec une fenêtre
tre le « monde unix » et le PC s’appelle WS_FTP95LE. Tou- indiquant « Entrez votre nom d’utilisateur ». On répond à
tes deux sont disponibles à partir du bouton Démarrer en bas cette question de la même façon que pour une connexion al-
à gauche de l’écran. phanumérique. Après la frappe du password, l’écran se cou-
vre d’un certain nombre de fenêtres comme le montre la fi-
1
gure suivante. Il s’agit ici de l’environnement CDE pour
En faisant abstraction des machines qui peuvent être disponibles dans telle
ou telle salle de travaux pratiques, ainsi que des machines disponibles, en
Common Desktop Environment. Cet environnement, commun
libre service, dans les salles informatiques du bâtiment ISIM. Pour ces der-
4
nières, les conditions d’utilisation sont similaires à celles de la salle CAO3. Avatar : n.m. (1800 : sanscr. avâtara « descente »). 1° Dans la religion
2
Libre service : la portes de la salle CAO1 est équipée d’une gâche électri- hindoue, chacune des incarnations de Vichnou. 2° Fig. (1844) Métamor-
que associée à un lecteur de badge du même type que celui des salles infor- phose, transformation. 3° (XXe) Par contresens. Mésaventure, malheur.
5
matiques du bâtiment ISIM. Le badge individuel, personnel et incessible, Le nom d’utilisateur (Username, ou login name) est fixé par
remis à chaque étudiant en début de première année permet donc d’accéder l’administrateur du système. Il possède au maximum 8 caractères et doit être
aussi à la salle CAO1. Cet accès n’est possible que de 7h00 à 21h00 en de- tapé en lettres minuscules.
6
hors des week-end et vacances scolaires. Il est bien évident que les activités Le mot de passe (Password) ne s’affiche pas lorsque l’utilisateur le frappe
d’enseignement sont prioritaires sur le libre service. lors de la connexion. Il est initialement fixé par l’administrateur du système
3
Utilisateurs et Windows NT. Il importe de noter que, bien que multitâches et comprend entre six et huit caractères. Pour des raisons de sécurité des
et offrant une identification pour les utilisateurs, Windows NT, contrairement systèmes informatiques, ce mot de passe est strictement personnel. Chacun
à unix, n’est pas un système multi-utilisateurs. En effet, un seul utilisateur peut le modifier à l’aide de la commande passwd. Un certain nombre de rè-
peut disposer, à un moment donné, des ressources de la machine. Pour qu’un gles doivent être respectées pour le choix d’un mot de passe : il ne doit pas
autre utilisateur puisse y accéder, il faut clore la session du premier et en s’agir d’un mot du dictionnaire, ni d’un nom propre, ni d’un prénom. La
ouvrir ensuite une autre… Aujourd’hui, ces restrictions commencent à dispa- meilleure façon de respecter ces règles consiste a mélanger dans le mot des
raître avec Windows 2000, mais c’est une autre histoire… chiffres, des lettres majuscules, minuscules et des symboles.

© Guy Cathébras - 1/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

à 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.

© Guy Cathébras - 2/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 3/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

gramme qu’il est en train d’exécuter, de l’ensemble des don- a) Utilisation


nées que ce programme manipule et d’un ensemble Initialement, le shell inscrit sur l’écran du terminal un mes-
d’informations, appelé bloc de contrôle du processus15. sage d’invite (prompt) indiquant qu’il est prêt à accepter des
Toutes les activités dans le système, qu’elles correspondent à commandes.
des demandes explicites d’utilisateurs ou qu’elles visent sim- L’utilisateur frappe, en vue de son exécution, le texte d’une
plement à gérer les ressources, sont exécutées dans le commande sur le clavier de son terminal. Elle doit être suivie
contexte d’un processus. Ainsi, l’un des rôles du système est par un caractère marquant la fin de la ligne : sous Unix, le
de permettre à tous les processus d’avancer dans leur exécu- caractère standard de fin de ligne est linefeed [ctrl-J]19. Ce-
tion. Un module du noyau, appelé ordonnanceur, (scheduler) pendant, sauf situation particulière, la frappe du caractère re-
est chargé d’allouer, pour des tranches de temps limitées, le turn ([←┘] ou [ctrl-M]) est équivalente.
(ou les) processeur(s) aux différents processus. Une commande est formée de son nom proprement dit, suivi
La création d’un processus est réalisée par duplication pure et éventuellement d’une ou plusieurs chaînes de caractères cons-
simple de celui qui le crée. Il s’ensuit que le processus ainsi tituant ses arguments20. Ces différentes chaînes de caractères
créé hérite de toutes les caractéristiques16 de son père, y com- sont séparées les unes des autres par au moins un caractère
pris le programme qu’il est en train d’exécuter ! Ce n’est que d’espacement ou de tabulation. Les arguments de la com-
dans un deuxième temps que le processus fils charge le pro- mande fournissent des informations supplémentaires. Il peut
gramme qu’il doit exécuter. On parle alors de “recouvre- s’agir d’options, permettant de modifier le comportement de
ment”. la commande21, ou bien d’arguments auxquels la commande
Tout processus qui se termine possède une valeur appelée doit être appliquée (il peut s’agir de noms d’utilisateurs, de
code de retour17 (exit status) à laquelle son père peut accéder noms de fichiers ou de numéros de processus par exemple).
n’importe quand après que cette terminaison ait eu lieu. Après avoir lu la ligne, le shell l’analyse. S’il s’agit d’une
Parmi les fichiers logiques que peut manipuler un processus commande interne, elle est exécutée directement. Dans le cas
au cours de son existence, il en est trois de privilégiés : d’une commande externe22, le shell procède à la création d’un
l’entrée standard (standard input), la sortie standard (stan- nouveau processus chargé de son exécution, puis attend23 la
dard output), et la sortie d’erreur standard18 (standard er- fin de celle-ci. Il émet alors un prompt et reprend son cycle de
ror output). A la création d’un processus interactif, ces fi- lecture/analyse d’une nouvelle commande.
chiers logiques sont associés au terminal. Il est cependant b) Exemple de session
possible, lors de l’exécution d’une commande, d’associer (on
Une session commence par l’opération de connexion :
dit rediriger) un fichier ordinaire à l’entrée ou à l’une des sor- login: cathebra24
ties du processus. Il est même possible de connecter l’une des Password:
sorties d’un processus à l’entrée d’un autre. On arrive ainsi à Last login: Mon Apr 27 [Link] from :0
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
composer des applications en vue de réaliser des tâches rela- La loi du 5 janvier 1988 (loi Godfrain) punit d'emprisonnement ou/et d'amendes
tivement complexes. ceux qui auront tente d'acceder illicitement aux informations ou d'entraver
le bon fonctionnement de systemes informatiques.
4. Le turbo-c-shell (tcsh) You have mail.
mar(2) 25 août(08) 1998 (237ième jour de l'année) [Link]
Le shell est la partie visible d’Unix. En effet, il s’agit du pro- Login Name TTY Idle When Where
cessus qui interprète les commandes de l’utilisateur. Il existe cathebra CATHEBRAS Guy pts/2 Tue 10:46 [Link]
cathebra-{22}-measn6:~ >
deux grandes familles de shells disponibles sur Unix : les
Bourne-Shell (sh, bash, ksh), dérivés du langage de com- On a montré ici le cas d’une session alphanumérique. Dans le
mande originel d’Unix, et les C-Shells (csh, tcsh), apparus cas d’une session graphique, seule la dernière ligne apparaîtra
avec les distribution de Berkeley. Pour des raisons dans la fenêtre terminal. Cette dernière ligne montre le
d’habitudes d’utilisation, c’est le turbo-C-Shell qui est installé prompt du shell. Par défaut, il s’agit simplement du caractère
sur les machines du département MEA et que nous allons pré- %. Ici, ce prompt est utilisé pour maintenir sous les yeux de
senter ici d’une manière très succincte. Les utilisateurs qui l’utilisateur : son username, le numéro de la commande25, le
souhaiteraient encore mieux exploiter les fonctionnalités du
tc-shell sont invités à lire les manuels de csh et tcsh. Dans ce
qui suit, nous utiliserons tcsh pour désigner le tc-shell. 19
Désignation des touches : un mot en gras placé entre crochets désigne une
des touches du clavier. La notation [ctrl-X] indique qu’il faut maintenir la
touche [Ctrl], en général placée en bas à gauche du clavier, enfoncée pendant
que l’on presse la touche [X].
15 20
Bloc de contrôle : on y trouve en particulier le contexte d’exécution, Forme d’une commande : la structure décrite ici est celle d’une com-
c’est-à-dire l’ensemble des valeurs des registres du processeur correspondant mande simple. Voir en annexe la structure lexicale et les notions de com-
à l’état d’avancement de l’exécution, la pile d’exécution, les liens avec le mande simple, pipeline et séquence.
21
système de gestion de fichiers et les utilisateurs Options : Ces paramètres peuvent être isolés ou regroupés. Dans tous les
16
Caractéristiques d’un processus : parmi celles-ci, on peut citer : son cas, leur premier caractère est -.
22
identification (pid),les identifications de son processus père (ppid), de son Commande interne/externe : par définition, une commande interne (built-
utilisateur propriétaire (uid) et de son groupe propriétaire (gid), éventuelle- in) est directement interprétée par le shell. A toute commande externe corres-
ment son terminal d’attachement (tty), etc. pond un fichier contenant les instructions permettant de la réaliser.
17 23
Code de retour : De manière conventionnelle, un code de retour nul reflète Attente de la fin d’une commande : il est possible, en terminant la com-
un comportement normal du processus et un code de retour non nul corres- mande par le signe &, de demander au shell de reprendre l’acquisition d’une
pond à la détection par le processus d’une situation anormale (en cours nouvelle commande sans attendre la fin de l’exécution de la précédente (exé-
d’exécution ou à la terminaison). Le code de retour d’un processus lancé cution en tâche de fond). Il est aussi possible de frapper de nouvelles com-
depuis un shell est en général disponible dans la variable status immédiate- mandes par anticipation (pendant que le shell traite la précédente).
24
ment après la fin de son exécution. Exemples : dans tous les exemples à venir, les caractères frappées par
18
Sortie d’erreur standard : comme son nom l’indique, c’est sur cette sortie l’utilisateur seront en gras.
25
que sont envoyés en priorité les messages d’erreur, diagnostics ou traces de Numéro de commande : la section traitant de l’historique des commandes
l’exécution du programme. précisera comment ce numéro peut être exploité.

© Guy Cathébras - 4/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 5/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 6/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

bench class dev mbox new cathebra-{35}-measn6:~ > echo .[a-z]*32


cathebra-{24}-measn6:~/test > more ch[TAB] .ab_library .acrorc .artist_states .cdsenv .cdsinit_personal .cdsplotinit
cathebra-{24}-measn6:~/test > more chaos[return] .cshrc .desksetdefaults .dt .dtprofile .emacs .emacs_cathebra .exrc .fm
contenu du fichier chaos… .forward .history .libmgr .libsel .login .[Link] .[Link]
cathebra-{25}-measn6:~/test > more D[TAB] .netscape .newsrc-news .openwin-init .openwin-menu .openwin-menu-programs
[Link] [Link] .rhosts .simwindowrc .solregis .[Link] .wastebasket .weblink
cathebra-{25}-measn6:~/test > more DSC.T[TAB] cathebra-{36}-measn6:~ > echo .[^.]*
cathebra-{25}-measn6:~/test > more [Link][return] .#[Link] .@desktop .ab_library .acrorc .artist_states .cdsenv
contenu du fichier [Link]… .cdsinit_personal .cdsplotinit .cshrc .CSHRC_spw .desksetdefaults .dt
cathebra-{26}-measn6:~ > more /u[TAB] .dtprofile .emacs .emacs_cathebra .exrc .[Link] .history .libmgr
cathebra-{26}-measn6:~ > more /usr/[TAB] .libsel .login .[Link] .[Link] .netscape .newsrc-news
../ ccs/ kernel/ news@ sadm/ ucbinclude/ .openwin-init .openwin-menu .openwin-menu-programs .OWdefaults .rhosts
./ demo/ kvm/ oasys/ sbin/ ucblib/ .simwindowrc .solregis .[Link] .wastebasket .weblink .Xauthority
.CPR dict@ lib/ old/ share/ usr/ .Xdefaults .[Link]
4lib/ dt/ local/ openwin/ snadm/ vmsys/ cathebra-{37}-measn6:~ > echo .??*
5bin@ games/ lost+found/ platform/ spool@ X11R6.1@ .#[Link] .@desktop .ab_library .acrorc .artist_states .cdsenv
adm@ include/ mail@ preserve@ src@ X@ .cdsinit_personal .cdsplotinit .cshrc .CSHRC_spw .desksetdefaults .dt
aset/ java1.1/ man@ proc/ tmp@ xpg4/ .dtprofile .emacs .emacs_cathebra .exrc .[Link] .history .libmgr
bin/ java@ net/ pub@ ucb/ .libsel .login .[Link] .[Link] .netscape .newsrc-news
cathebra-{26}-measn6:~ > more /usr/de[TAB] .openwin-init .openwin-menu .openwin-menu-programs .OWdefaults .rhosts
cathebra-{26}-measn6:~ > more /usr/demo/[TAB] .simwindowrc .solregis .[Link] .wastebasket .weblink .Xauthority
../ BUTTONBOX/ ELF/ JAVA@ link_audit/ .Xdefaults .[Link]
./ DIALBOX/ JAVA1.1/ librtld_db/ SOUND/ cathebra-{38}-measn6:~ > mach_mea
cathebra-{26}-measn6:~ > more /usr/demo/E[TAB] localhost
cathebra-{26}-measn6:~ > more /usr/demo/ELF/[TAB] [Link]
../ ./ acom.c dcom.c Makefile pcom.c README [Link]
tpcom.c [Link]
cathebra-{26}-measn6:~ > more /usr/demo/ELF/R[TAB] [Link]
cathebra-{26}-measn6:~ > more /usr/demo/ELF/README[return] [Link]
contenu du fichier README… [Link]
[Link]
Le complément automatique fonctionne aussi avec les noms [Link]
d’utilisateur, les commandes ou les variables. La commande cp [Link]
–R permet de copier toute une arborescence de répertoires. [Link]
cathebra-{27}-measn6:~ > cp -R ~rou[TAB] [Link]
rousselo rouvier rouzeyre [Link]
cathebra-{27}-measn6:~ > cp -R ~rouzeyre/A[TAB] [Link]
cathebra-{27}-measn6:~ > cp -R ~rouzeyre/ARBRE/ T[TAB] [Link]
Test/ TPC/ TpsElec/ [Link] TRAIN/ [Link]
cathebra-{27}-measn6:~ > cp -R ~rouzeyre/ARBRE TPC/[TAB] cathebra-{39}-measn6:~ > where mach_mea
/U/cathebras/bin/mach_mea
../ ./ [Link]* VarEtFonct.c cathebra-{40}-measn6:~ > which mach_mea
cathebra-{27}-measn6:~ > cp -R ~rouzeyre/ARBRE TPC/ARBRE[return]
cathebra-{28}-measn6:~ > cd TPC/ARBRE /U/cathebras/bin/mach_mea
cathebra-{41}-measn6:~ > more `which mach_mea`33
cathebra-{29}-measn6:~/TPC/ARBRE > da[TAB]
daps [Link] date #! /bin/tcsh
cathebra-{30}-measn6:~/TPC/ARBRE > date[return] # script affichant toutes les suns du département
mercredi, 26 août 1998, [Link] MET DST foreach machine (`ypcat hosts | awk '/measn/ {print $2}' | sort -u`)
cathebra-{31}-measn6:~/TPC/ARBRE > set local = /usr/local ping $machine 2 >> /dev/null
cathebra-{32}-measn6:~/TPC/ARBRE > echo $lo[TAB] if ($status == 0) echo $machine
local loginsh end
cathebra-{32}-measn6:~/TPC/ARBRE > echo $loc[TAB] cathebra-{42}-measn6:~ > which which
cathebra-{32}-measn6:~/TPC/ARBRE > echo $local/[TAB] which: shell built-in command.
cathebra-{43}-measn6:~ > where which
../ bin@ flexlm@ libexec@ share/
./ etc@ lib@ man@ which is a shell built-in
cathebra-{32}-measn6:~/TPC/ARBRE > echo $local/[return] /bin/which
cathebra-{44}-measn6:~ > where where
/usr/local/
cathebra-{33}-measn6:~/TPC/ARBRE > echo $local[ctrl-X]$ where is a shell built-in
cathebra-{45}-measn6:~ > which mail
cathebra-{33}-measn6:~/TPC/ARBRE > echo /usr/local[ctrl-U]
cathebra-{33}-measn6:~/TPC/ARBRE > ls /usr/ucb/mail
cathebra-{46}-measn6:~ > where mail
#exemple1.c# exemple2.c lecture1.c sortie2.c
break_c.c exemple3.c lecture2.c switch_c.c /usr/ucb/mail
break_c.[Link] exmple2.c LesTris.c temps.c /bin/mail
cathebra-{47}-measn6:~ > which echo
correct_exemple2.c exo_1.c modulo.c temps.c~
ecriture1.c for_c.c para1.c [Link] echo is a shell built-in command.
cathebra-{48}-measn6:~ > where echo
es.c if_else.c parametres.c while.c
essai1.c if_then.c PIPO while2_c.c echo shell built-in
exe1 if_then_else.c pipo while_2.c /usr/ucb/echo
exemple1 jusqua.c pour_TP1 while_c.c /bin/echo
cathebra-{34}-measn6:~/TPC/ARBRE > echo *.c[ctrl-X]g cathebra-{49}-measn6:~ > file `where echo`
break_c.c exmple2.c lecture1.c switch_c.c echo: impossible d'ouvrir Ce fichier ou ce répertoire n'existe pas
correct_exemple2.c exo_1.c lecture2.c temps.c is: impossible d'ouvrir Ce fichier ou ce répertoire n'existe pas
ecriture1.c for_c.c LesTris.c while.c a: impossible d'ouvrir Ce fichier ou ce répertoire n'existe pas
shell: impossible d'ouvrir Ce fichier ou ce répertoire n'existe pas
es.c if_else.c modulo.c while2_c.c
built-in: impossible d'ouvrir Ce fichier ou ce répertoire n'existe pas
essai1.c if_then.c para1.c while_2.c
/bin/echo: ELF 32 bits MSB exécutable SPARC Version 1, un lien dynamique
exemple2.c if_then_else.c parametres.c while_c.c
a été défini., fichier réduit
exemple3.c jusqua.c sortie2.c
cathebra-{34}-measn6:~/TPC/ARBRE > echo *.c[ctrl-X]* /usr/ucb/echo: ELF 32 bits MSB exécutable SPARC Version 1, un lien dynamique
cathebra-{34}-measn6:~/TPC/ARBRE > echo break_c.c correct_exemple2.c a été défini., fichier réduit
cathebra-{50}-measn6:~ > file `where echo | grep -v built-in`
ecriture1.c es.c essai1.c exemple2.c exemple3.c exmple2.c exo_1.c for_c.c
if_else.c if_then.c if_then_else.c jusqua.c lecture1.c lecture2.c LesTris.c
modulo.c para1.c parametres.c sortie2.c switch_c.c temps.c while.c
32
while2_c.c while_2.c while_c.c break_c.c correct_exemple2.c ecriture1.c Attention : pour les commandes 35 à 37, et contrairement aux autres
es.c essai1.c exemple2.c exemple3.c exmple2.c exo_1.c for_c.c if_else.c commandes, les crochets ont bien été frappés (il ne s’agit pas là d’une abré-
if_then.c if_then_else.c jusqua.c lecture1.c lecture2.c LesTris.c modulo.c viation pour désigner une touche)…
para1.c parametres.c sortie2.c switch_c.c temps.c while.c while2_c.c 33
Script « mach_mea » : Un script est un fichier contenant une suite de
while_2.c while_c.c[ctrl-U]
cathebra-{34}-measn6:~/TPC/ARBRE > cd[return] commandes destinées à être interprétées par le shell. Ceux qui souhaiteraient
approfondir le fonctionnement de celui-ci peuvent se reporter aux manuels
des différentes commandes utilisées et à l’annexe sur tcsh.

© Guy Cathébras - 7/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

/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.

© Guy Cathébras - 8/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

SEE ALSO dont la valeur commence par /, cd change pour le répertoire


talk(1), write(1), environ(5)
SunOS 5.5.1 Last change: 1 Feb 1995 1 indiqué par cette valeur. La commande cd – peut être utili-
Bien entendu man man permet de tout connaître sur la façon sée pour revenir au répertoire courant précédent.
d’utiliser le manuel en ligne… pwd
La commande apropos suivie d’un ‘mot clé’ est un bon com- imprime la référence absolue du répertoire de travail.
plément de man. En effet, elle affiche un résumé pour cha- Bien qu’on ne puisse avoir qu’un seul répertoire de travail,
cune des commandes qui contiennent le ‘mot clé’ dans leur tcsh maintient une liste de répertoires, gérée comme une pile.
résumé... Une fois la commande exacte repérée, on visualise Il est possible de changer de répertoire courant pour un de
son manuel par man. cette liste ou bien de sauvegarder le nom du répertoire courant
5. Commandes de base dans cette liste et de changer pour un autre. Dans la configu-
ration initiale des comptes, cette pile est imprimée dans
Les commandes de base sont celles qui permettent d’obtenir l’invite du shell.
des informations générales ou de manipuler l’environnement
dirs [ -l ]
immédiat de l’utilisateur : répertoire courant, fichiers, tâches.
imprime la pile de répertoires, le plus récent à gauche. Le
Dans les descriptions de commandes ci-après, nous allons premier répertoire imprimé est le répertoire courant. Avec
utiliser un certain nombre de conventions. Le nom de la l’option –l, on obtient une liste non abrégée : la notation ~
commande sera imprimé en caractères gras, ainsi que ses op- pour désigner le répertoire privé n’est pas utilisée.
tions. Il s’agira donc de parties de la commande qui devront
popd
être tapées telles qu’elles sont présentées dans ce document.
enlève le premier élément de la pile de répertoires (le ré-
Des crochets en italique délimiteront des parties optionnelles
pertoire courant) et fait un cd dans le nouveau répertoire
(si des crochets font partie de la commande, ils seront impri-
placé au sommet de la pile.
més eux aussi en romain gras) et une barre verticale séparera
les possibilités mutuellement exclusives. Les arguments géné- pushd [ dir ]
riques (ceux qui peuvent être remplacés par un nom de réper- Place le répertoire dir au sommet de la pile des répertoi-
toire, d’utilisateur, etc. ou un nombre) seront imprimés en res et change, en conséquence, le répertoire courant. Sans
italiques. Enfin, un argument générique suivi de points de argument, et si la variable pushdtohome est définie, agit
suspension indique que la commande accepte (et traite) plu- comme si l’argument était le répertoire de login. Si cette
sieurs mots à la place de cet argument. S’il est fait référence à variable n’est pas définie, échange les deux premiers élé-
une variable du shell, son nom sera imprimé en gras-italique. ments de la pile.
Il va de soit que les informations données ici sont incomplètes ls [ -aAbcdilFmrRtux ] [ fichier…]
et qu’en cas de doute, il convient de se reporter au manuel de Pour chaque fichier qui est un répertoire, ls donne la liste
la commande correspondante. des noms de fichiers qu’il contient. Pour chaque fichier
a) Informations générales et identification ordinaire, ls répète son nom. Dans les deux cas, les op-
tions permettent de demander des informations supplé-
id
mentaires sur les fichiers. Par défaut, la sortie est triée par
affiche le nom de login, le numéro d’utilisateur (uid), le
ordre alphabétique. Si aucun fichier n’est donné en argu-
nom de groupe et le numéro de groupe (gid) auquel appar-
ment, c’est le répertoire courant (.) qui est traité. Par dé-
tient l’utilisateur.
faut encore, les références implicites de fichiers (c’est-à-
su [ login_name ] dire dans les répertoires explorés) commençant par le ca-
permet de changer temporairement d’identité sans se dé- ractère . ne sont pas traitées. Les options utilisables sont :
loguer. Le nom d’utilisateur par défaut est root. Pour -a ou -A : demande de traiter les références implicites de
utiliser su, il est nécessaire de fournir le password de fichiers commençant par . ; si -A est utilisé, les deux noms
l’utilisateur dont on souhaite prendre l’identité. Si le mot . et .. ne sont pas pris en compte.
de passe est correct, su crée un nouveau processus shell
dont les propriétaires réels et effectifs sont login_name. -b : les caractères non imprimables dans les noms de fi-
Pour revenir à l’identité originale, il suffit de taper exit chiers sont visualisés sous la forme \ddd (où ddd est le
pour terminer le shell. code ASCII, en octal, du caractère).
df [ repertoire… ] -c : utilise la date de dernière modification de l’inode pour
permet de visualiser la capacité des disques logiques dis- trier les noms de fichiers.
ponibles ainsi que leur occupation. Si des répertoires sont -d : si un argument est un répertoire, n’imprime pas son
spécifiés, le rapport ne concernera que les disques qui hé- contenu.
bergent ces répertoires. Par défaut, tous les disques du sys- -i : le numéro d’inode de chaque fichier est imprimé en
tème seront traités. première colonne.
b) Répertoire courant -l : format d’impression long donnant
La plupart de ces commandes sont des commandes internes • le type du fichier sous la forme d’un caractère (- : fichier
au shell, à l’exception des différentes variantes de ls ordinaire ; d : répertoire ; l : lien symbolique ; b ou c : fi-
cd [ dir ] chier spécial bloc ou caractère ; p : tube nommé ou fifo).
change le répertoire de travail du shell. Si aucun argument • le masque de protection du fichier (mode) sous forme de
n’est donné, cd change pour le répertoire de login. Si dir est neuf caractères (Cf. II -2.e) Droits d’accès, page 3).
un chemin relatif qui n’est pas trouvé dans le répertoire • le nombre de liens physiques, le nom ou le numéro (uid)
courant, tcsh le cherche dans les répertoires listés dans la du propriétaire, le nom ou le numéro (gid) du groupe
variable cdpath. Si dir est le nom d’une variable du shell propriétaire, la taille du fichier en octets, la date de der-

© Guy Cathébras - 9/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

nière modification. c) Manipulation de fichiers


• le nom du fichier. Dans le cas d’un lien symbolique, ce cat [ -nbsuvet ] [ fichier… ]
nom est suivi de -> puis du nom du fichier auquel fait copie le contenu des fichiers donnés en paramètres sur la
référence le lien. sortie standard (en général l’écran). Sans argument, cat
cathebra-{23}-measn6:~ > ls -l /usr/bin/X11
lrwxrwxrwx 1 root other 16 Jan 12 1998 /usr/bin/X11 -> /usr/X11R6.1/bin
copie son entrée standard sur sa sortie standard. Les op-
tions (n, b, s, u, v, e et t) sont décrites dans le manuel. cat
-F : les noms de répertoires sont suivis du caractères / ;
est surtout utilisée pour concaténer les contenus de plu-
ceux de fichiers exécutables par un astérisque (*) et ceux
sieurs fichiers.
des liens symboliques par @.
more [-flrs] [-lignes] [+numéro] [+/motif] [fichier…]
-m : impression sans mise en forme de tableau : les noms
permet d’afficher page par page sur un écran le contenu de
de fichiers sont simplement séparés par des virgules.
fichiers (par défaut l’entrée standard). Au bas de chaque
-r : inverse l’ordre de tri, quel que soit le critère. page apparaît le message more ainsi que la proportion du
-R : applique ls récursivement sur tous les sous répertoires fichier déjà visualisée. L’affichage de la ligne suivante du
rencontrés. fichier est obtenu en réponse à un [return], tandis qu’un
-s : la taille des fichiers est exprimée en blocs plutôt qu’en [espace] provoque le passage à la page suivante. Si la sor-
octets. tie standard n’est pas un terminal, more se comporte exac-
-t : trie les fichiers par date plutôt que par nom. Par défaut, tement comme cat à ceci près qu’un titre est imprimé
c’est la date de dernière modification du fichier qui est uti- avant chaque fichier d’une série. Une partie des options de
lisée (Cf. les options –c et –u). cette commande sont (Cf. man more pour les autres) :
-u : utilise la date de dernier accès pour trier les fichiers. -f : ne replie pas les lignes trop longues
-x : dans le cas d’une impression de noms sur plusieurs -l : ne traite pas les caractères formfeed (Ctrl-L) comme
colonnes, ils sont triés en ligne d’abord plutôt qu’en co- des sauts de page. Si –l n’est pas utilisée, more marque
lonne d’abord (ce qui est la valeur par défaut). une pause pour accepter des commandes après chaque li-
l, ll, lsf, lsr, lsx ou lss gne contenant un caractère Ctrl-L.
Aliases définis dans le fichier ~/.cshrc pour les com- -r : normalement, more ignore les caractères de contrôle
mandes : ls –amF, ls –alF, ls –F, ls –aRF, ls –axF, qu’il n’interprète pas d’une façon ou d’une autre. L’option
ls -asF. La commande la plus utile étant ll… –r permet de les faire afficher sous la forme ^C où C re-
du [ -adkr ] [ -s | -o ] [ file… ] présente l’un de ces caractères de contrôle.
fournit l’espace alloué (par défaut en nombre de blocs de -s : squeeze. Remplace plusieurs lignes vides successives
512 octets) aux fichiers référencés. du parcourt récursi- par une seule.
vement les répertoires. En l’absence d’arguments, c’est le -lignes : fixe la longueur de chaque page (par défaut, cette
répertoire courant qui est traité. Par défaut, du ne fournit longueur est e nombre de lignes du terminal moins deux).
les informations que pour les fichiers dont la référence est +numéro : commence l’affichage à la ligne indiquée.
donnée et pour les répertoires rencontrés lors du parcours +/motif : commence l’affichage deux lignes avant la pre-
récursif. Les options sont : mière ligne contenant une chaîne de caractères corres-
-a : donne la taille de tous les fichiers et non pas seule- pondant à l’expression régulière motif.
ment des répertoires. Par ailleurs, more reconnaît un certain nombre de com-
-d : s’interdit de changer de disque logique pendant le mandes spécifiques : h provoque l’affichage d’une page
parcours récursif. d’aide ; q ou Q termine l’exécution de more. Pour les au-
-k : donne les tailles en kilo-octets et non en blocs de 512 tres commandes, on se reportera à la page d’aide affichée
octets. par h.
-r : génère un message à propos des répertoires qui ne tail [ ±nombre [ lbcr ] ] [ fichier ]
peuvent pas être lus, des fichiers qui ne peuvent pas être tail [ -lbcr ] [ fichier ]
ouverts, etc. plutôt que de rester silencieux. tail [ ±nombre [ lbcf ] ] [ fichier ]
-s : seul le total est indiqué pour chaque référence36. tail [ -lbcr ] [ fichier ]
copie le contenu de fichier sur la sortie standard en com-
-o : n’ajoute pas la taille des sous répertoires à celle de
mençant à l’endroit indiqué. Si fichier n’est pas indiqué,
leur père. Sans cette option, la taille annoncée pour un ré-
c’est l’entrée standard qui est utilisée. La copie commence à
pertoire est la somme des tailles de tous les fichiers qu’il
l’endroit indiqué par nombre (la distance est comptée à par-
contient plus celle de tous les fichiers dans les sous réper-
tir du début du fichier si +nombre est utilisé, et à partir de la
toires. Cette option est sans effet quand elle est employée
fin si –nombre est utilisé), exprimé en lignes, blocs ou ca-
avec –s.
ractères suivant l’option l, b ou c placée en suffixe. L’unité
quota -v par défaut est la ligne et la valeur par défaut de nombre est
affiche la place disque utilisée par l’utilisateur courant et 10. Les options r et f sont mutuellement exclusives. Si les
les limites qui lui sont imposées. deux sont spécifiées, l’option f est ignorée.
repquota –a -f : follow. Si le fichier n’est pas un tube, le programme ne
affiche la place disque occupée et les limites de tous les se termine pas après avoir copié le dernier caractère du fi-
utilisateurs du système. chier, mais commence une boucle sans fin au cours de la-
quelle il s’endort pendant une seconde, puis tente de lire
d’autres caractères du fichier. Cette option peut être utili-
36
-s : les informations sur les sous-répertoires parcourus ne sont pas fournies. sée pour suivre la croissance d’un fichier écrit par quelque

© Guy Cathébras - 10/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

autre processus. ou du groupe propriétaire, sauf si ficCible est un lien sur


-r : reverse. Copie les lignes en ordre inverse (commence un fichier en possédant plusieurs. Dans ce cas, le lien est
par la fin et s’arrête au point indiqué par nombre). Quand détruit et un nouveau fichier est créé.
r est spécifié, le comportement par défaut est d’imprimer La deuxième forme permet de copier plusieurs fichiers
la totalité du fichier en ordre inverse. dans le répertoire repCible. Les noms des fichiers sont
head [ -nombre | -n nombre ] [ fichier… ] conservés dans le nouveau répertoire. C’est une erreur que
affiche les nombre premières lignes de chaque fichier sur l’un des ficSource soit un répertoire ou que repCible n’en
la sortie standard. Si aucun fichier n’est spécifié, ce sont soit pas un ou n’existe pas.
les nombre premières lignes de l’entrée standard qui sont Enfin, la troisième forme permet de copier un ou plusieurs
copiées. La valeur par défaut de nombre est 10. Quand répertoires, ainsi que leurs sous répertoires, dans le réper-
plus d’un fichier est spécifié, head imprime avant le début toire indiqué par repCible. Il est nécessaire de préciser
de chacun la ligne ==> fichier <==. l’option -r ou l’option –R.
od [ -bcCDdFfOoSsvXx ] [ - ] [ fichier ] [ offset ] Les options suivantes sont utilisables :
(octal dump) copie séquentiellement chaque fichier sur la -f : force le remplacement du fichier, si, par exemple,
sortie standard en transformant les données suivant ce qui l’utilisateur n’a pas l’autorisation en écriture sur le fichier
est spécifié par les options. Plusieurs traductions peuvent mais l’a sur le répertoire qui le contient.
être spécifiées, auquel cas chaque ligne est écrite pour -i : copie interactive. cp interrogera l’utilisateur pour cha-
chaque type spécifié dans l’ordre d’apparition de ces types que fichier dont la copie est sur le point d’écraser un fi-
sur la ligne de commande. La signification des options est chier existant. Une réponse y signifie que la copie doit être
la suivante : effectuée. Toute autre réponse empêche cp d’écraser le fi-
-b : octets imprimés en octal. chier.
-c : affiche des caractères sur un seul octet. Les caractères -p : préserve. cp ne duplique pas seulement le contenu du
non imprimables sont représentés par les échappements fichier source, mais aussi les permissions et les dates de
habituels en langage C : \0, \b, \f, \n, \r, \t. Les autres ca- modification et d’accès.
ractères apparaissent en octal sur 3 digits. -r : copie récursive. cp copiera le répertoire repSource et
-C : donne le même résultat que –c, sauf si la machine est tous ses fichiers, y compris les sous répertoires et leurs fi-
configurée pour traiter des caractères sur plusieurs octets. chiers dans repCible.
Dans ce cas, ceux-ci sont correctement reconnus et im- -R : même copie récursive que –r sauf pour les tubes
primés (langages exotiques tels que le chinois…). nommés dont seuls les descripteurs seront dupliqués (pas
-d ou -D : mots37 ou long mots38 imprimés en décimal non de lecture du tube).
signé. mv [ -fi ] source cible
-f ou -F : long mots ou doubles long mots39 imprimés mv [ -fi ] source1 [ source2… ] repCible
comme des nombres à virgule flottante. déplacement de références de fichiers. Dans la première
forme, mv déplace le fichier nommé source vers cible. Il
-o ou -O : mots ou long mots imprimés en octal non signé.
s’agit d’un changement de nom du fichier. Source et cible
-s ou -S : mots ou long mots imprimés en décimal signé. doivent être des noms différents. Si cible existe déjà, son
-v : montre toutes les données (verbeux). Sans cette op- contenu précédent est détruit. Cette forme est assumée par
tion, chaque groupe de lignes qui seraient toutes identi- mv chaque fois que cible n’est pas un répertoire existant.
ques à la ligne immédiatement précédente est remplacé Dans sa seconde forme, la commande mv déplace chaque
par une ligne contenant seulement un astérisque (*). fichier nommé par un des arguments source dans le réper-
-x ou -X : mots ou long mots imprimés en hexadécimal. toire (pré existant) repCible. Le nouveau nom des fichiers
L’argument – indique de traiter l’entrée standard en plus est la concaténation de repCible, du caractère /, et de la
des fichiers spécifiés. Quand cet argument n’est pas préci- dernière partie du chemin d’accès à source. Cette forme
sé, l’entrée standard n’est traitée que si aucun fichier n’est est assumée quand le dernier opérande est le nom d’un ré-
spécifié. L’argument offset permet de spécifier le point de pertoire existant.
départ dans le fichier. Dans sa version la plus simple, il L’option –i entraîne une demande de confirmation avant
s’agit d’un nombre d’octets, exprimé en décimal et précé- chaque opération. L’option –f supprime les demandes de
dé du signe +. Les autres syntaxes de cet offset sont don- confirmation lorsque la cible correspond à un fichier pro-
nées dans man od. tégé en écriture.
cp [ -fip ] ficSource ficCible ln [ -fns ] source [ cible ]
cp [ -fip ] ficSource1 [ ficSource2… ] repCible ln [ -fns ] source… repCible
cp –r|-R [ -fip ] repSource1 [ repSource2… ] repCible Dans sa première forme, ln crée, à l’emplacement indiqué
Copie de fichiers. Dans la première forme présentée, ni par cible, une nouvelle entrée de répertoire (lien) pour le
ficSource, ni ficCible ne sont des répertoires ni ne corres- fichier spécifié par source. Si cible n’est pas spécifiée, le
pondent au même nom : cp copiera le contenu de fic- lien est fait dans le répertoire courant. Cette première
Source dans ficCible. Si ficCible existe, cp écrasera son forme est assumée quand le dernier argument n’est pas le
contenu (si les permissions du fichier l’y autorisent), mais nom d’un répertoire existant. Dans ce cas, on obtient une
ne modifiera pas les permissions ni le nom du propriétaire erreur si plus de deux arguments sont spécifiés.
Dans sa seconde forme, ln crée une nouvelle entrée de ré-
37
mot : un bloc de 16 bits (2 octets).. pertoire, dans repCible, pour chaque fichier spécifié par
38
long mot : un bloc de 32 bits (4 octets). source.
39
double long mot : un bloc de 64 bits (8 octets).

© Guy Cathébras - 11/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 12/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

notify [ %job… ] ADDR, SZ, WCHAN, TTY, TIME, CMD).


informe l’utilisateur, de manière asynchrone, chaque fois Si plusieurs options d’affichage sont spécifiées, ps fera la
que l’état de la tâche spécifiée (par défaut la tâche cou- réunion de toutes les informations demandées. Il existe
rante) change. d’autres options de sélection et d’affichage qui sont décri-
stop %job… tes dans le manuel (Cf. man ps). La signification des
stop pid… abréviations décrivant les informations (têtes de colonnes
suspend l’exécution d’un job en tâche de fond ou de dans le listing) est la suivante :
n’importe quel processus en spécifiant son pid. F et C : ces paramètres obsolètes sont imprimés seulement
kill [ -signal ] [ pid… ] [ %job… ] pour des raisons de compatibilité.
kill –l S : l’état du processus. cet état est représenté par une lettre :
envoie le signal TERM (terminate) par défaut, ou le signal O (running), S (sleeping, en attente d’un événement), R
spécifié, aux processus et aux jobs indiqués. Les signaux (runnable, prêt à être exécuté), Z (zombie, processus termi-
sont indiqués par un nombre ou par un nom. Il n’y a pas de né en attente de la lecture de son status), T (stopped).
valeur par défaut pour le numéro de processus ou de tâche. UID : l’id. du propriétaire effectif du processus (c’est son
Utilisé avec l’option –l, kill donne la liste des noms de si- login name qui est imprimé si l’option –f est utilisée).
gnaux qui peuvent être envoyés. Le signal KILL (-9) est le PID : l’id. du processus. Cette donnée est nécessaire pour
plus radical. Il doit cependant être utilisé avec précaution envoyer un signal au processus à l’aide de kill.
car il ne laisse pas au processus le temps de faire le moindre
‘ménage’. Pour envoyer un signal à un processus, il faut en PPID : l’id. du processus père.
être propriétaire ou être le super-utilisateur. PRI : priorité du processus. Un nombre élevé dénote une
ps [ -adefjl ] [-g grplist] [-p proclist] [-s sidlist] [-t term] priorité faible.
[ -u uidlist ] [ -U uidlist ] [ -G gidlist ] NI : valeur du paramètre nice utilisé dans le calcul de la
Cette commande imprime des informations sur les proces- priorité. Ici aussi, plus nice est élevé, plus la priorité sera
sus actifs. Sans option, ps traite les processus associés au faible. La valeur par défaut est 20.
terminal. Les informations données par défaut sont l’id.41 de ADDR : l’adresse en mémoire du processus.
processus (pid), l’id. de terminal, le temps d’exécution SZ : la taille (pages) de la partie swappable du processus.
cumulé et le nom de la commande exécutée. Ceci peut être WCHAN : L’adresse de l’événement en attente duquel le
modifié par les options. Certaines d’entre elles attendent des processus est placé.
listes comme argument. Les éléments d’une liste sont sépa-
STIME : L’heure de création du processus (hh:mm:ss).
rés par des virgules. proclist et grplist sont des listes de
nombres. On peut distinguer deux groupes d’options : celles TTY : le terminal de contrôle auquel est attaché le proces-
qui sélectionnent les processus à traiter et celles qui fixent sus (la valeur ? est imprimée lorsque le processus n’a pas
le format d’affichage des informations. Voici les options de de terminal de contrôle).
sélection des processus : TIME : le temps d’exécution cumulé du processus.
-a : tous les processus à l’exception des leaders de groupe CMD : la commande exécutée par le processus (le nom
et de ceux qui ne sont pas associés à un terminal. complet de la commande et ses arguments sont imprimés,
-d : tous les processus à l’exception des leaders de session. dans la limite de 80 caractères, si l’option –f a été spéci-
fiée). Un processus terminé, dont le status n’a pas encore
-e : tous les processus sans exception.
été lu apparaît dans cette colonne sous le nom <defunct>.
-g : les processus dont l’id. de groupe de processus appa-
PGID : le PID du leader de groupe de processus.
raît dans grplist.
SID : le PID du leader de session.
-G : les processus dont l’id. du groupe propriétaire réel
apparaît dans gidlist. psw
psg mot
-p : les processus dont le pid apparaît dans proclist.
Aliases définis dans le fichier ~/.cshrc pour les com-
-s : les leaders de session dont l’id. apparaît dans sidlist. mandes : ps –ef | more et ps –ef | grep mot | more. La
-t : les processus associés au terminal term. première affiche, page par page, un full listing de tous les
-u : les processus dont l’id. d’utilisateur effectif (ou son processus du système, tandis que la seconde ne conserve
login name) apparaît dans uidlist. dans ce listing que les processus qui possèdent mot dans
-U : les processus dont l’id. d’utilisateur réel (ou son login leur full listing.
name) apparaît dans uidlist. e) Impression de documents
Si plusieurs options de sélection sont utilisées simultané- La commande lp permet de soumettre une requête
ment, il suffit, pour qu’un processus soit traité, qu’il satis- d’impression. Elle a pour effet de transférer un fichier vers
fasse à l’un des critères de sélection. Les options qui l’imprimante. Les trois imprimantes disponibles, lw1, lw2 et
fixent le format d’affichage des informations sont : lw3, sont des imprimantes PostScript. Ceci signifie qu’elles
-f : génère un full listing (UID, PID, PPID, C, STIME, TTY, ne peuvent traiter que des documents codés dans ce format.
TIME, CMD). Pour des fichiers de texte (c’est le cas des programmes C), il
-j : imprime les id. de session et les id. de groupe de pro- est nécessaire de passer par un traducteur : la commande a2ps
cessus (PGID, SID) (lire a-two-ps, soit ascii to postscript).
-l : génère un listing long (F, S, UID, PID, PPID, C, PRI, NI,

41
id : abréviation de identificateur.

© Guy Cathébras - 13/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 14/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

diff [ -bitw ] [ -e ] fichier1 fichier2 le ferai la commande ls –ilds.


diff [ -bitw ] [ -D symbole ] fichier1 fichier2 -print toujours vrai, imprime le chemin d’accès au fichier.
compare le contenu de fichier1 et fichier2 et renvoie sur la -atime n vrai si le fichier a été accédé n jours plus tôt. At-
sortie standard la liste minimale de modifications néces- tention, find change lui même la date d’accès aux réper-
saires pour transformer fichier1 en fichier2. Rien n’est toires qu’il traverse…
produit si les fichiers sont identiques. La sortie normale -ctime n vrai si l’état du fichier (inode) a été modifié n
contient des lignes de la forme : jours plus tôt.
n1 a n3,n4
n1,n2 d n3 -mtime n vrai si le fichier a été modifié n jours plus tôt.
n1,n2 c n3,n4 -newer file vrai si le fichier a été modifié plus récemment
dans lesquelles n1 et n2 sont des numéros de ligne dans fi- que file.
chier1 et n3 et n4 sont des numéros de ligne dans fichier2. -exec command vrai si la commande exécutée retourne zé-
Ces lignes sont en fait les commandes de l’éditeur ed qui ro comme status. La fin de commande doit être marquée
permettraient de convertir fichier1 en fichier2. Suivant par \; . Un argument de commande {} est remplacé par le
chacune de ces lignes, on trouve les lignes affectées dans chemin d’accès au fichier en cours d’examen.
fichier1, marquées d’un ‘<’ et les lignes affectées dans fi- -ok command identique à –exec, à ceci près que le ligne
chier2 marquées d’un ‘>’. Les options : de commande est imprimée, précédée d’un point
-b : ignore les blancs (espaces et tabulations) en fin de li- d’interrogation et exécutée seulement si l’utilisateur ré-
gne et traite plusieurs blancs comme un seul. ponds en tapant y.
-i : ignore la casse (majuscule/minuscule) des caractères. -depth toujours vrai. Force find à effectuer un parcours de
-t : développe, sous la forme de plusieurs espaces, les ta- l’arbre en profondeur d’abord de façon à traiter tous les fi-
bulations dans les lignes de sortie. chiers d’un répertoire avant le répertoire lui même.
-w : ignore tous les blancs (espaces et tabulations). -follow toujours vrai. Force find à suivre les liens symbo-
-e : produit un script de contenant exclusivement des liques. Ne doit pas être utilisé avec –type l.
commandes a, c ou d destiné à l’éditeur ed. Ce script -inum n vrai si le fichier a n comme numéro d’inode.
permet de recréer fichier2 à partir de fichier1. -links n vrai si le fichier a n liens physiques.
-D : crée une version combinée de fichier1 et fichier2 -mount toujours vrai. Restreint la recherche au disque lo-
contenant des directives pour le préprocesseur C de telle fa- gique contenant le répertoire spécifié.
çon que sa compilation soit équivalente à la compilation de -name motif vrai si le nom du fichier correspond au motif
fichier1 quand symbole n’est pas défini et équivalente à la indiqué (les métacaractères de substitution de noms de fi-
compilation de fichier2 quand symbole est défini. chier : *, ?, etc. peuvent être utilisés, à condition d’enclore
D’autres possibilités existent (comparaison de répertoires le motif dans des guillemets simples ou doubles).
par exemple). On se reportera à man diff. -perm [-]mode l’argument mode est utilisé pour représen-
diff3 [ -exEX3] fichier1 fichier2 fichier3 ter le masque de protection du fichier. Il est identique,
compare trois fichiers d’une manière similaire à diff. Cf. dans sa forme, à l’argument de la commande chmod. Si le
man diff3. signe – optionnel n’est pas présent, -perm sera vrai si tous
dircmp [ -ds ] [ -w n ] rep1 rep2 les bits de mode sont identiques à ceux des permissions du
examine deux répertoires et génère diverses tables concer- fichier. Si le signe – est présent, -perm sera vrai si, au
nant leurs contenus respectifs. Dans tous les cas, la liste moins, les bits indiqués par mode sont positionnés dans les
des fichiers propres à chaque répertoire est donnée. Si au- permissions du fichier.
cune option n’est spécifiée, une deuxième liste indique, -prune toujours vrai. n’examine pas d’autres répertoires
pour chaque nom de fichier commun aux deux répertoires, ou fichiers dans le répertoire en cours d’examen (Cf.
si le contenu des fichiers est identique ou non. exemples ci-dessous).
-d : utilise diff au lieu de cmp -s pour comparer les fi- -size n[c] vrai si le fichier est de longueur n blocs (512 oc-
chiers de même nom. Le résultat contient donc la liste des tets par bloc). Si n est suivi de c, la taille est exprimée en
différences trouvées dans chaque fichier. octets.
-s : supprime les messages concernant les fichiers identiques. -type c vrai si le type du fichier est c, où c peut être b (fi-
-w : fixe à n la longueur d’une ligne en sortie (par défaut 72). chier spécial en mode blocs), c (fichier spécial en mode
c) Extraction d’information caractères), d (répertoire), l (lien symbolique), p (fifo ou
tube nommé) ou f (fichier ordinaire).
find repertoire… expression
recherche récursivement dans les répertoires indiqués les -user uname vrai si le propriétaire du fichier est uname.
fichiers qui satisfont l’expression. Cette expression est -group gname vrai si le groupe propriétaire est gname.
constituée de primitives que nous allons décrire ci- Expressions complexes. Ces primitives peuvent être com-
dessous. Dans cette description, chaque fois que n sera uti- binés en utilisant les opérateurs suivants (classés par ordre
lisé, il devra être interprété comme un nombre décimal op- de précédence décroissante) :
tionnellement précédé d’un signe + ou d’un signe -. La si- \( expression \) vrai si l’expression est vraie. Les parenthè-
gnification à y attacher est la suivante : +n signifie ses sont des métacaractères du shell, elles doivent donc
« strictement supérieur à n » ; n signifie « exactement égal être précédées du caractère d’échappement \.
à n » ; et –n « strictement inférieur à n ». ! expression négation de l’expression.
-ls toujours vrai, imprime la description du fichier comme expression [ -a ] expression concaténation de primitives

© Guy Cathébras - 15/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

(le ET logique est sous entendu par la juxtaposition de $ fin de la ligne


deux primitives). . n’importe quel caractère
expression -o expression OU logique. \< début d’un mot
Quelques exemples : \> fin d’un mot
les deux commandes suivantes sont équivalentes
[str] n’importe quel caractère de str
find .
find . –print [^str] n’importe quel caractère qui n’est pas dans str
toutes deux impriment les noms de la totalité des fichiers [x-y] n’importe quel caractère entre x et y dans la table ascii.
accessibles à partir du répertoire courant. * n’importe quel nombre d’occurrences de ce qui précède.
find ~ \(-name [Link] -o -name *.o \) -atime +7 -exec rm {} \; Quelques exemples :
détruit tous les fichiers accessibles depuis le répertoire de grep -i -n posix [Link]
login, nommés [Link] ou *.o qui n’ont pas été accédés de- recherche toutes les utilisations du mot « Posix », quelque
puis une semaine. soit la casse, dans le fichier [Link] et écrit les numéros
find . -name SCCS -prune -o –print de ligne.
imprime récursivement les noms de tous les fichiers du grep '^$'
répertoire courant et de ses sous répertoires en sautant les grep -v .
répertoires nommés SCCS. les deux exemples précédent recherchent les lignes non
find . -print -name SCCS –prune vides sur l’entrée standard.
imprime récursivement les noms de tous les fichiers du
strings [ -a ][-t format ][-nombre ][fichier… ]
répertoire courant et de ses sous répertoires en sautant le
recherche des chaînes ASCII dans les fichiers indiqués
contenu des répertoires nommés SCCS. Imprime cepen-
(par défaut l’entrée standard). Une chaîne de caractères est
dant leurs noms.
une suite d’au moins quatre caractères imprimables termi-
Les opérateurs –atime, -ctime et –mtime utilisent pour n
née soit par un caractère nul, soit par un \n.
la terminologie « période de 24 heures ». Par exemple, un
fichier accédé à 23h59 sera sélectionné par : -a : le fichier est inspecté dans sa totalité alors que, par dé-
find . -atime -1 –print faut, seul le segment des données initialisées l’est.
à 00h01 le lendemain (moins de 24h plus tard, pas plus -t : chaque chaîne est précédée de sa position de début
d’un jour après) ; le passage par minuit n’a aucun effet sur dans le fichier. Le format utilisé dépend du caractère for-
ces calculs de durée. mat : d fait imprimer la position en décimal, o en octal et
grep [ -bchilnsvw ] expression_régulière [ fichier… ] x en hexadécimal.
recherche dans les fichiers indiqués les motifs de caractè- -nombre : spécifie la longueur minimale des chaînes re-
res correspondant à l’expression régulière et imprime sur cherchées (par défaut 4).
sa sortie standard toutes les lignes qui contiennent ces mo- sort [-cmu][-o out][-dfiMnr][-b][-tc][-k keydef][fic…]
tifs. Si l’expression régulière contient l’un des métacarac- regroupe et trie les lignes de tous les fichiers (fic) spécifiés
tères $, *, [, ], |, (, ) ou \, il faut enclore cette expression et écrit le résultat sur la sortie standard, à moins que
entre guillemets simple afin qu’elle ne soit as interprétée l’option –o ne soit utilisée. Le tri est un tri lexicographi-
par le shell… Si aucun fichier n’est spécifié sur la ligne de que basé sur au moins une clef extraite de chaque ligne.
commande, grep traite l’entrée standard. Normalement, Par défaut, cette clef est unique : c’est la totalité de la li-
chaque ligne trouvée est imprimée sur la sortie standard. gne. Les options suivantes sont disponibles :
Le nom du fichier est imprimé en début de chaque ligne -c : se contente de vérifier que l’unique fichier est ordonné
s’il y a plus d’un fichier. correctement. Rien n’est produit en sortie, à moins que le
b : fait commencer chaque ligne par le numéro du bloc fichier ne soit pas ordonné.
dans lequel elle a été trouvée. Le premier bloc du fichier a -m : se contente de fusionner (merge) les fichiers d’entrée
pour numéro 0. en supposant qu’ils sont déjà ordonnés.
c : n’imprime que le nombre de lignes trouvées. -u : ne conserve qu’un seul exemplaire des lignes possé-
h : interdit d’imprimer le nom du fichier en début de ligne. dant les mêmes clefs de tri.
i : ignore la distinction majuscules/minuscules. -o : out est le nom d’un fichier utilisé à la place de la sor-
l : imprime seulement les noms des fichiers contenant des tie standard. Il peut s’agir de l’un des fichiers d’entrée.
lignes satisfaisant l’expression régulière. Chaque nom de Les six options suivantes modifient les règles de compa-
fichier est écrit au plus une fois. raison. Quand elles apparaissent indépendamment de toute
n : fait débuter chaque ligne par son numéro. spécification de clef de tri, elles les concernent toutes : at-
s : supprime tout message d’erreur concernant des fichiers tachée à une clef spécifique, l’option spécifiée masque
inexistants ou illisibles. toutes les options globales pour cette clef.
v : imprime toutes les lignes, sauf celles qui satisfont -d : ordre du dictionnaire. Seuls les blancs, lettres et chif-
l’expression régulière. fres sont significatifs dans les comparaisons.
w : recherche le motif comme un mot, c’est à dire séparé -f : ne tient pas compte de la casse.
du reste de la ligne par des blancs. -i : ignore les caractères non imprimables
L’annexe « expressions régulières » définit complètement -M : compare des mois. Les trois premiers caractères non
les expressions régulières comprises par grep. Voici ce- blancs de la clef ont mis en majuscules et comparés. En
pendant un résumé : français, l’ordre de tri est "JAN"<"FEV"<... < "DEC". Les
^ début de la ligne champs invalides sont considérés inférieurs à "JAN".

© Guy Cathébras - 16/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

l’option –M implique l’option –b. uniq [ -ucd ] [ fichier_e [ fichier_s ] ]


-n : restreint le tri à une chaîne numérique en début de clef permet par comparaison des lignes adjacentes de fichier_e
(constituée de blancs optionnels, d’un signe moins option- (par défaut l’entrée standard) de ne conserver qu’un
nel, suivi de zéro ou plus chiffres). Le tri se fait alors par exemplaire de chaque ligne pour construire fichier_s (par
valeur arithmétique. Une chaîne numérique vide est traitée défaut la sortie standard). Le signe – à la place de fi-
comme zéro. Des zéros en début de chaîne ou un signe sur chier_e permet de désigner l’entrée standard.
une valeur nulle n’affectent pas l’ordre. -u : n’imprime que les lignes uniques dans fichier_e.
-r : inverse l’ordre de tri. -d : n’imprime que les lignes multiples dans fichier_e.
Les deux options suivantes affectent la séparation des clefs. -c : imprime le nombre d’occurrences de chaque ligne.
-b : ignore les blancs en début de champ pour déterminer e D’autres options existent qui sont décrites dans man uniq.
début et la fin d’une clef de tri. Si cette option est spéci- wc [ -lwc ] [ fichier… ]
fiée avant la première option –k, elle est appliquée à tou- compte pour chaque fichier (ou l’entrée standard s’il n’y a
tes les clefs. Sinon, elle peut être appliquée à chaque défi- pas de paramètre) le nombre de lignes, de mots ou de ca-
nition de clef séparément. ractères. En l’absence d’option, wc se comporte comme si
-t : définit c comme le caractère séparateur de champ. c –lwc était spécifié. Si plusieurs fichiers sont fournis, wc
n’est pas considéré comme une partie de la clef qu’il dé- indique aussi un total sur tous les fichiers.
limite. Chaque occurrence de c est significative. Si –t -c : compte les caractères.
n’est pas spécifié, les blancs sont utilisés comme sépara- -l : compte les lignes.
teurs. Chaque séquence maximale, non vide, de blancs qui
-w : compte les mots (séparateur blanc).
suit un caractère non blanc est un séparateur de champ.
Toujours dans le cas où –t n’est pas spécifié, les blancs awk [ -f ficprog ][ -Fc ][ 'prog' ][ paramètres ][ fichier…]
qui précédent un champ sont considérés comme en faisant permet de rechercher, dans chacun des fichiers référencés,
partie. les lignes satisfaisant un ou plusieurs motifs parmi ceux
L’option suivante permet de définir les clefs de tri On peut énumérés dans le programme awk (c’est-à-dire soit le
en spécifier jusqu’à neuf en répétant l’option -k. Quand il contenu du fichier ficprog soit directement la chaîne de
y a plusieurs clefs de tri, leur ordre d’apparition dans la li- caractères prog). L’argument –F permet de définir un sé-
gne de commande est important. Les dernières clefs ne parateur de champs dans les lignes, différent du séparateur
sont comparées que si toutes les clefs précédentes sont usuel (blancs). Les fichiers sont traités dans l’ordre où ils
égales. sont donnés sur la ligne de commande, la référence –
correspondant à l’entrée standard. Enfin, dans le cas où
-k :. le paramètre keydef est une définition de clef de tri. il
aucun nom de fichier à traiter n’est donné, c’est l’entrée
est de la forme : -k début [ type ][,fin [ type ]].
standard qui le sera.
• début définit le début de la clef sous la forme : Il s’agit d’un véritable langage de programmation permet-
numéroChamp[.premierCaractère] les champs et les caractè- tant l’écriture de filtres. En effet, il permet d’extraire par-
res à l’intérieur des champs sont numérotés à partir de 1. Si mi les lignes d’un fichier des informations sélectionnées et
.premierCaractère est omis, il fait référence au premier carac- offre la possibilité de réaliser des comparaisons ou des
tère du champ. calculs sur des champs et de réorganiser les lignes. Il
• fin définit le début de la clef sous la forme : existe des livres entiers sur la programmation de filtres
numéroChamp[.dernierCaractère]. Si .dernierCaractère est avec awk. Pour plus de détails, le lecteur pourra se repor-
omis, il fait référence au dernier caractère du champ. ter à man awk.
• type est un modificateur pris dans la liste bdfiMnr. Signalons aussi l’existence d’un langage encore plus puis-
Exemples d’utilisation : sant : perl, sur lequel on pourra trouver plus
sort -k 2,2 infile d’informations à l’URL [Link]
trie le contenu de infile en utilisant le second champ
comme clef de tri. d) Compression
sort -r -o outfile -k 2.2,2.2 infile1 infile2 Il existe plusieurs possibilités pour compresser, c’est à dire
regroupe et trie, en inverse, les contenus de infile1 et de réduire la taille, des fichiers (sans perte d’information). La
infile2 en utilisant le deuxième caractère du deuxième famille compress est disponible en standard sur toutes les
champ comme clef de tri. versions d’Unix. gzip, gunzip et gzcat appartiennent à la
sort -k 2.2b,2.2b infile1 infile2 grande famille des logiciels gratuits GNU. En général, les
regroupe et trie les contenus de infile1 et de infile2 en uti- taux de compression obtenus avec gzip sont meilleurs que
lisant le deuxième caractère non blanc du deuxième ceux obtenus avec compress. Cependant, gzip n’est pas tou-
champ comme clef de tri. jours installé (bien qu’il soit possible de le faire sur presque
sort -t: -k 3,3n /etc/passwd toute machine)…
imprime le fichier /etc/passwd (la liste des utilisateurs) trié compress [ -fv ] [ -b bits ][ fichier…]
en utilisant l’identificateur numérique d’utilisateur (uid) compress [ -cfv ] [ -b bits ][ fichier…]
comme clef de tri. Les champs sont séparés par le carac- tente de réduire la taille des fichiers référencés en les co-
tère ‘:’ et l’uid est le troisième. dant. A moins que la sortie standard soit utilisée, chaque
sort -um -k 3.1,3.0 infile fichier est remplacé par un nouveau fichier dont le nom
imprime les lignes du fichier, déjà trié, infile en suppri- est obtenu en ajoutant .Z à la fin du nom de l’original. Si
mant toutes le occurrences, sauf une, des lignes qui ont aucun fichier n’est spécifié, l’entrée standard sera com-
même troisième champ. pressée sur la sortie standard. Il n’est pas possible de
compresser des données déjà compressées.

© Guy Cathébras - 17/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

-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

© Guy Cathébras - 18/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 19/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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

© Guy Cathébras - 20/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

’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

© Guy Cathébras - 21/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

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.

© Guy Cathébras - 22/23 - Année 2001/2002


UNIVERSITE MONTPELLIER II – INSTITUT DES SCIENCES DE L’INGENIEUR DE MONTPELLIER
DEPARTEMENT MICROÉLECTRONIQUE ET AUTOMATIQUE

8. Lire et enregistrer une disquette b) depuis un PC


a) depuis une station Sun Ici, les problèmes ne sont pas liés au lecteur de disquettes,
Certaines stations possèdent un lecteur de disquette. Après mais au fait qu’il faut transférer des données entre Windows
avoir glissé la disquette dans le lecteur, il faut demander à la NT et Unix. La manière la plus efficace est d’utiliser
station de la reconnaître. On utilise pour cela la commande WS_FTP. L’utilisation de ce programme est relativement
volcheck. Après quelques secondes, le contenu de la disquette simple. L’adresse (Host Name) à utiliser pour ouvrir la ses-
doit être accessible dans le répertoire /floppy/floppy0. Il est sion ftp (bouton Connect) est [Link]-
alors possible d’effectuer des transferts entre la disquette et [Link], le User ID et le password étant ceux du compte
les disques Unix à l’aide de la commande cp. Attention aux Unix. Il est vivement déconseillé de cocher la case Save Pwd.
noms des fichiers qui doivent respecter la convention DOS : Une fois la session ouverte, les transferts peuvent se faire di-
huit caractères pour le nom et trois caractères pour l’extension rectement entre le compte Unix et la disquette.
(le système se charge de tronquer les noms trop longs…). c) problèmes potentiels
Pour éjecter la disquette, on utilise simplement la commande Si la disquette est destinée à être exploitée sur un PC fonc-
eject. Attention : l’éjection n’est possible que si la disquette tionnant sous MS-DOS (il n’en reste plus beaucoup…), il faut
n’est pas utilisée (en particulier, un cd /floppy/floppy0 empê- savoir que les jeux de caractères msdos et unix sont différents.
che d’éjecter la disquette jusqu’à ce que l’on ait fait un cd Il est donc utile de savoir passer de l’un à l’autre (accents).
dans un autre répertoire)… Ceci est possible en utilisant les commandes dos2unix et
unix2dos. Cf. man.

Index des commandes


a2ps ......................... 14 dirs ............................9 lp ............................. 14 repquota ................. 10
awk .......................... 17 dtpad .......................14 lpstat ....................... 14 rm ........................... 12
basename ................ 19 du .............................10 ls ................................ 9 rmdir ...................... 12
bg ............................. 13 ed .............................14 lsf ............................ 10 sed ........................... 14
cal ............................ 19 eject .........................23 lsr ............................ 10 sort .......................... 16
cancel ...................... 14 factor .......................19 lss ............................ 10 stop ......................... 13
cat ...................... 10, 14 fg ..............................13 lsx ............................ 10 strings ..................... 16
cc ............................. 19 find ..........................15 make ....................... 20 su ............................... 9
cd ............................... 9 gprof ........................20 mkdir ...................... 12 tail ........................... 10
cflow ........................ 20 grep .........................16 more ....................... 10 tar ........................... 18
chmod ..................... 12 gunzip ......................18 mv ........................... 11 tcov .......................... 20
cmp ......................... 15 gzcat ........................18 notify ...................... 13 tee ............................ 19
comm ...................... 19 gzip ..........................18 od ............................ 11 touch ....................... 19
compress ................. 18 head .........................11 perl ......................... 17 tr ............................. 19
cp ............................. 11 id ................................9 popd .......................... 9 uncompress ............ 18
ctrace ...................... 20 indent ......................20 prof ......................... 20 uniq ......................... 17
debugger ................. 21 jobs ..........................12 ps ............................. 13 vi ............................. 14
df ............................... 9 kill ............................13 psg ........................... 13 volcheck .................. 23
diff ........................... 15 l ...............................10 psw .......................... 13 wc ............................ 17
diff3 ......................... 15 lint ...........................20 pushd ........................ 9 xemacs .................... 14
dircmp .................... 15 ll ...............................10 pwd ........................... 9 zcat .......................... 18
dirname .................. 19 ln ..............................12 quota ....................... 10

© Guy Cathébras - 23/23 - Année 2001/2002

Vous aimerez peut-être aussi