From 72028c612738d067ba040c2a6251a296ed7e559c Mon Sep 17 00:00:00 2001 From: Robert Alessi Date: Mon, 17 Sep 2018 23:22:58 +0200 Subject: still writing 03-grep-bash.tex --- fichiers/03-grep-bash.tex | 129 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/fichiers/03-grep-bash.tex b/fichiers/03-grep-bash.tex index 1be7502..638adfd 100644 --- a/fichiers/03-grep-bash.tex +++ b/fichiers/03-grep-bash.tex @@ -343,6 +343,135 @@ art dans le cadre de la programmation en \textsf{WEB}\footnote{\cite{Knuth1983}. Voir également en ligne \url{http://www.literateprogramming.com/}}. +\section{Exécution} +\label{sec:execution} +Il faut ici approfondir la notion de \emph{permissions} sur les +fichiers qui a été présentée dans le cours sur la +\href{https://notabug.org/ralessi/courses/src/master/fichiers/01-ligne-de-commande.tex#L451}{ligne + de commande}. Nous avons en effet étudié trois types de permissions +sur les fichiers: en lecture, en écriture et en exécution. Revenons +sur les permissions données par défaut au script \verb|backup.sh|: +\begin{minted}{text} +[robert@kiddo courses]$ ls -l backup.sh +-rw-r--r-- 1 robert robert 82 17 sept. 22:06 backup.sh +\end{minted} +Soit: +\begin{itemize} +\item lecture et écriture pour l'utilisateur \verb|robert| (\verb|rw|); +\item lecture seule pour le groupe \verb|robert| (\verb|r|); +\item lecture seule pour le reste du monde (\verb|r|) +\end{itemize} + +\paragraph{chmod} +La commande qui permet de changer les droits s'appelle +\verb|chmod|. Pour comprendre comment l'utiliser, il faut savoir que +les permissions sont traduites par des valeurs numériques, à savoir: +\begin{itemize} +\item 4 pour le droit \emph{lecture}; +\item 2 pour le droit \emph{écriture}; +\item 1 pour le droit \emph{exécution}. +\end{itemize} +Ces valeurs peuvent être additionnées. On analyse donc ainsi les +permissions sur le fichier \verb|backup.sh|: +\begin{itemize} +\item utilisateur \verb|robert|, lecture + écriture: $4+2=6$; +\item groupe \verb|robert|, lecture: $4$; +\item reste du monde, lecture: $4$. +\end{itemize} +Soit $644$. Pour ajouter à l'utilisateur \verb|robert| seulement la +permission en exécution, il faudrait donc porter cette valeur à +$744$. Nous allons ici donner ce droit à la fois à \verb|robert|, au +groupe \verb|robert| et au reste du monde, soit une valeur de +$755$. La syntaxe est la suivante: +\begin{minted}{text} +chmod xyz +\end{minted} +où \verb|xyz| sont les trois chiffres qui représentent les permissions. +\begin{minted}[escapeinside=||, linenos]{text} +[robert@kiddo courses]$ chmod 755 backup.sh +[robert@kiddo courses]$ ls -l --color backup.sh +-rwxr-xr-x 1 robert robert 82 17 sept. 22:06 |\textcolor{green}{backup.sh}| +\end{minted} +\begin{quoting} + \textbf{Commentaire}: + \begin{enumerate} + \item La commande \verb|chmod| a été entrée à la ligne 1. + \item À la ligne 2, nous avons lancé la commande + \mintinline{text}|ls -l --color| sur le fichier \verb|backup.sh|: + les droits listés à la ligne 3 montrent bien que la valeur + \verb|x| a été ajoutée aux trois endroits possibles. On voit enfin + que l'option \verb|--color| affiche en vert les fichiers qui sont + exécutables. + \end{enumerate} +\end{quoting} + +Nous pouvons désormais exécuter notre script: +\begin{minted}[linenos,escapeinside=||]{text} +[robert@kiddo courses]$ ls -l --color +total 36 +-rwxr-xr-x 1 robert robert 82 17 sept. 22:06 |\textcolor{green}{backup.sh}| +-rw-r--r-- 1 robert robert 165 16 sept. 19:40 bibliography.bib +drwxr-xr-x 5 robert robert 4096 17 sept. 22:30 |\textcolor{blue}{fichiers}| +-rw-r--r-- 1 robert robert 680 16 sept. 18:34 makefile +-rw-r--r-- 1 robert robert 898 16 sept. 19:39 _preamble_bbl.tex +-rw-r--r-- 1 robert robert 699 14 sept. 15:02 _preamble-ed.tex +-rw-r--r-- 1 robert robert 719 16 sept. 19:39 _preamble.tex +-rw-r--r-- 1 robert robert 1407 17 sept. 00:15 README.md +-rw-r--r-- 1 robert robert 1804 17 sept. 00:15 README.tex +[robert@kiddo courses]$ ./backup.sh + adding: sauvegarde/ (stored 0%) + adding: sauvegarde/README.tex (deflated 57%) + adding: sauvegarde/_preamble.tex (deflated 45%) + adding: sauvegarde/_preamble_bbl.tex (deflated 57%) + adding: sauvegarde/_preamble-ed.tex (deflated 44%) +[robert@kiddo courses]$ ls -l --color +total 44 +-rwxr-xr-x 1 robert robert 82 17 sept. 22:06 |\textcolor{green}{backup.sh}| +-rw-r--r-- 1 robert robert 165 16 sept. 19:40 bibliography.bib +drwxr-xr-x 5 robert robert 4096 17 sept. 22:31 |\textcolor{blue}{fichiers}| +-rw-r--r-- 1 robert robert 680 16 sept. 18:34 makefile +-rw-r--r-- 1 robert robert 898 16 sept. 19:39 _preamble_bbl.tex +-rw-r--r-- 1 robert robert 699 14 sept. 15:02 _preamble-ed.tex +-rw-r--r-- 1 robert robert 719 16 sept. 19:39 _preamble.tex +-rw-r--r-- 1 robert robert 1407 17 sept. 00:15 README.md +-rw-r--r-- 1 robert robert 1804 17 sept. 00:15 README.tex +drwxr-xr-x 2 robert robert 4096 17 sept. 22:31 |\textcolor{blue}{sauvegarde}| +-rw-r--r-- 1 robert robert 2828 17 sept. 22:31 sauvegarde.zip +[robert@kiddo courses]$ ls sauvegarde +_preamble_bbl.tex _preamble-ed.tex _preamble.tex README.tex +\end{minted} +\begin{quoting} + \textbf{Commentaire:} + \begin{itemize} + \item lignes 1--11: la commande \verb|ls -l --color| donne l'état du + dossier \emph{avant} l'exécution du script \verb|backup.sh|; + \item lignes 12--17: exécution du script et messages du terminal; + \item lignes 18--30: la commande \verb|ls -l --color| donne l'état du + dossier \emph{après} l'exécution du script \verb|backup.sh|. On + voit qu'un nouveau répertoire \verb|sauvegarde| a été créé, de + même qu'un fichier archive \verb|sauvegarde.zip|; + \item lignes 31--32: la commande \verb|ls sauvegarde| liste le + contenu de ce répertoire. On y trouve tous les fichiers + \verb|.tex| qui y ont été copiés par le script. + \end{itemize} +\end{quoting} + +\paragraph{PATH} Un dernier point reste à éclaircir: à la ligne 12, +pourquoi a-t-on écrit \mintinline{bash}|./backup.sh| et non pas +simplement \mintinline{bash}|backup.sh|? Tout simplement pour des +raisons de sécurité. En effet, le principe est que les fichiers +exécutables se trouvent dans certains répertoires-système spécialement +conçus pour les accueillir. C'est pour cette raison que l'on peut +lancer les commandes \verb|bash| sans avoir à les préfixer. Or notre +répertoire de travail ne fait partie de ces répertoires spéciaux. Il +faut donc préfixer tout script exécutable qui s'y trouve par son +\emph{chemin d'accès}, soit relatif, soit absolu. On a choisi ici la +première méthode: dans la séquence \mintinline{text}|./|, le point +représente le répertoire courant tandis que le \emph{slash} précise +qu'il s'agit d'un chemin d'accès. Sans le \emph{slash}, le +\emph{shell} aurait compris le point comme un préfixe de fichier +caché. + \hfill\verb|../..| à suivre \end{document} -- cgit v1.2.3