Commit b3f96044 authored by Stephane Bonnet's avatar Stephane Bonnet

Version H20

parent eba9e268
Pipeline #54354 passed with stages
in 52 seconds
......@@ -46,7 +46,7 @@ pdfproducer={Latex},
\author[S. Bonnet]{%
\phantom{x}\hfill Stéphane {\sc Bonnet} \hfill\phantom{x}}
\institute[Picasoft]{Association Picasoft}
\date[22/01/2019]{Mardi 22 janvier 2019}
\date[22/01/2019]{Mardi 28 janvier 2020}
\usetheme{AnnArbor}
\usecolortheme{crane}
......@@ -87,7 +87,8 @@ pdfproducer={Latex},
\section[On avance carrément]{Avancé}
\input{src/cli/adv.tex}
\section[Pour aller plus loin]{Pour aller plus loin}
\input{src/cli/conclusion.tex}
\appendix
\section[Plus de détails]{Plus de détails...}
\input{src/cli/additional.tex}
\end{document}
\subsection{Plus sur les descripteurs...}
\begin{frame}[fragile,label=more_descriptors]{Les fichiers stdin, stdout, stderr existent-ils?}
Sous Unix, tout est un fichier : données, programmes, périphériques comme le
clavier et l'écran sont des fichiers.
\begin{block}{\cmd{tty}}
La commande \cmd{tty} permet de voir à quel fichier sont associés les entrées et sorties standard.
Il s'agit du terminal de contrôle du shell (\emph{controlling tty})
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ tty
/dev/pts/0
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}{Les fichiers de périphérique}
Les fichiers de périphériques (\emph{device files}) comme \cmd{/dev/pts/0} sont des interfaces avec le noyau
Linux.
Y accéder déclenche l'exécution d'un service du noyau, comme lire des caractères depuis le clavier ou afficher
des caractères à l'écran, au travers d'un sous-système du noyau ou d'un pilote de périphérique.
\begin{block}{\cmd{/dev}}
Le répertoire \cmd{/dev} contient tous les fichiers de périphériques.
Ils peuvent être créés à la volée, par exemple après connexion d'une clé USB.
\end{block}
\end{frame}
\begin{frame}[fragile]{Jouons avec /dev/pts}
\begin{exampleblock}{}
Ouvrez deux terminaux. Dans chaque, lancez \cmd{tty} pour observer leur terminal de contrôle.
\end{exampleblock}
\vspace{10pt}
\begin{columns}[b]
\begin{column}{.45\textwidth}
Écrivez dans le terminal en redirigeant vers le terminal de contrôle de \textbf{l'autre} terminal
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ tty
/dev/pts/0
$ echo Salut > \textcolor{yellow}{/dev/pts/1}
\end{Verbatim}
\end{beamercolorbox}
\vspace{0pt}
\end{column}
\begin{column}{.45\textwidth}
Le texte tapé dans l'autre terminal s'affiche ici!
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ tty
\textcolor{yellow}{/dev/pts/1}
$ Salut
\end{Verbatim}
\end{beamercolorbox}
\vspace{0pt}
\end{column}
\end{columns}
Retour aux \hyperlink{redirections}{\beamerbutton{redirections}}
\end{frame}
\subsection{Plus sur les expansions}
\begin{frame}[fragile,label=brace_expand]{Expansion d'accolades}
\begin{block}{Expansion d'accolades}
\cmd{bash} supporte l'expansion d'accolades: générer toutes les chaînes dans un intervalle ou à partir
d'une liste.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ echo \{1..20\}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$ echo a\{c,d,e\}f
acf adf aef
\end{Verbatim}
\end{beamercolorbox}
\vspace{10pt}
Cette expansion peut être utilisée dans des motifs.
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ touch file_\{1..20\}
$ ls
file_1 file_12 file_15 file_18 file_20 file_5 file_8
file_10 file_13 file_16 file_19 file_3 file_6 file_9
file_11 file_14 file_17 file_2 file_4 file_7
$ rm file_\{12..14\}
$ ls
file_1 file_15 file_18 file_20 file_5 file_8
file_10 file_16 file_19 file_3 file_6 file_9
file_11 file_17 file_2 file_4 file_7
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Expansion d'accolades}
\begin{block}{Extensions multiples}
L'expansion d'accolade est très utilisée pour sélectionner des fichiers avec des extensions multiples.
\cmd ls *.\{jpg,png,bmp\}
listera tous les fichiers correspondants à ces extensions.
\end{block}
\begin{alertblock}{Extensions}
\begin{itemize}
\item Les extensions n'ont pas de sens particulier sous UNIX.
\item Spécificité de Windows et de ses prédécesseurs.
\item Pratique pour indiquer le type des fichiers...
\end{itemize}
\end{alertblock}
Retour aux \hyperlink{expansions}{\beamerbutton{expansions}}
\end{frame}
\subsection{Expressions régulières}
\begin{frame}[fragile, label=regex]{Expressions régulières (\emph{regex})}
\begin{block}{}
\begin{itemize}
\item Chaîne de caractères qui décrit précisément un ensemble
de chaînes de caractères possibles.
\item Dans les commandes qui utilisent un motif (comme \cmd{grep}), le motif est presque toujours une expression régulière.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Bases}
\begin{itemize}
\item Décrit la suite de caractères qui doivent correspondre dans une chaîne.
\item Les alternatives sont séparées par une barre verticale: \cmd{a|b} reconnaît tout
mot contenant 'a' ou 'b'.
\item Les parenthèses regroupent les expressions:
\begin{itemize}
\item \cmd{ab|cd} reconnaît tout mot contenant 'ab' ou 'cd'
\item \cmd{a(b|c)d} reconnaît tout mot contenant 'abd' ou 'acd'.
\end{itemize}
\end{itemize}
\begin{alertblock}{Attention aux caractères interprétés par le shell}
Les parenthèses et les barres verticales sont interprétées par le shell.
Il faut les échapper pour les utiliser dans des regex. Pour exploiter le motif
\cmd{a(b|c)d} avec grep, il faudra écrire:
\begin{center}
\cmd{grep 'a\textbackslash(b\textbackslash|c\textbackslash)d'}
\end{center}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Caractères}
Chaque caractère de la chaîne à reconnaître doit être spécifié, soit en donnant sa valeur
directement ou en donnant sa classe.
\begin{itemize}
\item \cmd{abcd} : la suite 'abcd'.
\item \cmd{[ab]bcd} : soit a, soit b suivi de bcd. Les crochets définissent une
classe de caractères acceptables pour un caractère donné.
\item \cmd{[a-z]bcd} : on peut utiliser des intervalles dans les classes.
\item \cmd{a.b} : trois caractères commençant par a et finissant par b.
Le point correspond à n'importe quel caractère.
\item \cmd{[:alnum:]} : tout caractère alphanumérique
\item \cmd{[:digit:]} : tout chiffre
\item \cmd{[:space:]} : tout espace
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Quantificateurs et prédicats}
Il représentent le nombre de répétitions d'une expression et ajoutent des contraintes sur
sa position dans la chaîne.
\begin{itemize}
\item \cmd{expr*} : le motif \cmd{expr} répété 0 ou plusieurs fois.
\item \cmd{expr+} : le motif \cmd{expr} répété 1 ou plusieurs fois.
\item \cmd{expr?} : le motif \cmd{expr} répété 0 ou une fois.
\item \verb+^expr+ : le motif \cmd{expr} en début de ligne.
\item \cmd{expr\$} : le motif \cmd{expr} en fin de ligne.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{\cmd{grep} et expressions régulières}
\begin{exampleblock}{Trouver tous les mots commençant par ab}
\verb+grep '^ab' /usr/share/dict/words+
\end{exampleblock}
\begin{exampleblock}{Trouver tous les mots de quatre lettres commençant par g et finissant par t}
\verb+grep '^g..t$' /usr/share/dict/words+
\end{exampleblock}
\begin{exampleblock}{Trouver tous les mots commençant par g et finissant par t}
\verb,grep '^g.\+t$' /usr/share/dict/words,
\end{exampleblock}
\begin{alertblock}{C'est très pratique...}
...pour les mots croisés!
\end{alertblock}
Retour à \hyperlink{grep}{\beamerbutton{grep}}
\end{frame}
......@@ -159,33 +159,36 @@ bonnetst adm cdrom sudo dip plugdev lpadmin sambashare
Les fichiers et répertoires appartiennent à un utilisateur et à un groupe. Les permissions d'accès sont définies pour:
\begin{itemize}
\item Le propriétaire du fichier (\emph{user}): \textbf(u).
\item Le groupe du fichier: \textbf(g).
\item Le reste du monde (\emph{others}): \textbf(o).
\item Le propriétaire du fichier (\emph{user}): \textbf{(u)}.
\item Le groupe du fichier: \textbf{(g)}.
\item Le reste du monde (\emph{others}): \textbf{(o)}.
\end{itemize}
Les permissions d'accès peuvent être en:
\begin{itemize}
\item Lecture (\emph{read}): \textbf(r).
\item Écriture (\emph{write}): \textbf(w).
\item Exectution (\emph{eXecute}): \textbf(x).
\item Lecture (\emph{read}): \textbf{(r)}.
\item Écriture (\emph{write}): \textbf{(w)}.
\item Exécution (\emph{eXecute}): \textbf{(x)}.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Les permissions}
\begin{frame}[fragile]
\frametitle{Visualisation des permissions}
``\cmd{ls -l}'' affiche les permissions d'un fichier ou d'un dossier.
``\cmd{ls -l}'' affiche les permissions d'un fichier ou d'un répertoire.
\begin{beamercolorbox}[wd=\linewidth,rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ cd ~/api
$ ls -l file_1
-rw-r--r-- 1 bonnetst bonnetst 0 janv. 21 14:12 file_1
$ ls -l
-rw-r--r-- 1 bonnetst bonnetst 0 janv. 27 21:03 file_1
drwxr-xr-x 2 bonnetst bonnetst 4096 janv. 27 21:03 \textbf{\textcolor{cyan}{repertoire}}
\end{Verbatim}
\end{beamercolorbox}
\end{beamercolorbox}
Un répertoire est repéré par le \verb#d# en début de permissions.
\end{frame}
\begin{frame}[fragile]{Les permissions}
\begin{frame}[fragile]
\frametitle{Interprétation}
\begin{itemize}
......@@ -193,9 +196,53 @@ bonnetst adm cdrom sudo dip plugdev lpadmin sambashare
\item -rw-\textcolor{blue}{r-{}-}r-{}- indique les permissions pour le groupe
\item -rw-r-{}-\textcolor{blue}{r-{}-} indique les permissions pour les autres
\end{itemize}
\begin{itemize}
\item Dans le cas des \textbf{fichiers}, elles indiquent ce qu'on a le droit de faire \emph{dans le fichier}
\item Dans le cas des \textbf{répertoires}, elles indiquent ce qu'on a le droit de faire \emph{dans le répertoire}
\begin{itemize}
\item \verb#r# permet de lister le contenu du répertoire
\item \verb#w# permet de créer ou de supprimer des fichiers (indépendamment des permissions du fichier!)
\item \verb#x# permet de se placer dans le répertoire ou de le traverser sur un chemin.
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{\cmd{chmod}}
\begin{block}{}
\begin{description}
\item[\cmd{chmod}] affecte (\verb#=#), ajoute (\verb#+#) ou supprime (\verb#-#) des permissions
\end{description}
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ cd ~/api
$ ls -l
-rw-r--r-- 1 bonnetst bonnetst 0 janv. 27 21:03 file_1
$ \textbf{\textcolor{yellow}{chmod g+w}} file_1
$ ls -l
-rw-rw-r-- 1 bonnetst bonnetst 0 janv. 27 21:03 file_1
$ \textbf{\textcolor{yellow}{chmod g=r}} file_1
$ ls -l
-rw-r--r-- 1 bonnetst bonnetst 0 janv. 27 21:03 file_1
$ \textbf{\textcolor{yellow}{chmod g-r}} file_1
$ ls -l
-rw----r-- 1 bonnetst bonnetst 0 janv. 27 21:03 file_1
\end{Verbatim}
\end{beamercolorbox}
On peut les combiner:
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ cd ~/api
$ \textbf{\textcolor{yellow}{chmod u+x,g+wx,o-r}} file_1
$ ls -l
-rwxrwx--- 1 bonnetst bonnetst 0 janv. 27 21:03 \textbf{\textcolor{green}{file_1}}
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\subsection{Variables}
\begin{frame}[fragile]{Les variables}
......
......@@ -490,7 +490,7 @@ $ less /usr/share/dict/words
\end{description}
\end{frame}
\begin{frame}[fragile]{Redirection de sortie: opérateurs \cmd{>} et \cmd{>>}}
\begin{frame}[fragile]{Redirection de sortie: opérateurs \cmd{>} et \cmd{>{}>}}
\begin{block}{Opérateur \cmd{>}}
Redirige \cmd{stdout} vers un fichier. Le contenu du fichier est préalablement effacé.
......@@ -573,7 +573,7 @@ ls: impossible d'accéder à 'foo': Aucun fichier ou dossier de ce type
\end{beamercolorbox}
\end{frame}
\begin{frame}{Redirection vers un descripteur}
\begin{frame}[label=redirections]{Redirection vers un descripteur}
On peut indiquer optionnellement le descripteur de destination
\begin{block}{Redirection vers un descripteur}
......@@ -584,77 +584,13 @@ ls: impossible d'accéder à 'foo': Aucun fichier ou dossier de ce type
\cmd{ls -lR / >filelist 2>\&1 }
Redirige la sortie standard dans filelist et la sortie d'erreur vers la sortie standard.
Les erreurs de \cmd{ls} apparaitront dans \cmd{filelist}.
Les erreurs de \cmd{ls} apparaîtront dans \cmd{filelist}.
\end{exampleblock}
\begin{alertblock}{Attention à l'ordre}
\cmd{ls -lR / 2>\&1 >filelist} ne produit pas le même résultat
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Les fichiers stdin, stdout, stderr existent-ils?}
Sous Unix, tout est un fichier : données, programmes, périphériques comme le
clavier et l'écran sont des fichiers.
\begin{block}{\cmd{tty}}
La commande \cmd{tty} permet de voir à quel fichier sont associés les entrées et sorties standard.
Il s'agit du terminal de contrôle du shell (\emph{controlling tty})
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ tty
/dev/pts/0
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}{Les fichiers de périphérique}
Les fichiers de périphériques (\emph{device files}) comme \cmd{/dev/pts/0} sont des interfaces avec le noyau
Linux.
Y accéder déclenche l'exécution d'un service du noyau, comme lire des caractères depuis le clavier ou afficher
des caractères à l'écran, au travers d'un sous-système du noyau ou d'un pilote de périphérique.
\begin{block}{\cmd{/dev}}
Le répertoire \cmd{/dev} contient tous les fichiers de périphériques.
Ils peuvent être créés à la volée, par exemple après connexion d'une clé USB.
\end{block}
\end{frame}
\begin{frame}[fragile]{Jouons avec /dev/pts}
\begin{exampleblock}{}
Ouvrez deux terminaux. Dans chaque, lancez \cmd{tty} pour observer leur terminal de contrôle.
\end{exampleblock}
\vspace{10pt}
\begin{columns}[b]
\begin{column}{.45\textwidth}
Ecrivez dans le terminal en redirigeant vers le terminal de contrôle de \textbf{l'autre} terminal
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ tty
/dev/pts/0
$ echo Salut > \textcolor{yellow}{/dev/pts/1}
\end{Verbatim}
\end{beamercolorbox}
\vspace{0pt}
\end{column}
\begin{column}{.45\textwidth}
Le texte tapé dans l'autre terminal s'affiche ici!
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ tty
\textcolor{yellow}{/dev/pts/1}
$ Salut
\end{Verbatim}
\end{beamercolorbox}
\vspace{0pt}
\end{column}
\end{columns}
\hyperlink{more_descriptors}{\beamerbutton{Plus de détails sur les fichiers standard}}
\end{frame}
......@@ -671,7 +607,7 @@ $ Salut
\end{block}
\begin{block}{Autocomplétion en général}
\cmd{TAB} peut aussi autocompléter des commandes, des arguments, etc.
\cmd{TAB} peut aussi auto-compléter des commandes, des arguments, etc.
Il faut en abuser!
\end{block}
......@@ -685,7 +621,7 @@ $ Salut
\begin{frame}{Éditer la ligne de commande}
On peut se déplacer dans la ligne de commande avec les flèches et l'éditer.
Inutile de tout recopier.
\cmd{bash} permet aussi l'édition avec des raccourcis clavier de style \emph{emacs}.
\cmd{bash} permet aussi l'édition avec des raccourcis clavier.
\begin{center}
\begin{tabular}{|c|c|}
\hline
......@@ -699,9 +635,9 @@ $ Salut
\hline
\cmd{CTRL+e} & Va en fin de ligne \\
\hline
\cmd{ATL+d} & Supprime jusqu'à la fin du mot \\
\cmd{ALT+d} & Supprime jusqu'à la fin du mot \\
\hline
\cmd{ATL+Backspace} & Supprime jusqu'au début du mot \\
\cmd{ALT+Backspace} & Supprime jusqu'au début du mot \\
\hline
\cmd{CTRL+y} & Réinsère la suppression \\
\hline
......@@ -715,18 +651,30 @@ $ Salut
\end{center}
\end{frame}
\begin{frame}{Et si j'aime pas Emacs?}
\cmd{bash} supporte aussi un mode \cmd{vi}.
\begin{block}{Activer le mode \emph{vi}}
\cmd{set -o vi}
\end{block}
\begin{block}{Activer le mode \emph{emacs}}
\cmd{set -o emacs}
\end{block}
\begin{frame}
\begin{alertblock}{RTFM}
Il y a beaucoup d'autres raccourcis... lisez la doc : \cmd{man bash}.
\end{alertblock}
\end{frame}
\subsection{L'historique}
\begin{frame}[fragile]{Rappeler des commandes}
\cmd{bash} maintient un historique des commandes et permet de les rappeler pour ne pas avoir à les retaper.
L'historique est stocké
dans le fichier \verb+~/.bash_history+.
\begin{itemize}
\item La commande ``\cmd{history}'' affiche l'historique.
\item Les touches haut et bas permettent de naviguer dans l'historique.
\item Le point d'exclamation suivi d'une chaîne rappelle la dernière commande commençant par cette chaîne.
\item La combinaison \cmd{CTRL+R} entre en mode recherche dans l'historique. \cmd{CTRL+R} recherche à nouveau.
\end{itemize}
\begin{block}{Astuce}
La commande \cmd{!!} relance la dernière commande. On peut l'utiliser avec \cmd{sudo} pour relancer une commande
en superutilisateur:
\begin{center}
\cmd{sudo !!}
\end{center}
\end{block}
\end{frame}
\begin{frame}{Exercices et références}
\end{frame}
\ No newline at end of file
......@@ -24,9 +24,9 @@
\begin{block}{Puissant}
\begin{itemize}
\item Permet d'automatiser efficacement et rapidement toutes les tâches
\item \'Ecriture des \emph{scripts} : suites de commandes stockées dans un
fichier. On pourra les réexectuter en lançant le script par le nom du fichier
les réexécuter. Plus de détails demain!
\item Écriture des \emph{scripts} : suites de commandes stockées dans un
fichier. On pourra les ré-exectuter en lançant le script par le nom du fichier
les ré-exécuter. Plus de détails demain!
\end{itemize}
\end{block}
......
......@@ -142,7 +142,7 @@ file_4 file_a
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Échappement de caractères}
\begin{frame}[fragile,label=expansions]{Échappement de caractères}
Et si il y a un fichier dont le nom contient le caractère ``-''?
......@@ -172,57 +172,10 @@ $ ls
'my file' \textcolor{cyan}{<----- Les simple quotes indiquent qu'il s'agit d'un seul fichier}
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]{Expansion d'accolades}
\begin{block}{Expansion d'accolades}
\cmd{bash} supporte l'expansion d'accolades: générer toutes les chaînes dans un intervalle ou à partir
d'une liste.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ echo \{1..20\}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$ echo a\{c,d,e\}f
acf adf aef
\end{Verbatim}
\end{beamercolorbox}
\vspace{10pt}
Cette expansion peut être utilisée dans des motifs.
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ touch file_\{1..20\}
$ ls
file_1 file_12 file_15 file_18 file_20 file_5 file_8
file_10 file_13 file_16 file_19 file_3 file_6 file_9
file_11 file_14 file_17 file_2 file_4 file_7
$ rm file_\{12..14\}
$ ls
file_1 file_15 file_18 file_20 file_5 file_8
file_10 file_16 file_19 file_3 file_6 file_9
file_11 file_17 file_2 file_4 file_7
\end{Verbatim}
\end{beamercolorbox}
\hyperlink{brace_expand}{\beamerbutton{Plus de formes d'expansion...}}
\end{frame}
\begin{frame}[fragile]{Expansion d'accolades}
\begin{block}{Extensions multiples}
L'expansion d'accolade est très utilisée pour sélectionner des fichiers avec des extensions multiples.
\cmd ls *.\{jpg,png,bmp\}
listera tous les fichiers correspondants à ces extensions.
\end{block}
\begin{alertblock}{Extensions}
\begin{itemize}
\item Les extensions n'ont pas de sens particulier sous UNIX.
\item Spécificité de Windows et de ses prédécesseurs.
\item Pratique pour indiquer le type des fichiers...
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Remarques}
......@@ -468,7 +421,7 @@ $ find . -name 'file_1*' -print
\subsection{Chercher à l'intérieur des fichiers}
\begin{frame}[fragile]{\cmd{grep}}
\begin{frame}[fragile, label=grep]{\cmd{grep}}
\begin{block}{}
\begin{description}
\item[\cmd{grep}] recherche un motif dans des fichiers
......@@ -497,89 +450,11 @@ Kierkeg\textcolor{red}{aard}'s
standard}
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\begin{block}{}
\begin{itemize}
\item Chaîne de caractères qui décrit précisément un ensemble
de chaînes de caractères possibles.
\item Dans les commandes qui utilisent un motif (comme \cmd{grep}), le motif est presque toujours une expression régulière.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Bases}
\begin{itemize}
\item Décrit la suite de caractères qui doivent correspondre dans une chaîne.
\item Les alternatives sont séparées par une barre verticale: \cmd{a|b} reconnaît tout
mot contenant 'a' ou 'b'.
\item Les parenthèses regroupent les expressions:
\begin{itemize}
\item \cmd{ab|cd} reconnaît tout mot contenant 'ab' ou 'cd'
\item \cmd{a(b|c)d} reconnaît tout mot contenant 'abd' ou 'acd'.
\end{itemize}
\end{itemize}
\begin{alertblock}{Attention aux caractères interprétés par le shell}
Les parenthèses et les barres verticales sont interprétées par le shell.
Il faut les échapper pour les utiliser dans des regex. Pour exploiter le motif
\cmd{a(b|c)d} avec grep, il faudra écrire:
\begin{center}
\cmd{grep 'a\textbackslash(b\textbackslash|c\textbackslash)d'}
\end{center}
\end{alertblock}
Les motifs sont en fait des \hyperlink{regex}{\beamerbutton{expressions régulières...}}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Caractères}
Chaque caractère de la chaîne à reconnaître doit être spécifié, soit en donnant sa valeur
directement ou en donnant sa classe.
\begin{itemize}
\item \cmd{abcd} : la suite 'abcd'.
\item \cmd{[ab]bcd} : soit a, soit b suivi de bcd. Les crochets définissent une
classe de caractères acceptables pour un caractère donné.
\item \cmd{[a-z]bcd} : on peut utiliser des intervalles dans les classes.
\item \cmd{a.b} : trois caractères commençant par a et finissant par b.
Le point correspond à n'importe quel caractère.
\item \cmd{[:alnum:]} : tout caractère alphanumérique
\item \cmd{[:digit:]} : tout chiffre
\item \cmd{[:space:]} : tout espace
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Expressions régulières (\emph{regex})}
\framesubtitle{Quantificateurs et prédicats}
Il représentent le nombre de répétitions d'une expression et ajoutent des contraintes sur
sa position dans la chaîne.
\begin{itemize}
\item \cmd{expr*} : le motif \cmd{expr} répété 0 ou plusieurs fois.
\item \cmd{expr+} : le motif \cmd{expr} répété 1 ou plusieurs fois.
\item \cmd{expr?} : le motif \cmd{expr} répété 0 ou une fois.
\item \verb+^expr+ : le motif \cmd{expr} en début de ligne.
\item \cmd{expr\$} : le motif \cmd{expr} en fin de ligne.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{\cmd{grep} et expressions régulières}
\begin{exampleblock}{Trouver tous les mots commençant par ab}
\verb+grep '^ab' /usr/share/dict/words+
\end{exampleblock}
\begin{exampleblock}{Trouver tous les mots de quatre lettres commençant par g et finissant par t}
\verb+grep '^g..t$' /usr/share/dict/words+
\end{exampleblock}
\begin{exampleblock}{Trouver tous les mots commençant par g et finissant par t}
\verb,grep '^g.\+t$' /usr/share/dict/words,
\end{exampleblock}
\begin{alertblock}{C'est très pratique...}
...pour les mots croisés!
\end{alertblock}
\end{frame}
\subsection{Identifier des fichiers}
......@@ -821,7 +696,7 @@ The quick yellow fox jumps over the lazy dog
\end{frame}
\begin{frame}[fragile]{Les Pipes}
\framesubtitle{A vous de jouer!}
\framesubtitle{À vous de jouer!}
\begin{itemize}
\item Téléchargez ``Vingt mille lieues sous les mers'' de Jules VERNE depuis le site du
......@@ -832,7 +707,9 @@ The quick yellow fox jumps over the lazy dog
\end{exampleblock}
\begin{exampleblock}{Combien de mots différents sont utilisés par l'auteur?}
Il faut: lire le fichier, le transformer pour qu'il ait un mot par ligne, trier les mots,
Il faut: lire le fichier, supprimer la ponctuation et les caractères
spéciaux (\verb#,.;!()\r_«»?-"#),le transformer pour qu'il ait un mot par ligne, tout passer en
minuscules, trier les mots,
éliminer les mots en double ou plus, compter le nombre de lignes.
\end{exampleblock}
......@@ -959,7 +836,7 @@ $ ps a
\begin{frame}[fragile]{Les processus}
\framesubtitle{Voir les processus}
\begin{block}{\cmd{pstree}}
La commande \cmd{pstree} affiche l'arbre des processus en cours d'exécution/
La commande \cmd{pstree} affiche l'arbre des processus en cours d'exécution.
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
......@@ -1113,48 +990,3 @@ $
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\subsection{Substitution de commandes}
\begin{frame}[fragile]{Substitution de commandes}
Consiste à récupérer la sortie d'une commande pour remplacer le texte de la commande.
\begin{block}{Syntaxe de la substitution de commande}
Deux syntaxes sont possibles:
\begin{itemize}
\item \cmd{\$( commande )}
\item \cmd{` commande `}
\end{itemize}
\end{block}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ echo Nous sommes le \textcolor{yellow}{$(date +'%A %d %B %Y').}
Nous sommes le mardi 22 janvier 2019.
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\subsection{L'historique}
\begin{frame}[fragile]{Rappeler des commandes}