Académique Documents
Professionnel Documents
Culture Documents
La ligne de commonde
par l’exemple
VINCENT FOURMOND
Développeur Debian
Ancien élève de l’École Normale Supérieure
Chargé de recherche au C.N.R.S.
En un clin d’œil
2. Kit de survie 17
1. Pourquoi utiliser la ligne de commande ? 11
3. Les outils de l’utilisateur 47
4. Gérer le temps et le réseau 73
5. Le shell à votre service 91
6. Les outils du sorcier 111
7 conseils 157
7. Lire et écrire des programmes 137
7 pièges à éviter 158
Comment trouver de l’aide ? 159
Et si l’on n’utilise pas bash ? 160
Lexique 165
Index 169
Installation de programmes 162
Je souhaite exprimer mes vifs remerciements à (dans le désordre) Jean-Julien
Fleck, Arnaud Borde, Stéphane Ravier, Vincent Danjean, Stéphane Tougard,
Marc Gingold, Sébastien Desreux, Walter Appel, Céline Chevalier, Emmanuel
Cornet et Jean-Baptiste Rouquier, qui ont participé par leurs relectures atten
tives et leurs commentaires à l’élaboration de cet ouvrage.
Cet ouvrage est dédié d’une part à Tetyana, Simon et Christophe dans l’es
poir qu’ils y trouvent la plupart des réponses aux questions qu’ils aiment tant
me poser et d’autre part à Sophie, Morgane et Elin, dans l’espoir qu’elles y
puisent matière à me poser des questions !
Fièrement libre !
Cet ouvrage a été entièrement réalisé avec des logiciels libres : IATEX, Zsh,
Bash, Tesh, Emacs, XFig.
ISBN 978-2-35141-072-1
Dépôt légal : mars 2013
© H&K
68 boulevard de Port-Royal, 75005 Paris
@ Imprimé par Book Partners China Ltd
Avant-propos
Bonne lecture !
Vincent Fourmond
Table des matières
L @ ») = d S
b Renommer et déplacer ............00000s0saeasne sn cn ue
d Effacer...........222000000 0n e nn n e e e e e e e e e e e c0m e
e Enmasse...........2.04400 0500s s00e e u se en a e se nn cn nn e
2.6 Rechercher un fichier ..........0000000000 0s a ns en ec en e
a 1locate : recherche sur tous les fichiers............….......
b find:recherchelocale..................000esensa ns
2.7 Le Très Saint Manuel .........2022000 000es 000e sn e se s00000
TABLE DES MATIÈRES
77 pièges
conseils 157
7.5 Un exemple complet : n’oubliez plus les anniversaires! .....….……. 153
7.6 Pouraller plus loin ...........00102sas se n se ns es se se ns en en e 155
à éviter 158
Comment trouver de l’aide ? 159
Index 169
Lexique 165
Et si l’on n’utilise pas bash ? 160
Installations de programmes 162
. OU source lit et exécute un fichier de commandes ............000000essesnana ue 96
[outest effectue des tests .............00000ee se e e se se e se n en e es nc nn nn e 146
7z archive fichiers et répertoires ..................csesesnasna ec ne 00 63
alias définit un alias, ou montre un alias existant ....................... 95
apropos cherche des mots-clés dans les pages de man ...….......…....……….….…….. 68
at exécute une commande plus tard ................…000sseese en ec ue 88
basename affiche la partie « nom » d’un chemin ...............00000cec ccn n en 143
bg redémarre une commande interrompue en tâche de fond ..…....….…..…. 93
bunzip2 restaure un fichier .bz2 ............002020000 es ne n e ec se en e e rn en u0» 60
bzip2 compresse un unique fichier ...................000ecssse ec en scc 0 00s 59
bzcat envoie le contenu d’un fichier .bz2 dans le terminal ... 60
bzless lit avec 1ess le contenu d’un fichier .bz2 ... 60
cat affiche un ou plusieurs fichiers à la suite dans le terminal ... 112
cd change de répertoire courant ...........….….…0a0ssaanss se se se ce se 000s 23
chgrp change le groupe d’un fichier ............0.00020ce e se es se se s000e 52
chmod change les permissions de fichiers/répertoires ... si
chsh changer de shell par défaut ...............0..sreesee se nn e ce sn ccn 00 100
convert convertit/transforme des images ...............000000ene nn cnc u00e 63
cp copie fichiers et répertoires ...….…........………sesesseses se en e se nn e 000e 32
crontab gère les tâches planifiées de cron ..............00s0secncnen ce uus 86
curl affiche le code source d’une page web ..................00secnecn uus 81
cut découpe les lignes de son entrée standard ..…..........…....……seesee 118
date affiche la date ............2220 ce se se se n e es e e e e en n e en n e en n en n 83
df affiche l’espace occupé/disponible sur tout le système ...…...…….…...…. 53
diff différences ligne par ligne entre deux fichiers ... 55
dircolors ajout des couleurs dans 1s ...........0000000eases cec uun es e nn ue 107
dirname affiche la partie « répertoire » d’un chemin ... 143
disown rend une tâche de fond résistante à la fin du shell .............….…..…. 93
display affiche des images .............000000 00en sn n e en se en nn en nn e e 65
du affiche l’espace occupé par un répertoire ...…........…..…..…….…..…….….………….. 53
echo affiche ses arguments ...........0000000e0na se en e se e e en en en nn nn n e 99
env affiche toutes les variables d’environnement ... 100
epstopdf convertit un PostScript en PDF .........20020s sc es sn es en es en en 000 65
exit quitte le shell en COUrs .............002040 000e e n en e en se e en e sn nn 74
export définit une variable d’environnement .........…......00000000 ce es 100
fg redémarre une commande interrompue au premier plan .....….………..…. 93
file affiche le type d’un fichier ............00020saesss se nn e en e e es nn e 00 e 27
find trouve des fichiers ..............00000000 se e e se se se e en sn n e sn nn 38
from affiche les résumés des mails locaux ..…............…...……essesecenee es 86
grep trouve du texte dans des fichiers ..................…..……sseesen cec es 57
groups affiche les groupes dont vous faites partie ... 49
gunzip restaure un fichier compressé par gzip ....…..........…….…0esseueeu se 59
gzip compresse un fichier et supprime l’original ....................... 59
head n’affiche que les premières lignes de son entrée standard .........…. 117
iconv convertit du texte entre différents jeux de caractères ......…..….….…..…. 103
jobs dresse une liste des commandes du shell en cours .........….….…….…….. 93
KiFl termine une commande en cours (par son numéro de tâche/PID) ....93
killall termine une commande en cours (par son nom) .....….…..….…..….….….…...... 94
less pour lire un fichier texte .................00000000 se nn en ec 0s e nn c0000 29
locate recherche des fichiers dans toute l’arborescence ... 37
In -s crée un lien symbolique ................0...000500 se se es se se ns c nn c0» 47
locale affiche des informations sur les locales (en vigueur ou disponibles) .102
1s affiche le contenu d’un répertoire ..…...…..…......…ssssaessessanen es 18
10 TABLEAU RÉCAPITULATIF DES COMMANDES
6. Dans cet ordre, d’après les statistiques d’utilisation rassemblées sur popcon .debian.org,
7. Les premières versions de Mac OS X utilisaient tcsh comme shell par défaut.
8. Que l’on peut télécharger gratuitement à l’adresse vww.cygwin. com.
16 CHAPITRE I — POURQUOI UTILISER LA LIGNE DE COMMANDE ?
Objectifs
> Observer : naviguer dans la hiérarchie, lire et rechercher des fichiers
» Modifier : déplacer, copier et supprimer fichiers et répertoires
Les outils de la ligne de commande sont pré-installés sur toutes les ma
chines Linux, Mac OS X ou Unix ; nous allons d’abord vous montrer où les
trouver sur votre ordinateur, puis comment les utiliser pour les opérations
de base.
b. L'invite
Le terminal s’ouvre. Il se présente sous la forme d’un grand rectangle
ne contenant, au début, qu’un petit texte en haut à gauche, que l’on appelle
l’INVITE, OU PROMPT en anglais. Ce texte signifie « je suis prêt, j’attends une
commande ». Sa teneur exacte varie d’un shell à un autre et d’une configura
tion à une autre. Parmi les plus courants, on peut citer « < », « # », « % », « > »,
«$», «totoro - », OÙ totoro est le nom de l’ordinateur.
Quelle est la différence entre shell et terminal ?
Le terminal se borne à permettre l’interaction avec le shell en lui transmet
tant les entrées clavier de l’utilisateur et en affichant ses réponses. À son ou
verture, il lance le shell favori! de l’utilisateur. C’est ce dernier qui se charge
d’interpréter les commandes et de les exécuter.
18 CHAPITRE 2 — KIT DE SURVIE
Commençons par déterminer le shell utilisé par votre terminal. Pour cela,
tapez le texte « echo $0 »* à côté de l’invite, représentée ici par %. Appuyez
alors sur la touche Entrée! pour lancer la commande :
% echo $o0 — La commande
bash La réponse
% Tant que l’invite n’a pas reparu, la commande n’est pas encore finie !
Une ligne s’affiche (le résultat de la commande, ici bash) suivie par une nou
velle invite qui indique que la commande précédente est terminée et que
le shell est prêt à en exécuter une nouvelle. Selon votre configuration, cette
commande répond bash, zsh, tcsh, etc. Il s’agit du nom de votre interpré
teur de commandes. En ce qui concerne les chapitres 2 à 4, tous les shells
sont équivalents ; pour la suite, reportez-vous à l’annexe page 160 si ce n’est
pas bash.
Utilisez les touches usuelles pour éditer la ligne de commande en cours :
flèches gauche (:—l) et droite (:;}), touches de suppression ( ne……èœg et
Ëpä), début (ÎDÏ5£) et fin (}i—n};ÿ) de ligne. Nous présenterons d’autres raccourcis
très pratiques page 42.
Majuscules/minuscules
a. Arguments et options
Voici plusieurs façons d’utiliser 1s :
% 1s Affiche le contenu du répertoire courarct
Admin Chansons H&K Programmation
1. Si votre shell par défaut ne vous convient pas, nous verrons page 100 comment en changer.
2. La commande echo se contente d’afficher du texte, nous la décrirons page 99. Par ailleurs,
les $NOM sont des variables d’environnement, nous y reviendrons page 99. Enfin, la variable
spécifique $0 contient le nom du shell utilisé ; elle sera détaillée page 141. On aurait aussi pu
utiliser echo $SHELL, qui affiche votre shell par défaut (voir page 100) ; cependant, ce dernier
peut être différent de celui lancé par votre terminal.
3. Sauf Mac OS X, qui, en général, ne fait pas la différence entre minuscules et majuscules.
2.2 —- UN EXEMPLE DE COMMANDE : LS 19
4. Ou bien que son répertoire d’installation n’est pas dans le $PATH, voir page 101 pour y
remédier.
a. Le système de fichiers°
Sur une machine de type Unix, les
fichiers sont organisés hiérarchiquement n/
-S home
sous forme d’un arbre. Tous les fichiers et
répertoires sont issus de la « RACINE » (root |:Ù vf
en anglais) symbolisée par une unique ë .bashrc
barre oblique « / ». Contrairement à Win 9 Admin
dows, il n’y a pas de notion de lecteur Comptes.xml
(C:, D: etc.): les fichiers sont tous pla 0 Impots
cés dans une arborescence unique, même Affiche.jpeg
s’ils appartiennent à des disques différents,
*"* Ôbw a représercté les
voire à des ordinateurs différents dans le
rpusr
0 bi4ichiers par le
cas de fichiers partagés. Ces distinctions
sont gérées de manière transparente par > pictogramme & et les
le système d’exploitation. Ainsi, les fichiers répertoires par .
décrits plus hauts pourraient s’organiser Arborescence des fichiers
comme montré ci-contre.
il peut en effet exister un autre fichier nommé Affiche. jpeg quelque part
ailleurs dans la hiérarchie. On utilise pour le désigner son CHEMIN ABSOLU,
ou chemin complet (respectivement absolute path et full path anglais)® :
/home/vf/Affiche.jpeg
C’est le chemin que l’on parcourt depuis la racine pour arriver au fichier,
en séparant chaque élément par des barres obliques /. Ainsi, pour éviter les
ambiguïtés, il n’est donc pas possible d’inclure une barre oblique dans le nom
d’un fichier ou d’un répertoire.
À vous de jouer
5. Filesystem, en anglais.
6. « vf », est mon login, nous y reviendrons page 23.
22 CHAPITRE 2 — KIT DE SURVIE
- délicats : les caractères accentués ;
— problématiques : les autres, en particulier les caractères spéciaux (voir
encadré page 20), dont les espaces, et « - » en début de fichier ;
— interdit : la barre oblique /.
Les caractères accentués posent rarement des problèmes si les fichiers
| concernés ne sont pas échangés avec d’autres ordinateurs. En revanche,
| il est préférable de les éviter pour des fichiers partagés”.
Il est parfaitement possible d’utiliser des espaces et autres caractères
spéciaux, à condition de ne pas oublier de les échapper. C’est cependant peu
recommandable pour les débutants, car les messages d’erreur pour un carac
tère spécial non échappé sont souvent incompréhensibles. Pour cette raison,
| cantonnez-vous dans un premier temps aux deux premières catégories®.
b. Le répertoire courant
Pour simplifier l’accès aux fichiers, le système d’exploitation définit un RÉ
PERTOIRE COURANT : C’est celui « dans lequel on est ». Les fichiers ou réper
toires de ce répertoire peuvent être désignés par leur nom. Si le répertoire
courant est /home/vf, /home/vf/Admin peut s’abréger en Admin. De même,
depuis ce répertoire, on peut désigner /home/vf/Admin/Comptes.xm] par
seulement Admin/Comptes.xm1. On parle dans ce cas de CHEMIN RELATIF (re
lative path), par rapport au répertoire courant : le chemin relatif dépend du
répertoire dans lequel on se trouve.
Chemins relatifs et absolus
Un chemin est absolu s’il commence par / : il est repéré à partir de la racine,
comme /home/vf/Admin. Il est relatif dans le cas contraire ; il est alors
repéré par rapport au répertoire courant.
Sur la première ligne, 1s donne la taille totale (en kilo-octets) occupée par
les fichiers qu’il énumère, ici 1231!*. Puis viennent les fichiers et les réper
toires, organisés en lignes de la forme :
-rw-r--r-- Î v£f vf 323879 jan 4 2011 Affiche.jpeg
— La succession pour le moins étrange de lettres -rw-r--r-- représente
les AUTORISATIONS du fichier : le système d’exploitation se base sur ces
informations pour vous accorder ou non l’accès à un fichier ou à un
répertoire. Nous y reviendrons page 48.
- Le nombre suivant (ici 1) n’est utile que pour les administrateurs des
machines où la sécurité est importante.
14. Si on ne peut pas intégrer - dans un chemin, on peut par contre l’utiliser plusieurs fois
pour revenir aux répertoires antérieurs : ainsi, cd -- remonte à l’avant-dernier répertoire visité.
15. Cette taille ne tient pas compte des fichiers présents dans les sous-répertoires du répertoire
affiché, voir la commande du page 53 pour faire cela.
2.3 — NAVIGUER DANS L’ARBORESCENCE 25
S sT S v v
autorisations propriétaires — taille — date de modification = nom du fichier
% 1s -1 Affiche. jpeg
-rw-r--r-- 1 vf vf 323879 jan 4 2011 Affiche.jpeg
Ceci ne fonctionne pas pour connaître les attributs d’un répertoire, car 1s
préfère afficher son contenu, comme en l’absence de l’option -1. On peut éviter
cela à l’aide de l’option -d (pour « ne pas descendre dans les répertoires ») :
% 1s -1 -d Admin
drwxr-xr-x 3 vf vf 4096 sep 3 2011 Admin
Groupage des options
On peut grouper plusieurs options d’une commande après un unique tiret.
Cette possibilité porte le nom de bundling, « groupage » en français, et s’ap
plique tant à 1s qu’à la plupart des autres commandes :
% 1s -1h Affiche.jpeg
-rw-r--r-- 1 v£f vf 317K jan 4 2011 Affiche.jpeg
16. Attention : le format des dates varie grandement d’une configuration à une autre. Dans
certains cas, la date s’écrit 2011-04-01, avec le jour intercalé entre l’année et le mois. En cas
de doute, cherchez une colonne avec des nombres supérieurs à 12.
26 CHAPITRE 2 — KIT DE SURVIE
d. Visualiser l’arborescence : tree
Le programme tree permet de visualiser rapidement une arborescence
de fichiers!”, Comme son nom l’indique (tree signifie « arbre »), il dessine un
arbre représentant le répertoire courant (ou ceux passés en arguments), ses
fichiers, ses sous-répertoires, leurs fichiers, etc.
% tree Admin
Admin
|-- Comptes.xm1l
‘-- Impots
|-- 2009
| |-- Declaration.pdf
| ‘-- Taxe-Habitation.pdf
‘-- 2010
‘-- Declaration.pdf
a. Types et extensions
Les fichiers de votre ordinateur peuvent stocker de nombreux types d’in
formations, comme des images, des vidéos, de la musique, des documents,
des programmes, des données bancaires… Chacun de ces types peut être enre
gistré dans différents formats : on peut citer les formats JPEG et PNG pour les
17. Ce programme n’est pas installé par défaut ; voir l’annexe « Installations de programmes »
page 162 y remédier.
18. Cette option n’est pas activée par défaut parce qu’elle peut donner des résultats inattendus
sur certains terminaux ; on verra page 97 comment l’activer de manière systématique.
2.4 — LIRE UN FICHIER 27
images, les formats MP3 et WAV pour la musique, etc, Pour s’y retrouver, on as
socie à chaque fichier une extension qui reflète son format, et donc son type.
Ainsi, les fichiers PNG et JPEG sont pourvus respectivement d’une extension
.png et . jpg ou . jpeg.
Du point de vue le plus strict, rien n’oblige à utiliser des extensions corres
pondant au format d’un fichier : les informations sont effectivement contenues
dans le fichier, et pas dans son nom. Cependant, bon nombre de programmes,
ainsi que les personnes avec qui vous communiquez, comptent sur des exten
sions appropriées ; il est donc fortement recommandé d’y faire attention.
Notons qu’il est possible d’empiler plusieurs extensions : par exemple, un fi
chier PDF (extension .pdf) compressé par gzip (extension .gz, voir page 59)
aura ainsi une extension .pdf .gz"°.
19. L'extension doit toujours se terminer par le morceau qui correspond à son format réel.
Un fichier . pdf .gz se termine par .gz parce que c’est avant tout un fichier compressé : il faut
d’abord le décompresser avant de pouvoir se servir des données PDE
20. Cet outil ne dispense pas pour autant d’être prudent !
28 CHAPITRE 2 — KIT DE SURVIE
Cette option peut être utilisée sans modération puisqu’elle n’a aucun effet sur
les fichiers non compressés.
file est un allié particulièrement puissant pour faire le tri parmi des fi
chiers provenant de récupération de données, ou simplement pour explorer
les fichiers installés sur votre machine.
Même si l’on peut reconnaître quelques mots perdus“!, la plus grande part
du contenu n’est qu’une suite de symboles incompréhensibles.
Binaire ou texte, pourquoi ?
Il ne faut pas confondre la notion de fichier texte (par opposition à bi
naire) avec celle de document représentant un texte, comme par exemple
un fichier Word. Ce sont deux notions complètement distinctes : un fichier
Word, bien qu’il représente un document textuel, est enregistré dans un for
mat binaire. Par ailleurs, des fichiers texte peuvent être utilisés pour stocker
des données non textuelles, comme des images ou des programmes.
Pour stocker des données, les auteurs d’un programme ont presque tou
jours la possibilité de choisir entre un format texte (par exemple XML) et un
format binaire. Ce dernier est généralement plus compact, et il est lu plus
efficacement par l’ordinateur, car les données binaires sont proches de la
forme sous laquelle elles sont manipulées dans la machine. En outre, il est
incompréhensible par un humain°*, ce qui est certainement un avantage
pour les entreprises qui souhaitent protéger le format de leurs fichiers.
21. On peut extraire ces mots au moyen de strings (voir page 54).
22. Décoder un format binaire peut prendre plusieurs mois à un spécialiste dans les cas diffi
ciles ; le processus se nomme reverse engineering.
2.4 — LIRE UN FICHIER 29
Navigation
Une fois que less est lancé, on peut naviguer dans le fichier au moyen
de raccourcis clavier intuitifs dont voici les principaux :
less est doté d’une fonction étendue de recherche de texte, que l’on active
par le caractère /. Il suffit ensuite de taper le texte à rechercher et d’appuyer
| pour lancer la recherche. On peut alors naviguer entre les occur
rences avec les touches n (suivante) et N (précédente).
Touches Action
recherche texte
si texte contient () EJ { }7 $. | \+ou *
affiche l’occurrence suivante
N affiche l’occurrence précédente””
Si le texte à rechercher contient au moins un caractère parmi (, ), L
1, {, }, 7, $, ., I, \, + ou *, il faut faire suivre immédiatement le / initial
par c«3 R; la dern1ere ligne se mue alors en Regex-off /. En effet, ces ca
ractères permettent d’accéder à des fonctions plus avancées’de recherche, et
sont interprétés par 1ess. Si vous oubliez ÎÇ?} R, 1ess vous le signalera par
un « Invalid pattern» (motif invalide), ou, ce qui peut être pire, faussera
complètement les résultats de la recherche sans avertissement”S.
Un petit éditeur de texte: nano
nano%®est le pendant de 1ess pour éditer les fichiers texte. On le lance
de la manière suivante pour travailler sur fichier.txt:
% nano fichier.txt
On s’y déplace avec les touches fléchées ; on en sort avec :cui X et on
26. Notons que dans certaines distributions comme Debian et Ubuntu, 1ess reconnaît certains
types de fichiers binaires et affiche des informations sur ces fichiers plutôt que leur contenu.
L’option -L permet de désactiver cette fonction.
27. Lancer la recherche avec « ? » au lieu de « / » permute les effets de «n » et « N »,
28. C’est le prix à payer pour disposer de fonctions de recherche puissantes, par exemple
« “mot » pour trouver les lignes commençant par mot. Nous y reviendrons page 130.
29. nano est le descendant de pico, qui n’est plus maintenu.
30. nano est doté de nombreuses autres fonctionnalités ; un bon point de départ pour aller
plus loin est son aide en ligne, accessible avec .cs} G.
2.5 — CRÉER RENOMMER, COPIER ET EFFACER 31
Pq
! Toutes les modifications effectuées en ligne de commande sont immédiates.
| Il n’y a pas de moyen de revenir en arrière : pas de fonction « annuler », pas
, de sauvegardes antérieures…
Assurez-vous d’avoir correctement tapé une commande qui
modifie le disque avant d’appuyer sur Eñt
a. Créer
Des fichiers
Pour éviter de causer trop de dégâts en manipulant vos fichiers, nous allons
d’abord apprendre à créer des fichiers vides (de taille 0). La commande
% touch vide
crée vide, un fichier sans contenu. Si vide existe déjà, son contenu n’est pas
modifié, mais sa date de dernière modification est mise à jour.
Des répertoires
On crée un répertoire (vide) avec la commande mkdir (pour make direc
tory, « créer un répertoire »), par exemple :
% mkdir temp
qui créée un répertoire temp dans le répertoire courant. Si temp existe déjà,
qu’il soit un répertoire ou un fichier, mkdir vous le signale et échoue.
Par défaut, mkdir ne crée que la dernière partie du chemin donné :
% mkdir Un/Long/Chemin
ne fonctionne que si Un/Long est déjà un répertoire. On peut cependant passer
outre cette limitation avec l’option -p (pour créer aussi les parents) :
% mkdir -p Un/Long/Chemin n
crée le répertoire Un/Long/Chemin en créant Un et Un/Long si nécessaire*!.
Mise en place d’un « bac à sable »
31. Cette commande échoue cependant si Un ou Un/Long existe mais n’est pas un répertoire.
32 CHAPITRE 2 — KIT DE SURVIE
b. Renommer et déplacer
La commande mv (move, « déplacer ») sert à déplacer ou à renommer des
fichiers et des répertoires. Elle prend deux arguments, la source et la cible,
et se comporte différemment suivant la nature de la cible. Si cette dernière est
un répertoire, la source est déplacée dans ce répertoire. Dans le cas contraire,
elle est renommée :
% mv Affiche.jpeg These
These est un répertoire : déplace Affiche.jpeg dans These
k nmv Affiche.jpeg Image.jpeg
\mage.jpeg n’est pas un répertoire : renomme Affiche.jjpeg en lmage.jpeg
mv fonctionne indifféremment sur les fichiers et les répertoires.
Si le fichier cible existe déjà, mv l’écrase sans autre forme de procès, sauf
si l’on a donné l’option —i (pour interactive, « interactif ») :
% mv -i source cible
mv: écraser ‘cible’ 7
nv attend alors une réponse de votre part :
— pour annuler la commande et conserver le fichier cible, appuyez sur
n (pour non) puis
— pour l’écraser, appuyez sur y°*(pour yes) avant :Enrée
On peut déplacer plusieurs fichiers et/ou répertoires en une seule fois :
k mv Affiche.jpeg Presentation.pdf These
Ceci ne fonctionne que si le dernier argument (la cible) est bien un répertoire.
mv ne peut pas renommer plusieurs fichiers d’un coup**.
À vous de jouer
Comment remettre Presentation. pdf dans le répertoire courant après la
commande précédente ?
* Jpd‘uorIequesezg/esoqz au
c. Copier
Des fichiers
Copier des fichiers, c’est comme les déplacer, si ce n’est que l’on ne sup
prime pas le fichier original. C’est pourquoi la commande pour copier les fi
chiers, cp (copy, « copier »), s’utilise de la même manière que nv :
% cp Affiche.jpeg Soutenance. jpeg
Copie Affiche.jpeg en Soutenance.jpeg
32. En anglais, ce serait mv : overwrite ‘cible? ?
33. y fonctionne systématiquement. Dans un environnement français, on peut aussi utiliser o
pour « oui».
34. Par contre, rename le peut, voir page 133.
2.5 — CRÉER RENOMMER, COPIER EF EFFACER 33
% cp Affiche.jpeg These
Copie Affiche.jpeg dans le répertoire These
% cp Affiche.jpeg Presentation.pdf These
Copie Affiche.jpeg et Presentation.pdf dans le répertoire These
cp est aussi doté d’une option -i ayant le même effet que pour mv.
J cp et les attributs des fichiers
Par défaut, cp ne préserve ni la date de modification, ni les permissions, ni
{ les utilisateurs et groupes propriétaires du fichier. L’option -p demande à
| cp de les respecter dans la mesure du possible.
Des répertoires
cp refuse de travailler sur un répertoire, à moins qu’on le lui demande
explicitement à l’aide de l’option -R (pour récursif*°). Il copie alors l’intégralité
du répertoire et de tous ses sous-répertoires :
% cp Admin tenp
cp: omission du répertoire ‘Admin?36
Le répertoire Admin n’a pas été copié
% cp -R Admin temp
Admin et-tous ses sous-répertoires sont copiés dans tewp
Notons que l’option -R n’a aucun effet sur les fichièrs normaux, qui sont
copiés comme d’habitude.
-a pour « archive »
y Muni de l’option -a, cp copie tous les arguments, fichiers et répertoires,
comme s’il devait en faire une archive : il copie tous les sous-répertoires et
préserve le maximum d’attributs possibles*”.
d. Effacer
Des fichiers
On efface des fichiers avec la commande rm (pour remove, enlever). Elle
prend en argument les noms des fichiers à supprimer :
% rm fichier Supprime « fichier »
Comme nv et cp, rm accepte une option —i qui lui fait demander confirma
tion pour tout fichier qu’il efface*S.
35. On pourra retenir -R pour répertoire.
36. Ou bien eri anglais: cp : omitting directory ‘Admin’.
37. Cette option n’est pas toujours présente, en particulier sous certaines versions de Mac OS X.
Utilisez alors -dpR pour obtenir le même effet.
38. Dans certaines distributions, cette option est activée par défaut par le biais d’un alias (voir
page 95). Il faut alors utiliser l’option -£ pour désactiver les confirmations, ou bien supprimer
l’alias au moyen de unalias.
34 CHAPITRE 2 — KIT DE SURVIE
Attention : on ne peut pas récupérer un fichier effacé !
39 y
Des répertoires
Tout comme cp, rm n’accepte de travailler sur un répertoire que si on lui
passe l’option —R :
39. Nous apprendrons plusieurs manières d’effectuer des sauvegardes page 59.
40. En effet, cette commande lance rm sans argument, avec les options f, i, c, h, e et r, voir
l’encadré sur le groupage page 25.
41. Une manière de faire aurait été rm -R \- pour éviter que le shell n’interprète -.
2.5 — CRÉER, RENOMMER, COPIER ET EFFACER 35
Récapitulons
Créer
touch fichier fichiers (vides)
mkdir repertoire répertoires (vides)
mkdir -p Un/Long/Chemin crée Un et Un/Long si nécessaire
Renommer, déplacer
nv source cible fichiers, répertoires
nv -i source cible pour confirmer avant de remplacer
Copier
cp source cible fichiers
cp -R source cible répertoires (et leurs fichiers)
cp -a source cible tout le plus fidèlement possible
cp -i source cible pour confirmer avant de remplacer
Supprimer
rm fichier1 fichier2 fichiers
rmdir repertoire répertoires vides
rm -R repertoire répertoires non vides
rm -i fichier pour confirmer avant d’effacer
42. Nous verrons plusieurs manières d’interrompre des commandes page 92.
36 CHAPITRE 2 — KIT DE SURVIE
Utilisations du joker *
1s *.jpeg affiche tous les fichiers/répertoires se termi
nant par . jpeg dans le répertoire courant
cp A* temp copie tous les fichiers** du répertoire courant
commençant par À dans le répertoire temp
rm *old* A*.jpeg supprime tous les fichiers contenant old et
tous ceux commençant par À et finissant par
.jpeg“”
1s -d .* n’affiche que les fichiers/répertoires « cachés »
1s -d .* * affiche tous les fichiers/répertoires du réper
toire courant, y compris les fichiers cachés
1s -1 Et\xile affiche les détails du fichier « Et+ile »
Pour utiliser tel quel le caractère « * », il faut l’échapper avec « \ »*°, Si aucun
fichier-ne correspond au motif donné, vous obtenez une erreur :
% 18 -1 1ksjdf*
1s: lksjdf*: Aucun fichier ou répertoire de ce type46
Notons que le joker * honore la convention des fichiers cachés et ne permet
de les remplacer que si le motif commence explicitement Wpa_1: un point ; dans
ce cas, il ne donne que les fichiers cachés correspondants. De plus, il ne permet
pas de remplacer une barre oblique /. En d’autres termes, il ne descend pas
dans les sous-répertoires. Toutefois, on peut le forcer à le faire en spécifiant
explicitant le caractère « / ». Ainsi,
% 1s -1 */*.pdf
trouve doc/rapport .pdf, mais en revanche n’affiche ni document.pdf, ni
doc/mars/bilan.pdf‘”. De manière similaire, la commande suivante affiche
tous les sous-répertoires du répertoire courant :
% 1s -1d */
Quelles commandes comprennent * ?
Les cLoBs (motifs basés sur>* et d’autres jokers que nous verrons
page 126) sont interprétés par le shell, qui les remplace par la liste des fi
chiers correspondants avant de lancer la commande. La commande ne voit
donc jamais le glob, seulement son remplacement. Ainsi, dans le répertoire
Admin/Impots introduit page 26, la commande
48. convert permet de manipuler des images et de les convertir entre différents formats (voir
page 63).
49. On peut utiliser xargs (page 121) ou des boucles for (page 152) pour les faire travailler
sur plusieurs fichiers un par un.
50. À moins que l’on utilise des outils comme grep pour filtrer ces réponses (page 116),
comme locate bin | grep pdf pour trouver les programmes dont le nom contient « pdf ».
38 CHAPITRE 2 — KIT DE SURVIE
% locate magick/index Documentation HTML de
/usr/share/doc/imagemagick/index.htm1 lmageMagick, voir p.63
locate ne travaille pas directement sur le contenu du disque dur, mais
depuis une base de données régénérée périodiquement (en principe chaque
nuit). Ceci rend la recherche très rapide mais, en contrepartie, les résultats
reflètent l’état de vos fichiers au moment de la dernière mise à jour de cette
base de données, pas forcément leur état actuel°!. Pour ces raisons, Locate
est surtout utile pour :
— retrouver des fichiers personnels qui n’ont pas été créés ou déplacés de
puis la dernière mise à jour de la base de donnée ;
— localiser un fichier « global » (par opposition à fichier personnel) : fichier
de configuration, documentation, différentes versions d’un programme.
SYNOPSIS
1s [OPTION]... [FICHIER]...
53. Ou bien si l’on utilise des guillemets simples, « ? *. pdf* », voir page 125.
54. Typiquement 100 fois plus lent sur l’intégralité du disque : pour une recherche sur tout
le disque, préférez 1ocate ! Ce dernier utilise d’ailleurs find pour mettre à jour sa base de
données…
55. Parfois sans les accolades autour.
40 CHAPITRE 2 — KIT DE SURVIE
Ce synopsis signifie que qu’on peut passer ou non à 1s une ou plusieurs
options et préciser ou non un ou plusieurs fichiers en argument. Si le pro
gramme peut s’utiliser de plusieurs manières différentes, il y a plusieurs
lignes dans le synopsis (voir par exemple man mv).
— DESCRIPTION : une description beaucoup plus poussée du programme.
— OPTIONS : une liste des options que le programme accepte.
— Suivant les programmes, il peut aussi exister d’autres sections contenant
des exemples, la descriptions de fichiers de configuration, des détails sur
les formats des fichiers reconnus, une liste des problèmes connus…
— La plupart des pages de man finissent par le nom des auteurs du pro
gramme et de la page de man (section AUTEURS ou AUTHORS) et, sur
tout, donnent des pointeurs vers d’autres pages de man ou d’autres types
de documentation (section VOIR AUSSI ou SEE ALSO).
C’est pourquoi il est bon d’avoir le réflexe «man commande » à chaque fois
que l’on a une question à propos d’une commande. Un bémol, cependant :
si la plupart des programmes de base (comme mv et cp) ont une page de man
en français, ce n’est malheureusement pas le cas de la majorité des autres”°.
Bon à savoir
56. Si vous n’avez pas de difficultés à lire l’anglais, il est préférable de consulter les pages de
man en version anglaise, car elles sont en général mieux écrites, plus à jour et elles contiennent
moins d’erreurs. Nous verrons page 102 comment choisir la langue de la ligne de commande.
2.7 — LE TRÈS SAINT MANUEL 41
Deux pages de man avec le même nom peuvent exister dans des sections
différentes*S. Par exemple, groff est le programme utilisé par man pour affi
cher ses pages et les convertir en d’autres formats. La page de man de groff
en section 1 documente l’usage du programme groff, tandis que sa page
de man en section 7 documente le format qu’il comprend. Pour obtenir cette
dernière, il faut invoquer man comme suit :
% man 7 groff
La notation mv(1) désigne par convention la page de man de mv en sec
tion 1 : la commande précédente affiché donc groff (7).
C. man cd?
% man cd
No manual entry for cd* Pas de page de manuel pour cd
Oups….. Les commandes utilisables en ligne de commande se classent en
deux catégories : les programme extérieurs, comme cp qui est contenu dans
le fichier /bin/cp, et les commandes internes du shell (shell built-in en an
glais), qui sont prises en charge directement par ce dernier. Pour des raisons
techniques cd en fait partie, c’est pourquoi elle est documentée dans la page
de man du shell, bash(1).
Pour trouver la documentation d’une commande, il est par conséquent né
cessaire de faire la différence entre un programme et une commande interne.
C’est l’objet de la commande type“® :
% type cd cp rien Que sowt cd, cp et rien ?
cd is a shell builtin Commande interne
cp is /bin/cp Programume externe
57. Le C est le langage de programmation dans lequel les systèmes Unix/Linux sont écrits ;
Cest pour cela qu’il occupe une place privilégiée dans la documentation.
58. Les pages sont cherchées successivement dans les sections 1, 8, 3, 2, 5, 4, 9, 6 et enfin 7,
dans cet ordre ; man affiche la première qu’il trouve.
59. Dans certains systèmes, il est possible qu’il y ait une page de man cd(1), ouù au moins une
redirection vers une page générique décrivant les commandes internes du shell.
60. Pour le shell tcsh (voir page 160), c’est la commande vhich qu’il faut utiliser.
42 CHAPITRE 2 — KIT DE SURVIE
bash: type: rien: not found Pien de connu
Dans le cas d’un programme externe, type donne son chemin complet,
ce qui permet de savoir quelle version on est réellement en train d’exécuter.
À vous de jouer
Que peut bien donner la commande type type ?
c. Copier/coller
Ce n’est pas parce que l’on travaille en ligne de commande qu’il faut s’in
terdire d’utiliser la souris. Elle est particulièrement utile pour copier/coller
62. On peut abuser de cette possibilité pour trouver des programmes travaillant sur un format
donné, voir page 69.
63. apt-get permet de gérer les logiciels installés sur un ordinateur sous Debian ou Ubuntu,
voir page 162.
64. Il est possible de configurer la complétion automatique de beaucoup de shells. Ceci dé
passe le cadre de ce livre : veuillez vous référer à la documentation de votre shell.
65. D’autant plus que l’on peut définir des raccourcis, que l’on appele des « alias », pour les
commandes que l’on utilise souvent, voir page 95.
44 CHAPITRE 2 — KIT DE SURVIE
» Les fichiers sont organisés selon une » On cherche des fichiers globaux avec
grande arborescence unique dont le locate et des fichiers locaux avec
répertoire « / » est la racine. find.
» 1s affiche le contenu des répertoires. » man commande est souvent la réponse
* mv, cp et rm servent respectivement à À bien des questions sur commande.
déplacer, copier et effacer. » La touche “}";Q complète
» Il existe deux grandes classes de automatiquement ce que l’on tape.
66. Sur la molette, ou bien sur les boutons droite et gauche en même temps s’il n’y en a pas.
67. La définition exacte de « mot », en particulier en ce qui concerne les signes de ponctuation,
varie d’un terminal à un autre et est généralement configurable.
2.8 — TROIS RACCOURCIS INDISPENSABLES 45
Horizontalement Verticalement
1. Lire des fichiers texte a. Éditer des fichiers texte
2. Effacer un répertoire et tout son
contenu
répertoire courant (dont les fichiers
. Trouver tous les fichiers du
cachés)
répertoire courant et de ses
sous-répertoires qui finissent par
. Trouver des fichiers dans l’ensemble 1s, et plus
du disque
. Effacer un répertoire vide
46 CHAPITRE 2 — KIT DE SURVIE
SOLUTIONS
2.1 Sans caractères spéciaux Avec caractères spéciaux
UnNomLong — mon _ article.pdf un_autre! Laurel&Hardy.mpeg
++-+_+.jpeg chapitre-3.txt Deux Mots Version[1] .doc
$Des_sous$
2.2 On interagit avec le shell en tapant des commandes. Celles-ci acceptent des argu
ments et des options (qui commencent toujours par un tiret -). Ls permet d’afficher
le contenu des répertoires passés en argument. mv, cp et rm permettent respective
ment de déplacer, copier et supprimer des fichiers et des répertoires. Pour ces derniers,
il est nécessaire de passer l’option -R à cp et rm. Enfin, ces trois commandes acceptent
une option -à pour demander confirmation avant d’écraser ou d’effacer un fichier.
2.3 Voici quelques globs répondants aux critères :
& : Fromages .* ou F*
+ : * (les fichiers finissant par - sont souvent des copies de sauvegarde)
V:ix.jpeg *.JPG *. jpg oOu i*g *G ou *e-x
ê:x/
Cette liste n’est bien sûr pas exhaustive ; en revanche, elle montre qu’il y a souvent
> T|
plusieurs manières d’écrire des globs. Entraînez-vous à trouver le plus compact !
2.4 d
2 S c|E e
|L|E|S[S| =|R[M| |-|R]
A| |- A |
s[F[1[N|D] |-[N[A[M[E| |\|*|\|-|
N| [L N P
L F
«iL[o|c[a|jr|e] | | s[R/M[DJI|R|
5 LF
Les outils de l’utilisateur
Chapitre
Maintenant que vous avez acquis les bases de la ligne de commande, nous
allons aborder une série d’outils pour manipuler fichiers et répertoires : gestion
des accès, archivage, manipuülation de documents, recherche avancée de fi
chiers et de programmes.
% 1s -F Congres
Congres@ @ pour un lien symbolique
% 1s -1 Congres
1rwxrwxrwx 1 vf vf 29 mai 8 11:09 Congres ->
“ | pour lien Travail/Congres/Marseille2012
Un lien symbolique est un fichier spécial qui contient un chemin, celui que
l’on a passé en premier argument de 1n -s. Quand on ouvre un lien symbo
lique, le système d’exploitation suit le chemin qu’il contient. S’il est absolu,
il ouvre le fichier ou répertoire correspondant. S’il est relatif, il ouvre le fichier
ou répertoire désigné par le chemin, en partant du répertoire dans lequel le lien
se trouve. On peut lire le chemin contenu par le lien avec readlink:
h readlink Congres
Travail/Congres/Marseille2012
Supprimer ou déplacer un lien symbolique n’affecte que le lien (dans ce
cas, Congres), pas la cible (ici, Travail/Congres/Marseille2012). Si la
cible est supprimée ou déplacée, le lien est orphelin : il ne pointe vers rien.
Essayer de l’utiliser aboutit à une erreur du type « fichier non trouvé ». C’est
aussi généralement ce qu’il arrive lorsqu’on déplace un lien contenant un che
min relatif.
À quoi servent les liens symboliques ?
Faciliter l’accès à des répertoires très hiérarchisés en fournissant un ac
cès rapide à ceux que l’on utilise couramment.
Donner plusieurs noms à un unique fichier ou répertoire.
Utiliser un fichier ou un répertoire depuis plusieurs endroits.
— Eviter de copier le même fichier dans plusieurs répertoires.
a. Utilisateurs et groupes
Les « groupes d’utilisateurs »* servent à donner des permissions spécifiques
aux utilisateurs qui en font partie. Par exemple, les membres du groupe audio
2. C’est exactement celui que 1s -1 affiche après ->.
3. La création et la modification des groupes est réservée au super-utilisateur: on utilise
addgroup ou groupadd pour créer des groupes, et adduser ou useradd pour ajouter un utili
3.2 — QUI A LE DROIT D’UTILISER LES FICHIERS ?
ont le droit d’utiliser la carte son, ceux du groupe cdrom peuvent lire des
CD et DVD, etc. On peut connaître les groupes dont on fait partie grâce à la
commande groups :
% groups Je suis membre des groupes vf, ady,
vf adm cdrom audio video = cdrom, audio et video.
Chaque fichier appartient à un unique utilisateur et à un unique groupe,
qui sont indiqués par 1s -1:
% 1s -1 Affiche.jpeg /var/log/debug
-rw-r--r-- 1Î v£f :…vf 323879 jan 4 2011 Affiche.jpeg
-rw-r----- 1 root adm 117987 mar 3 23:32 /var/1og/debug
Urtilisotteur // N Groupe
b. Autorisations
Pour l’accès à un élément de l’arborescence (fichier ou répertoire*), les
utilisateurs sont répartis en trois catégories :
— le propriétaire du fichier ;
— les membres du groupe du fichier (autres que son propriétaire) ;
— les autres.
rm demande confirmation avant d’effacer un fichier que l’on n’a pas le droit
de modifier”, à moins qu’on lui passe l’option -f (pour « forcer ») :
Pour autoriser à nouveau la lecture de tous les fichiers par tous, ce qui
nécessite les permissions d’exécution des répertoires, on serait tenté d’utiliser
% chmod -R go+rx Prive
Si cette commande donne effectivement les droits voulus, elle va bien au
delà puisqu’elle rend tous les fichiers exécutables. Pour éviter ce problème,
on peut utiliser X à la place de x: cette spécification n’ajoute de permission
d’exécution à un élément que si celui-ci en présente déjà pour d’autres utilisa
teurs (pour un répertoire ou un fichier exécutable) :
% chmod5-R go+rXexécutables.
fichiers Prive
Rend Prive; à nouveau public, sans rendre les
Les permissions par défaut des fichiers créés par tous les programmes lan
cés depuis un shell sont définies par un paramètre du nom de « umask », qui
contient les valeurs des permissions qui sont omises par défaut lors de la créa
tion d’un fichier ou d’un répertoire dans le format « numérique » de chmod.
La valeur par défaut en est 022, ce qui veut dire qu’un nouveau fichier est, par
défaut, interdit à l’écriture pour le groupe et pour les autres (mais cela n’em
pêche pas de rajouter ces permissions avec chmod par la suite). On modifie
la valeur de umask en utilisant la commande du même nom, qui permet aussi
de connaître la valeur actuelle :
%, umask
022
4 umask 077 Désactive par défauct toutes les permissions pour le
groupe et les autres
Principales options de du
-s supprime l’affichage des sous-répertoires
-c _ affiche la taille totale de tous les arguments
-h affiche la taille en Ko, Mo ou Go (comme pour 1s)
Pour estimer la taille d’une arborescence complexe, sans que l’information
ne soit noyée au milieu d’une multitude de sous-répertoires, on utilise!! :
% du -sh Programmation
5,4M Programmation
df : espace occupé sur le disque
| On utilise df, pour affichér l’espace utilisé (Uti .) et disponible (Di sp.) sur
/ tous les systèmes de fichiers (les partitions du disque) :
% df -h -k pour la taille en Ko, Mo et Go
Sys. de fichiers Taille Uti. Disp. Uti% Monté sur
/dev/sde1 37G 7,3G 28G 217 /
/dev/sde2 422G 319G 95G 78/% /home
stat (pour statut) affiche une foule d’informations sur les fichiers ou réper
toires passés en arguments. Il s’agit en quelque sorte d’un 1s -1 plus fourni :
% stat Affiche. jpeg
File: ‘Affiche.jpeg’
Size: 323879 Taille Blocks: 648
IO Block: 4096 … fichier régulier ou répertoire, ou lien
Device: 346h/838d Inode: 1228857 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1002/ vf)
Gid: ( 1002/ vf) Perwissions et propriétaires
10. Sous Mac OS X, il faut l’option -k, sinon la taille est affichée en multiples de 512 octets.
11. On peut aussi tirer parti de l’option --maz-depth 1 pour limiter l’affichage au premier
niveau de la hiérarchie (sous répertoires), ou --max-depth 2 pour le second niveau (sous
répertoires et leurs sous-répertoires), etc.…
54 CHAPITRE 3 — LES OUTILS DE L’UTILISATEUR
17. Dans le cas des photos numériques au format JPEG, il est plus astucieux d’utiliser exif ou
son cousin exiv2 qui donnent une foule d’informations supplémentaires, comme la focale, le
temps d’exposition, etc.
18. On peut tirer parti dans des tests (voir page 145) du fait que diff « réussit » si les fichiers
sont identiques, et qu’il « échoue » sinon.
19. Ou en anglais : Binary files Affiche.jpeg and article.pdf differ.
CHAPITRE 3 — LES OUTILS DE L’UTILISATEUR
son contenu :
son avec -1, on peut s’en servir pour trouver les fichiers contenant du texte, à
la find”®, si ce n’est que ce dernier travaille sur le nom du fichier et pas sur
% grep -r1 Ko
./chapitre_3.tex « {£o » est présent seulement
dans ces deux fichiers
./o1d/chapitre_3_sauvegarde.tex
Comme diff et 1less, grep traite les fichiers qu’il estime être « binaires »
de manière particulière, et se contente de dire s’ils contiennent le texte :
MedialBBox annonce la
% grep -F MediaBox article.pdf
Fichier binaire article.pdf concorde* 3 taille des pages dans
les documents PDF.
On peut le forcer à afficher les lignes trouvées à l’aide de l’option -a :
h grep MediaBox -a article.pdf
/MediaBox [0 O 612 792]
22. Ceci présente un intérêt en combinaison avec xargs (page 121) pour lancer des com
mandes sur les fichiers trouvés ; une autre possibilité est d’utiliser cut -d : -£1 (voir p. 118).
23. En anglais, ce serait : Binary file article.pdf matches.
3.5 — COMPRESSER, SAUVEGARDER, ARCHIVER 59
Il ne faut utiliser cette option que si les données recherchées sont effective
ment textuelles ; dans le cas contraire les résultats peuvent être imprévisibles
(il s’agit du même problème que celui décrit dans l’encadré ci-dessous).
26. Il y a aussi xz, le successeur de 1zma, qui n’est pas encore très répandu.
60 CHAPITRE 3 — LES OUTILS DE L’UTILISATEUR
Compression de fichiers
Compression gzip bzip2 1zma
Décompression gunzip bunzip2 unlzma
Envoi surleterminal :zcat bzcat 1zcat
Envoi vers less zless =— bzless (aucun)?7
Extension des fichiers .gz .bz2 .1zma
gP
tar archive tous les fichiers des répertoires passés en arguments, y com
pris ceux des sous-répertoires et les fichiers cachés. On peut exclure certains
fichiers à l’aide de l’option --exclude, qui s’utilise comme l’option -name
de find (page 38). Ainsi, la commande
% tar cvzf Archive.tar.gz --exclude \*- Repertoire
27. Il n’y a pas de programme pour envoyer directement de 1zma à less, mais on verra
page 116 qu’il est très facile de pallier ce manque.
28. Certaines versions de tar interprètent les « : » dans le nom de l’archive comme désignant
des machines distantes. Évitez-les !
29. À moins que les fichiers ne soient déjà compressés, comme des photos ou des vidéos,
auxquel cas la compression supplémentaire ne gagne pas de place et fait perdre du temps.
30. Ceci évite la création d’un fichier intermédiaire non compressé volumineux.
3.5 — COMPRESSER, SAUVEGARDER, ARCHIVER 61
crée une archive de Repertoire en laissant de côté tous les fichiers dont
le nom finit par - (ce sont en général des fichiers temporaires). Exclure un ré
pertoire par ce mécanisme exclut aussi tout son contenu. Il est enfin possible
de passer directement des fichiers à archiver en argument.
Le nom de l’archive est l’argument de l’option f ; en conséquence, il ne faut
pas placer --exclude ou une autre option entre f et le nom de l’archive.
Autrement dit, f doit toujours être le dernier de la liste d’options.
On peut compresser l’archive avec bzip2 en remplaçant le z par un j** :
% tar cvjf Archive.tar.bz2 Repertoire
Afficher plus d'informations : l’option -v ou --verbose
Une grande majorité des programmes utilisables en ligne de commande
acceptent une option -v, ou --verbose ou -verbose (« bavard ») qui les
invite à être plus loquaces sur leurs actions. Ainsi, tar muni de l’option
-v affiche le nom du fichier qu’il est en train d’archiver, cp celui du fichier
qu’il copie, etc. Ces options permettent de suivre l’avancement d’une com
mande et de comprendre ce qu'elle fait. Par ailleurs, ces options sont parfois
cumulatives : -vv peut donner plus d’informations que -v.
La commande
% tar tvzf Archive.tar.gz
teste (-t) l’intégrité de Archive.tar.gz, en affichant par la même occasion
la liste des fichiers qu’elle contient.
Récapitulons
Créer…
… une archive de Repertoire compressée par gzip
- tar cvzf Archive.tar.gz Repertoire
…une archive de Repertoire compressée par bzip2
- tar cvjf Archive.tar.bz2 Repertoire
… une archive de Repertoire omettant les fichiers finissant par
- tar cvzf Archive.tar.gz Repertoire --exclude \*
Extraire…
… tous les fichiers de Archive .tar .gz (compressée avec gzip)
- tar xvzf Archive.tar.gz
… tous les fichiers de Archive. tar.bz2 (compressée avec bzip2)
- tar xvjf Archive.tar.bz2
… Uniquement Un/fichier et Autre/Fichier
- tar xvzf Archive.tar.gz Un/fichier Autre/Fichier
… tous les fichiers sauf les fichiers PDF
- tar xvzf Archive.tar.gz --exclude \*.pdf
. Afficher/vérifier le contenu d’archives
3.6 — MANIPULER DES IMAGES ET DES PDF 63
Créer ; ;
Action Commandes
; zip -r Archive.zip Repertoire
, z à Archive.7z Repertoire
. unzip Archive.zip
Extraire 7Z x Archive.7z
Afficher zipinfo Archive.zip
7Z 1 Archive.7z
Archives et sauvegardes
35. Nous reviendrons sur cette notion à l’occasion de la commande pdfimages, p. 67.
36. L'image finale aura soit une largeur de 160, soit une hauteur de 120, et l’autre dimension
s’ajustera suivant la taille de l’original.
37. C’est-à-dire une bande unie entourant l’image.
38. À l’adresse www. imagemagick.org/script/convert.php.
3.6 — MANIPULER DES IMAGES ET DES PDF 65
Pour des compositions plus compliquées, on donne un nom aux fichiers d’en
trée avec un signe =:
% pdftk A=di.pdf B=d2.pdf cat A1-12 B4-8 output d3.pdf
Cette commande place dans d3.pdf les pages 1 à 12 de ÀA (soit d1.pdf)
et les pages 4 à 8 de B (d2.pdf).
On peut aussi utiliser cette syntaxe pour tourner les pages d’un fichier, en
rajoutant R, L ou S après les numéros des pages pour spécifier si l’on souhaite
les tourner de 90° dans le sens horaire (R, pour right, « droite »), anti-horaire (L
pour left, gauche) ou à 180° (S pour symétrique). Par exemple, la commande
suivante produit un fichier doc2. pdf avec les pages 4 à 8 de doc . pdf tournées
de 90° dans le sens des aiguilles d’une montre :
% paftk doc.pdf cat 4-8R output doc2.pdf
Enfin, la commande suivante scinde document .pdf en une série de fichiers
pg_0001 .pdf, pg_0002.pdf, etc., contenant chacun une unique page :
% pdftk document .pdf burst
Page 1 n Page 2
--nup 3x2
41. Ou document-nup.pdf pour les versions récentes.
3.6 — MANIPULER DES IMAGES ET DES PDF 67
Puisque apropos cherche par défaut dans toutes les sections des pages
de man““, cette commande retourne parfois des entrées correspondant à des
bibliothèques de programmation, comme XML : : Parser ci-dessus, qui est un
module de Perl pour lire des fichiers XML. Pour se restreindre aux programmes
(section 1), on utilise :
% apropos -s 1 xml
sgml2xml (1) - convert SGML to XML
xjc (1) - Java(TM) Architecture for XML Binding
[….]
Par défaut, si l’on cherche plus d’un seul mot, apropos retourne les pages
de man contenant l’un ou l’autre. Pour restreindre aux pages ne contenant que
les deux, on utilise -a :
% apropos -a PDF xm1 Pages de man contenant PDF et XL
pdftohtml (1) - program to convert PDF files into HTML,
XML and PNG images
Enfin, il est fréquent que les programmes travaillant sur un format aient
un nom commençant par le format. Ainsi, pour se faire une idée approximative
des programmes travaillant avec le format PDF installés sur votre ordinateur,
on peut tirer parti de la complétion automatique du shell :
% pâf + w1 + } —
pdf2dsc pdfetex pdfnup pdftoppm
pdf2ps pdffonts pdfopen pdftops
[etc… ]
Si ceci ne suffit pas, il faut chercher sur Internet. Avant de se lancer dans
une recherche globale via Google ou un autre moteur de recherche géné
rique, il est souvent intéressant de chercher d’abord sur sourceforge.net
et freshmeat .net : ces sites (en anglais seulement) rassemblent de nom
breux programmes, le plus souvent des logiciels libres fonctionnant sous Linux.
De plus, ces sites offrent des possibilités de recherche avancées, permettant
de sélectionner selon des critères précis de système d’exploitation, de licence,
d’environnement, etc.
Pour finir, notons qu’il arrive que ce que l’on souhaite faire puisse se dé
couper en opérations plus simples qui sont déjà prises en charge par certains
programmes. Par exemple, s’il est vrai que man ne produit pas directement des
fichiers PDE il est aisé de lui faire d’abord produire du PostScript que l’on peut
convertir en PDF grâce à ps2pdf. Nous verrons au chapitre 7 comment écrire
des programmes simples permettant de réaliser ce type d’enchaînements‘”.
Résumé du chapitre
Les fichiers et répertoires hiérarchie de fichiers entre deux
appartiennent à un utilisateuretäun … répertoires.
groupe, sur lesquels le système
; n find se > sont
et grep des alliés précieux
base pour autoriser ou non l’accès. pour (re)trouver des fichiers.
» On utilise tar en combinaison avec , Il existe des programmes pour
gzip (ou bzip2 ou 1zma) pour réaliser (presque) tout ce que l’on
archiver des fichiers. veut. apropos aide à trouver ceux qui
rsync synchronise efficacement une sont déjà installés.
% 1s -1 fichier
1rwxrwxrwx 1 ab ab 11 nov. 11 02:34 fichier
-> /etc/shadow
Pouvez-vous lui expliquer ce qui se passe ?
3.3 Commandes croisées
Horizontalement Verticalement
1. Les groupes dont je fais partie a. Pour créer le fichier tri .gz
2. Toutes les pages de man sur man b. Supprimer toutes les permissions
3. Comparer des fichiers aux « autres »
4. Décompresser une archive tar c. Chercher du texte
compressée par gzip d. L’espace restant sur le disque
e. Utiliser £ à la place de a
72 CHAPITRE 3 — LES OUTILS DE L’UTILISATEUR
SOLUTIONS
3.1 Chaque fichier ou répertoire appartient à un utilisateur et à un groupe d’utilisateurs.
On modifie les autorisations d’un fichier dont on est propriétaire avec la commande
chmod, et le groupe auquel il appartient avec chgrp. Pour accéder à un fichier, en plus
des permissions appropriées sur ce fichier, il faut la permission d’exécuter le répertoire
qui le contient.
3.2 Le fichier en question est un lien symbolique : les permissions qui sont données par
3.3 , . ,
1s -1 ne nous renseignent que sur la possibilité par votre amie d’accéder au lien
(ce qui est toujours possible), mais pas forcément au fichier cible. En l’occurrence,
/etc/shadow est la base de donnée des mots de passe des utilisateurs de la machine,
dont la lecture est réservée à l’utilisateur root ; créer un lien vers ce fichier ne permet
pas de passer outre ses permissions !
c|
H| [6 L
|R N
“z|-\nd s| . jM| |E |
[c|rjo|u|r[s] |-|
:[A|P|R|O|P|0|S| |M|A|N|
T| [R| -[p[r|F|[F
« T[A|R| |X|V|z|F
({} (W
Gérer le temps et le réseau
Chapitre
Cette nouvelle invite est affichée par le shell de la machine distante : les
commandes suivantes tourneront sur celle-ci, jusqu’à ce que vous lanciez la
commande exit pour terminer le shell distant et revenir au shell local*.
La première fois que vous vous connectez à une machine distante, ssh
vous signale qu’elle lui est inconnue :
The authenticity of host ’machine.distante.org’
can’t be established.
L’authenticité de machine.distante.org n’a pas pu être établie.
RSA key fingerprint is — L’empreinte de sa clé RSA est …
f9:5d:f14:d8:5c:d0:84:b2:6c:17:3b:d3:74:7c:e5:f6.
Âre you sure you want to continue connecting (yes/no)?
Etes-vous sûr de vouloir vous connecter (oui/mon) ?
En effet, à chaque serveur SSH correspond une clé qui l’identifie de manière
certaine. Ce message vous invite à vérifier que le serveur est bien celui que
vous pensez* ; tapez « yes » (oui) pour accepter la clé. Si, lors d’une connexion
ultérieure, la clé a changé, ssh vous le fait savoir et refuse catégoriquement
de se connecter :
eadacceceaceceaaRAcecACaRACAGCCACACECCCCCCACACACACACE
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
eacacacacañaaararAacAacAGRACOCACACACACEACACCCACACACACE
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
[..] La clé problématique est à la ligne I :
Offending key in /home/vf/.ssh/known_hosts:9
Ceci peut indiquer une tentative d’interception de la connexion, mais plus
souvent, c’est la conséquence d’une mise à jour du serveur. Il faut dans ce cas
éditer le fichier -/.ssh/known_hosts pour supprimer l’empreinte obsolète.
Astuce : ouvrir un fichier à une ligne précise avec nano
Pour supprimer la clé fautive, on peut exploiter le fait que nano, ainsi que
emacs, vim et d’autres éditeurs de texte, se positionne directement à la ligne
numéro 9 si on le lance de cette manière :
% nano +9 -/.ssh/known_hosts
% ssh-keygen
Generating public/private rsa key pair.
Génération d’une paire de clés publique/privée RSA.
Enter file in which to save the key Nowm du fichier où
(/home/vf/.ssh/id_rsa) : sauver la clé
Enter passphrase (empty for no passphrase) :
Entrez le mot de passe, ou Enrée! pour une clé sans mot de passe.
Enter same passphrase again: Tapez à nouveau le mot de passe
Ce programme demande où enregistrer la clé privée” : tapez directement
sur eqÿ%çë pour sauver à l’emplacement par défaut (-/.ssh/id_rsa), puis
deux fois sur '%ç{rééâ. Pour utiliser cette clé, il n’y a plus qu’à rajouter le contenu
du fichier local -/.ssh/id_rsa.pub (la clé publique"°) à la fin du fichier dis
tant -/.ssh/authorized_keys. La manière la plus simple de le faire est* :
% ssh-copy-id vf@machine.distante.org
Quand la clé privée est stockée sur un ordinateur multi-utilisateur!*, il est
fortement recommandé de la protéger par un mot de passe, que l’on tape
deux fois lors de la création (pour éviter les erreurs). Pour se servir la clé,
il faut taper le mot de passe utilisé lors de la création. Pour éviter de revenir
à la situation initiale, on utilise ssh-add qui déprotège la clé pour la durée de
la session graphique en cours :
% ssh-add !! faut donner le mot de passe de la clé pour ln déprotéger
9. La fichier contenant la clé publique aura le même nom, avec .pub rajouté à la fin.
10. Il ne faut jamais copier -/.ssh/id_rsa, qui contient la clé privée.
11. Cette commande n’est pas disponible sous Mac OS X; on copie le clé « à la main »,
avec la commande: ssh vf@machine.distante.org ’cat - >> .ssh/authorized_keys?
< -/.ssh/id_rsa.pub (attention aux guillemets !).
12. Si ceci n’est pas nécessaire sur un ordinateur mono-utilisateur, gardez à l’esprit que tous
les utilisateurs avec des droits d’administration sur une machine peuvent usurper une clé non
protégée.
4.2 — ÉCHANGER DES FICHIERS 77
Enter passphrase for /home/vf/.ssh/id_rsa:
Identity added: /home/vf/.ssh/id_rsa
Mise en place de SSH sur un réseau domestique
Ÿ Si vous possédez plusieurs ordinateurs connectés à Internet à la mai
son, vous pouvez mettre en place des serveurs SSH sur chacun d’eux
et vous connecter de l’un à l’autre. Pour cela, il suffit d’installer le pa
quet openssh-server ou simplement openssh sur les ordinateurs en ques
Ÿ tion!®. Ensuite, il faut obtenir l’adresse IP (sur le réseau local) des ordina
Ÿ teurs, en utilisant :
- /sbin/ifconfig | grep ’inet addr’ inet addr = adresse IP
inet addr:192.168.1.30 Bcast:192.168.1.255
Mask:255.255.255.0 \ l’est celle-ci
inet addr:127.0.0.1 Mask:255.0.0.0
L’adresse IP qui sert à se connecter est celle qui ne commence pas par 127
(qui est un réseau local privé à l’ordinateur seulement) :
- ssh vf@192.168.1.30 À lancer sur une auctre machine !
Faites attention cependant à ce que votre box soit pourvue d’un pare
feu (c’est souvent le cas) et qu’il soit activé, sinon des indésirables pourront
essayer de se connecter sur vos machines depuis l’extérieur.
L’un des principaux attraits d’un réseau est la possibilité d’échanger des
fichiers entre ordinateurs ; c’est particulièrement facile en ligne de commande.
13. Voir page 69 pour trouver le nom exact du paquet et page 162 pour l’installer.
78 CHAPITRE 4 — GÉRER LE TEMPS ET LE RÉSEAU
rsync et scp utilisent ssh dans les coulisses pour se connecter aux ordina
teurs distants : ces programmes peuvent donc tirer parti des clés sous réserve
que vous en ayez créées, bien sûr.
a. Le Web non-interactif
wget télécharge des fichiers accessibles sur le Web, qu’il s’agisse de pages
Web (des documents HTML), d’images ou de documents. Par exemple,
h wget vww.gnu.org/software/bash/manual/bash. pdf
télécharge la documentation de la dernière version de bash (au format PDF),
et la sauve dans le répertoire courant.
Cette méthode convient pour télécharger des fichiers, mais est mal adap
tée à des pages que l’on souhaiterait visionner localement, d’une part parce
qu’il manque tous les documents nécessaires à l’affichage de la page (images,
feuilles de styles), et d’autre part parce que la plupart des liens, tirés de leur
contexte d’origine, ne sont plus corrects. L'utilisation des options -pH et -k
permettent de pallier l’un et l’autre de ces problèmes :
% wget -pHk fr.wvikipedia.org/wviki/Unix
télécharge la page wikipédia sur Unix, ainsi que tous les documents néces
saires pour la visionner et les place dans le répertoire fr.wikipedia.org.
28. Si ce n’est qu’il n’est pas nécessaire d’installer un serveur FTP sur la machine distante.
82 CHAPITRE 4 — GÉRER LE TEMPS ET LE RÉSEAU
dans alpine, on navigue dans les courriers avec les flèches, on affiche la liste
des dossiers en appuyant sur <, on répond à un mail avec r, etc. Ces clients
sont de plus entièrement configurables.
Bon à savoir : lecture des messages locaux
De nombreux services fonctionnant en tâche de fond sur les machines
Unix communiquent avec les utilisateurs via un serveur de mail local
à la machine. C’est le cas par exemple pour at et cron (voir pages 88
et 86). alpine et les autres clients mails en mode texte permettent
de lire ces messages; c’est eux qu’il faut utiliser quand le shell vous
dit« You have new mail » (vous avez des nouveaux messages).
mail distante.
Envoi de mails et configuration des serveurs de messagerie
Un serveur de messagerie est automatiquement installé sur toutes les ma
chines Unix. C’est lui qui permet à alpine de recevoir et d’envoyer du cour
rier. Par défaut, ce serveur est configuré pour fonctionner localement. Pour
envoyer des mails à l’extérieur, il est nécessaire de le reconfigurer pour lui
faire utiliser le serveur de messagerie de votre fournisseur d’accès (confi
guration en mode « smarthost »). Le serveur s’appelle souvent exin, exim4,
postfix ou sendmail ; référez-vous à sa documentation.
a. La date et l'heure
date affiche la date et l’heure courantes :
k date
vendredi 1 juin 2012, 09:27:27 (UTC+0200)
UTC+0206 est le fuseau horaire de la France à l’keure d’été
Son principal intérêt est que l’on peut contrôler finement le format d’af
fichage de la date en passant en argument un format commençant par « + »
et contenant des séquences de caractères avec les significations suivantes** :
34. Cette liste n’est pas exhaustive, référez-vous à date(1) pour plus d’informations.
84 CHAPITRE 4 — GÉRER LE TEMPS ET LE RÉSEAU
% date +%d/%m/hY
01/06/2012
% date +4H\ heures\ %M Les espaces doivent être échappés, sauf
09 heures 27 si on wctilise des guillemets, voir page (25
date prend tout son intérêt en combinaison avec une construction du shell
basée sur les guillemets inverses « ‘ ». Quand le shell rencontre ces derniers,
il exécute la commande qui se trouve entre eux et la remplace par son résultat.
Par exemple, pour dater précisément des archives, on peut utiliser :
% tar cvzf docs-‘date +%Y-%m-%d-/Hh%M‘ .tar.gz docs
Au moment de lancer cette commande, le shell remplace la partie entre guille
mets inverses par son résultat ; la commande réellement exécutée est donc
% tar cvzf docs-2012-06-01-09h27.tar.gz docs
On peut tirer parti des guillements inversés pour simplifier la réalisation
de sauvegardes incrémentales avec rsync :
h rsync -avb --suffix “‘date +.%Y/m%d‘ Source Cible
Il est judicieux de définir des alias (voir page 98) pour éviter d’avoir à taper
l’argument de date à chaque fois.
À vous de jouer
Plutôt que de nommer les archives selon la date du jour, on souhaite les
placer dans un répertoire du type Archives/année/mois/jour. Comment
créer ce répertoire pour la date d’aujourd’hui ?
*LE o8ed 104 ‘a:oauau‘eJ ap
stour np sertouedes saj no sed s] mod aressoogu 353 d- uondo,] ‘,PA/04/2%+ o3ep,/seatyorxy d- ITpAU opueurUIOO EJ J°0UE] 3P 3YMS [I
b. Un calendrier
La commande nca1”°135 affiche un calendrier sur plusieurs mois ou sur une
année. La date du jour est mise en valeur. On l’utilise sous les formes sui
vantes :
% ncal Le mois en cours
Juin 2012
lu & 11 18 25
ma 5 12 19 26
me 6 13 20 27
je 7 14 21 28
35. C’est le successeur de cal.
4.4 — LE TEMPS DU CALENDRIER 85
ve H 81522 29
sa 2 9 16 23 30
di 3 10 17 24
% ncal -3°6 Affiche aussi mai et juillet
%h ncal 2012 L’année 2012 en entier
% ncal 7 2012 ;
% ncal juillet 2012 }5W“e”f 2012
% ncal ‘date +4Y‘37 Toucte l’année en cours
Attention, ncal 12 n’affiche pas l’année 2012, mais bien l’année 12 !
Tout comme ssh, watch prend une commande en argument: il est né
cessaire de porter une attention spéciale aux jokers et autres caractères spé
ciaux (voir encadré page 75). Ainsi, pour suivre le téléchargement d’une série
de photos, il ne faut pas lancer
% watch -n 60 1s -1 *.jpg — watch ne voit jamais le « * »
mais
% watch -n 60 ’1s -1 *.pdf? Correct
10 12 * * 0
—Ss R— —— p
minute heure jour dumois — moisdel’année = jour de la semaine (0 = dimanche)
crontab. Dans ce but, il peut être intéressant de définir des variables d’envi
ronnement*! spécifiques au crontab, en rajoutant leur définition au début du
fichier*?. La variable spéciale MAILTO permet de choisir l’adresse qui recevra
les mails. Pour lancer un script personnel, on pourra redéfinir le $PATH® :
PATH=/bin:/usr/bin:/home/vf/bin | Pas besoin de « export » ici
PERLSLIB=/home/vf/lib/per1 | Pour des packages Perl personnels
MAILTO=vf@example.org Envoi du résultot à fi@exumple.ovq
10 12 * * O mes_sauvegardes Scrip+ perso dans /Kome/vf/bin
4.1 ; .P][F|R ‘
SOLUTIONS
u| |o| s|
\ T|1[M|E| [F|I|N|D[ |/
‘s EG|
[A|T| |9|P|M
T|e
[ C|R[O[NiT|A|B| |-|E|]
P
4.2 Pour éviter de taper son mot de passe plus que nécessaire en utilisant SSH, on peut
créer une paire de clés publique/privée au moyen de la commande ssh-keygen. On
copie la partie publique de la clé sur la machine distante à l’aide de ssh-copy-id. Si
l’on a utilisé un mot de passe pour la protéger, il faut utiliser ssh-add pour n’avoir à
le taper qu’une fois par session.
Le shell à votre service
Chapitre
les raccourcis.
5.1 De“Aà z
a. Raccourcis clavier courants
Les shells se pilotent via de nombreux raccourcis clavier. Nous allons vous
présenter ceux qui sont communs à tous les shells — et qui sont aussi utili
sables avec d’autres programmes. Ils sont pour la plupart basés sur la touche
(en minuscule). S
cu
cu!, que l’on note ” en abrégé : « “A » veut dire ËÎË suivi de la touche « a »
Navigation
Édition
/) o e) = supprime le caractère sur le curseur!
83 supprime le caractère à gauche du curseur
« coupe » le mot à gauche du curseur”
« coupe » du curseur jusqu’à la fin de la ligne*
2
« coupe » du début de la ligne jusqu’au curseur
« colle » ce qui vient d’être coupé par “K, 7W ou "U*
1. Si aucun caractère n’est présent, 7D a une autre fonction, voir page suivante.
92 CHAPITRE 5 — LE SHELL À VOTRE SERVICE
S’il peut sembler redondant d’apprendre les raccourcis en ctgg + une lettre
quand les mêmes fonctions sont accessibles par des touches plus intuitives,
ceci est tout de même une bonne idée, pour les raisons suivantes :
— Les puristes diront qu’il est plus rapide de les utiliser que les flèches
et autres, car on n’a pas besoin de déplacer les mains.
— Il arrive que les flèches refusent de fonctionner, sur un terminal distant
inhabituel, ou après un zcat intempestif sur un fichier binaire (voir en
ont plus de
chances de fonctionner : mieux vaut avoir plus d’une corde à son arc !
À éviter !
S gèle le terminal jusqu’à l’appui sur 7Q
Autres actions
“"Iou æ complétion automatique (page 42)
! lance la commande
“L efface l’écran
-G efface la commande en cours d’édition
“D « fin de transmission »
D signale aux programmes qui attendent une entrée de votre part (comme
at ou mail par exemple) que vous avez fini. S’il est utilisé dans le shell lorsque
la ligne est vide, le shell se termine, et le terminal se ferme (sauf dans le cas
de sessions SSH, où seul le shell distant est terminé). G peut être utilisé pour
tout annuler quand on se trompe dans l’édition d’une commande de manière
difficile à récupérer, comme un guillemet pas fermé.
2. Il ne s’agit pas du couper/coller classique : celui-ci est interne au shell et ne permet pas
de dialoguer avec d’autres applications de la session graphique en cours. Utilisez la souris pour
cela, mais sachez qu’un texte sélectionné à la souris peut être collé dans un terminal avec smËâ
+ hes.
3. Ces raccourcis ne fonctionnent que si le terminal est la fenêtre active, ce qui est particuliè
rement important si l’on a lancé un programme graphique depuis la ligne de commande.
5I1-DE“AA TZ 93
Interrompre des commandes
C _ termine définitivement la commande en cours
-Z suspend momentanément la commande en cours
Quand on utilise “Z, le shell signale que l’on a suspendu une commande
avec un message ressemblant à ceci :
% find /
Toutes les fonctions présentées ci-dessus ne peuvent cibler que des com
mandes qui ont été lancées depuis le shell en question. Une exception notable
est kill, qui peut agir sur n’importe quelle commande pourvu qu’on connaisse
son « numéro de processus »°, PID en abrégé, un numéro unique qui est donné
par le système d’exploitation à chaque commande, indépendamment de la ma
nière dont elle est lancée (shell, interface graphique, cron, etc.). On peut l’ob
tenir en utilisant ps -e, qui liste toutes les commandes en cours” :
% ps -e
PID TTY TIME CMD
3118 ttyl 00:00:00 xterm
3120 pts/0 00:00:00 zsh
6952 ttyl 00:00:00 xterm
6954 pts/5 00:00:01 zsh
7404 pts/5 00:02:54 emacs [...]
% Kill 7404 Termine la commande emacs
On aurait pu utiliser aussi killall :
% killall emacs
qui termine toutes les commandes emacs, dont celle dont le PID est 7404.
À l’usage, il apparaît que l’on emploie souvent les mêmes commandes, fré
quemment avec le même jeu d’options. Pour éviter de se répéter et de passer
son temps à chercher des options dans les documentations, ou pour donner
à certaines commandes des petits noms plus faciles à retenir, il est possible
de définir des ALIAs, c’est-à-dire des raccourcis pour des commandes. On les
définit soit provisoirement en les tapant dans l’invite du shell, soit définitive
ment en rajoutant dans le FICHIER DE CONFIGURATION DU SHELL!° des lignes
qui se présentent sous la forme :
9. Pour lire ce fichier, il peut être intéressant d’utiliser l’option -R de 1ess, qui rétablit l’affi
chage des couleurs.
10. -/.bashrc pour bash, voir page 104 pour les autres.
CHAPITRE 5 - LE SHELL À VOTRE SERVICE
argument: '
alias ne sont donc disponibles que dans les terminaux ouverts après la modi
fication du fichier de configuration ! Les impatients peuvent utiliser la com
mande source, qui force le shell à relire le fichier de configuration passé en
remplace*!* : ‘
type montre si une commande est un alias et, le cas échéant, ce qu’il
% type dui
dui is aliased to ‘du -h --max-depth=1?
Voici les règles à respecter pour écrire des alias :
13. Sauf si celui-ci doit en contenir, voir page 125 pour plus d’informations.
14. Cette option se nomme -G sous Mac OS X.
15. Nous reviendrons sur les couleurs page 107.
16. L'option -i rend la recherche insensible à la différence majuscule/minuscules, tandis que
l’option -P/f--%1b/%L affiche le nom du fichier et le numéro de ligne courante en bas du
terminal.
17. iconv est un programme pour changer le jeu de caractères d’un fichier, nous y reviendrons
page 103.
98 CHAPITRE 5 — LE SHELL À VOTRE SERVICE
fr_FR
100 CHAPITRE 5 — LE SHELL À VOTRE SERVICE
variable : '
On a deux manières de modifier le contenu d’une variable d’environne
ment, suivant que l’on souhaite une modification temporaire ou durable. On
change la valeur d’une variable seulement pour la durée d’une commande
en faisant précéder le nom de la commande de la valeur temporaire de la
a. Changer de shell
Pour essayer un autre shell, rien de plus simple : il suffit de le lancer depuis
votre shell habituel :
% zsh Essayer zsk jusqu’à un appui sur AD, ou jusqu’à ce
qu’on tape « exit »
Pour rendre cette modification permanente, modifier la variable SHELL n’a
pas l’effet attendu. Il faut utiliser chsh (pour changer de shell) :
-22. Voir page 125 pour plus de détails.
5.3 — LES VARIABLES D’ENVIRONNEMENT 101
% chsh
Mot de passe : Il faut donner son mot de passe
Chängement d’interpréteur de commandes
initial pour vf
Entrez la nouvelle valeur ou « Entrée » pour
conserver la valeur proposée
Interpréteur de commandes initial [/bin/bash] :
Une excellewte idée est de taper /bin/zsh (voir pourquoi page 160 !)
Puisque les fichiers de configuration du shell diffèrent pour chaque shell,
il est nécessaire de transposer pour le nouveau shell les modifications appor
tées à la configuration de l’ancien (alias, variables d’environnement et autres).
L’utilisation d’un fichier commun -/.alias (voir encadré page 96) permet
de facilement partager les alias entre deux shells. Cette technique peut aussi
être appliquée pour les variables d’environnement.
fichiers texte*!, noms des fichiers sur une clé USB...), il est possible d’avoir des
lettres mal représentées, comme des « é » qui deviennent « © », ou des lettres
accentuées qui manquent. Ceci est symptomatique de textes écrits dans un jeu
de caractères et lus dans un autre.
En général, il n’est pas nécessaire de changer globalement le jeu de carac
tères : il est préférable de s’en tenir à la valeur par défaut du système, que l’on
peut connaître en lançant** :
% locale charmap
UTF-8
dates®*, des adresses, des nombres®° et des montants. Il est possible de chan
ger spécifiquement certains de ces aspects avec les variables suivantes*” :
Variables spécifiques
LC_NUMERIC =— nombres LC_MONETARY montants
LC_MESSAGES langue LC_TIME dates et heures
LC_PAPER papier par défaut
Même si LANG vaut fr_FR, on peut obtenir la date en anglais :
% LC_TIME=en_US date
Wed Nov 23 23:22:48 CET 2011
Enfin, dans des situations où LANG et/ou certaines des variables LC_ ont été
modifiées, on peut redéfinir tous les aspects d’une locale d’un coup en utilisant
LC_ALL, qui prend le pas sur toutes les autres variables :
% LC_ALL= libreoffi Lance Librebffice en anglais, quels que
k LC_ en_US libreoffice oiert LANG et les auctres LC_
Cet exemple s’appuie aussi sur des tests, les constructions if … then … fi.
Nous y reviendrons plus en détail page 145 ; sachez déjà qu’en l’occurrence,
ils permettent respectivement d’ajouter le répertoire $HOME/bin dans le PATH
et de lire le fichier -/.alias, mais seulement s’ils existent.
-/.bashrc ou -/.profile ?
Dans certains cas (login par SSH ou sur une console « texte » de l’ordinateur,
par exemple), le shell est lancé sous la forme d’un shell de login. Il s’agit
du même shell que d’'habitude, mais il lit des fichiers de configuration dif
férents. Ainsi, au lieu de lire -/.bashrc, bash lit et exécute le premier des
fichiers -/.bash_profile, -/.bash_login, et -/.profile qu’il trouve.
39. Il s’agit du programme adduser ou useradd, suivant les systèmes.
40. C'est-à-dire rajouter des « # » au début des lignes en question.
106 CHAPITRE 5 — LE SHELL À VOTRE SERVICE
| Vous avez alors l’impression d’avoir perdu votre configuration*!. Deux pa
rades : soit vous relancez directement votre shell « à la main » :
% bash
source $HOME/.bashrc
Les invites
La variable PS1 contrôle la façon dont le shell affiche les invites. En plus
des caractères habituels, on peut y utiliser les codes spéciaux suivants®** :
Différentes invites
PS1=?\A \W $ 19:22 Congres $
PS1="\u@\h -- \w %’ vf@totoro -- -/Travail/Congres %
À noter : PS1 n’est pas une variable d’environnement, juste une variable
du shell. En conséquence, export n’est pas nécessaire**. Par ailleurs, les guille
mets simples protègent les caractères spéciaux ; nous y reviendrons page 125.
Options du shell
Certains des comportements du shell sont configurables à l’aide de la com
mande set, qui accepte une série d’options, parmi lesquelles :
41. Dans le cas d’un shell de login, $0 commence par « - », comme « -bash », ce qui permet
de les distinguer des shells usuels.
42. Il en existe encore bien d’autres, reportez-vous à bash(1), section « Invites » pour plus
d’informations. Par ailleurs, les codes utilisés par les autres shells sont différents, même si les
principes restent les mêmes, voir page 160.
43. Les répertoires qui ne descendent pas du home sont affichés en chemin absolu.
44. Nous reviendrons sur les variables du shell page 139.
5.5 — LES FICHIERS DE CONFIGURATION 107
Options du shell
-a rend export implicite
-b notifie la fin des tâches de fond immédiatement
(plutôt qu’à l’invite qui suit)
-C refuse d’écraser des fichiers par une redirection
-f désactive complètement les globs
Options surtout utiles pour les scripts*°
-e termine un script dès qu’une commande échoue
-u affiche une erreur si l’on utilise une variable non définie
-x affiche les commandes exécutées
Couleur du texte
30 noir 31 rouge 32 vert 33 jaune
34 bleu 35 magenta 36 cyan 37 blanc
Couleur de fond
40 noir 41 rouge 42 vert 43 jaune
44 bleu 45 magenta 46 cyan 47 blanc
Attributs
00 normal O1 gras 04 souligné
Ainsi, 04 ; 35 veut dire « magenta souligné » et 42; 37 ; 01, « fond vert, texte
blanc, gras ». Certains terminaux sont capables d’afficher plus de couleurs ;
par exemple xterm peut en afficher 256 différentes, comme 38;5;172, qui
correspond à une couleur de texte jaune foncé sans autres attributs*$. D’autres
terminaux en revanche refusent obstinément de colorer quoi que ce soit, mais
le gras et le souligné peuvent fonctionner quand même.
En plus de 1s, tree et 1ftp utilisent eux aussi LS_COLORS. Par ailleurs,
grep accepte, comme 1s, une option --color=auto pour mettre en valeur
les occurrences du texte recherché.
Pourquoi auto ?
La partie =auto de l’option demande aux programmes concernés de faire
la différence entre le cas où la commande affiche son résultat directement
dans le terminal, où la couleur est bénéfique, et le cas où la sortie est en
voyée dans un fichier ou un autre programme*°, où les codes indiquant la
couleur sont gênants, et donc désactivés.
Enfin, signalons qu’il est aussi possible d’utiliser ces codes de couleur pour
l’invite du shell, via une syntaxe un peu plus lourde. Pour mettre une partie
en vert gras (01 ; 32), il faut la précéder de \ [\e [01 ; 32m\] et la faire suivre
de \[\e [0Om\] pour revenir à la normale :
PS1=\[\e [01;32m\] \u\[\e [00Om\] @\h \w : ”
Dans cet invite, le nom d’utilisateur (\u) est en vert gras, et le reste sans mise
en valeur particulière.
Horizontalement Verticalement
. Idéal pour lancer une commande et a. Quel est mon email ?
la reprendre plus tard
b. Variable importante pour la
recherche des programmes à
. Mot: ce qu’il faut absolument exécuter
rajouter dans les fichiers de Version « originale » de tree
configuration pour s’y retrouver
…. Raccourci pour des commandes
. Pour lancer une commande qui ne
® Quelles sont les locales disponibles ?
meurt pas quand le shell se termine
. Terminer (brutalement !) la tâche r Lancer vi (un autre éditeur) en
suspendue anglais américain
. Début de ligne
£5
g. Le fichier de configuration de bash
110 CHAPITRE 5 - LE SHELL À VOTRE SERVICE
5.1 ; ,
rrrs reatsrnrs ŒO'Hoscsrsessscssesses. Les modifications portées
à ce fichier ne prennent effet que dans UN Lisisistsises carsisiss, SAUÉ si
on lance la commande _+sssises 77s escsusissess
SOLUTIONS
, —,A =. d[=7
Berçep
c| [p] |T| [A| . |N [.
H| |A| [R] [1]| [1] j6| |B
A s|
|E|X|P|O|R|T| |E[D[I1|T|O|R|=N[A[N[O|
|_| (H El A [6 E HS
E | L| | R
$ |S| |A| “[NjO|H|U|P]
s| C[O|M|M|E|N|T|A[I|R|E| |U| |C|
L “ja] |v]
[K[r[r]1]| [e]1] H
1|
5.2 Le fichier -/. bashre contient des commandes que bash exécute à son démarrage. On
peut y définir entre autres des alias et des variables d’environnement. Les modifications
portées à ce fichier ne prennent effet que dans un nouveau shell, sauf si on lance la
commande source -/.bashrc.
Les outils du sorcier
Chapitre
Nous avons décrit jusqu’à présent des outils utiles et performants, sans dé
tailler leurs interactions potentielles. Les deux derniers chapitres de ce livre
vont pallier ce manque et vous présenter ce qui fait toute la puissance de
la ligne de commande : les mille et une manières de combiner des programmes
simples en des tâches complexes, précises, et généralement difficiles à réali
ser autrement. Nous avons passé les chapitres précédents à décrire les diffé
rents ingrédients de la ligne de commande, c’est maintenant que vous allez
apprendre à les combiner pour créer vos propres recettes !
La construction > ne redirige que la sortie standard. Elle n’affecte pas la sor
tie erreur, qui s’affiche dans le terminal comme d’habitude.
L’unique entrée, numérotée O, se nomme quand à elle « entrée standard »
(standard input, ou stdin).
On peut rediriger indépendamment les deux sorties :
Redirections
2> erreurs redirige la sortie erreur vers le fichier erreurs ;
Pas d’espace ewtre Z et> 1a sortie standard reste dans le terminal
2>> erreurs redirige la sortie erreur à la fin du fichier
erreurs
> normal 2> erreurs redirige la sortie standard dans normal et la
sortie erreur dans erreurs
&> tout redirige les deux sorties dans tout
> tout 2>&1 redirige les deux sorties dans tout
mais cette solution pose deux problèmes : d’une part, elle ne fonctionne pas
toujours, si l’on a pas le droit d’écrire dans le répertoire courant par exemple ;
d’autre part, elle génère un fichier temporaire qu’il ne faut pas oublier d’effacer.
Une solution plus compacte et plus élégante est la suivante :
% find -name ’*.jpeg’ | less Lire la sorte de find avec less
Cette construction envoie la sortie standard (numéro 1) de find vers l’entrée
standard de 1ess, Ceci donne le résultat voulu car 1ess est programmé pour
travailler sur son entrée standard s’il est appelé sans arguments ; c’est le cas
d’autres programmes, nous y reviendrons page 116.
Les pipes offrent des possibilités insoupçonnables à première vue ; en vérité,
bon nombre d’utilitaires standard de la ligne de commande ont été conçus
pour fonctionner avec eux. Nous allons leur consacrer une part importante
de la fin de ce chapitre.
Voyons d’abord comment on peut utiliser des pipes pour pallier le manque
de 1zless qui avait été constaté page 60 : en réalité, il s’agit simplement d’uti
liser la sortie de 1zcat comme entrée de 1ess, ce qui se traduit par:
% 1zcat fichier.1zma | less
ggp
Les pipes remplacent avantageusement les redirections < en rendant les
commandes plus faciles à lire ; les deux commandes suivantes sont fonction
nellement équivalentes"* :
h mail -s ’Message? hk@example.com < message.txt
“h cat message.txt | mail -s ’Message’ hk@example. com
À vous de jouer !
Comment compter les fichiers retournés par la commande ci-dessus ?
T- 4 | FA/eu07/ de.
sort: trier
La commande sort (« trier ») trie les lignes de son entrée standard par
ordre alphabétique. On s’en sert typiquement pour remettre dans l’ordre les
résultats d’autres commandes pour s’y retrouver plus facilement :
% apt-cache search video | sort | less
Puisque cette commande trie dans l’ordre du dictionnaire, elle donne des
résultats surprenants avec des nombres : ainsi 19 se range entre 1 et 2. On dis
pose de plusieurs options pour contrôler le tri :
-f 1,4 affiche les premier et quatrième champs, tandis que -f£ 2-7 affiche
22.
tous ceux du second au septième““ :
% cat /etc/passwd | cut -d: -f1-3,7 Champs |, 2, 3 et 7
root:x:0:/bin/bash On peut omettre les espaces
daonon:x:1:/bin/5h entre-det-Fetlewrs
man:x:0: 1n/S W9MW\QWŸS
vf:x:1000:/usr/bin/zsh
22. On peut aussi utiliser -f 4- pour afficher tous les champs du quatrième ‘au dernier.
23. En l’occurrence, on aurait pu employer l’option -1 de grep pour arriver au même résultat.
24. Pour-être précis, cette commande compte le nombre de lignes contenant « donc », ce qui
peut être en-dessous du nombre de « donc » s’il y en a parfois plus d’un par ligne. On peut
pallier ce problème grâce à l’option -o de grep, sur laquelle nous reviendrons page 131.
120 CHAPITRE 6 - LES OUTIELS DU SORCIER
Le principal intérêt des filtres est qu’il est commode d’en enchaîner plu
sieurs pour réaliser des actions complexes qu’il n’est pas aisé de réaliser autre
ment, surtout de manière automatique. Voici quelques exemples qui illustrent
ces possibilités. Nous vous invitons à essayer chacun de ces exemples « pas
à pas », en rajoutant les pipes au fur et à mesure, ou en supprimant certaines
parties, pour bien comprendre l’effet de chaque commande.
Les 10 répertoires les plus gros (en espace disque)
Cherchons les dix sous-répertoires les plus gros du répertoire courant,
en terme d’espace disque occupé. du -s */ permet de connaître la taille
de tous les sous-répertoires. Il suffit de les trier par ordre numérique croissant
(sort —n) et de ne garder que les dix derniers (tail1l) :
% du -s */ | sort -n | tail
Les 10 répertoires les plus gros (en nombre de fichiers)
Comment faire si l’on souhaite au contraire connaître les dix répertoires
qui contiennent le plus de fichiers ? On commence par dresser la liste de tous
les fichiers du répertoire courant et de ses sous-répertoires (find . -type f).
On ne garde que la partie du nom correspondant au sous-répertoire en remar
quant qu’il s’agit du second°° des champs séparés par des « / » (cut -d/ -f2).
On compte les occurrences successives de chaque sous-répertoire (uniq -c) ;
il ne reste plus qu’à trier et à ne garder que les dix derniers :
% find . -type f | cut -d/ -f2 | uniq -c | sort -n | tail
35. Sur un processeur multi-cœurs, on peut accélérer la conversion avec l’option -P2, qui fait
en sorte que deux commandes tournent en permanence.
36. Les résultats de find dans le répertoire courant commencent par « . / ».
124 CHAPITRE 6 — LES OUTILS DU SORCIER
À vous de jouer
Pourquoi n’est il pas nécessaire d’insérer sort entre cut et uniq ?
*SpA[SSSOONS SOUËT] sop ms soupye Juos puuop arouadau-snos un,p sronpy
saz sno1 : aoyedar red aioxedez amenuanbes asgjueur ap apgoord y “enbnaqeudre o1pro] surp sieymspz sop sed auvop ou putz !s SUPN
% 1s
conf-Oi.txt conf-06.txt conf-11.txt cours-2.txt
conf-02.txt conf-07.txt conf-12.txt cours-3.txt
conf-08.txt conf-08.txt conf-bilan cours-4.txt
conf-04.txt conf-09.txt conferences.txt
conf-05.txt conf-10.txt cours-1.txt
Si l’on souhaite déplacer les fichiers conf-O1 .txt à conf-12.txt unique
ment dans un autre répertoire, on peut utiliser n’importe laquelle des com
mandes suivantes :
k mv conf-O* conf-1* repertoire
% mv conf-[01]* repertoire
k mv conf-*.txt repertoire
% nv conf-??.txt repertoire
% mv *-7?.txt repertoire
Depuis le shell, on dispose aussi d’une autre construction basée sur des
accolades pour générer des noms de fichiers. La commande
% convert image.{jpeg,png} Pas d’espace autour de la virgule !
est un raccourci pour
k convert image.jpeg image.png
Le shell construit les arguments de la commande en utilisant chacune des
valeurs spécifiées entre les accolades. Cette construction n’est pas à propre
ment parler un glob, puisque les arguments générés ne correspondent pas
forcément à des fichiers existants (contrairement aux globs du'shell). On peut
aussi s’en servir pour générer des listes numérotées“° , de la manière suivante :
% mkdir -p 2011/{1..12} Crée 2011/1, 201l/2, etc. jusqu’à 20H/(2
% mkdir Bilans-{2008. .2012} . ;
% mkdir Bilans-20{08. .12} Les Ô inttiaux sorct conservés.
Voici par exemple comment peupler un répertoire de fichiers vides :
plus expressives, mais au prix d’une plus grande complexité et d’une syntaxe
différente.
grep est le programme par excellence qui utilise des expressions régu
lières*!. Nous en avons déjà parlé à deux reprises, selon qu’il travaille sur des
fichiers ou directement sur son entrée standard. S’il est lancé avec l’option —E
ou sous le nom egrep”*, il interprète le texte à rechercher comme une expres
sion régulière, ce qui permet de trouver un texte que l’on connaît partiellement
ou, pour être plus précis, dont on connaît la « structure » : « une date », «un mot
commençant par un nombre de 3 chiffres ».
Constructions des expressions régulières
Tout comme les globs, les expressions régulières se construisent en assem
blant des petits éléments ayant chacun une signification précise. Voici les prin
cipaux éléments que l’on peut utiliser avec egrep :
Caractères
. n’importe quel unique caractère
\s un espace
\s tout sauf un espace
\w lettre ou chiffre ou _
[abc] aoubouc”
[’abc] tout sauf a ou b ou c
[1-5] un chiffre entre 1 et 5
[70-9] tout sauf un chiffre
« Multiplicateurs »
+ au moins une fois
? au plus une fois
* n’importe quel nombre de fois (y compris aucune)
{3,} au moins 3 fois
{,3} au plus 3 fois
{3,6} — entre 3et 6 fois
Positions
- début de ligne
$ fin de ligne
\< début de mot
\> fin de mot
Échappement
\. un point « . »
\+ un plus « + », etc,
41. Le re de son nom viendrait de regular expression, « expression régulière ».
42. «e» pour étendu.
43. Il n’est pas nécessaire d’échapper les caractères spéciaux comme * entre les crochets [J.
6.5 - GLOBS ET EXPRESSIONS RÉGULIÈRES 129
Imaginons que le fichier anniversaires .txt contienne les dates des an
niversaires de vos connaissances sous la forme jj/mm/aaaa (les lignes com
mencent par la date). Les commandes suivantes permettent de trouver les
personnes :
% egrep ?20[0-9]{2}' anniversaires.txt …nées depuis 2000
% egrep ?”../07/? anniversaires.txt …ées en juillet
% egrep ”‘date +kd//m‘ anniversaires.txt
…dowt c’est l’anniversaire aujourd’hui
“ Signalons enfin que toutes les options de grep que nous avons déjà vues
(p. 57) sont aussi utilisables avec egrep.
Recherche avancée dans l1ess
La fonction de recherche avancée de 1ess (vue page 30) utilise les mêmes
expressions régulières que egrep. Qu’utiliseriez-vous pour chercher des
lignes commençant par set, avec éventuellement des espaces avant, pour
trouver rapidement la définition de cette commande dans bash(1) ?
*« 39845\, » ‘OypIOUPAI EJ HoUE[ Mmod / pdes ToA® seudy
6.5 — GLOBS ET EXPRESSIONS RÉGULIÈRES 131
utiliser : ‘
où commande est composé exclusivement de lettres minuscules et majuscules.
Ainsi, pour afficher toutes les commandes I&TEX de document .tex, on peut
9pP
L’argument de sed, ?s/pdf$/jpg/" se lit « remplacer (s, pour substitu
tion) pdf en fin de chaîne par jpg ». Pour simplement supprimer le texte
en question, il suffit de préciser un texte vide comme remplacement”° :
Ÿ base=‘fichier.pdf | sed ?s/\.paf$//"‘
% echo $base Ôn stocke le nom de base du.
fichier fichier dans la variable base
44. S’il y a deux occurrences sur une ligne dans l’entrée, grep affiche deux lignes en sortie,
une pour chaque occurrence.
45. Dans ce cas particulier, on peut aussi utiliser basename fichier.pdf .pdf pour suppri
mer l’extension de fichier .pdf, voir page 143.
132 CHAPITRE 6 - LES OUTILS DU SORCIER
C’est ce que nous avons utilisé page 122 pour supprimer l’extension des images
à convertir avec xargs convert.
s ne s’applique qu’à la première occurrence de chaque ligne, sauf si l’on
place g (pour « globalement ») après le / final :
% echo binaire | sed ?s/i/M/? Premier «i » seulement
bMnaire
% echo binaire | sed ?s/i/M/g’ Tous les & i »
bMnaMre
Tout comme grep, sed travaille par défaut avec une syntaxe obsolète d’ex
pressions régulières“® ; il faut l’option -r“7 pour utiliser les mêmes expressions
régulières que celles de egrep. Pour supprimer tous les chiffres de l’entrée,
on peut par exemple écrire :
% sed -r ?s/[0-9]+//g
On peut aussi s’en servir pour « nettoyer » les espaces en trop, c’est-à-dire
ne garder qu’un seul espace d’une série d’espaces consécutifs :
4 sed -r *s/\s+/ /8 Ne pas«/»
oublier l’espace erctre les deux derniers
Cette commande se lit « remplacer toutes les séquences d’un espace ou
plus par un unique espace ».
Par défaut, sed est sensible à la casse des caractères, mais on peut rajouter
le « modificateur » i à la fin de l’instruction pour l’y rendre insensible :
% sed ’s/jpg/paf/i> Remplace jpg, mais aussi Jpg, SPE etc…
Par contre, le texte de remplacement est toujours inséré tel quel (ici en minus
cules).
Enfin, sed peut enregistrer une partie du texte qu’il a trouvé pour la copier
dans le texte de remplacement. On entoure pour cela de parenthèses la por
tion que l’on souhaite réutiliser, et on emploie \1 dans le texte de rempla
cement pour la représenter. Par exemple, il est courant d’entourer de * les
mots que l’on souhaite mettre en *valeur* dans des mails ; si l’on souhaite
convertir en HTML un texte suivant cette convention, en mettant ces textes
en <b>gras</b>, on pourrait utiliser :
% sed -r ?s/\*([7*]+)\#/<b>\1<\/b>/g?
Il faut échapper le / dans le texte de ”
remplacement pour éviter de terminer
prématurément l’instruction
Soit : « remplacer les fragments de texte composés de deux * entourant du
texte n’en contenant pas (\*([-*]+)\x*) par le même texte entouré de <b>
et</b> (<b>\1<\/b>).» sed accepte n’importe quel délimiteur en lieu et place
de /, ce qui permet d’alléger l’écriture de la commande précédente :
46. Voir encadré page 129.
47. Sous Mac OS X, il faut utiliser l’option -E.
48. Notez qu’il est nécessaire d’échapper les * lorsqu’ils ne sont pas entre crochets.
6.5 — GLOBS ET EXPRESSIONS RÉGULIÈRES 133
% sed -r ?s#\*([7*]+)\x#<b>\1</b>#g
Plus besoin d’échapper le « \ »
On peut utiliser plusieurs fois des parenthèses pour « capturer »*° du texte ;
les remplacements correspondants sont numérotés de gauche à droite. Par
exemple, pour changer des dates du format 16-05-2011 (jour-mois-année)
au format 2011/05/16 (année/mois/jour), on peut utiliser :
% sed -r ?s#([0-9]+)-C[0-9]+)-([0-9]+)#\3/\2/\1#g
Astuce : remplacement dans les fichiers
L’option -i .bak de sed permet d’effectuer les remplacements directe
ment dans des fichiers ; le .bak indique à sed qu’il doit laisser une co
pie du fichier original avec le suffixe .bak®°. Par exemple, pour effectuer
la conversion des * mentionnée ci-dessus sur tous les fichiers .txt du ré
pertoire, on peut utiliser :
h sed -i.bak -r ?s#\*([7#*]+)\x#<b>\1</b>#g? *.txt
qui permet de permuter image- et le nombre qui le suit dans les noms des
fichiers du répertoire courant.
Muni de l’option -n, rename se contente d’afficher ce qu’il ferait plutôt que
de renommer effectivement :
% rename -n ’s/image-([0-9]+)/$1-image/? *
image-00.jpg renamed as 00-image. jpg
image-01.jpg renamed as Oi-image. jpg
Il est hautement conseillé de lancer rename une fois avec -n avant de le lancer
sans -n quand on utilise des expressions régulières compliquées, car récupérer
des effets d’un rename mal écrit lancé sur un grand nombre de fichiers peut
être particulièrement pénible.
Aller plus loin avec les expressions régulières
Les expressions régulières sont des constructions très puissantes, mais pas
forcément faciles à maîtriser. Pour en tirer parti au mieux, nous vous re
commandons la lecture du livre Les expressions régulières par l’exemple chez
le même éditeur.
6.1 Compléter
Comment obtenir le texte de la colonne de gauche avec les différentes ma
nières d’échapper des caractères spéciaux ?
Texte voulu Guillemets: sans ….simples ..doubles
*gras* \*gras\* ’xgras*’ — "*gras*"
le biniou
$money$
c’est
parti !
6.2 Commandes croisées
Horizontalement Verticalement
1. Compter les lignes identiques pas a. Remplacer a par b partout
forcément consécutives b. Trouver les lignes commençant
2. Ne garder que le début par t
3. Motifs pour décrire des noms de c. Ne garder que la fin
fichiers d. Envoyer des messages électroniques
4. Permettent la communication entre e. a, Ou b si a échoue ?
deux programmes f. Numéroter les lignes
a c h
5. « Gouffre sans fond » g. Pour renommer massivement des
! [1 | £8
6. Entrée standard (pour programmes fichiers
récalcitrants) h. Découper des lignes en champs
J}} »3 __f __
: [1 110
6.1
Texte voulu Guillemets: sans … ..simples …doubles
*gras* \*gras\* **oras*? "xgras+*"
le biniou le\ biniou ’le biniou’ ‘"le biniou"
$fmoney$ \$money\$ ’$money$? "\$money\$"
c’est c\’est *c’\’’est’ "c’est"
parti ! parti\ \! ’parti !” "parti \!"
6.2
acEh £ -E
AR|
E A| [ A U
1S |O|R|T| |1{ [U/N|1|Q| |-JC
[H]JeJA[p} 311] [ | M T
s[a[L|o[B|s|, E
«|P|1|P|E|S| |R N
s| /|p|e|v[/[N[u[L|L
Al \P| à
/} |M
-eL B} |”| [A
s|/|D|E|V|/|s|T D[I|N
6.3 Chaque programme dispose de deux sorties, numérotées 1 et 2, et d’une entrée (nu
mérotée 0). On peut rediriger l’entrée en utilisant < et la sortie en utilisant >. On
peut aussi connecter directement l’entrée et la sortie standard de deux programmes
en utilisant des pipes. Les programmes qui peuvent fonctionner ainsi se nomment des
filtres.
Lire et écrire
des programmes
Chapitre
7. Quand on le lance avec sh en ligne de commande, les arguments sont ceux qui suivent le
nom du script.
142 CHAPITRE 7 — LIRE ET ÉCRIRE DES PROGRAMMES
8. Les guillemets simples ne fonctionneront pas car ils désactivent le caractère spécial $.
7.2 — LES VARIABLES 143
d. Utilisations avancées des variables
Pour aller plus loin dans la généralisation de 1atex2pdf, on aimerait lui
fournir directement le nom du fichier .tex (ce qui fait meilleur ménage avec
la complétion automatique). Il faut alors en supprimer l’extension .tex pour
obtenir le contenu de la variable base.
Le shell fournit une syntaxe pratique pour réaliser ce type d’opérations :
on peut supprimer une partie au début (##) ou à la fin (4%) d’une variable
au moment de son utilisation de la manière suivante :
a=’document? 3uppriWæ...
echo ${ahkent} … le & ext » final du contenu de à : & docum »
echo ${attdoc} … le & doc ® initial du contenu de à : & umert »
echo ${akkdoc} … un « doc » final (non présent) : « document »
echo $a La variable à n°a pas été pas modifiée : & documerct »
Tirons parti de cette construction pour améliorer 1atex2pdf afin qu’il ac
cepte directement le nom du fichier .tex en argument, comme :
% latex2pdf document.tex
Il suffit pour cela de remplacer sa première ligne par la suivante :
; _ prefix est désormais le premier argument
prefix="${1kk.tex}" vrivé du suffixe ex (s'il existe)
Puisque l’on manipule plusieurs fichiers avec la même extension (doc.tex,
doc.dvi, etc.), la complétion automatique s’arrête dans un premier temps sur
« doc. ». Si l’on veut que le programme accepte aussi cette entrée, on peut
rajouter la ligne suivante :
prefix="${prefix%%.}" Supprime le poit final de prefix, s’il y en à un
Pour des manipulations plus complexes, on peut exploiter les guillemets
inverses et des programmes dédiés, comme les programmes basename et son
compagnon dirname, qui affichent respectivement la partie « fichier » et « ré
pertoire » du chemin passé en argument” :
% basename articles/janvier/article.tex
article.tex
% dirname articles/janvier/article.tex
articles/janvier
Un des défauts de IATEX est qu’il fonctionne mal si on le lance sur des
fichiers qui ne sont pas dans le répertoire courant'°. Utilisons basename et
dirname pour pallier ce problème, en se plaçant automatiquement dans le
répertoire contenant le fichier :
9. Ces programmes n’acceptent qu’un seul chemin en argument. basename peut aussi suppri
mer une extension que l’on passe en second argument.
10. Si ces fichiers en incluent d’autres, comme des images.
144 CHAPITRE 7 — LIRE ET ÉCRIRE DES PROGRAMMES
Enfin, on peut enchaîner autant de tests que l’on veut en utilisant e1if
(pour else if, « sinon, si »). Par exemple, si l’on utilise parfois un autre sys
tème d’index personnel, introduit par \indexperso, on pourrait lancer les
commandes nécessaires à sa préparation ainsi :
if fgrep ’\printindex’ "$prefix".tex; then
Commandes pour l’index & standaid »
elif fgrep ’\indexperso’ "$prefix".tex; then
Commandes pour l’index « perso »
else
Commandes s’il n°y à pas d’index
fi
Indentation
Dans les exemples précédents, nous avons systématiquement indenté
de quelques espaces les commandes appartenant à un bloc if/fi. Même
si cela n’est pas obligatoire, c’est très recommandé puisque cela améliore
la lisibilité des programmes, en faisant bien ressortir quelles commandes
sont exécutées dans quelles conditions.
S’il est vrai que n’importe quelle commande peut être utilisée dans un test,
l’une d’entre elle l’est particulièrement : c’est la commande [, aussi connue
sous le nom de test. Elle permet de réaliser tous les tests couramment utilisés
dans les languages de programmation : comparaisons de textes, de nombres,
tests sur des fichiers, etc.
Imaginons que nous voulions doter 1atex2pdf d’une option, -c, deman
dant la production d’un fichier PostScript compressé plutôt que PDE Dans un
premier temps, pour simplifier, nous allons supposer que cette option se place
après le nom du fichier!*, ainsi :
% latex2pdf doc.tex -c
Pour implémenter cette option, il suffit de remplacer la dernière étape par
gzip dans le cas où $2 vaut -c, ce que l’on peut écrire ainsi :
15. Gérer l’option en premier est plus difficile, nous le ferons page 149.
7.3 — LES TESTS 147
if [ "$2" = -c ]; then N’oublier ni les espaces, ni les [], ni ; !
gzip "$prefix".ps
else
fi
On peut par exemple exploiter les tests sur les fichiers pour interrompre
l’exécution de latex2pdf si l’on s’aperçoit que l’on n’a pas la permission de lire
le fichier $prefix.tex initial :
if [ \! -r "$prefix".tex ]; then
echo "Erreur: on ne peut pas lire $prefix.tex"
exit 1
fi
exit 1 termine immédiatement le programme en indiquant qu’il y a eu
uné erreur!°, ce qui bloquerait l’exécution de xpd£ si on l’utilise ainsi :
% latex2pdf doc.tex && xpdf doc.pdf
[ et test : deux noms pour la même commande
On peut aussi utiliser [ sous le nom test ; dans ce cas, le ] fermant n’est
pas nécessaire. Ainsi, le test précédent pourrait s’écrire :
if test \! -r "$prefix".tex ; then
case "$2" in ;
‘plaçant le if [ "$2" = -c ]; then … fi par:
d. Et l'option en premier ?
Pour simplifier, nous avons jusqu’à présent traité le cas où l’option que l’on
passe à latex2pdf vient en second, ce qui est contraire aux usages établis
en ligne de commande. Voyons comment faire pour que l’option soit le premier
argument de latex2pdf. La difficulté principale est que le nom du fichier
est soit dans $1, soit dans $2, suivant que $1 est ou non une option, ce qui
complique la détermination de prefix :
20. Au détail près que « / » n’est pas spécial comme dans les glob du shell : * détecte aussi du
texte contenant des « / ». En particulier, « * » tout seul détecte forcément toutes les valeurs (y
compris une variable « vide »), c’est pourquoi il doit être placé en dernier. On peut aussi offrir
plusieurs possibilités séparées par des barres verticales : fromage |dessert).
150 CHAPITRE 7 — LIRE ET ÉCRIRE DES PROGRAMMES
case "$1" in
-c) prefix="${2h4.tex}"; ;
-P) prefix="${24%.tex}"; ;
*) prefix="${1%%.tex}"; ;
esac
Il suffit ensuite de remplacer case "$2" par case "$1" dans l’écriture de
la dernière étape donnée ci-dessus. Cela dit, cette solution manque d’élégance
et surtout de robustesse, car si le programme accepte plusieurs options en
même temps, comment faire pour retrouver quel paramètre positionel contient
l’option qui concerne la dernière étape ? Il est préférable d’interpréter les op
tions au début, et de stocker les options dans des variables appropriées, plus
faciles à lire. Pour simplifier la gestion des paramètres, on utilise shift, qui dé
cale les paramètres positionnels : $2 devient $1, $3 devient $2, et $1 est perdu.
On s’en sert pour supprimer le premier argument, s’il s’agit d’une option :
case "$1" in
-c) ps_command=gzip
shift; ;
-P) ps_command=""
shift;;
*) ps_command="ps2pdf" ;;
esac
prefix="${1h%.tex}"
# latex et dvips
if [ "$ps_command" ] ; then
"$ps_command" "$prefix".ps
fi
L’idée utilisée ici est de stocker le nom de la commande à utiliser sur le fi
chier .ps dans la variable ps_command ; le dernier test vérifie que cette va
riable n’est pas vide (ce qui arrive si $1 n’est pas -P).
$OPTARG*!. On utilise ici cette possibilité pour remplacer la dernière étape par
une commande arbitraire, passée en argument de l’option -o.
getopts « réussit » tant qu’il reste encore des options à analyser : la boucle
while ci-dessus est donc exécutée pour toutes les options. Enfin, la partie
shift $(($OPTIND - 1)) supprime les arguments qui ont été interprétés en
tant qu’options, de sorte que $1 contienne le premier argument qui n’est pas
une option.
Cette manière de procéder est plus robuste et plus flexible que précédem
ment, puisqu’on peut par exemple lancer 1atex2pdf ainsi :
% latex2pdf -o 1p document.tex
Cette commande exécute 1atex2pdf avec ps_command qui vaut 1p*. L’utili
sation de getopts offre à vos scripts une interface digne de la ligne de com
mande, n’hésitez pas à l’utiliser quand vos scripts commencent à s’étoffer.
lance echo $f successivement pour f=a, f=b et f=c. Un des attraits de cette
construction est que l’on peut utiliser des globs dans la liste des valeurs. Ainsi,
dans le code suivant, £ parcourt la liste des fichiers .png du répertoire cou
rant:
for f in *.png ; do
echo "Je convertis $f"
convert $f£ ${f//.png}.jpeg
done
À vous de jouer
Par ailleurs, essayez de lire et de comprendre les codes écrits par d’autres
programmeurs. De nombreux programmes pas trop compliqués peuvent être
trouvés dans le répertoire /etc/init.d, qui contient les scripts de démarrage
de la machine (lancement du serveur SSH ou d’une interface graphique, par
exemple). Commencez par les plus petits*!. Si une commande vous échappe,
cherchez-la avec man ou dans bash(1). L’utilisation d’un éditeur avec colora
tion syntaxique comme Emacs ou nano facilite grandement la lecture.
Une commande fréquemment utilisée dans ces scripts est le point « . »:
. un/fichier permet de lire et d’exécuter un/fichier ; c’est un synonyme
de source**. Les fichiers appelés de la sorte dans les scripts de démarrage
contiennent souvent des définitions de variables qui contrôlent la manière
dont le service est lancé.
Vous pouvez aussi chercher des scripts dans /usr/bin; la commande
egrep ?”#!\s*/bin/(ba)?sh? /usr/bin/+* est un bon point de départ.
Résumé du chapitre
Un script shell est un fichier » if permet de tester le résultat de
exécutable commençant par le commandes, en particulier de [ : tests
shebang #! /bin/sh. sur les. chaînes de caractères, les
» Il contient des commandes, comme nombres et les fichiers.
celles qu’on tape directement dans le 1 4…
shell. » case/esac sertdifférents
à distinguer
cas suivant lés valeurs
» On y définit des variables en utilisant d’une variable.
le signe =, sans espaces autour.
» Les variables spéciales $1, $2, etc., » Les boucles while et for répètent
permettent d’accéder aux paramètres ‘ des commandes (y compris depuis la
du script. ligne de commande).
.1 Un script est un fichier texte qui contient des commandes. Sa première ligne est un
shebang, généralement # ! /bin/sh. Pour exécuter ce programme, il faut le rendre
exécutable, ou bien le lancer directement avec sh.
2 Il faut lancer at une fois pour chaque année, ce qui implique l’utilisation d’une boucle.
La manière la plus naturelle est sans doute une boucle while, où l’on incrémente
$annee d’une unité à chaque itération :
annee=‘date +%Y‘
annee_finale=$(($annee + 100))
while [ $annee -le $annee_finale ]; do
date=‘echo "$1" | cut -d: -f1°
Code comme précédemment
annee=$((annee+1))
done
7 conseils
@ Agissez en masse _ Pour des actions sur plusieurs fichiers, efforcez-vous d’uti
liser xargs ou des boucles for. Avec l’habitude, vous gagnerez énormément
de temps. L’intervention manuelle fichier par fichier ne doit être qu’un ultime
recours.
@ Commentez _ Ajoutez autant que possible des commentaires dans vos scripts
et surtout dans vos fichiers de configuration, cela évite de perdre beaucoup
de temps quand il faut les modifier.
© Écrivez des scripts Ils vous permettront de mieux maîtriser tous les aspects
de la ligne de commande. De plus, contrairement aux commandes, ils laissent
une trace écrite : vous pourrez retrouver dans un an comment vous aviez fait !
® Rédigez des aide-mémoire _ Écrivez dans un fichier les résultats de vos re
cherches dans les documentations : fonctionnalités insoupçonnées, combinai
sons particulières de programmes ou d’options pour obtenir un résultat donné,
etc. Vous ne perdrez pas de temps la prochaine fois ! Cerise sur le gâteau, l’en
voi d’un aide-mémoire bien fourni à un néophyte dans le besoin est toujours
bien reçu…
7 pièges à éviter
@ Ne travaillez pas sans filet Pour des opérations délicates sur un grand
nombre de fichiers, utilisez d’abord 1s -1, echo, l’option -i de rm ou -n
de rename pour vérifier que vous allez bien faire ce que vous voulez, ou bien
réalisez une archive au préalable pour pouvoir revenir à la case départ.
® Espaces et— _ Dans les définitions des variables (exportées dans l’environ
nement ou non) et des alias, faites attention à ne mettre aucun espace autour
du signe =.
© Testez vos scripts _ Avant de lancer toute une série d’opérations « pour de
vrai » via un script, assurez-vous via des echo bien choisis que les variables
intérmédiaires pointent bien vers les fichiers cibles — y compris quand il y a
des espaces dans les arguments.
tcsh ne peut pas supprimer des parties d’une variable au moment de son
utilisation, comme ${a4b} pour bash, mais on peut toujours utiliser sed :
set b=‘echo $a | sed ?s/ent$//?“ Équivalent à b=#{a%%ent}
set b=‘echo $a | sed ?s/“doc//?“ Équivalent à b=4{adt#tdoc}
Redirection de la sortie erreur et globs
tcsh ne peut pas rediriger spécifiquement la sortie erreur, comme dans
1s 2>/dev/null pour bash (page 113). Cependant, on peut rediriger les
deux sorties d’un coup en utilisant >& comme dans bash.
tcsh ne reconnaît pas non plus la syntaxe {0. .9} ; par contre, il reconnaît
{a,b} (page 127).
Tests et boucles
Les boucles fonctionnent quasiment de la même manière :
for a in a b c; do foreach a (a b c)
done
echo $a«Shell
Bourne » $a
« B echo end «û»
Shell
Les tests basés sur [ sont assez similaires :
else
echo Il estelse
if [ -x fichier ]:; then if ( -x fichier ) then
là echo Il est là
echo Pas là echo Pas là
fi Shell & Bourne » endif Shell « € »
Pour tester le résultat d’une commande dans tcsh, il faut l’entourer d’ac
colades, comme if ( { ps2pdf $fichier } ). Attention, les espaces sont
nécessaires®.
Particularités de zsh
Finissons cette section par quelques particularités de zsh qui le rendent
particulièrement intéressant — et qui en font pour moi le meilleur des shells.
Le glob spécial ** permet de descendre dans tous les sous-répertoires :
**/* . pdf trouve les mêmes fichiers que find. -name \*.pdf”.
=programme est remplacé par le chemin complet de programnme, ce qui est
utile pour modifier des scripts : enacs =latex2pdf.
La complétion automatique des noms de fichiers permet d’abréger d’autres
portions du chemin que le nom; par exemple, C/M/fi peut être complété
en Congres/Marseille/fichier, pour peu que la complétion soit unique.
Ceci permet de traverser une hiérarchie complète de fichiers en ne tapant que
la première lettre des sous-répertoires ! Enfin, l’appui successif sur :f25{ permet
de parcourir les différentes possibilités de complétion le cas echeant
6. Si l’on veut utiliser des pipes ou des redirections, il faut encore rajouter des parenthèses :
«if ( { ( cat $fichier | grep texte ) } )».
7. Attention cependant, du fait de la limitation en taille des lignes de commandes, il ne
fonctionne pas sur un très grand nombre de fichiers.
Installation de programmes
Nous allons décrire comment installer des logiciels qui ne seraient pas
présents sur votre machine.
Devenir root
Avant toute chose, pour effectuer des tâches d’administration système,
il faut acquérir les droits d’administrateur, c’est-à-dire ouvrir une session super
utilisateur, root. Il existe pour cela deux méthodes :
% sudo bash ou bien & sudo -s »
Password: — |l fauct donner son mot de passe, pas celui de root
ou bien :
% su
Password: |l faut donner le mot de passe de l’utilisateur root
Les deux méthodes aboutissent à une session shell en tant que super
utilisateur, ce que l’on peut vérifier ainsi :
% whoami
root Qui suis-je ?
Le super-utilisæteur
Depuis ce shell, on peut effectuer diverses tâches d’administration : ma
nipuler les utilisateurs et les groupes, gérer les services, etc., et, ce qui nous
intéresse ici, installer des programmes.
Bien évidemment, aucune de ces deux méthodes ne fonctionne si vous
n’avez pas soit des droits administrateur spécifiques pour la première*, soit
le mot de passe de root pour la seconde.
-Attention !
Il faut être très prudent quand on passe root, une maladresse peut vite se
transformer en catastrophe !
1. En particulier, il faut que le fichier être autorisé à lancer un shell, dans le fichier de confi
guration de sudo (qu’on édite avec visudo).
2. Si dans bien des cas, l’utilisation de gestionnaires de paquets est aussi simple que cette sec
tion le suggère, cela ne se passe malheureusement pas toujours-aussi'facilement ; cette annexe
“n’a pas.pour vocation de se substituer à la documentation de votre gestionnaire de paquets.
INSTALLATION DE PROGRAMMES 163
Dans certains cas, avant de lancer une installation il faut mettre à jour
la base de données des paquets disponibles. Ensuite, il suffit de fournir au
gestionnaire de paquets le nom de celui dont on souhaite disposer*, et il se
charge d’installer le logiciel ainsi que tous les paquets qu’il nécessite.
.… et sans
Parfois, un logiciel dont on a besoin n’est pas disponible sous forme de
paquets pour notre distribution ; il faut donc l’installer à partir du code source.
Il n’y a pas de recette générale qui fonctionne systématiquement pour ce faire,
mais beaucoup de logiciels s’installent selon le modèle suivant®. Après avoir ré
cupéré le code source sous forme d’archive .tar.gz ou .tar .bz2 sur la page
de téléchargement du programme; il faut lancer les étapes suivantes :
% tar xvzf archive.tar.gz Extraction des fichiers source
k cd le_repertoire_cree
% -/configure Détection du watériel et des bibliothèques nécessaires
% make && make install Compilation et installation
Parfois, le script ./configure se plaint qu’il manque des bibliothèques ;
cherchez les fichiers de développement de ces bibliothèques par la procédure
décrite page 69 et installez le paquet correspondant. D’autres fois, l’installa
tion ne fonctionne pas du tout de cette manière ; cherchez alors des fichiers
README ou INSTALL pour obtenir des instructions précises. Il convient de pré
ciser qu’installer manuellement n’a quasiment que des désavantages, et que
cette méthode est réservée aux cas où il n’existe pas de paquets pour le logi
ciel qui vous intéresse.
Fink et MacPorts
Sous Mac OS X, il n’y a pas de gestionnaire de paquet installé par dé
faut mais deux projets ont vu le jour pour permettre l’accès aux diverses
3. On aura par exemple trouvé son nom grâce aux commandes détaillées page 69.
4. Pour Debian/Ubuntu, un grand nombre de ces dépôts officieux sont disponibles depuis la
page launchpad.net/ubuntu/+ppas.
5. Connu sous le doux nom d’automake/autoconf.
164 INSTALLATION DE PROGRAMMES
richesses du monde Unix: Fink et MacPorts. Ils sont tous les deux active
ment développés et remplissent les mêmes fonctions dans la plupart des cas.
Seul le degré de maturité des paquets mis à disposition peut varier de l’un
à l’autre, les méthodes de sélection étant a priori différentes. Dans les deux
cas, vous avez besoin des « XCode Developper Tools », qui permettent de com
piler de manière transparente les programmes non disponibles dans un for
mat binaire. Si vous disposez encore des CD d’installation fournis avec votre
Mac, vous les trouverez dessus. Sinon, ils sont disponibles en téléchargement
depuis l’adresse developer .apple.com/technologies/xcode.html après
vous être enregistré (gratuitement) comme développeur Apple (developer.
apple.com/programs/register/).
Pour installer Fink, téléchargez sur www.finkproject.org/download/
la version qui correspond à votre système d’exploitation et votre processeur
(vérifiez au besoin dans le menu Pomme : « À propos de ce Mac »). Il ne reste
qu’à suivre les instructions correspondantes. En fin d’installation, Fink modi
fie vos fichiers de configuration de sorte que la commande soit directement
accessible via un terminal. Si ce n’est pas le cas, c’est-à-dire si lancer la com
mande fink vous donne une erreur du type « command not found », vous
devrez rajouter « à la main » dans le fichier de configuration de votre shell la
commande
[ -r /sw/bin/init.sh ] & . /sw/bin/init.sh
Cela devrait rendre tous les programmes installé par fink (ainsi que fink
lui-même) accessibles depuis vos terminaux.
Pour installer MacPorts, rendez-vous sur la page www.macports.org/
install .php, choisissez la version qui correspond à votre système et laissez
vous guider. MacPorts devrait aussi mettre à jour automatiquement certaines
variables comme le PATH ; sinon, vous pouvez le faire vous-même en ajoutant
les lignes
export PATH=/opt/1ocal/bin:/opt/1ocal/sbin:$PATH
export- MANPATH=/opt/1ocal/share/man : $MANPATH
dans le fichier de configuration de votre shell. Cela devrait rendre tous les
programmes installés par port (ainsi que port lui-même) accessibles dans
vos terminaux.
Dans les deux cas, vous devrez avoir accès à un compte administrateur de
la machine“.
6. Il est fortement déconseillé d’activer root sur Mac OS X: mieux vaut s’en tenir à utiliser
les comptes administrateurs, comme le tout premier compte créé sur la machine. Pour cette
raison, on utilise toujours la commande sudo plutôt que su.
Lexique
Ce lexique regroupe des explications sur tous les termes techniques ren
contrés dans cet ouvrage. Au fil du texte, nous avons signalé les mots présents
ici au moyen de PETITES CAPITALES. Nous conservons cette convention dans les
définitions.
Arguments : liste d’objets (généralement des fichiers) séparés par des espaces
sur lesquels une commande doit travailler. Voir aussi p. 19
Autorisations: une série de permissions associées à un fichier ou à un ré
pertoire (lecture, écriture, exécution), sur lesquelles le système d’exploitation
se base pour autoriser ou refuser l’accès à un utilisateur. Voir aussi p. 48
Bash : le sHELL le plus couramment utilisé, successeur de sh ; c’est l’archétype
du shell « Bourne ». C’est l’abréviation de Bourne again shell. Voir aussi p. 160
Binaire : voir FICHIER BINAIRE.
Fichier texte : fichier lisible et éditable « à la main » par un être humain, par
opposition aux FICHIERS BINAIRES. Un fichier texte ne représente pas forcément
Filtre : programme pouvant travailler sur son entrée standard, que l’on peut
combiner avec d’autres pour réaliser des tâches complexes. Voir aussi p. 116
Glob: motif permettant de spécifier plusieurs noms de fichiers en une seule
fois à l’aide de soxErs. Ils sont décrits en détail dans la page de man glob(7).
Voir aussi p. 126
Home: répertoire principal d’un utilisateur. C’est normalement le seul dans
lequel il a le droit d’écrire. Il est souvent de la forme /home/vf, où vf est
le LOGIN de l’utilisateur. Voir aussi p. 22
Invite : texte court affiché par le shell pour vous inviter à entrer une com
mande. On peut configurer son apparence. Voir aussi p. 106
Interpréteur de commande : voir SHELL.
LEXIQUE 167
l’écran. Voir aussi p. 102
Jeu de caractères: convention permettant de représenter les caractères à
Option : forme spéciale d’ARGUMENT qui commence par un tiret et qui modifie
le comportement de la commande. Voir aussi p. 19
Racine : répertoire le plus haut dans l’arborescence du système de fichiers. On
le représente par /. Voir aussi p. 21
Redirection : construction du shell qui permet de rediriger les entrées/sorties
des programmes vers ou depuis des fichiers. Voir aussi p. 111
168 LEXIQUE
Répertoire : un objet dans le système de fichiers qui peut contenir des fichiers
ou d’autres répertoires ; on dit aussi « dossier ». Voir aussi p. 21
Répertoire courant : RÉPERTOIRE « dans lequel on se trouve ». C’est celui par
rapport auquel sont repérés les CHEMINS RELATIFS. Voir aussi p. 22
Script: petit programme écrit en langage interprété, comme celui du shell ;
dans ce cas, on parle de « script shell ». Voir aussi p. 137
Shebang : première ligne d’un scRiPT, qui indique le programme en charge
de l’interpréter. Pour un script shell, il s’agit souvent de #! /bin/sh.
Voir aussi p. 138
L E 141
$(C2 + 3#4)) ...c cccc ccs es se se 144
alias ... 98 E
Aet les141
$(commande) ...s 125
E O 18, 105, 141
115
T Lacase ns se us se e sn en e se en en e ue ns se n s0 s004 91
É La rs se se en e e ec ce se ns c es se nn 000 84, 125
([4 E63
{jpeg,png} .......….….........2reccecunuss 127
| Lecsecec cec se r e ne ce n ec ce se se ccn u00 115
QIHL L s. es cs e sn en ne n en ec nn en e un ns 113
c21494 0) A E 143
équivalent tcsh ..….….….....….….……….……………. 161 équivalent tesh..….....…....….….…..….………. 161
2 PS 113
W ccs sn és a se se se ne ns en e es sn nn ce e e 143
Ü cccc se es e es se se sc e se en re c se en a se u0000 93
HE c.s en se sn c sn e se n se ce sn e 00n 00 115, 148
L A E 61
TTHEIP ...s cc sana se se se nsu cs s00000000 159 archive ..….….............esacraa en sc se n nn 60
--VEIDOSE ...c s000 ssces c00e n nc 00000000 61 ASCIL Ls crcs cs en en e en e ce nn nn en ue nn 102
TB Lc sess es e se se ce se ce sn se ns 00000000 159 ASpell ...….….…..ussssssersen se cec ec nenu00s 100
At L..cscsecsan se en sc ccn nn ce uus 88, 92, 153
-VErbOSE .......s20 se 0s 000e se 00ec 00s 000n 00 61 ATG ........12ee cccc aa ns se nen ms 00ec c000000 88
. (répertoire courant) ..…....….....……………. 23 ATÉM ... 00s sa se ec se e e 0 en se anan en e se nn es 88
. (syn. de source) ..….......….….….….….….….….………. 155 AUTOCONÉ .....0scassse se n en e cec se ce ue n 163
L 112
.. (répertoire parent) ..........….….……….…... 23 automake ..…..….….….….........eecenencaneune 163
dessnanse se sn sn sn 00e se ns nn en e se c000e 144 autorisations ..........…....…….….…….……….… 24, 49
/etc/bash.bashre ..….….…..…....…….….….….….….... 96
/etc/profile ..….…..…..…..….….…….….….….….neuess 96 basename .......….….….….….……esscecuces 131, 143
F eeras se es se ne c en se u0 s00 ce n s000000 114, 115 bash(1) ........secse ns ce n se ue n se uun es 41
-/.bashre ..…..….….……. 96, 100, 104, 149, 160
C< Lesssassssen ns es es ce ns ns cu ce e n e c00e es 112 DE ..ccccces ce ue en es n ce se nea se e na ue cn 000 93
E Léccssseencea se sn sc e es en se ccc a c0000 139 binaire ..….….….…..…....….…….…………. voir fichier binaire
F orccasesea es s0 e se n se ns se n se ce se se e 111 boucles ...s cneuss 150-153
DE L ce es en ec 0s sc e se se ns en en se ce se nc e 161 BOUME .....cssse cs aa se se nc sn nn 00000 160
DF Lesessssane se se sc en e 000s en en se c0000000 112 built-in ...c cs cnc ue voir shell built-in
DI Leccccssse se se ec ce se ce ns en ns en c000e 112 DUNzip2 ...…....sccsnsse se se e se ucrc 0e00e 60
[e.cccesreseen cec cs en nc se nn rrn cn e cv 00 146 DZCAL .....0s00sssee se nn nc e ne sr nn e se c0000 60
\ cssessaasa ns c se ec c0 nasre c00e n re cccc 000s 20 DZip2 ......sscssocseccenneeca ccn en 0000000 59
170 INDEX
ELtAT L......cseccna cnc ccn ce e nn neu se 61 /dev/stdin, stdout, stderr ..…..…..……. 120
[2 CC R 60 Device..............crscerensascensanss 54
dÉ L....ssa0csoscesse cn ce ue en ucc en cn 00000 53
(— R 84 dIFf LL.eLLesscnsscceesecenereso u00e 55, 133
calendar ...…..….….…….…..…sssesssessas0c00re 153 TU .cn ceccsensca c000e nc 0s n 0 se sa 0008 55
caractère d’échappement ...........…....…. 20 dircolors..….............….…cccssens 104, 107
caractères spéciaux ..…..…….……………….……………. 20,125 dirname ....…..…..….….…..….….…cesecseeueuse 143
( 7 148 diSOUn .......ccccoccseses se n ec 0000s 93, 94
casse des caractères ..….….…………….….……..…..….….….….s 18 $DISPLAY L......2c00ca 00000c se a e ns cuu 00s 74
CAT L....enasosaecannsevn000 59, 76, 112,118 display ................0eccercnceuss 65, 74
TN Leseccecanccanca ccn se n recneven e 117 display all 2141 possibilities? ... 42
CÂ L.sanossoscasenu s00e ns e 0n s00400000 23,98 dO ..........scesosronan en ec c nne c veanes 150
CÂ —— ...ccsa0oensaros en sn 00000s se 00n c006 24 GdON® .......….....ovsocereneanencanenees 150
cdrecord ..….….….….….…..…..…sseca sn en nn cuu n 98 dossier ..….….….…..........…cssacssaneranau un e 18
chaîne de caractères ... 54,139 duU......ccocrorrrrsrenece0ces 53, 95, 123
chemin (absolu, complet, relatif) .… 21,22 dvips .......…..….…..ecsenrrccseanues 114, 137
et ln -S L.......c0sesna s00e se 00s 0000 48 TO Senseassosssenee se nn ae se nc cavee 120
CHEYP c...c sensanen se se ue ccn su en e cn unane 52
CHMOd ........02c 00ec se c0 se ce nc a c0 ce u0000 51 échapper....…..….............ceensee 20, 125
( 25 100 guillemets ... …… 125
CHOWN .......2. s20 s00 0se cn se cn nc a ccn 00000 52 expressions régulières ...…....….……. 129
clé (SSH) L........sa es ce en n ec e se rn0u0 n 75 EChO .......…..…...eecenccccuue 18, 37, 99, 158
Cl@aT ......eucscen ec e ns e se se ns enaacnau 00 98 $EDITOR ............ce ccc cn c000005 86, 99
command not found ... 19,20,101 egrep ..…...…..…...….….….….…..…cccescunuee 127, 129
commentaires ..…..…..…...…..….….…….…..….… 105,138 elif .............encconrensrnens se ennuus 146
comparer deux fichiers ..…..…....…....…….... 55 elinks................csseenccssenaesee 82
confirmation ClSE ...c csa0cacsea0sec se cm0c na cnc eun 00 145
CP ...0scscocssocsan cec nn ue ne ce nen006 33 emacs ....…...…...sercrense 2, 30, 74, 93, 99
MV L..ccsoseenene rc en se nee se ccn 0000 32 SEMAIL ........ccsecseue sn ce sn rn 00s 99, 149
KM Lescssrsennenersecesse ccc nc0 e S, DÛ EMEXGE .L..L.L L e se en ec ne n ce ns nn encvn0 e 163
convert ...….….….…..…..…... 11, 63, 122, 127, 158 TSYNC L..sssssn0se rc es n se e e nenene 163
"dENSItTY 8.00c se0res se ce ns ne s00e 64 TS Lerseccansene nn ce ns ec se s0 cec sn0000 69
-YESIZE .....000scanso nc cna0 c000000 64 entrée standard ...s 116
TUYiM L...00.0 000ec sa 0000n cec c00000 64 ENV ... ….crocsescrennescarmne nn neunes 100
et les globs ..…......……….….….…………… 64,152 epstopdf ...….…........….…...ecssnensen e 65
fichiers PDF ........122000000000 e 64,152 @ESAC ...c ccsa ccc ccn u en en es sn sn na ue 148
couleurs ..…............…....cceenseuces 107 /etc/passwd ......….......……sseccances 118
L 11, 32, 124, 126 evince.….......….…...sscenessss ds se cs cn se 59
A, -P -IR ....cccsrasecranene ce sena 00 33 exécution conditionnelle
VÜ Lesc se n scrc ese scc ce 0n c0005 voirmv —i UE ..s e se es ns su se en se ns en e 00000 115
-E Leccssacen se c0c 00n cs s0 0a00 0 11, 124 | 115
à distance ..….….….….…..…..….…...…eonserseenee 77 CASEE@SAC c...0csec cec un cccc cu 00 148
CPp1252 L....cccsasancesera nn ena en seuses 103 DfLLÉi cccc ucse se na c c000 se se 000000 145
CYON L.)uscsenessaosoenanc sc e neeno00s 86,153 exif ...........ncesecneneruessenencanuu ue 55
CYONTAD ........000sssoreesensana ce nneu se 86 exim, exim4 ....…....…....sccnersssenereues 83
CSÛ ...c sascossa ce se en e 0 ranosa0 s000000 160 exit ............ecseenecse cc nnansenvause 74
CUFÏ ......000000ssona u00 000es s0 en me s000 82 exiv2....….…....coconececencss nevune …… 55
-0,-F L.ccccassacuune mosvassausau0s 82 EXport ...…....nosssessansansonne ce 100, 160
CUE L.s0sscsrs se rene0v0e 118, 123, 124, 153 expressions régulières ......…..…..……. » 127-134
CYGWIN ...s 2e cec e n en ce ra c nn e me en 000e 15
Fedora ...….….....…csecsscena ue uus e 69, 163
date ... 83, 98, 104,125 fetchmail ...n se ce ce asa0u se 83
Debian .......…....enscesseucs 43, 69,163 fZ —…..........ccsseneec se scc ns en anann en 93
Ÿ e à A 49 fgrep .….…...........…..…rnsensnse 129, 153
/dev/null .....…....esese cec se sc recn 00e 114 fi ..esvecsserencenmesve scrc ce cn na 00 145
INDEX 171
fichier graver UN CD ......….…..csssensrsssancuse 98
DZZ ...c cereseena0 cs se cec nn e na nn c0 60 grep...…..…..…..….….….….….….….…. 57—59, 116, 124, 129
EZ s.ccucccneesaa nn ccs a en ccn nc 0000 60 --COlor=auto ..…..….…......….….….….. 97, 108
1ZMA .....20000 00s n an cccc cec s000e 60 -1, -à, —F ......…acssssaacs c00000 58-59
attributs ..................eueuse 25 -A,-B .......ccscssosonsancasnauces 130
commençant par — ..….….….…............. 34 -E Lecnsccunecenanenesena cec e ns ccn 00 127
de configuration ..…...….….…..….…...…..….. 95 Ü Leccssessssa e se scc a 00s 000000 58, 124
exécutable ...........…...….….... 50, 101 1 Lese ce cec en nn cnc nn 0000 58, 119, 153
lecture seule ... 51 TM ...csceccseseenare ce se se se 000 117
PriVÉ .......2ccocsan ce nc sc n ce n e c00000 51 TO secnssssserseun scc ec us sen sc u0000 131
fichier binaire ... 28, 59 TV Leccrecere se crcn e ne cn en m0 0 58, 124
extraire du texte ....….…........…..….…. 54 gr OÉÉ .........cca0e0os c00e 0 se ns s000e 00008 41
GTOP .....0000cccceca se ccn ccn raree e 58 groupe d’utilisateurs ..…..........….....…... 48
terminal ...s ancnnes 59 Groups .….………...….….…...ecorcecc sc es se nencen0 00 49
fichier texte ..….…............…eccensese 28 guillemets
différences entre deux fichiers …… 55 doubles ...............0.00000se00e0es 125
éditer .…..….......….….….secceseensau0e 30 Inversés ...…..….........…uecceus 84, 125
statistiques ... 54 simples .......ssussecsecssensens 125
FÂlE L.ucccsecsenccenc en ne ccrcc c000e 27,124 GUNZIP .....0.0000e0 ec se ce en ce es e c00000 59
2 Lc nl a e nn nn nn D7 OEV c.…02ccccsec cc ne ec se se c0 ce cec e se c00000 59
L E EE 62
TSYNC Leccscas ce n se e se nn ce n en ce n ec 000 78 -T Lecssresere nn r se ce se n se cn n cec 000 120
-a, -L, -V .....200ss se s se nn se n se nc se 78 TCVZÉ ...c ce se se se e nn se n nn se 0000 60
à 6 RR 109
lire L.......c.ne sc 0c se se es a sn ce 00000 99
modifier ....................….…… 100
A 35 e L 162
ViM ...... 200ec 0c 0s ec se ce se en 0 00000 30, 74, 99
p 2452 R 81
WAIfÉ ..........ce cu onso ce 00 00en mmc n ca00s 56
Web L.........e ccn nc e e se en e 0000000 81, 82
--post-data ..….….……....….....…..e0s 82
—k, -O, -pH ............0cocsecsaness 81
WHiCh ....eccsonscccececnn 00n c0000000000 160
While ............ecssccnsesns0osa0ava0e 150
wildcard .….….…...............…scessensnsess 35
Windows ..….…........…encec ccs us 0 en a 00000 15
Dans la même collection
Offrez une présentation Irrégrocheble à vos documents Becouviee des pritiésanes simyles où éhimite, wt sattes ba mms à bn pâ
Nä Ber hamægggè5*W ! ; e
Qu’avez-vous pensé de ce livre ?
Dites-nous ce que vous avez aimé et ce qui vous a manqué, ce que nous
faisons bien et ce que nous pourrions améliorer. Votre avis est précieux !
Tous les courriers sont étudiés par l’auteur et par l’équipe éditoriale.
contact@H-K.fr
wvww.H-K.fr
LA COLLECTION MINIMAX
» Aller à l’essentiel
Objectifs
» Comprendre comment ça marche
» Réaliser votre projet
Vous vous lancez dans l’apprentissage d’un nouvel outil. Parmi les cen
taines de possibilités qu’il recèle, vous devez découvrir et maîtriser rapidement
celles qui vous seront utiles.
Vous avez besoin que des spécialistes du sujet sélectionnent pour vous tout
ce qui sert vraiment en pratique et vous montrent, exemples à l’appui, com
ment ça marche.
Suivez le guide
Ce livre est conçu comme un guide de voyage, qui présente un aperçu
du pays, des informations ciblées et des phrases de conversation. C’est un
guide pratique qui privilégie les besoins les plus fréquents.
R
Il ne vous conviendra pas si vous pensez que la bonne méthode pour
découvrir la Chine, c’est de lire un dictionnaire de chinois.
Note du marketing : il convierct à tout le monde !
Résumé
» D’abord le plus utile, ensuite » La pratique, pas la théorie.
MINIMAX
Des livres qu’on lit vraiment