diff options
Diffstat (limited to 'fichiers/01-ligne-de-commande.tex')
-rw-r--r-- | fichiers/01-ligne-de-commande.tex | 368 |
1 files changed, 365 insertions, 3 deletions
diff --git a/fichiers/01-ligne-de-commande.tex b/fichiers/01-ligne-de-commande.tex index 28a6241..d4a670f 100644 --- a/fichiers/01-ligne-de-commande.tex +++ b/fichiers/01-ligne-de-commande.tex | |||
@@ -1,8 +1,370 @@ | |||
1 | \input{../_preamble} | 1 | \input{../_preamble} |
2 | \title{Test} | 2 | \usepackage{menukeys} |
3 | \title{La ligne de commande} | ||
4 | \usepackage{dingbat} | ||
5 | \usepackage{mdframed} | ||
6 | \mdfsetup{ | ||
7 | backgroundcolor=Lavender, | ||
8 | hidealllines=true} | ||
9 | \usepackage{minted} | ||
10 | \surroundwithmdframed{minted} | ||
11 | \setminted{ | ||
12 | breaklines, | ||
13 | breaksymbolright=\small\carriagereturn} | ||
14 | \setmintedinline{bgcolor=Lavender} | ||
3 | \begin{document} | 15 | \begin{document} |
4 | \maketitle | 16 | \maketitle |
5 | \tableofcontents | 17 | |
6 | \addchap{Introduction} | 18 | \chapter{Introduction} |
19 | \label{cha:introduction} | ||
20 | La \emph{ligne de commande} est avant tout une interface de | ||
21 | communication avec l'ordinateur, tout comme le sont les interfaces | ||
22 | graphiques auxquelles nous sommes habitués. Les interfaces graphiques | ||
23 | telles que le \emph{Bureau} sous Windows ou bien le \emph{Finder} sous | ||
24 | Mac OS sont en réalité comme une couche qui se superpose à la ligne de | ||
25 | commande, qui continue toujours à exister. Tout en masquant à | ||
26 | l'utilisateur la ligne de commande, elles traduisent néanmoins en | ||
27 | ligne de commande les opérations qui sont faites à l'aide de la | ||
28 | souris. | ||
29 | |||
30 | \paragraph{Exemple} Supposons que l'on veuille créer un | ||
31 | répertoire\footnote{C'est ansi que l'on appellera ce qui, sous Windows | ||
32 | et Mac OS X, se nomme \emph{dossier}.} nommé \emph{travail} sur le | ||
33 | bureau, puis déplacer dans ce réperoire un fichier \emph{exemple.pdf} | ||
34 | que l'on vient de créer. À l'aide de la souris, on doit à peu près | ||
35 | effectuer les opérations suivantes: | ||
36 | \begin{enumerate} | ||
37 | \item faire un simple-clic du bouton droit de la souris, et choisir | ||
38 | \menu{Dossier>Nouveau} dans le menu contextuel qui s'affiche; | ||
39 | \item dans la fenêtre qui s'affiche, saisir le nom du nouveau | ||
40 | répertoire: \directory{travail}, puis cliquer sur le bouton | ||
41 | \menu{Ok}; | ||
42 | \item dernière opération, le déplacement du fichier | ||
43 | \emph{exemple.pdf}: à l'aide du bouton gauche de la souris, faire | ||
44 | glisser le fichier \emph{exemple.pdf} sur l'icône du répertoire | ||
45 | \emph{travail}, et relâcher le bouton à ce moment. | ||
46 | \end{enumerate} | ||
47 | Pour réaliser les mêmes opérations à la ligne de commande, il aurait | ||
48 | fallu saisir les lignes suivantes: | ||
49 | \begin{enumerate} | ||
50 | \item création du dossier \emph{travail}:\\ | ||
51 | \mintinline{bash}{mkdir travail} | ||
52 | \item déplacement du fichier \emph{exemple.pdf} dans le dossier | ||
53 | travail: \\ | ||
54 | \mintinline{bash}{mv exemple.pdf travail} | ||
55 | \end{enumerate} | ||
56 | |||
57 | \paragraph{Commentaire} | ||
58 | Il faut bien comprendre que le rôle de l'interface graphique n'est que | ||
59 | de traduire en lignes de commande les opérations que nous effectuons à | ||
60 | l'aide de la souris. Reprenons à présent les deux dernières lignes de | ||
61 | commande pour mieux les comprendre: | ||
62 | \label{sec:commentaire} | ||
63 | \begin{enumerate} | ||
64 | \item dans \og\mintinline{bash}{mkdir travail}\fg, | ||
65 | \mintinline{bash}{mkdir} est le nom d'un programme fait pour créer | ||
66 | des répertoires; \mintinline{bash}{mkdir} est en effet pour | ||
67 | l'anglais \emph{make directory}. Quant à \emph{travail}, c'est tout | ||
68 | simplement le nom du répertoire qu'on veut faire créer par le | ||
69 | programme \mintinline{bash}{mkdir}. La terminologie est la suivante: | ||
70 | \mintinline{bash}{mkdir} est le nom du programme, et | ||
71 | \mintinline{bash}{travail} est \emph{l'argument} que l'on passe à | ||
72 | \mintinline{bash}{mkdir}. Remarquez que l'on doit séparer l'argument | ||
73 | du nom du programme par un espace. Pour terminer, on appuie sur la | ||
74 | touche \emph{Entrée} pour commander l'exécution du programme. | ||
75 | \item dans \og\mintinline{bash}{mv exemple.pdf travail}\fg, le nom du | ||
76 | programme est \mintinline{bash}{mv}, pour l'anglais \emph{move}; sa | ||
77 | fonction est de déplacer des fichiers ou des répertoires. Comme son | ||
78 | comportement, par rapport au programme \mintinline{bash}{mkdir}, est | ||
79 | différent, il accepte non pas un, mais deux arguments, chacun séparé | ||
80 | par des espaces. Observez de nouveau cette ligne de commande: | ||
81 | tandis que le premier argument est le nom du fichier que l'on | ||
82 | souhaite déplacer, le deuxième est le nom du répertoire de | ||
83 | destination de ce fichier. Pour terminer, de la même manière que | ||
84 | précédemment, on appuie sur la touche \emph{Entrée} pour commander | ||
85 | le déplacement du fichier. | ||
86 | \end{enumerate} | ||
87 | |||
88 | Par cet exemple, on espère faire comprendre que si la syntaxe de la | ||
89 | ligne de commande peut paraître au premier abord difficile à | ||
90 | maîtriser, elle permet aussi, par sa sobriété même, de réaliser de | ||
91 | manière bien plus rapide et bien plus sûre les opérations que l'on | ||
92 | fait à l'aide de la souris. En voici les principales raisons: | ||
93 | \begin{itemize} | ||
94 | \item l'interface graphique est une surcouche logicielle; elle | ||
95 | ralentit donc le système d'exploitation; | ||
96 | \item l'interface graphique, comme tout logiciel très complexe, | ||
97 | comporte des erreurs de programmation. Ces \emph{bugs} peuvent aller | ||
98 | jusqu'à bloquer com\-plè\-te\-ment le système d'exploitation; | ||
99 | \item à l'aide de l'interface graphique, on ne peut réaliser que les | ||
100 | équivalents en ligne de commande qui ont été prévus par les | ||
101 | programmeurs. En se privant de la ligne de commande, l'utilisateur | ||
102 | se prive donc aussi de pouvoir réaliser les opérations qui ont été | ||
103 | laissées de côté\footnote{C'est d'ailleurs ainsi, bien souvent, que | ||
104 | les techniciens compétents dépannent les ordinateurs: en réalisant | ||
105 | des commandes auxquelles l'interface graphique ne permet pas | ||
106 | d'accéder.}; | ||
107 | \item les lignes de commande peuvent être chaînées. Ainsi, par la | ||
108 | simple ligne\\ \mintinline{bash}{mkdir travail ; mv exemple.pdf | ||
109 | travail} on peut réaliser en une seule fois toutes les opérations | ||
110 | décrites pré\-cé\-dem\-ment. Il suffit, comme on le voit ici, de | ||
111 | séparer les commandes par un point-virgule \mintinline{bash}{;}; | ||
112 | \item les lignes de commande acceptent des caractères appelés | ||
113 | \emph{jokers} à l'aide desquels on peut déclencher des opérations | ||
114 | complexes, portant sur un très grand nombre de fichiers. Par | ||
115 | exemple, le caractère \mintinline{bash}{*} peut se substituer à | ||
116 | n'importe quelle chaîne de caractères. Ainsi, pour reprendre ce qui | ||
117 | précède, la commande\\ \mintinline{bash}{mv *.pdf travail} aura pour | ||
118 | effet de déplacer automatiquement tous les fichiers au format | ||
119 | \verb|PDF| dans le répertoire \emph{travail}. | ||
120 | \end{itemize} | ||
121 | |||
122 | En d'autres termes, en passant par la ligne de commande, l'utilisateur | ||
123 | gagne en sécurité, en rapidité et en maîtrise du système ce qu'il perd | ||
124 | en ergonomie. | ||
125 | |||
126 | \section{Lancement du terminal} | ||
127 | \label{sec:lanc-du-term} | ||
128 | \begin{enumerate} | ||
129 | \item Sous Linux, il suffit de rechercher dans le menu une application | ||
130 | nommée \emph{terminal} ou \emph{xterm} dans les \emph{outils | ||
131 | système}. | ||
132 | \item Sous MacOs, l'application s'appelle \emph{terminal}. Elle donne | ||
133 | accès à un nombre limité de commandes. | ||
134 | \item Sous Windows, il faut installer \emph{Cygwin} qui est disponible | ||
135 | à l'adresse suivante: \url{https://cygwin.com}. Pour savoir comment | ||
136 | faire: | ||
137 | \begin{enumerate} | ||
138 | \item \url{https://x.cygwin.com/docs/ug/setup.html} (en anglais) | ||
139 | \item \url{http://migale.jouy.inra.fr/?q=fr/cygwin-install} (en | ||
140 | français: dans ce document, il faut cependant sauter le point 10a) | ||
141 | \end{enumerate} | ||
142 | \end{enumerate} | ||
143 | |||
144 | \chapter{Chemins d'accès et premières commandes} | ||
145 | \label{cha:les-chemins-dacces} | ||
146 | Les commandes portent le plus souvent sur des fichiers. Il est donc | ||
147 | important, pour savoir où se trouvent les fichiers que vous voulez | ||
148 | traiter, de connaître leur \emph{chemin d'accès}. | ||
149 | |||
150 | \section{Chemins relatifs et absolus} | ||
151 | \label{sec:chemins-relatifs-et} | ||
152 | |||
153 | \paragraph{Le home directory} | ||
154 | \label{sec:le-home-directory} | ||
155 | Dans les systèmes Linux, tous vos fichiers se trouvent dans votre | ||
156 | répertoire personnel, appelé le \emph{home directory}. Le nom de votre | ||
157 | répertoire personnel est le même que celui de l'identifiant sous | ||
158 | lequel vous vous êtes connecté. Par ailleurs, tous les répertoires des | ||
159 | différents utilisateurs sont situés à la racine du disque dur dans un | ||
160 | répertoire fondamental appelé \mintinline{bash}{home}. | ||
161 | |||
162 | Supposons que votre identifiant soit \mintinline{bash}{jacques}; votre | ||
163 | répertoire personnel sera donc: | ||
164 | \begin{minted}{bash} | ||
165 | /home/jacques | ||
166 | \end{minted} | ||
167 | Obervez attentivement cette ligne. Vous remarquez que les noms des | ||
168 | répertoires sont séparés par le caractère \mintinline{bash}{/}. Cela | ||
169 | veut dire que le signe \mintinline{bash}{/} est utilisé pour indiquer | ||
170 | que l'on passe d'un répertoire donné à l'un de ses | ||
171 | sous-répertoires. Dans notre exemple, le répertoire | ||
172 | \mintinline{bash}{jacques} est donc inclus dans le répertoire | ||
173 | \mintinline{bash}{home}. | ||
174 | |||
175 | Remarquez encore le \mintinline{bash}{/} qui est placé \emph{devant} | ||
176 | \mintinline{bash}{home}: comme il n'est lui-même précédé de rien, il | ||
177 | indique que le répertoire \mintinline{bash}{home} est placé \emph{à la | ||
178 | racine du disque dur}. | ||
179 | |||
180 | \paragraph{Definition: chemins absolus, chemins relatifs} | ||
181 | \label{sec:chem-absol-chem} | ||
182 | Un chemin d'accès est dit \emph{absolu} quand il est donné à partir de | ||
183 | la racine du disque dur. Il est \emph{relatif} quand il est donné à | ||
184 | partir de tout autre endroit du disque dur. Soit par exemple le | ||
185 | répertoire \mintinline{bash}{travail} créé par l'utilisateur | ||
186 | \mintinline{bash}{jacques} dans son répertoire personnel. À partir de | ||
187 | ce répertoire, le chemin d'accès absolu sera | ||
188 | \begin{minted}{bash} | ||
189 | /home/jacques/travail/ | ||
190 | \end{minted} | ||
191 | tandis que le chemin relatif sera | ||
192 | \begin{minted}{bash} | ||
193 | travail/ | ||
194 | \end{minted} | ||
195 | Corrolaire: tout chemin d'accès absolu commence nécessairement par le | ||
196 | caractère \mintinline{bash}{/}; quand ce n'est pas le cas, le chemin | ||
197 | d'accès est nécessairement relatif. | ||
198 | |||
199 | \paragraph{Conventions} | ||
200 | \label{sec:conventions} | ||
201 | Il existe un grand nombre de raccourcis ou de signes conventionnels | ||
202 | qui sont utilisés dans la ligne de commande. On en retiendra trois | ||
203 | pour le moment: | ||
204 | \begin{itemize} | ||
205 | \item \emph{home directory}: depuis tout endroit du disque dur, tout | ||
206 | utilisateur peut accéder à son répertoire personnel par le raccourci | ||
207 | \begin{minted}{bash} | ||
208 | ~/ | ||
209 | \end{minted} | ||
210 | Ainsi, pour l'utilisateur \mintinline{bash}{jacques}, | ||
211 | \mintinline{bash}{~/travail} est l'équivalent de \\ | ||
212 | \mintinline{bash}{/home/jacques/travail}. | ||
213 | \item répertoire parent: quel que soit le répetoire dans lequel on se | ||
214 | trouve, la séquence \mintinline{bash}{..} désigne le | ||
215 | \emph{répertoire parent}, c'est-à-dire le répertoire qui le | ||
216 | contient, ou bien qui est situé au niveau supérieur dans | ||
217 | l'arborescence du disque dur. Par exemple, à partir du répertoire | ||
218 | \mintinline{bash}{/home/jacques/travail}, \mintinline{bash}{..} | ||
219 | désigne le répertoire \mintinline{bash}{/home/jacques}. | ||
220 | \item répertoire courant: Quant au signe \og\mintinline{bash}{.}\fg, | ||
221 | il désigne tout simplement le répertoire dans lequel on se trouve. | ||
222 | \end{itemize} | ||
223 | |||
224 | \section{Premières commandes} | ||
225 | \label{sec:prem-comm} | ||
226 | |||
227 | \paragraph{pwd} | ||
228 | \label{sec:pwd} | ||
229 | Signifie \emph{print working directory}. Cette commande vous retourne | ||
230 | tout simplement le chemin d'accès absolu du répertoire dans lequel | ||
231 | vous vous trouvez. Très utile pour ne pas se perdre! Exemple: | ||
232 | \begin{minted}{bash} | ||
233 | [robert@kiddo ~]$ pwd | ||
234 | /home/robert | ||
235 | \end{minted} | ||
236 | \begin{quoting}\footnotesize | ||
237 | La séquence \mintinline{bash}+[robert@kiddo ~]$+ est \emph{l'invite | ||
238 | de commande} (anglais \emph{prompt}). C'est à la suite de cette | ||
239 | invite que l'on entre les commandes. Nous y reviendrons. Observez | ||
240 | pour le moment quelques unes des informations données par cette | ||
241 | invite: l'utilisateur \mintinline{bash}{robert} est connecté sur | ||
242 | l'ordinateur \mintinline{bash}{kiddo}; ensuite, le signe | ||
243 | \mintinline{bash}+~+ indique qu'il se trouve dans son \emph{home | ||
244 | directory}, ce que retourne en effet la commande | ||
245 | \mintinline{bash}+pwd+ qui a été entrée ici. Enfin, le signe | ||
246 | \mintinline{bash}|$| indique que l'utilisateur | ||
247 | \mintinline{bash}|robert| n'est pas l'administrateur du système. En | ||
248 | effet, le \emph{prompt} de l'administrateur du système, que l'on | ||
249 | appelle \emph{root}, se termine par le signe | ||
250 | \mintinline{bash}|#|. Exemple: | ||
251 | \begin{minted}{bash} | ||
252 | [root@kiddo ~]# pwd | ||
253 | /root | ||
254 | [root@kiddo ~]# | ||
255 | \end{minted} | ||
256 | Remarquez que le \emph{home directory} de l'utilisateur | ||
257 | \mintinline{bash}|root| n'est pas situé dans le répertoire | ||
258 | \mintinline{bash}|/home| qui est réservé aux utilisateurs non | ||
259 | privilégiés. | ||
260 | \end{quoting} | ||
261 | |||
262 | \paragraph{mv} | ||
263 | \label{sec:mv} | ||
264 | Signifie \emph{move}. Cette commande déplace les fichiers d'un endroit | ||
265 | vers un autre. La syntaxe est la suivante: | ||
266 | \begin{minted}[showspaces]{bash} | ||
267 | mv <source> <destination> | ||
268 | \end{minted} | ||
269 | \begin{quoting}\footnotesize | ||
270 | Par convention, le signe \verb*+ + marque l'espace. | ||
271 | \end{quoting} | ||
272 | Exemple: déplacement du fichier \mintinline{bash}{trachiniennes.pdf} | ||
273 | dans le répertoire \mintinline{bash}{travail}: | ||
274 | \begin{minted}{bash} | ||
275 | [robert@kiddo ~]$ mv trachiniennes.pdf travail/ | ||
276 | \end{minted} | ||
277 | Déplacement du fichier \mintinline{bash}{trachiniennes.pdf} depuis le | ||
278 | répertoire \mintinline{bash}{travail} vers le répertoire courant | ||
279 | (désigné par le raccourci \mintinline{bash}|.|): | ||
280 | \begin{minted}{bash} | ||
281 | [robert@kiddo ~]$ mv travail/trachiniennes.pdf . | ||
282 | \end{minted} | ||
283 | Déplacement avec indication des chemins absolus: | ||
284 | \begin{minted}{bash} | ||
285 | [robert@kiddo ~]$ mv /home/robert/trachiniennes.pdf /home/robert/travail/ | ||
286 | \end{minted} | ||
287 | Utilisation de raccourcis: | ||
288 | \begin{minted}{bash} | ||
289 | [robert@kiddo ~]$ mv ~/trachiniennes.pdf ~/travail/ | ||
290 | \end{minted} | ||
291 | |||
292 | \paragraph{cp} | ||
293 | \label{sec:cp} | ||
294 | Signifie \emph{copy}. Cette commande copie des fichiers depuis un | ||
295 | endroit vers un autre. La syntaxe est comparable à celle de la | ||
296 | séquence \mintinline{bash}{mv}. | ||
297 | \begin{minted}[showspaces]{bash} | ||
298 | cp <source> <destination> | ||
299 | \end{minted} | ||
300 | Exemple: copie du fichier \mintinline{bash}{trachiniennes.pdf} dans le | ||
301 | répertoire \mintinline{bash}{travail}: | ||
302 | \begin{minted}{bash} | ||
303 | [robert@kiddo ~]$ cp trachiniennes.pdf travail/ | ||
304 | \end{minted} | ||
305 | Copie du fichier \mintinline{bash}{trachiniennes.pdf} depuis le | ||
306 | répertoire \mintinline{bash}{travail} vers le répertoire courant | ||
307 | (désigné par le raccourci \mintinline{bash}|.|): | ||
308 | \begin{minted}{bash} | ||
309 | [robert@kiddo ~]$ cp travail/trachiniennes.pdf . | ||
310 | \end{minted} | ||
311 | Copie avec indication des chemins absolus: | ||
312 | \begin{minted}{bash} | ||
313 | [robert@kiddo ~]$ cp /home/robert/trachiniennes.pdf /home/robert/travail/ | ||
314 | \end{minted} | ||
315 | Utilisation de raccourcis: | ||
316 | \begin{minted}{bash} | ||
317 | [robert@kiddo ~]$ cp ~/trachiniennes.pdf ~/travail/ | ||
318 | \end{minted} | ||
319 | |||
320 | \paragraph{cd} | ||
321 | \label{sec:cd} | ||
322 | Signifie \emph{change directory}. Permet de changer de répertoire | ||
323 | courant, par exemple pour travailler sur les fichiers d'un répertoire | ||
324 | différent de son \emph{home directory}. La syntaxe est la suivante: | ||
325 | \begin{minted}[showspaces]{bash} | ||
326 | cd <"chemin_d'accès_du_nouveau_répertoire"> | ||
327 | \end{minted} | ||
328 | |||
329 | Exemple: changement vers le répertoire \mintinline{bash}|/usr/bin|: | ||
330 | \begin{minted}{bash} | ||
331 | [robert@kiddo ~]$ cd /usr/bin | ||
332 | [robert@kiddo /usr/bin]$ | ||
333 | \end{minted} | ||
334 | \begin{quoting}\footnotesize | ||
335 | Remarquez le changement de l'invite après l'exécution de la | ||
336 | commande. L'invite nous donne l'indication du nouveau répertoire. | ||
337 | \end{quoting} | ||
338 | Confirmation par la commande \mintinline{bash}{pwd}: | ||
339 | \begin{minted}{bash} | ||
340 | [robert@kiddo /usr/bin]$ pwd | ||
341 | /usr/bin | ||
342 | [robert@kiddo /usr/bin]$ | ||
343 | \end{minted} | ||
344 | \begin{quoting}\footnotesize | ||
345 | NB: la commande \mintinline{bash}{cd} seule fait revenir l'utilisateur | ||
346 | directement dans son \emph{home directory}. | ||
347 | \end{quoting} | ||
348 | |||
349 | \paragraph{ls} | ||
350 | \label{sec:ls} | ||
351 | Signifie \emph{list}. Affiche à l'écran tous les fichiers et les | ||
352 | répertoires contenus dans un répertoire donné. Si on ne précise pas le | ||
353 | répertoire dont il faut lister les fichiers, la commande liste les | ||
354 | fichiers du répertoire courant. Exemple: on vérifie que le fichier | ||
355 | \mintinline{bash}{trachiniennes.pdf} se trouve bien dans le répertoire | ||
356 | travail: | ||
357 | \begin{minted}{bash} | ||
358 | [robert@kiddo ~]$ ls travail/ | ||
359 | trachiniennes.pdf | ||
360 | \end{minted} | ||
361 | \begin{quoting}\footnotesize | ||
362 | Comme on le voit, la commande retourne le nom du seul fichier qui se | ||
363 | trouve dans le répertoire \mintinline{bash}{travail}.\\ | ||
364 | La commande \mintinline{bash}{ls} est l'une des plus importantes; | ||
365 | elle admet de nombreuses options que nous détaillerons plus loin | ||
366 | dans ce cours. | ||
367 | \end{quoting} | ||
368 | |||
7 | 369 | ||
8 | \end{document} | 370 | \end{document} |