Généralités sur le Terminal

Terminal de Mac OS X

Le Terminal, situé dans le dossier "Utilities" du dossier "Applications" de Mac OS X est un logiciel qui pourra effrayer bien des habitués du Mac. Opposé, de par son principe même, à l'environnement graphique propre au monde Mac, il est d'un autre univers où pratiquement tout peut être exécuté en écrivant des lignes de code. Centre d'information et de pilotage intégral d'un système unix, outil d'édition et de programmation, il n'a rien de convivial, rien de très simple pour un non informaticien, mais pourra rendre bien des services à des béotiens l'utilisant avec la plus grande précaution.
Méfiez-vous : la puissance de cet outil est telle qu'une mauvaise instruction donnée pourrait avoir de graves conséquences sur le bon fonctionnement de votre système.

Les commandes

Envoyer une commande consiste généralement à écrire une drôle de formule magique sur une ligne du Terminal puis à presser la touche Retour du clavier (ou Return ou Enter, si vous préférez) pour la voir s'exécuter. Obtenir des informations sur le système, sur le hardware utilisé, sur la hierarchie des dossiers, sur leur contenu, fichiers invisibles y compris, sur les autorisations relatives à chaque élément, par exemple, mais aussi changer des autorisations, effacer ou déplacer un fichier ou un dossier, concaténer des fichiers, ouvrir, consulter et modifier le contenu de fichiers même s'ils sont invisibles, compresser des fichiers, se connecter à Internet, télécharger des fichiers sur Internet et j'en passe, représentent une petite partie des nombreuses opérations qui pourront être réalisées directement sur le Terminal et sans devoir ouvrir une seule autre application. Tout commencera par l'envoi du simple commande.

Un exemple de commande ? Lancez donc l'application Terminal, ne prêtez pas attention à l'expression qui s'inscrit (nous en parlerons un peu plus bas), tapez par exemple les deux lettres suivantes (la première est un "elle"...) et enfoncez la touche Retour :

ls

Vous verrez alors apparaître... la liste des fichiers et dossiers installés dans votre dossier d'utilisateur, dossier que nous appellerons à partir de maintenant "petit_nom" pour plus de commodité, ce dossier changeant de nom d'un utilisateur à l'autre.

La commande que vous venez d'envoyer est rudimentaire. Elle n'abrite aucune option ni paramètres. Relançons la mais en ajoutant une option supportée par cette commande en inscrivant cette fois :

ls -a

Résultat ? La liste de TOUS les éléments du dossier "petit_nom" apparaît cette fois : "TOUS", car même les éléments invisibles sont maintenant présentés.

Cette commande à option reste relativement simple : elle contient certes une option mais pas une seul paramètre particulier à gérer... Enrichissons-la donc de la manière suivante :

ls -a Documents

La touche Retour pressée, vous voyez maintenant s'afficher la liste de TOUS les éléments du dossier "Documents" du dossier "petit_nom"

Il est aussi possible d'associer plusieurs options, dès lors que ces options ne sont pas incompatibles. Entrez maintenant la formule magique suivante :

ls -l -a Documents

Vous voyez le résultat ! la première lettre ou le tiret trouvé au début d'une ligne identifie le type d'élément (tiret pour fichier et "d" pour dossier, ou plutôt "directory" puisque le Terminal parle anglais...) ensuite, vous trouvez le détail des autorisations en écriture, lecture et exécution, etc... etc... (vous trouverez tous les détails dans le manuel de l'unix dont l'activation est évoquée un peu plus bas).

Il est à noter que vous auriez aussi bien pu écrire la formule magique d'autres manières :

ls -la Documents
ou
ls -al Documents
ou encore
ls -a -l Documents

Le résultat aurait été le même. Vous voyez le principe même si, sur un point, il ne sera parfois pas applicable. Certaines options propres à certaines commandes ne pourront pas être placées dans n'importe quel ordre, telle option devant parfois toujours précéder telle autre.

Vous vous demandez probablement Mais comment connaître les options de chaque commande, comment savoir que telle petite lettre précédée d'un tiret peut activer quelque chose et qu'active-t-elle au juste ?

La réponse est aussi dans le Terminal. Envoyez donc cette nouvelle commande pour vous en convaincre :

man ls

Intéressant, n'est-ce pas ? Arrivé en bas de page, pour faire défiler la suite des informations, utilisez la touche Retour.
Précédée de la commande "man", l'expression "ls" n'est plus considérée par le Terminal comme une commande à exécuter mais comme une variable à traiter avec à la commande "man". La commande "man" affiche les références du manuel qui correspondent à l'expression "ls".

La commande "man" pourra être appliquée sur n'importe quelle commande intégrée dans l'unix d'Apple, même sur elle même. Envoyez donc maintenant cette commande :

man man

Vous aurez ainsi plus d'informations sur la commande "man" et découvrirez ses intéressantes options. Remarquez au passage la bonne ambiance qui peut règner dans le monde unix en lisant le paragraphe "BUGS". Les très sérieuses pages des très sérieux manuels des très sérieux unix sont assez souvent traversées par de belles notes d'humour ou par de superbes coups de gueule.

Les chemins d'accès

Désigner un fichier ou un dossier à traiter

Nous venons de voir que la commande :

ls

permettait d'obtenir le détail du contenu du dossier "petit_nom", lorsque la commande :

ls Documents

permettait d'obtenir le détail du contenu du dossier "Documents", dossier situé à l'intérieur du dossier "petit_nom".
En admettant que vous souhaitiez maintenant obtenir le détail du contenu d'un sous-dossier du dossier "Documents" et si ce sous-dossier se nomme "Sous_dossier", il faudra cette fois envoyer la commande suivante :

ls Documents/Sous_dossier

Vous avez donc, dans cette formule, d'une part la commande "ls" et d'autre part le chemin d'accès conduisant à l'élément sur lequel s'appliquera la commande.
Dans un chemin d'accès, le nom de chaque dossier à "ouvrir" est immédiatement suivi par un slash (caractère "/"). Le dernier nom d'un chemin d'accès ne comportant aucun slash est celui de l'élément pris en compte par la commande.
Ainsi, la commande suivante :

ls Documents/Sous_dossier/Sous_sous_dossier

aura pour effet d'afficher le contenu du dossier "Sous_sous_dossier" du dossier "Sous_dossier" situé dans le dossier "Documents" du dossier "petit_nom".

Point de départ des chemins d'accès

Le point de départ de tous les chemins d'accès trouvés dans les précédents exemples est toujours le même : il s'agit de votre dossier de départ, du dossier ouvert après chaque sélection de l'article "Départ" du menu "Aller" du Finder (ou en cliquant sur l'icône représentant une maison dans la barre d'outils d'une fenêtre du Finder), dossier appelé "petit_nom" dans le cadre de notre article mais portant, sur votre machine, votre petit-nom d'utilisateur. Ce qui est "Départ" pour le Finder l'est aussi pour le Terminal lorsqu'il est lancé.

Changer le point de départ des chemins d'accès

En ouvrant le Terminal, vous pourrez trouver l'expression suivante déjà inscrite dans sa fenêtre, expression qu'il vous sera impossible d'effacer :

[localhost:~] petit_nom%

Les expressions entre crochets ont cette signification : le terminal est prêt à travailler à partir du dossier de départ (le caractère "~" n'étant pas suivi du moindre chemin d'accès vers d'autres dossiers), dossier se trouvant sur la machine "localhost", donc sur l'ordinateur que vous utilisez et non pas sur une machine reliée en réseau à votre ordinateur. L'expression hors crochets indique le nom de l'utilisateur du Terminal. Dans ce cas de figure le nom du dossier de départ et le nom de l'utilisateur sont le même : "petit_nom".

Admettons que vous vouliez maintenant utiliser le dossier Pictures comme point de départ. Grâce à la commande "cd" (abréviation de "change directory") rien n'est plus simple :

cd Pictures

Le Terminal répond favorablement à l'envoi de cette commande en affichant la formule suivante :

[localhost:~/Pictures] petit_nom%

Le Terminal est donc maintenant prêt à travailler à partir du dossier "Pictures" du dossier de départ du Finder ou dossier "petit_nom". Dès à présent, tous les chemins d'accès à définir dans le Terminal devront partir du dossier "Pictures" et non plus du dossier "petit_nom".
L'intérêt ? Imaginons que vous vouliez compresser en même temps de nombreuses images à l'aide du Terminal et que la majorité de ces images soient situées dans le dossier "Pictures". Dans ce cas, l'intérêt serait certain. En effet, vous pourriez donc désigner la majorité des images à compresser en n'inscrivant que leurs noms, cette majorité d'images se trouvant dans ce qui est devenu le dossier de départ, aucun chemin d'accès ne serait à préciser. Pour les autres images, tout ne sera pas aussi simple.

Revenir au point de départ initial

Tapez "cd" et rien d'autre puis pressez le bouton Retour.
Le dossier "petit_nom" sera à nouveau pris dossier de départ.

Accéder au dossier supérieur

Il est possible de définir des chemins d'accès pointant sur des dossiers qui ne seraient pas inclus, directement ou indirectement, dans le dossier de départ. Pour remonter d'un niveau dans la hiérarchie des dossiers, l'expression "../" est à insérer au début du chemin d'accès.

Exemple : depuis l'envoi de la commande précédente, votre dossier de départ est le dossier "Pictures". Or vous souhaitez, en partant encore de ce dossier, désigner dans une commande un élément nommé "Element" et situé dans le dossier "Documents" du dossier "petit_nom".
Pour atteindre cet élément, il faut donc sortir du dossier "Pictures", dossier de départ, et entrer ensuite dans le dossier "Documents". Ce qui donne le chemin d'accès suivant :

../Documents/Element

"../" donne à sortir du dossier Pictures pour entrer dans le dossier "petit_nom" qui l'abrite. Puisque le dossier "Documents" est directement situé dans le dossier "petit_nom", il suffit d'inscrire son nom et de l'ouvrir pour accéder enfin à l'élément voulu.

Si le point de départ n'avait pas été le dossier "Pictures" mais un de ses sous-dossiers, le chemin d'accès aurait été :

../../Documents/Element

"../" répété X fois permettant de remonter de X niveaux dans la hiérarchie.

les chemins d'accès "absolus"

Nous n'avons jusqu'à présent fait qu'aborder le thème des chemins d'accès dits "relatifs". "Relatifs" parce que relatifs à l'emplacement d'un dossier de départ. Les chemins d'accès dits "absolus" ne changent jamais de point de départ. Ils commencent toujours au niveau "Ordinateur" (niveau affiché après avoir sélectionné "Ordinateur" dans le menu "Aller" du Finder, par exemple), à la racine du disque dur.
Le Terminal distinguera aisément un chemin d'accès absolu d'un chemin d'accès relatif. A la différence d'un chemin d'accès relatif, un chemin d'accès absolu commencera toujours par un slash (caractère "/"). Ce slash invite le terminal à ne pas prendre en considération le dossier de départ.
Le chemin d'accès absolu pointant sur votre dossier d'utilisateur sera :

/Users/petit_nom

Pour désigner un élément nommé "Element" situé dans le dossier "Documents" de votre dossier d'utilisateur, il faudra écrire :

/Users/petit_nom/Documents/Element

Lorsque "Element" se trouve plutôt dans un dossier nommé "Dossier" situé au premier niveau d'une partition nommée "Partition", le chemin d'accès absolu devient :

/Volumes/Partition/Dossier/Element

Inscrire le chemin d'accès absolu d'un élément en une seconde

Attrapez l'icône de l'élément et lâchez cette icône sur la fenêtre du Terminal

Désigner un élément en n'indiquant qu'une partie de son nom

Si le Terminal ne peut pas voir plus loin qu'à l'intérieur de son dossier de départ, s'il faut prendre la peine de lui indiquer des chemins d'accès pour qu'il en soit autrement, le Terminal voit plutôt bien dans son dossier de départ, assez bien pour être capable de reconnaître un élément désigné par vos soins dans une commande, même si vous ne faisiez pas l'effort d'inscrire la totalité de son nom.
Vous pourriez n'inscrire que le début du nom, que la fin du nom, ou ne pas inscrire une partie des caractères inclus dans ce nom. Principale contrainte : le caractère astérisque devra impérativement être utilisé en remplacement des élément que vous ne voudriez pas prendre la peine d'inscrire.

Si vous voulez n'indiquer que le début d'un nom, faites suivre ces premières lettres d'un seul astérique.
Pour n'indiquer que la fin d'un nom, placez l'astérisque au début du nom, il remplacera à lui seul toutes les première lettres que vous ne jugeriez pas utile d'inscrire.

Un seul astérisque saura aussi remplacer plusieurs caractères normalement trouvés au coeur d'un nom.

Pour que les choses soient bien claires, voici quelques commandes à tester sur votre ordinateur.
Envoyez tout d'abord la commande "cd" tout court pour revenir au niveau du dossier "petit_nom", si nécessaire. Les commandes ne donneront sinon pas les résultats escomptés.
Admettons que vous vouliez que le dossier "Documents" du dossier "petit_nom" deviennent le dossier de départ.
Vous décidez de vous contenter de taper la première lettre de "Documents" et de coller un astérisque pour tout le reste, le terminal devant alors que vous voulez donner le statut de dossier de départ à un dossier dont le nom commence par un D. Vous envoyez donc la commande suivante :

cd D*

Malheureusement, le terminal affiche un joli message d'erreur en réponse : "ambiguous". Et nous le comprenons. Il existe en effet au moins deux dossiers dont le nom commence par un D dans le dossier "petit_nom". Entre "Desktop" et "Documents", le Terminal ne sait pas quel dossier choisir. Vous décidez donc de lui donner quelques précisions en envoyant maintenant cette commande :

cd Do*

De deux choses l'une, soit le Terminal valide le changement en affichant :

[localhost:~/Documents] petit_nom%

soit le message "ambiguous" est renvoyé et il faut en déduire qu'un autre élément (dossier ou fichier) que le dossier "Documents" est aussi situé dans le dossier "petit_nom" et porte aussi un nom commençant par "Do".

Imaginons que le message "ambiguous" ait été renvoyé à cause de la présence d'un dossier nommé "Documentation".
Voyant que "Documents" se termine par un "s" et pas "Documentation", vous pourriez décider maintenant d'envoyer cette nouvelle commande :

cd Do*s

Sauf exception (autre dossier ou fichier présent dont le nom commencerait par "Do" et finirait par "s") le changement de dossier de départ aurait enfin lieu.
Dans ce cette hypothèse, "Do*s" ne serait donc pas l'argument le plus court à utiliser :

cd D*s

produirait le même bon résultat, le mot "Desktop" ne se terminant pas, comme le mot "Documentation", par un "s" à la différence du mot "Documents". Vous faisiez alors d'une pierre deux coups.

Vous devez maintenant vous en rendre compte, l'usage des asterisques fera vraiment gagner du temps à condition d'avoir en tête ou sous les yeux la liste des dossiers ou/et fichiers abrités dans le dossier d'un élément à désigner avec cette méthode (NB. nous n'avons fait référence qu'à des dossiers dans nos exemples que parce que la commande "ls" utilisée ne s'applique qu'à des dossiers). Sinon, les "ambiguoustés" pourraient bien être au rendez-vous et demander plus de temps pour être résolues qu'il n'en faudrait pour inscrire en toutes lettres le nom de fichier à traiter.

Pour finir, sachez qu'un ou plusieurs astérisques pourront intervenir, si vous le souhaitez, dans la définition d'un chemin d'accès. En imaginant que le dossier "Documents" abrite un seul dossier nommé "Sous_documents", vous pourriez très bien afficher son contenu en rédigeant la commande ainsi :

ls D*s/Sous_documents

Afficher la liste de tous les éléments abrités dans un dossier (du contenu de tous ses sous-dossiers y compris)

ne pas utiliser la commande "ls" mais la commande "find".

Pour reprendre en partie l'exemple précédent :

find D*s

Afficher la liste des dossiers abrités et de leur contenu immédiat (1 niveau)

ls *

affichera le contenu du dossier de départ. Si le dossier de départ abrite des dossiers, le contenu de chaque dossier sera détaillé.

Pour afficher le même type d'informations concernant le contenu d'un dossier qui ne serait pas le point de départ, le chemin d'accès au dossier doit être inscrit suivi d'un slash puis de l'astérisque.
Ainsi pour obtenir des informations sur le contenu du dossier "Documents" et des dossiers qu'il abrite lorsque le dossier de départ est le dossier "petit_nom" (envoyez la commande "cd" tout court pour qu'il en soit ainsi...) vous pourrez par exemple utiliser la formule :

ls Documents/*

Les pièges à éviter

Nom des applications pour Mac OS X

Le Finder indique le nom des applications spécialement conçues pour Mac OS X en nous

cachant leur suffixe ".app".
Pour le Terminal, ce suffixe est pourtant bien présent.
Désigner, dans une commande de Terminal, une application spécialement conçu pour Mac OS X sans ajouter ce suffixe, ne permettra pas à la commande d'aboutir, le Terminal avouant ne pas avoir pu trouver l'application (pour compresser "TextEdit", par exemple, il faudra donc inscrire "TextEdit.app" dans la commande).

Noms de dossiers et de fichiers : caractères trop "spéciaux"

Evitez de nommer vos dossiers et fichiers en faisant usage de caractères spéciaux. Et par "caractères spéciaux", j'ai malheureusement compris à l'usage qu'il fallait aussi entendre caractères accentués. Le Terminal semble en effet incapable de gérer directement de tels caractères.
Entrer, par exemple, des caractères non accentués à la place des caractères accentués utilisés dans les noms de dossiers et de fichiers ne permettra pas au Terminal de reconnaître dossiers et fichiers.
De plus, l'astuce consistant à lâcher sur la fenêtre du Terminal l'icône de l'élément à désigner ne fonctionnera pratiquement jamais...

Qu'un seul fichier ne soit pas reconnu et aucune opération ne pourra être effectuée dans une commande chargée de traiter différents fichiers...
Désigner, dans une commande, un élément comportant caractères accentués et spéciaux n'est cependant pas impossible. L'opération à effectuer, simple en apparence, ne sera pas toujours une partie de plaisir. Elle pourra aussi donner des résultats assez illisibles, le nom d'origine pouvant avoir tendance à devenir méconnaissable.
L'idée est d'utiliser à nouveau le caractère astérisque ("*") pour ne pas devoir entre un ou plusieurs caractères spéciaux, ou toute une chaîne de caractères, tout en permettant au Terminal de reconnaître les noms, traduisant les caractères spéciaux de son propre langage.
Il est à noter que ne pas faire précéder un espace d'un slash inversé (caractère "\" obtenu par la combinaison de touches ALT-MAJ-:) pourra, dans certaines circonstances, ne pas permettre au Terminal de reconnaître l'élément que vous cherchez à désigner.

Prenons quelques exemples. Admettons que votre dossier "petit_nom" abrite à la fois un dossier nommé "Prêté à l'âne" un dossier nommé "Prêté à l'âme"  et qu'aucun autre nom de dossier ou de fichier du dossier "petit_nom" ne commence par "P" à l'exception du dossier "Pictures" :

P*ne

pourra donc par exemple être inscrit pour désigner l'élément "Prêté à l'âne" (si vous ne voyez pas en quoi, vous avez probablement sauté un paragraphe important) puisqu'aucun autre élément du dossier "petit_nom" ne possède de nom commençant par "P" et se terminant par "ne".
Grâce à ce procédé, le terminal ne pourra que prendre en compte l'élément bourré de caractères bien français que vous lui indiquez. Très bien sauf que le Terminal traduira ensuite ces caractères avec des formules qui n'auront rien de très présentables...
Pour illustrer cette traduction, imaginons maintenant que nous voulions faire du dossier "Prêté à l'âne" le nouveau dossier de départ. Il faudra donc envoyer cette commandande :

cd P*ne

Le Terminal reconnaîtra le dossier ainsi désigné, le transformera en dossier de départ, et renverra la longue ligne suivante abritant la traduction maison de "Prêté à l'âne" :

[localhost:~/Pre\314\202te\314\201 a\314\200 l'a\314\202ne] petit_nom%

Clair et pratique, n'est-ce pas ?
D'où l'intérêt, pour qui voudrait explorer l'univers unix plus en profondeur et dans les meilleures conditions, d'éviter autant que possible de créer des fichiers et dossiers dont les noms comporteraient des tels caractères...

Mise entre apostrophes - espaces et caractères spéciaux

Lorsqu'un nom comportant un ou plusieurs espaces est présent dans un chemin d'accès, le chemin d'accès doit être placé entre apostrophes.
Lorsqu'un nom comportant un caractère spécial est présent dans un chemin d'accès, la totalité du chemin d'accès doit être aussi placé entre apostrophes. Un nom sans chemin d'accès comportant un espace ou/et un caractère spécial devra toujours être, lui aussi, encadré par deux apostrophes.
Lorsque le caractère astérisque ("*") est utilisé pour remplacer une chaîne de caractères abritant espaces et/ou caractères spéciaux, les apostrophes ne sont pas à utiliser.

Pour désigner, par exemple, le dossier "le dossier" du dossier "petit_nom" pris pour point de départ, il faudra écrire :

'le dossier'

Pour désigner le dossier "autre dossier" du dossier "Documents" du dossier "petit_nom" pris pour point de départ, il faudra inscrire :

'Documents/autre dossier'

Si "autre dossier" pouvait être identifié par "a*r" (reconnu en n'indiquant que la première et dernière lettre de son nom), utilisant ce raccourci, l'absence d'apostrophes s'imposerait :

Documents/a*r

Trouvant un espace, sans apostrophes, le Terminal considérerait sinon que vous cherchez à désigner deux éléments séparés, et non un seul élément en deux parties reliés par un espace.

Eliminer espaces et caractères spéciaux

Remplacer les caractères accentués par des caractères non accentués, et les espaces par des tirets bas évitera de devoir mettre des expressions entre apostrophes, de devoir jongler avec l'astérisque de substitution et permettra de définir facilement les chemins d'accès absolus en lâchant l'élément voulu dans une fenêtre du Terminal.
Ne pas prendre cette habitude maintenant vous éloigne de l'unix et pourra, à l'avenir, rendre compliquées toutes les opérations normalement simples à effectuer avec le Terminal.
De surcroît, ne pas prendre de telles résolutions pourra peut-être constituer un grand handicap si vous souhaitez ne serait-ce qu'utiliser votre iMac comme serveur web ou serveur de fichiers (ftp) ou s'il vous prenait simplement l'envie de relier votre ordinateur à un réseau local de machines utilisant d'autres systèmes d'exploitation. Via réseau local ou Internet, ces espaces et caractères spéciaux pourraient être mal reçus par des machines non Apple connectées à votre ordinateur.

Autres commandes en détails

Nous avons vu comment désigner un élément dans une commande, comment obtenir des informations sur les dossiers et leur contenu (commande "ls"), comment changer le dossier de départ (commande "cd"), comment consulter le manuel pour obtenir des informations détaillées sur chaque commande (commande "man"), découvrez maintenant des fonctions plus avancées du Terminal

Compresser à l'aide du Terminal...

transp iMac OS X
logo iMac & Mac OS X
 
page d'accueil de la rubrique Mac OS X

Rudiments
avant de se lancer dans un téléchargement

formats de compression et d'applications sous Mac OS X

ressources de fichiers et Mac OS X

découverte du Terminal

compresser à l'aide du Terminal

activer le compte root

que conserver après installation des Developer Tools d'Apple





Copyright © 2001 Bruno Lapeyre