Vous êtes sur la page 1sur 32

Bernard Fabrot

Aide-mémoire

Unix pour
Mac OS X

© Éditions OEM (Groupe Eyrolles), 2003


ISBN 2-7464-0492-3
Le Terminal
Bien que cette section s'intitule « Le Terminal », il n'y est pas ques-
tion uniquement du Terminal. D'ailleurs, cette appellation de
« Terminal », que l'on retrouve dans bien dans articles ou dans des
pages Web, est plutôt maladroite.

En effet, Apple a décidé de nommer « Terminal » l'application per-


mettant d'entrer des commandes Unix. En réalité, il s'agit, tout au
plus, d'un « terminal virtuel » (un vrai terminal étant un ordina-
teur très basique, n'étant capable, pour les plus anciens, que d'affi-
cher des caractères en une seule couleur, sur une largeur de
80 colonnes... ce qui explique d'ailleurs que le terminal de Mac
OS X ait, par défaut, une largeur de 80 colonnes).

Ce qui compte surtout, c'est que le terminal virtuel offre un shell.


Un shell est un programme permettant d'interagir avec le systè-
me, notamment à l'aide d'une invite de commande en ligne ou de
scripts.

Les utilisateurs habitués à utiliser l'un ou l'autre système Unix ne


parlent que très rarement de « terminal ». Par exemple, l'on trou-
ve beaucoup de questions sur les forums (Web ou Usenet) d'utili-
sateurs débutants qui désirent « apprendre le terminal ». Cela ne
veut pas dire grand-chose : l'on n'apprend pas à utiliser le termi-
nal, mais bien le « shell »... De même, l'on parle plus souvent de
« lancer un shell » que de « lancer un terminal ».

Cependant, puisque Apple a décidé d'appeler l'application per-


mettant d'obtenir un shell « Terminal », de nombreux utilisateurs
18 Aide-mémoire Unix pour Mac OS X

de Mac OS X ont associé le système Unix avec le nom « Terminal »


et la signification de ce mot commence à changer. Pour ne pas
embrouiller les esprits, nous nous sommes contentés de faire
comme tout le monde en appelant cette section « Le Terminal ».

Lancer le Terminal
Le Terminal se trouve, par défaut, dans le répertoire Applications
/ Utilitaires. Ne le confondez pas avec la console (qui se contente
de logger les messages d'erreur et/ou de déboguage).

Si vous utilisez régulièrement le terminal vous pouvez créer un


raccourci (alias) sur le bureau (bouton droit puis Créer un alias si

La fenêtre du Terminal de Mac OS X.


Le Terminal 19

vous avez une souris avec deux boutons, pomme-click puis Créer
un alias si vous avez une souris avec un seul bouton).

Démarrer en mode console


Un autre terme, presque synonyme de terminal, est le mot
« console ». Sachez que si vous demandez à Mac OS X de ne pas
démarrer automatiquement mais plutôt de présenter l'écran de
connexion, vous avez la possibilité de démarrer le système en
mode texte !

Si vous êtes curieux, vous pouvez essayer : ce n'est pas tous les
jours qu'on voit un Mac fonctionner en mode texte !

Voici la démarche à suivre :

– dans les Préférences Système, choisissez de modifier les


Comptes (sous la rubrique Système) ;
– dans l'onglet Options d'ouverture de session, demandez que
l'ouverture de session se fasse par nom et mot de passe (au lieu
de liste d'utilisateurs).
Ensuite, vous pouvez fermer la session en cours. Dans le menu
Apple, demandez à fermer la session (ou utilisez le raccourci
<POMME>+<SHIFT>+<Q>).

Vous vous retrouverez alors devant l'écran de connexion des utili-


sateurs : entrez le nom « >console » (sans les guillemets, mais avec
le signe « > ») comme nom, sans mettre de mot de passe.
20 Aide-mémoire Unix pour Mac OS X

Vous vous retrouvez alors devant l'invite suivante :

Darwin/BSD (speedster.local.) (console)


login:

Sachez cependant que le clavier sera en mode qwerty et qu'il


n'existe pas, à l'heure actuelle, de procédure simple pour configu-
rer le clavier en disposition française.

Nous vous conseillons toutefois plus que fortement de travailler


avec un terminal virtuel travaillant dans une fenêtre de l'interfa-
ce graphique Aqua, là au moins le clavier fonctionne correcte-
ment !

Les premiers contacts


Comme vous pouvez le voir sur la capture écran page 18, lors de
l'ouverture du terminal quelques informations sont disponibles :

Last login: Tue Mar 11 13:55:37 on ttyp1


Welcome to Darwin!
[speedster:¬] pierre%

Le système vous indique la dernière fois que vous vous étiez


connecté. La date et le message d'accueil sont en anglais, c'est nor-
mal : vous verrez, lorsque vous travaillez avec le système Unix,
que bien peu de choses ont été traduites. Même certains réper-
toires reprennent leur appellation anglaise : ainsi Utilitaires
devient Utilities !
Le Terminal 21

La fenêtre du terminal s'intitule « Terminal - ttyp1 ». La dénomi-


nation « ttyp1 » signifie qu'il s'agit du premier terminal virtuel. Il
est tout à fait possible de lancer plusieurs terminaux virtuels,
comme le montre la capture écran ci-dessous.

Enfin, la dernière ligne est l'invite de commande du shell, qui


attend vos commandes.

Un système multi-utilisateurs
Mac OS X est un système d'exploitation véritablement multi-
tâches et multi-utilisateurs. Il est dès lors possible de connecter
simultanément plusieurs utilisateurs (ou plusieurs fois le même
utilisateur) au système.

Trois terminaux virtuels ouverts simultanément, dont deux


ont été lancés depuis le premier.
22 Aide-mémoire Unix pour Mac OS X

Si votre système n'est pas relié à un réseau interne, vous pouvez


tout de même profiter du côté multi-utilisateurs en lançant diffé-
rents shells.

A priori, recourir à différents terminaux ne vous semble peut-être


pas utile. Toutefois, lorsque l'on travaille sur son Mac, on est un
utilisateur « normal », tandis que certaines commandes doivent
parfois être exécutées avec des privilèges particuliers (nous en
verrons bientôt plus sur le compte root). Ou encore, certaines
tâches monopolisent parfois le terminal (par exemple la com-
mande top) : il est alors bien pratique d'avoir un autre terminal à
disposition.

Remarque
Avant d'essayer de lancer vous-même plusieurs shells,
lisez la section page 28 sur le « complètement » automa-
tique, qui vous évitera bien des fautes de frappes.

Créer un nouveau compte utilisateur


En travaillant avec le shell, et plus particulièrement en expéri-
mentant les différentes commandes Unix, il est possible de déré-
gler tout le système ou d'effacer tous vos fichiers personnels.

Pour se prémunir d'une telle mésaventure, je vous conseille forte-


ment de créer un nouveau compte utilisateur et d'utiliser ce der-
nier pour réaliser vos expériences. En effet, puisqu'un utilisateur
n'a pas le droit de modifier ni le système, ni les fichiers des autres
Le Terminal 23

utilisateurs, les dégâts que vous pourriez occasionner resteront


limités.

Dans les exemples d'utilisation des commandes de cet ouvrage,


vous verrez bien souvent revenir l'utilisateur nommé « pierre »
que nous allons créer de suite : dans les Préférences Système, choi-
sissez les Comptes (rubrique Système) puis ajoutez un utilisateur
(Nouvel Utilisateur).

L'utilisateur root
L'utilisateur root est quelque peu particulier puisqu'il représente
l'administrateur du système. L'administrateur a absolument tous
les droits sur le système. Dès lors, il peut, par exemple, modifier
ou supprimer n'importe quel fichier. Il est donc possible, en fai-
sant une fausse manœuvre, d'endommager le système de manière
irréversible.

Donc, contrairement aux autres systèmes Unix, Apple a décidé


que, sur Mac OS X, le compte root serait désactivé par défaut.

Cela ne veut pas dire qu'il est impossible d'exécuter une com-
mande en tant que root (voir commande sudo, page 205) et certai-
nement pas non plus qu'il n'est pas possible de tout dérégler sans
être l'utilisateur root. Simplement, c'est une mesure de précau-
tion plutôt intelligente prise par Apple.

Si vous désirez activer le compte root, il suffit tout simplement de


donner un mot de passe au compte root... A vos risques et périls !
24 Aide-mémoire Unix pour Mac OS X

Remarque
Il n'est pas possible d'endommager physiquement l'ordina-
teur, donc il sera toujours possible, au pire, de réinstaller
Mac OS X en partant de zéro. Il serait toutefois dommage
que vous soyez amené à utiliser cette solution.

Le shell
Le shell est un programme utilisé pour lancer des commandes
UNIX ou, éventuellement, d'autres programmes (il est ainsi pos-
sible d'utiliser le shell pour lancer directement, par exemple,
iTunes depuis le nom d'un fichier mp3 – voir commande
open, p. 177).

Le shell vous propose une invite (généralement # ou $ ou %) et


attend vos instructions.

Il existe une multitude de shells (sh, bash, csh, ksh, tcsh, etc.), cha-
cun disposant de ses particularités. Tous ces shells ont toutefois
évolué en reprenant bien souvent les caractéristiques les plus
intéressantes les uns des autres, si bien qu'aujourd'hui, sans être
identiques, ils se ressemblent tous.

Après le Bourne shell et ses variantes, le shell le plus utilisé sur les
systèmes UNIX est le C shell et ses variantes (qui proposent notam-
ment, lorsque l'on crée des scripts, des structures de programma-
tion proches du langage).

Le bash (Bourne again shell) est un shell interactif issu du projet


GNU, utilisant la syntaxe Bourne shell et de nombreuses caracté-
ristiques d'autres shells (par exemple le « complètement » auto-
Le Terminal 25

matique des noms de commandes et de fichiers, historique des


commandes, etc.).

Le Tcsh est un shell basé sur le C shell, c'est le shell installé par
défaut sur Mac OS X.

Ne vous en faites pas si tout cela vous semble un peu confus ; nous
n'utiliserons que deux shells différents (tcsh et bash) et, de plus,
ils ont beaucoup de points communs.

Le shell par défaut


Le shell fourni par défaut avec Mac OS X est le shell tcsh. Si vous
n'avez pas de préférence quant au shell que vous comptez utiliser,
nous vous conseillons d'utiliser le shell bash (tandis que si vous
avez une préférence quant à votre shell, c'est que vous êtes un uti-
lisateur averti de UNIX et cet ouvrage ne vous est dès lors pas des-
tiné !).

Pour modifier le shell par défaut utilisé par l'application


Terminal, rendez-vous dans l'option Préférences... du menu
Terminal et cochez la case Exécutez cette commande. Modifiez
26 Aide-mémoire Unix pour Mac OS X

ensuite /bin/tcsh en /bin/bash comme sur la capture écran à la


page précédente.

Une autre solution, plus radicale, consiste carrément à modifier le


shell par défaut d'un utilisateur. Pour ce faire il faut utiliser l'utili-
taire NetInfo (Applications/Utilitaires) et modifier le shell de
l'utilisateur concerné (dans Users) en changeant, à l'entrée shell,
tcsh en bash .

Modification du shell par défaut sous NetInfo.

Remarque
Rien n'empêche un utilisateur d'avoir le shell bash par
défaut et un autre utilisateur le shell tcsh. En effet,
chaque utilisateur a ses propres préférences (sauvegar-
dées dans divers fichiers de configuration).
Le Terminal 27

L'invite
Par défaut, l'invite que le shell propose lorsque vous êtes un utili-
sateur « normal » est le « % » (sous tcsh) ou le dollar « $ » (sous
bash). Lorsque vous êtes root, l'invite se transforme en dièse « # ».

Généralement, la ligne contenant l'invite contient également


d'autres informations, telles le nom d'utilisateur, le répertoire
courant, etc.

Par exemple, en démarrant l'application Terminal, si l'on a


demandé le shell bash par défaut, l'on obtiendra l'invite suivante :

bash-2.05a$

Ensuite, l'on demande au shell bash de lancer le shell tcsh :

bash-2.05a$ tcsh
[speedster:~] pierre%

L'invite ci-dessus est caractéristique du shell tcsh (le « % »). A pré-


sent, l'on demande à lancer un shell bash en tant que super-utili-
sateur (voir sudo p. 205) :

[speedster:~] pierre % sudo bash


bash-2.05a#

L'on peut constater que le shell indique bien à présent l'invite


caractéristique de l'utilisateur root (« # »).
28 Aide-mémoire Unix pour Mac OS X

Pour modifier l'invite, il faut modifier, sous bash, la variable PS1


(voir p. 185) et, sous tcsh, la variable PROMPT.

Pour rendre les modifications permanentes, il faut les placer dans


un fichier de configuration du shell (par exemple bashrc pour
bash, voir p. 68).

Le « complètement » automatique
Le shell est capable de compléter automatiquement les noms que
vous entrez, à l'aide de la touche <TAB>. Ainsi, vous n'avez qu'à
entrer les premières lettres d'un nom (nom d'une commande,
nom de fichier, nom de variable, etc.) et à appuyer sur la touche
<TAB> pour que le nom se complète. Voici un exemple illustrant
cette fonction du shell :

$ bun<tab>
$ bunzip2 ar<tab>
$ bunzip2 articles.bz2 <entrée>

Au lieu de taper « bunzip2 » en entier, seules les trois premières


lettres sont entrées et le shell comprend, lorsque l'on utilise la
touche <TAB>, qu'il doit trouver le nom d'une commande com-
mençant par « bun ». Après que le shell ait trouvé le nom de la
commande, vous tapez les deux premières lettres du nom d'un
fichier et appuyez à nouveau sur <TAB>. Le shell comprend que
c'est à présent un nom de fichier qui est entré et recherche le
fichier dont le nom commence par « ar ». En fin de compte, au
Le Terminal 29

lieu d'utiliser 22 frappes, vous n'en utilisez que huit, avec, de plus,
moins de risques de commettre des fautes !

Cela ne fonctionne pourtant pas toujours aussi bien que cela,


parce qu'il faut donner suffisamment d'informations pour que le
shell devine la suite du nom. Par exemple, si vous tapez « ta » puis
<TAB>, il ne se passe rien (ou éventuellement un le haut-parleur
émet un bip). En effet, plusieurs noms de commande commen-
cent par « ta » (pour que le shell puisse compléter, il ne doit y
avoir aucune ambiguïté). Ne désespérez cependant pas, vous pou-
vez afficher la liste de ces commandes en appuyant une deuxième
fois sur <TAB> (du moins sous bash) :

$ ta<tab><tab>
tack tail talk tar

Remarques
– Cette fonction est tellement pratique que tous les utili-
sateurs habitués aux systèmes Unix y ont recours. Nous
vous conseillons d'ailleurs de l'essayer de suite afin que
vous ne l'oubliiez pas... Vous verrez : vous ne pourrez plus
vous en passer !

– Si vous appuyez deux fois sur <TAB> alors que la ligne de


commande est vide, le shell va rechercher toutes les com-
mandes susceptibles d'être lancées et vous obtenez alors,
après que le disque dur ait travaillé quelque peu, un mes-
sage tel le suivant :

bash-2.05a$ <tab><tab>
30 Aide-mémoire Unix pour Mac OS X

Display all 757 possibilities? (y or n)

Il y a dans ce cas-ci plus de 700 commandes Unix dispo-


nibles sur le système... Sur d'autres systèmes, cela peut
approcher les 3.000 commandes disponibles. Vous com-
prendrez dès lors qu'il a fallu effectuer une sélection et
que cet aide-mémoire, en quelque 250 pages, ne saurait
être exhaustif !

L'historique
Les shell bash et tcsh gardent tous deux un historique des com-
mandes, ce qui veut dire qu'ils gardent la trace des dernières com-
mandes exécutées.

Il est ainsi possible de récupérer les dernières lignes tapées en uti-


lisant les touches de direction (les flèches haut et bas du clavier).

C'est très pratique, par exemple, pour corriger une ligne de com-
mande erronée :

$ find /Users/pierre -nae "*mp3"


/Users/pierre/: -nae: unknow option

Ci-dessus, la ligne de commande contient une erreur : nous avons


écrit « nae » au lien de « name ». Dès lors, plutôt que de retaper
toute la ligne, on la récupère en appuyant sur la flèche vers le haut
du clavier et on peut la corriger en s'y déplaçant à l'aide des flèches
gauche et droite.
Le Terminal 31

Remarque
Tout comme pour la fonction de « complètement » automa-
tique, la fonction d'historique des shells est tellement pra-
tique que nous vous conseillons de l'essayer de suite, afin
que vous ne l'oubliiez jamais.

Les fichiers de configuration


Le shell charge automatiquement au démarrage des fichiers de
configuration. Par exemple, si le fichier .bashrc existe dans le
répertoire d'un utilisateur, il est exécuté lorsque cet utilisateur
ouvre un nouveau shell. Ci-dessous, l'utilisateur pierre a un
fichier .bashrc dans son répertoire principal. Ce fichier contient
une seule commande, qui affiche « Bonjour le monde ! » à chaque
fois qu'un nouveau shell est créé. Pour le démontrer, l'utilisateur
appelle un nouveau shell bash (depuis le shell courant) :

[pierre@speedster ~/ ] $ pwd
/Users/pierre
[pierre@speedster ~/ ] $ more .bashrc
echo "Bonjour le monde !"
[pierre@speedster ~/ ] $ bash
Bonjour le monde !
[pierre@speedster ~/ ] $ bash

Voir echo (p. 99), pwd (p. 189), bash (p. 66), .bashrc (p. 68)
32 Aide-mémoire Unix pour Mac OS X

Les commandes internes


Les différents shells comportent certaines commandes internes.
Par exemple aucun fichier ne correspond à la commande « cd »
(voir p. 76), il s'agit d'une commande interne au shell (bash ou
tcsh).

Les commandes which (voir p. 233) et type (voir p. 219) permet-


tent de vérifier si une commande est interne ou externe au shell.

Certaines commandes internes peuvent varier d'un shell à l'autre


(par exemple le shell tcsh reconnaît la commande unset alors
qu'elle n'existe pas sous bash).

Si une commande présentée dans cet ouvrage est interne au shell,


cela sera précisé dans sa description et, de plus, il sera précisé sous
quel shell (bash ou tcsh) elle est disponible.

Les variables du shell


Tout comme il est possible, sous le shell bash, d'obtenir la liste de
toutes les commandes en appuyant deux fois sur <TAB>, il est pos-
sible d'obtenir la liste de toutes les variables du shell en entrant :

bash-2.05a$ $<tab><tab>

Certaines variables d'environnement du shell seront présentées


dans cet aide-mémoire (notamment PS1 et PROMPT).
Le Terminal 33

La syntaxe des commandes


La syntaxe des commandes Unix est la suivante :

nom -options argument1 argument2...

Le nom de la commande est bien souvent soit un mot anglais se


rapportant à la commande, soit une abréviation d'un mot anglais
(par exemple rm pour remove).

Les options sont toujours précédées du caractère « - » afin de ne


pas les confondre avec les arguments. Les options sont générale-
ment précisées à l'aide d'une seule lettre. Si plusieurs options doi-
vent être passées en même temps à une commande, on peut soit
entrer les différentes lettres derrière le tiret, soit faire précéder
chaque lettre par le caractère « - ».

La plupart des commandes ont des options sélectionnées par


défaut. Dans ce cas, c'est indiqué dans les descriptions des options
dans les pages man (voir man p. 169).

Par exemple, pour afficher la liste (commande ls, voir p. 163) de


tous les fichiers du répertoire courant (même ceux qui sont
cachés, options « a ») avec toutes les informations disponibles
(nom de l'utilisateur, à qui appartient le fichier, date, taille...,
option « l »), on peut écrire :

ls -a -l

ou encore :

ls -al
34 Aide-mémoire Unix pour Mac OS X

Le ou les arguments représentent généralement le ou les fichiers


d'entrée de la commande. Par exemple, pour afficher le contenu
des fichiers filmJan2003.txt et filmFev2003.txt, l'on peut utiliser :

cat filmJan2003.txt filmFev2003

Tous les champs d'une ligne de commande (nom de la commande,


options, arguments) doivent être séparés par un caractère d'espa-
cement.

Remarque
Il est possible de faire exécuter plusieurs commandes Unix
sur une seule ligne. Pour cela, il faut séparer les différentes
commandes par des points-virgules (« ; »). Par exemple :

root# cd /Users/pierre; ls

Au secours, rien ne va plus !


Lors de vos premiers essais avec les commandes Unix, il se peut
que vous obteniez des messages d'erreur de type « permission
denied ». C'est normal : certains utilisateurs ont le droit de deve-
nir momentanément « super-utilisateur », d'autres non.

Lors de vos premiers pas avec le shell, il est peut-être plus prudent
de ne pas utiliser la commande sudo. Par la suite, si vous désirez
modifier le statut d'un compte utilisateur, rendez-vous dans
Préférences Système, Comptes (rubrique Système), Modifier utili-
sateur et cochez la case précisant que cet utilisateur doit pouvoir
administrer le compte.
Le Terminal 35

Remarque
Pour pouvoir cocher cette case, il faudra que vous utilisiez
un compte ayant l'autorisation d'administrer le système. Si
ce n'est pas le cas, fermez la session et connectez-vous
depuis un compte ayant ce privilège.

La substitution
Une substitution signifie que le shell remplace une expression
par son résultat (ou sa valeur). Il peut s'agir par exemple d'une
commande ou d'une variable. Cette substitution s'effectue avant
que le reste de la commande ne soit exécuté.

Le shell opère une substitution de commande lorsqu'il rencontre


la construction 'commande' (il faut faire très attention au caractè-
re « ' », il ne s'agit pas de l'apostrophe mais de l'accent grave – sur
les claviers français l'on trouve ce caractère sur la même touche
que la livre Sterling). Cette construction est valable et pour le
shell bash et pour le shell tcsh.

Voici un exemple de substitution de commande :

pierre% find /Users/pierre -iname "*film"


/Users/pierre/Documents/filmFev2003.txt
/Users/pierre/Documents/filmJav2003.txt
/Users/pierre/Music/musiqueFilm01.txt

La commande « find... » donne, comme résultat, le nom de trois


fichiers.
36 Aide-mémoire Unix pour Mac OS X

Donc, la commande :

pierre% ls -l 'find /Users/pierre -iname "*film*"'

est équivalente à la commande suivante (qui doit être entrée, dans


le shell, sur une ligne) :

pierre% ls -l /Users/pierre/Documents/filmFev2003.txt
/Users/pierre/Documents/filmJav2003.txt
/Users/pierre/Music/musiqueFilm01.txt

En effet, la commande comprise entre les accents graves a été


remplacée par son résultat.

Sous bash, il est possible d'utiliser la syntaxe $( commande ), qui


est équivalente à la substitution à l'aide des accents graves. Il est
également possible d'effectuer une évaluation d'une expression
mathématique en utilisant des doubles parenthèses ( $(( expres-
sion arithmétique )) ). Par exemple :

bash $ echo 1+2+3+4+5= $((5*6/2))


1+2+3+4+5=15

Remarque
Les substitutions, bien que parfois utiles lorsque l'on entre
une commande à l'invite, sont principalement utilisées
dans les scripts shells.
Le Terminal 37

Les permissions
Afin d'assurer le bon fonctionnement du système multi-utilisa-
teurs et la protection des informations, tous les fichiers sont dotés
de permissions d'accès.

Cela peut permettre d'éviter, par exemple, que l'utilisateur John


ne consulte les fichiers de l'utilisateur pierre. Cet exemple est sim-
pliste, car il est possible de définir des permissions bien plus avan-
cées...

Il existe trois types de permissions d'accès à un fichier :

– accès en lecture (read) ;


– accès en écriture (write) ;
– accès en exécution (execute).

Par rapport à un fichier, il existe différents types d'utilisateurs :

– utilisateur à qui appartient le fichier ;


– utilisateur appartenant au même groupe que celui du proprié-
taire du fichier ;
– autre utilisateur ;
– utilisateur root, qui est l'administrateur du réseau Unix.

L'utilisateur root peut, de toute façon, avoir accès à l'ensemble des


fichiers des utilisateurs du système : si les permissions d'un fichier
ne lui plaisent pas, il peut les changer !

Bref, pour un fichier, il existe trois types de permissions (r, w et x)


pour trois types d'utilisateurs (propriétaire, groupe et autres).
38 Aide-mémoire Unix pour Mac OS X

En utilisant la commande « ls -l » (voir p. 163), l'on peut voir les


permissions associées à un fichier :

pierre% ls -l Music/musiqueFilm01.mp3
-rwx-r-xr-x 1 pierre 1812830 Mar 12 17:50 Music/musiqueFilm01.mp3

Voici quelques exemples de permissions :

– rwxrwxrwx: n'importe qui a le droit de lire, d'écrire ou d'exécu-


ter le fichier (plutôt rare).
– rw-r-r--: tout le monde peut lire le fichier mais seul son proprié-
taire peut le modifier ;
– rwxr-xr-x: tout le monde peut lire et exécuter le fichier mais seul
son propriétaire peut le modifier;
– rw-r-----: le propriétaire du fichier a le droit de lire et d'écrire le
fichier. Les utilisateurs appartenant au même groupe que celui
du propriétaire ont le droit de lire le fichier. Les autres utilisa-
teurs ne peuvent même pas le consulter.

Il est à noter que le type de permission execute (x) concerne les


fichiers exécutables (fichier binaire, script shell) mais également
les répertoires !

Si vous n'avez pas la permission execute pour un fichier, vous ne


pouvez pas le lancer. Si vous n'avez pas la permission execute
pour un répertoire, vous ne pouvez pas accéder à son contenu.
Donc vous ne pouvez pas obtenir la liste des fichiers que ce réper-
toire contient.

Le message classique que l'on obtient lorsque l'on essaye d'accéder


à une ressource à laquelle on n'est pas autorisé est « Permission
denied ».
Le Terminal 39

Par exemple :

pierre% ls -l /Users/John/
.
drwx------ 5 carrera staff 170 Mar 11 14:16 Desktop
drwx------ 3 carrera staff 102 Mar 6 12:40 Documents
.
drwxr-x-r-x 4 carrera staff 170 Mar 6 12:40 Public
drwxr-x-r-x 4 carrera staff 170 Mar 6 12:40 Sites
.
pierre% ls /Users/John/Desktop
ls: : Permission denied
pierre% ls /Users/John/Public
travailDeGroupe1de2.txt
travailDeGroupe2de2.txt

L'on peut constater que, par défaut, Mac OS X autorise les diffé-
rents utilisateurs à consulter le répertoire Public de chaque utili-
sateur, mais que les autres répertoires sont privés.

Entrées et sorties de données


Les shells tirent parti de la possibilité offerte par les systèmes
Unix de rediriger les entrées/sorties des programmes. La plupart
des commandes utilisent ce que l'on appelle des entrées standard,
des sorties standard et des messages d'erreur standard.
40 Aide-mémoire Unix pour Mac OS X

Entrées standard
Les entrées d'un programme sont les données dont le programme
a besoin pour travailler. Ces entrées peuvent provenir de diffé-
rentes sources :

– du clavier ou de l'écran ;

– d'un fichier ;

– du système ;

– d'une autre commande.

La plupart des commandes peuvent travailler avec n'importe quel


type de source de données ; c'est pourquoi l'on parle d'entrées
standard (stdin). Par exemple, la commande more peut aussi bien
recevoir des données en provenance d'un fichier que des données
en provenance d'une autre commande.

Certaines commandes n'obtiennent leur entrée que d'une seule


source. L'exemple le plus courant d'une telle commande est la
commande date :

pierre% date
Wed Mar 12 20:27:38 CET 2003

Ici, les données servant d'entrée à la commande proviennent du


système.

Sorties standard
Les sorties d'un programme sont le ou les résultats fournis par un
Le Terminal 41

programme. Ces sorties peuvent atteindre différentes


destinations :

- l'écran ;
- un fichier ;
- le système ;
- une autre commande.

La plupart des commandes peuvent envoyer leurs sorties vers dif-


férentes destinations, c'est pourquoi l'on parle de sorties standard
(stdout). Par exemple, la commande ls envoie son résultat vers
une sortie standard qui est, par défaut, l'écran.

Certaines commandes ne travaillent pas avec la sortie standard.


C'est le cas, notamment, des commandes travaillant avec des
fichiers (cp, rm, mkdir, etc.).

Redirection des entrées/sorties


L'entrée standard est le clavier tandis que la sortie standard est
l'écran (le terminal).

Le shell permet de rediriger les entrées et sorties. En utilisant la


redirection, les entrées et sorties peuvent travailler avec des
fichiers en lieu et place du clavier et de l'écran.

Pour indiquer au shell qu'une redirection doit être effectuée, on


utilise un symbole de redirection. Il s'agit généralement des
signes « > » et « < ». Ces symboles se placent après les commandes
qu'ils concernent.
42 Aide-mémoire Unix pour Mac OS X

Voici les différents symboles de redirection :

symbole signification
< fichier utilise le fichier spécifié comme entrée standard
> fichier utilise le fichier spécifié comme sortie standard
>> fichier utilise le fichier spécifié comme sortie standard en
le complétant s'il existe déjà
2 fichier écrit les messages d'erreur dans le fichier spécifié
(sous bash uniquement)

Voici quelques exemples :

pierre % df > placeDisque.txt

Le résultat de la commande df (voir p. 90) est écrit dans le fichier


placeDisque.txt au lieu d'être affiché à l'écran.

% cat < urgent.txt

La commande cat affiche le contenu du fichier urgent.txt à l'écran


(c'est le comportement par défaut de la commande cat, même si la
redirection n'est pas précisée).

% cat < urgent.txt >> rappel.txt

La commande cat ajoute le contenu du fichier urgent.txt au


fichier rappel.txt. Si le fichier rappel.txt n'existe pas, il est créé.

Bash-pierre$ ls -z
ls: illegal option: -- z
Le Terminal 43

usage: ls [-1ACFLRSTWacdfgiklnoqrstux] [file ...]


bash-pierre$ ls -z 2> ls_erreur.txt

L'option -z n'est pas valide pour la commande ls, un message d'er-


reur est donc affiché. Dans le deuxième exemple, les messages
d'erreur sont redirigés, à l'aide du symbole de redirection d'erreurs
(2>), vers le fichier ls_erreur.txt. Puisque les messages d'erreur
sont redirigés vers un fichier, ils ne sont plus affichés à l'écran.

Remarque
Le symbole de redirection des sorties (>) est, dans la pra-
tique, plus souvent utilisé que le symbole de redirection
des entrées (<). Ceci est dû au fait que de nombreuses
commandes utilisent, par défaut, des fichiers comme
entrées. Il n'est donc pas nécessaire d'utiliser le symbole
de redirection. Par exemple :

more < urgent.txt

est équivalent à :

more urgent.txt

Les tubes
Les tubes (pipe en anglais) sont une variété de redirection des
entrées/sorties : ils permettent de connecter des commandes . La
différence, technique, entre les tubes et les redirections (par
exemple « > ») est qu'au moyen des premiers, les données ne tran-
sitent pas par un fichier.
44 Aide-mémoire Unix pour Mac OS X

Les commandes utilisant les tubes sont reliées par le symbole « | »


(voir remarque).

Par exemple, lorsqu'une commande affiche, comme résultat,


beaucoup d'informations à l'écran, il est intéressant de pouvoir
effectuer une pause après chaque page :

pierre$ ls / | less
Acrobat Reader 4.0
Adobe PhotoDeluxe 2.0
Applications
Applications (Mac OS 9)
ArcSoft PhotoBase
ArcSoft PhotoStudio
CanoScan Toolbox
Cleanup At Startup
Desktop (Mac OS 9)
Desktop DB
Desktop DF
Desktop Folder
:

Remarque
Le symbole « | » est vraiment très important lorsque l'on
utilise les commandes Unix. Il ne se trouve pas par défaut
sur votre clavier. Pour pouvoir l'entrer, il faut utiliser la
combinaison de touches suivante : <alt>+<L> . Il s'agit d'un
« L » majuscule, il faut donc combiner trois touches :
<alt> + <shift> + <l>.
Le Terminal 45

Les sorties de la commande ls sont envoyées directement à la com-


mande less (voir p. 152) et l'affichage du résultat de la commande
ls effectue donc une pause après chaque page.

Dans l'exemple suivant, l'on demande au shell de trouver tous les


fichiers du répertoire courant qui sont au format html :

pierre$ file * | grep html


01-2003.html : HTML document text
article.htm: HTML document text
cljp_faq.html : HTML document text

Il est également possible d'enchaîner plusieurs commandes sur


une seule ligne de commande :

[john ~/pictures/porsche/] $ file * | grep image | wc -l


42

La commande ci-dessus compte le nombre de fichiers images pré-


sents dans le répertoire courant (/Users/john/pictures/porsche/) :
il y en a 42.

Voir file (p. 106), grep (p. 121), wc (p. 230)


46 Aide-mémoire Unix pour Mac OS X

Remarque
Les redirections reflètent tout à fait la philosophie Unix :
plus les outils (commandes) sont simples, plus ils sont sûrs,
faciles à comprendre et faciles à utiliser. Dès lors, au lieu
d'écrire des tonnes de commandes pour répondre aux
besoins les plus divers des utilisateurs, on laisse la possi-
bilité à l'utilisateur de combiner des commandes simples,
afin de créer de nouvelles commandes, adaptées à ses
besoins.

Vous aimerez peut-être aussi