From eddb8d73641f3a667b0a34f115bb3f51e80daeed Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Wed, 12 Sep 2018 11:46:32 +0200 Subject: updated fichiers/01*.tex --- _preamble.tex | 10 +- fichiers/01-ligne-de-commande.tex | 368 +++++++++++++++++++++++++++++++++++++- makefile | 7 +- 3 files changed, 373 insertions(+), 12 deletions(-) diff --git a/_preamble.tex b/_preamble.tex index a0b261e..7041fd2 100644 --- a/_preamble.tex +++ b/_preamble.tex @@ -1,14 +1,12 @@ -\documentclass{scrbook} +\documentclass[open=any, DIV=classic]{scrbook} \usepackage[french]{babel} \usepackage{fontspec} -\setmainfont{Old Standard} \addtokomafont{disposition}{\rmfamily} \usepackage{csquotes} -\usepackage{etoolbox} -\usepackage{tikz} -\usepackage[breakable, skins, listings, xparse]{tcolorbox} +\usepackage[font=footnotesize, rightmargin=0pt]{quoting} +\usepackage[svgnames]{xcolor} \usepackage{hyperref} \hypersetup{unicode,colorlinks} @@ -18,4 +16,4 @@ \author{Robert Alessi} \lowertitleback{\footnotesize\textcopyright{} 2018 Robert Alessi \mailto[courses]{robert.alessi@cnrs.fr} - \doclicenseThis} \ No newline at end of file + \doclicenseThis} 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 @@ \input{../_preamble} -\title{Test} +\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 -\tableofcontents -\addchap{Introduction} + +\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 +\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 +\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} diff --git a/makefile b/makefile index 81236ac..25be7fc 100644 --- a/makefile +++ b/makefile @@ -1,17 +1,18 @@ -all: clean +all: pdf pdf: clean find ./* -type f | grep -v '_.*.tex' | grep 'tex$$' > texfiles while read l ; do \ - latexmk -quiet -cd -lualatex $$l ; \ + latexmk -quiet -cd -lualatex -e '$$lualatex=q/lualatex %O --shell-escape %S/' $$l ; \ done < texfiles while read l ; do \ latexmk -c -cd -lualatex $$l ; \ done < texfiles + find -type d | grep -i "_minted.*" | xargs rm -rf clean: rm -rf .backup find -iname "*~" | xargs rm -rf - find ./* -type f | grep 'makefile\|md$$\|tex$$' > ls-R + find ./* -type f | grep 'makefile\|\.md$$\|\.tex$$' > ls-R rsync -avPr --files-from=ls-R . .backup cp ls-R .backup rm -rf * -- cgit v1.2.3