aboutsummaryrefslogtreecommitdiff
path: root/fichiers/01-ligne-de-commande.tex
blob: d4a670f98762258821776ab8c25b2f0c987ccabf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
\input{../_preamble}
\usepackage{menukeys}
\title{La ligne de commande}
\usepackage{dingbat}
\usepackage{mdframed}
\mdfsetup{
  backgroundcolor=Lavender,
  hidealllines=true}
\usepackage{minted}
\surroundwithmdframed{minted}
\setminted{
  breaklines,
  breaksymbolright=\small\carriagereturn}
\setmintedinline{bgcolor=Lavender}
\begin{document}
\maketitle

\chapter{Introduction}
\label{cha:introduction}
La \emph{ligne de commande} est avant tout une interface de
communication avec l'ordinateur, tout comme le sont les interfaces
graphiques auxquelles nous sommes habitués. Les interfaces graphiques
telles que le \emph{Bureau} sous Windows ou bien le \emph{Finder} sous
Mac OS sont en réalité comme une couche qui se superpose à la ligne de
commande, qui continue toujours à exister. Tout en masquant à
l'utilisateur la ligne de commande, elles traduisent néanmoins en
ligne de commande les opérations qui sont faites à l'aide de la
souris.

\paragraph{Exemple} Supposons que l'on veuille créer un
répertoire\footnote{C'est ansi que l'on appellera ce qui, sous Windows
  et Mac OS X, se nomme \emph{dossier}.} nommé \emph{travail} sur le
bureau, puis déplacer dans ce réperoire un fichier \emph{exemple.pdf}
que l'on vient de créer. À l'aide de la souris, on doit à peu près
effectuer les opérations suivantes:
\begin{enumerate}
\item faire un simple-clic du bouton droit de la souris, et choisir
  \menu{Dossier>Nouveau} dans le menu contextuel qui s'affiche;
\item dans la fenêtre qui s'affiche, saisir le nom du nouveau
  répertoire: \directory{travail}, puis cliquer sur le bouton
  \menu{Ok};
\item dernière opération, le déplacement du fichier
  \emph{exemple.pdf}: à l'aide du bouton gauche de la souris, faire
  glisser le fichier \emph{exemple.pdf} sur l'icône du répertoire
  \emph{travail}, et relâcher le bouton à ce moment.
\end{enumerate}
Pour réaliser les mêmes opérations à la ligne de commande, il aurait
fallu saisir les lignes suivantes:
\begin{enumerate}
\item création du dossier \emph{travail}:\\
  \mintinline{bash}{mkdir travail}
\item déplacement du fichier \emph{exemple.pdf} dans le dossier
  travail: \\
\mintinline{bash}{mv exemple.pdf travail}
\end{enumerate}

\paragraph{Commentaire}
Il faut bien comprendre que le rôle de l'interface graphique n'est que
de traduire en lignes de commande les opérations que nous effectuons à
l'aide de la souris.  Reprenons à présent les deux dernières lignes de
commande pour mieux les comprendre:
\label{sec:commentaire}
\begin{enumerate}
\item dans \og\mintinline{bash}{mkdir travail}\fg,
  \mintinline{bash}{mkdir} est le nom d'un programme fait pour créer
  des répertoires; \mintinline{bash}{mkdir} est en effet pour
  l'anglais \emph{make directory}. Quant à \emph{travail}, c'est tout
  simplement le nom du répertoire qu'on veut faire créer par le
  programme \mintinline{bash}{mkdir}. La terminologie est la suivante:
  \mintinline{bash}{mkdir} est le nom du programme, et
  \mintinline{bash}{travail} est \emph{l'argument} que l'on passe à
  \mintinline{bash}{mkdir}. Remarquez que l'on doit séparer l'argument
  du nom du programme par un espace. Pour terminer, on appuie sur la
  touche \emph{Entrée} pour commander l'exécution du programme.
\item dans \og\mintinline{bash}{mv exemple.pdf travail}\fg, le nom du
  programme est \mintinline{bash}{mv}, pour l'anglais \emph{move}; sa
  fonction est de déplacer des fichiers ou des répertoires. Comme son
  comportement, par rapport au programme \mintinline{bash}{mkdir}, est
  différent, il accepte non pas un, mais deux arguments, chacun séparé
  par des espaces.  Observez de nouveau cette ligne de commande:
  tandis que le premier argument est le nom du fichier que l'on
  souhaite déplacer, le deuxième est le nom du répertoire de
  destination de ce fichier. Pour terminer, de la même manière que
  précédemment, on appuie sur la touche \emph{Entrée} pour commander
  le déplacement du fichier.
\end{enumerate}

Par cet exemple, on espère faire comprendre que si la syntaxe de la
ligne de commande peut paraître au premier abord difficile à
maîtriser, elle permet aussi, par sa sobriété même, de réaliser de
manière bien plus rapide et bien plus sûre les opérations que l'on
fait à l'aide de la souris. En voici les principales raisons:
\begin{itemize}
\item l'interface graphique est une surcouche logicielle; elle
  ralentit donc le système d'exploitation;
\item l'interface graphique, comme tout logiciel très complexe,
  comporte des erreurs de programmation. Ces \emph{bugs} peuvent aller
  jusqu'à bloquer com\-plè\-te\-ment le système d'exploitation;
\item à l'aide de l'interface graphique, on ne peut réaliser que les
  équivalents en ligne de commande qui ont été prévus par les
  programmeurs. En se privant de la ligne de commande, l'utilisateur
  se prive donc aussi de pouvoir réaliser les opérations qui ont été
  laissées de côté\footnote{C'est d'ailleurs ainsi, bien souvent, que
    les techniciens compétents dépannent les ordinateurs: en réalisant
    des commandes auxquelles l'interface graphique ne permet pas
    d'accéder.};
\item les lignes de commande peuvent être chaînées. Ainsi, par la
  simple ligne\\ \mintinline{bash}{mkdir travail ; mv exemple.pdf
    travail} on peut réaliser en une seule fois toutes les opérations
  décrites pré\-cé\-dem\-ment. Il suffit, comme on le voit ici, de
  séparer les commandes par un point-virgule \mintinline{bash}{;};
\item les lignes de commande acceptent des caractères appelés
  \emph{jokers} à l'aide desquels on peut déclencher des opérations
  complexes, portant sur un très grand nombre de fichiers. Par
  exemple, le caractère \mintinline{bash}{*} peut se substituer à
  n'importe quelle chaîne de caractères. Ainsi, pour reprendre ce qui
  précède, la commande\\ \mintinline{bash}{mv *.pdf travail} aura pour
  effet de déplacer automatiquement tous les fichiers au format
  \verb|PDF| dans le répertoire \emph{travail}.
\end{itemize}

En d'autres termes, en passant par la ligne de commande, l'utilisateur
gagne en sécurité, en rapidité et en maîtrise du système ce qu'il perd
en ergonomie.

\section{Lancement du terminal}
\label{sec:lanc-du-term}
\begin{enumerate}
\item Sous Linux, il suffit de rechercher dans le menu une application
  nommée \emph{terminal} ou \emph{xterm} dans les \emph{outils
    système}.
\item Sous MacOs, l'application s'appelle \emph{terminal}. Elle donne
  accès à un nombre limité de commandes.
\item Sous Windows, il faut installer \emph{Cygwin} qui est disponible
  à l'adresse suivante: \url{https://cygwin.com}. Pour savoir comment
  faire:
  \begin{enumerate}
  \item \url{https://x.cygwin.com/docs/ug/setup.html} (en anglais)
  \item \url{http://migale.jouy.inra.fr/?q=fr/cygwin-install} (en
    français: dans ce document, il faut cependant sauter le point 10a)
  \end{enumerate}
\end{enumerate}

\chapter{Chemins d'accès et premières commandes}
\label{cha:les-chemins-dacces}
Les commandes portent le plus souvent sur des fichiers. Il est donc
important, pour savoir où se trouvent les fichiers que vous voulez
traiter, de connaître leur \emph{chemin d'accès}.

\section{Chemins relatifs et absolus}
\label{sec:chemins-relatifs-et}

\paragraph{Le home directory}
\label{sec:le-home-directory}
Dans les systèmes Linux, tous vos fichiers se trouvent dans votre
répertoire personnel, appelé le \emph{home directory}. Le nom de votre
répertoire personnel est le même que celui de l'identifiant sous
lequel vous vous êtes connecté. Par ailleurs, tous les répertoires des
différents utilisateurs sont situés à la racine du disque dur dans un
répertoire fondamental appelé \mintinline{bash}{home}.

Supposons que votre identifiant soit \mintinline{bash}{jacques}; votre
répertoire personnel sera donc:
\begin{minted}{bash}
/home/jacques
\end{minted}
Obervez attentivement cette ligne. Vous remarquez que les noms des
répertoires sont séparés par le caractère \mintinline{bash}{/}. Cela
veut dire que le signe \mintinline{bash}{/} est utilisé pour indiquer
que l'on passe d'un répertoire donné à l'un de ses
sous-répertoires. Dans notre exemple, le répertoire
\mintinline{bash}{jacques} est donc inclus dans le répertoire
\mintinline{bash}{home}.

Remarquez encore le \mintinline{bash}{/} qui est placé \emph{devant}
\mintinline{bash}{home}: comme il n'est lui-même précédé de rien, il
indique que le répertoire \mintinline{bash}{home} est placé \emph{à la
  racine du disque dur}.

\paragraph{Definition: chemins absolus, chemins relatifs}
\label{sec:chem-absol-chem}
Un chemin d'accès est dit \emph{absolu} quand il est donné à partir de
la racine du disque dur. Il est \emph{relatif} quand il est donné à
partir de tout autre endroit du disque dur. Soit par exemple le
répertoire \mintinline{bash}{travail} créé par l'utilisateur
\mintinline{bash}{jacques} dans son répertoire personnel. À partir de
ce répertoire, le chemin d'accès absolu sera
\begin{minted}{bash}
/home/jacques/travail/
\end{minted}
tandis que le chemin relatif sera
\begin{minted}{bash}
travail/
\end{minted}
Corrolaire: tout chemin d'accès absolu commence nécessairement par le
caractère \mintinline{bash}{/}; quand ce n'est pas le cas, le chemin
d'accès est nécessairement relatif.

\paragraph{Conventions}
\label{sec:conventions}
Il existe un grand nombre de raccourcis ou de signes conventionnels
qui sont utilisés dans la ligne de commande. On en retiendra trois
pour le moment:
\begin{itemize}
\item \emph{home directory}: depuis tout endroit du disque dur, tout
  utilisateur peut accéder à son répertoire personnel par le raccourci
\begin{minted}{bash}
~/
\end{minted}
  Ainsi, pour l'utilisateur \mintinline{bash}{jacques},
  \mintinline{bash}{~/travail} est l'équivalent de \\
  \mintinline{bash}{/home/jacques/travail}.
\item répertoire parent: quel que soit le répetoire dans lequel on se
  trouve, la séquence \mintinline{bash}{..} désigne le
  \emph{répertoire parent}, c'est-à-dire le répertoire qui le
  contient, ou bien qui est situé au niveau supérieur dans
  l'arborescence du disque dur. Par exemple, à partir du répertoire
  \mintinline{bash}{/home/jacques/travail}, \mintinline{bash}{..}
  désigne le répertoire \mintinline{bash}{/home/jacques}.
\item répertoire courant: Quant au signe \og\mintinline{bash}{.}\fg,
  il désigne tout simplement le répertoire dans lequel on se trouve.
\end{itemize}

\section{Premières commandes}
\label{sec:prem-comm}

\paragraph{pwd}
\label{sec:pwd}
Signifie \emph{print working directory}. Cette commande vous retourne
tout simplement le chemin d'accès absolu du répertoire dans lequel
vous vous trouvez. Très utile pour ne pas se perdre! Exemple:
\begin{minted}{bash}
[robert@kiddo ~]$ pwd
/home/robert
\end{minted}
\begin{quoting}\footnotesize
  La séquence \mintinline{bash}+[robert@kiddo ~]$+ est \emph{l'invite
    de commande} (anglais \emph{prompt}). C'est à la suite de cette
  invite que l'on entre les commandes. Nous y reviendrons. Observez
  pour le moment quelques unes des informations données par cette
  invite: l'utilisateur \mintinline{bash}{robert} est connecté sur
  l'ordinateur \mintinline{bash}{kiddo}; ensuite, le signe
  \mintinline{bash}+~+ indique qu'il se trouve dans son \emph{home
    directory}, ce que retourne en effet la commande
  \mintinline{bash}+pwd+ qui a été entrée ici. Enfin, le signe
  \mintinline{bash}|$| indique que l'utilisateur
  \mintinline{bash}|robert| n'est pas l'administrateur du système. En
  effet, le \emph{prompt} de l'administrateur du système, que l'on
  appelle \emph{root}, se termine par le signe
  \mintinline{bash}|#|. Exemple:
\begin{minted}{bash}
[root@kiddo ~]# pwd
/root
[root@kiddo ~]# 
\end{minted}
  Remarquez que le \emph{home directory} de l'utilisateur
  \mintinline{bash}|root| n'est pas situé dans le répertoire
  \mintinline{bash}|/home| qui est réservé aux utilisateurs non
  privilégiés.
\end{quoting}

\paragraph{mv}
\label{sec:mv}
Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit
vers un autre. La syntaxe est la suivante:
\begin{minted}[showspaces]{bash}
mv <source> <destination>
\end{minted}
\begin{quoting}\footnotesize
  Par convention, le signe \verb*+ + marque l'espace.
\end{quoting}
Exemple: déplacement du fichier \mintinline{bash}{trachiniennes.pdf}
dans le répertoire \mintinline{bash}{travail}:
\begin{minted}{bash}
[robert@kiddo ~]$ mv trachiniennes.pdf travail/
\end{minted}
Déplacement du fichier \mintinline{bash}{trachiniennes.pdf} depuis le
répertoire \mintinline{bash}{travail} vers le répertoire courant
(désigné par le raccourci \mintinline{bash}|.|):
\begin{minted}{bash}
[robert@kiddo ~]$ mv travail/trachiniennes.pdf .
\end{minted}
Déplacement avec indication des chemins absolus:
\begin{minted}{bash}
[robert@kiddo ~]$ mv /home/robert/trachiniennes.pdf /home/robert/travail/
\end{minted}
Utilisation de raccourcis:
\begin{minted}{bash}
[robert@kiddo ~]$ mv ~/trachiniennes.pdf ~/travail/
\end{minted}

\paragraph{cp}
\label{sec:cp}
Signifie \emph{copy}. Cette commande copie des fichiers depuis un
endroit vers un autre. La syntaxe est comparable à celle de la
séquence \mintinline{bash}{mv}.
\begin{minted}[showspaces]{bash}
cp <source> <destination>
\end{minted}
Exemple: copie du fichier \mintinline{bash}{trachiniennes.pdf} dans le
répertoire \mintinline{bash}{travail}:
\begin{minted}{bash}
[robert@kiddo ~]$ cp trachiniennes.pdf travail/
\end{minted}
Copie du fichier \mintinline{bash}{trachiniennes.pdf} depuis le
répertoire \mintinline{bash}{travail} vers le répertoire courant
(désigné par le raccourci \mintinline{bash}|.|):
\begin{minted}{bash}
[robert@kiddo ~]$ cp travail/trachiniennes.pdf .
\end{minted}
Copie avec indication des chemins absolus:
\begin{minted}{bash}
[robert@kiddo ~]$ cp /home/robert/trachiniennes.pdf /home/robert/travail/
\end{minted}
Utilisation de raccourcis:
\begin{minted}{bash}
[robert@kiddo ~]$ cp ~/trachiniennes.pdf ~/travail/
\end{minted}

\paragraph{cd}
\label{sec:cd}
Signifie \emph{change directory}. Permet de changer de répertoire
courant, par exemple pour travailler sur les fichiers d'un répertoire
différent de son \emph{home directory}. La syntaxe est la suivante:
\begin{minted}[showspaces]{bash}
cd <"chemin_d'accès_du_nouveau_répertoire">
\end{minted}

Exemple: changement vers le répertoire \mintinline{bash}|/usr/bin|:
\begin{minted}{bash}
[robert@kiddo ~]$ cd /usr/bin
[robert@kiddo /usr/bin]$ 
\end{minted}
\begin{quoting}\footnotesize
  Remarquez le changement de l'invite après l'exécution de la
  commande. L'invite nous donne l'indication du nouveau répertoire.
\end{quoting}
Confirmation par la commande \mintinline{bash}{pwd}:
\begin{minted}{bash}
[robert@kiddo /usr/bin]$ pwd
/usr/bin
[robert@kiddo /usr/bin]$ 
\end{minted}
\begin{quoting}\footnotesize
  NB: la commande \mintinline{bash}{cd} seule fait revenir l'utilisateur
  directement dans son \emph{home directory}.
\end{quoting}

\paragraph{ls}
\label{sec:ls}
Signifie \emph{list}. Affiche à l'écran tous les fichiers et les
répertoires contenus dans un répertoire donné. Si on ne précise pas le
répertoire dont il faut lister les fichiers, la commande liste les
fichiers du répertoire courant. Exemple: on vérifie que le fichier
\mintinline{bash}{trachiniennes.pdf} se trouve bien dans le répertoire
travail:
\begin{minted}{bash}
[robert@kiddo ~]$ ls travail/
trachiniennes.pdf
\end{minted}
\begin{quoting}\footnotesize
  Comme on le voit, la commande retourne le nom du seul fichier qui se
  trouve dans le répertoire \mintinline{bash}{travail}.\\
  La commande \mintinline{bash}{ls} est l'une des plus importantes;
  elle admet de nombreuses options que nous détaillerons plus loin
  dans ce cours.
\end{quoting}


\end{document}