Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:bash-les-differents-caracteres-speciaux [07/08/2014 10:21] Hypathie [Bash : Vision d'ensemble] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [05/10/2015 19:27] milou [Shell BASH] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
* Objet : Vue d'ensemble du shell Bash et présentation des différentes fonctionnalités. | * Objet : Vue d'ensemble du shell Bash et présentation des différentes fonctionnalités. | ||
- | * Niveau requis : {{tag>débutant}} | + | * Niveau requis : {{tag>débutant avisé}} |
+ | * Commentaires : FIXME | ||
+ | * Suivi : | ||
* Création par [[user>Hypathie]] 20/03/2014 | * Création par [[user>Hypathie]] 20/03/2014 | ||
- | * Testé par Hypathie en Avril 2014 | + | * Testé par [[user>Hypathie]] en Avril 2014 |
- | * Suivi : {{tag>à-placer}} | + | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=87499#p87499| ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) |
- | * Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=87499#p87499| ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | + | |
+ | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
+ | |||
+ | ===== Introduction ===== | ||
> Voici une étude du Bash qui prend comme entrée les différents caractères. | > Voici une étude du Bash qui prend comme entrée les différents caractères. | ||
Ligne 15: | Ligne 20: | ||
* ;-) | * ;-) | ||
- | * [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] | + | * [[docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] |
- | * [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] | + | * [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] |
* [[atelier:chantier:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Opérateurs de comparaison numérique]] | * [[atelier:chantier:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Opérateurs de comparaison numérique]] | ||
* [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Symboles dans les calculs]] | * [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Symboles dans les calculs]] | ||
Ligne 55: | Ligne 60: | ||
La commande ''env'' permet de lister les variables d'environnement du contexte qui l'exécute. | La commande ''env'' permet de lister les variables d'environnement du contexte qui l'exécute. | ||
<code user>env</code> | <code user>env</code> | ||
- | <code>SHELL=/bin/bash</code> | + | <file config retour de la commande>SHELL=/bin/bash</file> |
>Le retour est copieux ! | >Le retour est copieux ! | ||
>Mais on trouve dans la liste la ligne ci-dessus | >Mais on trouve dans la liste la ligne ci-dessus | ||
Ligne 66: | Ligne 71: | ||
Plus directement, on peut faire : | Plus directement, on peut faire : | ||
<code user>echo $SHELL</code> | <code user>echo $SHELL</code> | ||
- | <code>/bin/bash</code> | + | <file config retour de la commande>/bin/bash</file> |
;-) | ;-) | ||
Ligne 73: | Ligne 78: | ||
Pour connaître la version de votre shell Bash, tapez : | Pour connaître la version de votre shell Bash, tapez : | ||
<code user>bash --version</code> | <code user>bash --version</code> | ||
- | <code>GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) | + | <file config retour de la commande>GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) |
- | Copyright (C) 2007 Free Software Foundation, Inc.</code> | + | Copyright (C) 2007 Free Software Foundation, Inc.</file> |
=== En savoir plus === | === En savoir plus === | ||
Ligne 108: | Ligne 113: | ||
<note> | <note> | ||
* Pour connaître la liste des commandes installées sur son système, on peut lister le contenu des dossiers suivants : | * Pour connaître la liste des commandes installées sur son système, on peut lister le contenu des dossiers suivants : | ||
- | * ''/bin/''((''ls /bin'' affiche la liste des commandes externes essentielles utilisées par le système pendant le démarrage, mais utilisables par tous les utilisateurs.)) | + | * ''/bin/''((''ls /bin'' affiche la liste des commandes externes essentielles utilisées par le système pendant le démarrage, mais utilisables par tous les utilisateurs.))\\ |
- | * ''/sbin/''((''ls /sbin'' affiche la liste des commandes externes essentielles utilisées par le système pendant le démarrage, et souvent réservées à l'administrateur (root))) | + | * ''/sbin/''((''ls /sbin'' affiche la liste des commandes externes essentielles utilisées par le système pendant le démarrage, et souvent réservées à l'administrateur (root)))\\ |
- | * ''/usr/bin/'' et ''/usr/sbin/''((''ls /usr/bin /usr/sbin'' affiche la liste des commandes externes secondaires, non utilisées pendant le démarrage du système, et respectement utilisables par tous ou plutôt réservées à l'administrateur)) | + | * ''/usr/bin/'' et ''/usr/sbin/''((''ls /usr/bin /usr/sbin'' affiche la liste des commandes externes secondaires, non utilisées pendant le démarrage du système, et respectement utilisables par tous ou plutôt réservées à l'administrateur)) |
- | * Pour affiche le chemin d'une commande ainsi que celui de sa page man : | + | * Pour afficher le chemin d'une commande ainsi que celui de sa page man : |
<code user>whereis nom_commande</code> | <code user>whereis nom_commande</code> | ||
Ligne 118: | Ligne 123: | ||
<code user>which nom_commande</code> | <code user>which nom_commande</code> | ||
- | * Le shell crée un //[[atelier:chantier:bash-les-differents-caracteres-speciaux#notion-de-processus|processus]]// pour exécuter une commande externe. Parmi les commandes externes que l'on trouve dans un système, il y a les exécutables ELF (ex. ls, mkdir, vi, sleep) et les fichiers de scripts (dont par exemple les scripts shell).\\ | + | * Le shell crée un //[[doc:programmation:shells:bash-les-differents-caracteres-speciaux#notion-de-processus|processus]]// pour exécuter une commande externe. Parmi les commandes externes que l'on trouve dans un système, il y a les exécutables ELF (ex. ls, mkdir, vi, sleep) et les fichiers de scripts (dont par exemple les scripts shell).\\ |
</note> | </note> | ||
Ligne 128: | Ligne 133: | ||
**Pour connaître le statut d'une commande, avec bash, on peut utiliser la commande interne type**:\\ | **Pour connaître le statut d'une commande, avec bash, on peut utiliser la commande interne type**:\\ | ||
<code user>type cd</code> | <code user>type cd</code> | ||
- | <code>cd est une primitive du shell | + | <file config retour de la commande>cd est une primitive du shell |
- | </code> | + | </file> |
<code user>type cp</code> | <code user>type cp</code> | ||
- | <code>cp est /bin/cp</code> | + | <file config retour de la commande>cp est /bin/cp</file> |
<code user>type sleep</code> | <code user>type sleep</code> | ||
- | <code>sleep est /bin/sleep</code> | + | <file config retour de la commande>sleep est /bin/sleep</file> |
>''/bin/commande'' signifie donc que c'est une commande externe. | >''/bin/commande'' signifie donc que c'est une commande externe. | ||
<code user>type ls</code> | <code user>type ls</code> | ||
- | <code>ls est un alias vers « ls --color=auto »</code> | + | <file config retour de la commande>ls est un alias vers « ls --color=auto »</file> |
<code user>whereis ls</code> | <code user>whereis ls</code> | ||
- | <code>ls: /bin/ls /usr/share/man/man1/ls.1.gz</code> | + | <file config retour de la commande>ls: /bin/ls /usr/share/man/man1/ls.1.gz</file> |
<code user>which ls</code> | <code user>which ls</code> | ||
- | <code>/bin/ls</code> | + | <file config retour de la commande>/bin/ls</file> |
>''ls'' est donc l'alias de la commande externe ''/bin/ls'' | >''ls'' est donc l'alias de la commande externe ''/bin/ls'' | ||
</note> | </note> | ||
Ligne 202: | Ligne 207: | ||
=== Exemple pratique : tuer un processus === | === Exemple pratique : tuer un processus === | ||
- | Imaginons que vous vous êtes endormi devant votre messagerie.\\ A votre réveille 8-o : impossible de fermer la fenêtre de icedove avec la souris.\\ | + | Imaginons que vous vous êtes endormi devant votre messagerie.\\ A votre réveil 8-o : impossible de fermer la fenêtre de icedove avec la souris.\\ |
Dans ce cas, le plus simple est tuer le processus d'exécution de icedove. | Dans ce cas, le plus simple est tuer le processus d'exécution de icedove. | ||
* Retrouver le processus : | * Retrouver le processus : | ||
- | - ouvrir par exemple tty1 : ''ctrl+Alt+F1'' | + | - ouvrir par exemple tty1 : <key>C-A-F1</key> |
- se loguer et entrer son mot de passe utilisateur | - se loguer et entrer son mot de passe utilisateur | ||
- récupérer le PID du processus icedove : | - récupérer le PID du processus icedove : | ||
Ligne 213: | Ligne 218: | ||
ps -A | grep icedove | ps -A | grep icedove | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
4245 pts/0 00:00:02 icedove | 4245 pts/0 00:00:02 icedove | ||
- | </code> | + | </file> |
>Ici ''4245'' est le PID du processus. | >Ici ''4245'' est le PID du processus. | ||
>Il ne sera pas le même si vous exécutez cette commande sur votre machine, ou d'une fois à l'autre. | >Il ne sera pas le même si vous exécutez cette commande sur votre machine, ou d'une fois à l'autre. | ||
Ligne 228: | Ligne 233: | ||
>Mieux prendre l'habitude de ne pas laisser une console ''tty'' sans surveillance après s'y être loguer, et cela d'autant plus pour le compte root -;) | >Mieux prendre l'habitude de ne pas laisser une console ''tty'' sans surveillance après s'y être loguer, et cela d'autant plus pour le compte root -;) | ||
- | * Revenir sur l'interface graphique : ''ctrl+Alt+F7'' | + | * Revenir sur l'interface graphique : <key>A-F7</key> |
Quelques exemples pour illustrée la notion de processus : | Quelques exemples pour illustrée la notion de processus : | ||
Ligne 243: | Ligne 248: | ||
<code user>variable='secret' | <code user>variable='secret' | ||
echo 'Mon mot de passe est $variable.'</code> | echo 'Mon mot de passe est $variable.'</code> | ||
- | <code>Mon mot de passe est $variable.</code> | + | <file config retour de la commande>Mon mot de passe est $variable.</file> |
==== Doubles quotes ou guillements ==== | ==== Doubles quotes ou guillements ==== | ||
Ligne 250: | Ligne 255: | ||
<code user>variable="secret" | <code user>variable="secret" | ||
echo "Mon mot de passe est $variable."</code> | echo "Mon mot de passe est $variable."</code> | ||
- | <code>Mon mot de passe est secret.</code> | + | <file config retour de la commande>Mon mot de passe est secret.</file> |
Ceci est utile pour générer des messages dynamiques au sein d'un script. | Ceci est utile pour générer des messages dynamiques au sein d'un script. | ||
Ligne 270: | Ligne 275: | ||
Les noms de variable et les commandes entre ` sont donc interprétés, et remplacées par la sortie de ces commandes. | Les noms de variable et les commandes entre ` sont donc interprétés, et remplacées par la sortie de ces commandes. | ||
- | Autrement dit, les anti-quotes((L'anti-quote s'obtient, sur clavier AZERTY, avec les 2 touches simultanées du clavier : [AltGr]+[7].)) remplacent de manière itérative un argument par une commande, comme le fait la commande xargs. | + | Autrement dit, les anti-quotes((L'anti-quote s'obtient, sur clavier AZERTY, avec les 2 touches simultanées du clavier : <key>AltGr-7</key>.)) remplacent de manière itérative un argument par une commande, comme le fait la commande xargs. |
=== Préparation === | === Préparation === | ||
* soit un dossier ''Dossier.txt'' contenant les fichiers ''dossier1''; ''dossier2'' ; ''dossier3''. | * soit un dossier ''Dossier.txt'' contenant les fichiers ''dossier1''; ''dossier2'' ; ''dossier3''. | ||
- | <code user>cd /tmp | + | <code user>cd /tmp</code> |
- | mkdir Dossier.txt | + | <code user>mkdir Dossier.txt</code> |
- | cd Dossier.txt/ | + | <code user>cd Dossier.txt/</code> |
- | touch dossier1 | + | <code user>touch dossier1</code> |
- | touch dossier2 | + | <code user>touch dossier2</code> |
- | touch dossier3 | + | <code user>touch dossier3 |
</code> | </code> | ||
* toujours au niveau de Dossier.txt : | * toujours au niveau de Dossier.txt : | ||
<code user>ls</code> | <code user>ls</code> | ||
- | <code>dossier1 dossier2 dossier3</code> | + | <file config retour de la commande>dossier1 dossier2 dossier3</file> |
<code user>rm `ls`</code> | <code user>rm `ls`</code> | ||
<note warning> | <note warning> | ||
Ligne 297: | Ligne 302: | ||
* comparez maintenant avec : | * comparez maintenant avec : | ||
- | <code user>touch dossier1 | + | <code user>touch dossier1</code> |
- | touch dossier2 | + | <code user>touch dossier2</code> |
- | touch dossier3 | + | <code user>touch dossier3</code> |
- | ls</code> | + | <code user>ls</code> |
- | <code>dossier1 dossier2 dossier3</code> | + | <file config retour de la commande>dossier1 dossier2 dossier3</file> |
<code user>ls | xargs rm | <code user>ls | xargs rm | ||
Ligne 337: | Ligne 342: | ||
* D'autre part, man glob et man bash dénomme //caractères génériques//(( Et un enchaînement de motifs génériques est nommée par extension, une expression générique. | * D'autre part, man glob et man bash dénomme //caractères génériques//(( Et un enchaînement de motifs génériques est nommée par extension, une expression générique. | ||
- | En effet, une chaîne de caractères ordinaires est un motif. Et un motif contenant un ou plusieurs "caractères génériques" est appelé un "motif générique".)), ce que nous appelons des métacaractères .\\ Attention à la confusion ! Voir plus bas [[atelier:chantier:bash-les-differents-caracteres-speciaux#definition-particuliere|définition particulière de man bash]]. | + | En effet, une chaîne de caractères ordinaires est un motif. Et un motif contenant un ou plusieurs "caractères génériques" est appelé un "motif générique".)), ce que nous appelons des métacaractères .\\ Attention à la confusion ! Voir plus bas [[:doc:programmation:shells:bash-les-differents-caracteres-speciaux#definition-particuliere|définition particulière de man bash]]. |
* Quant au globbing, cela concerne l'opération qui permet d'invoquer, par un motif générique, une liste de noms de fichiers, pouvant correspondre à ce motifs. | * Quant au globbing, cela concerne l'opération qui permet d'invoquer, par un motif générique, une liste de noms de fichiers, pouvant correspondre à ce motifs. | ||
Ligne 383: | Ligne 388: | ||
ls -d .c* | ls -d .c* | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
.cache .config | .cache .config | ||
- | </code> | + | </file> |
<note help> | <note help> | ||
Il y a un piège !\\ | Il y a un piège !\\ | ||
Rappel: | Rappel: | ||
- | - L'étoile correspond à n'importe quelle chaîne.\\ | + | - L'étoile correspond à n'importe quelle chaîne.\\ |
+ | |||
- Si l'on fait ''*.txt'' on représente tous les fichiers se terminant par ''.txt''. | - Si l'on fait ''*.txt'' on représente tous les fichiers se terminant par ''.txt''. | ||
+ | |||
- Mais attention : ''.'' représente un point ''.'' mais aussi deux points ''..'' m( | - Mais attention : ''.'' représente un point ''.'' mais aussi deux points ''..'' m( | ||
</note> | </note> | ||
Ligne 407: | Ligne 414: | ||
>tous les fichiers cachés normaux et les fichiers cachés de type-répertoire, | >tous les fichiers cachés normaux et les fichiers cachés de type-répertoire, | ||
>avec les noms des fichiers cachés contenus dans ces répertoires ! | >avec les noms des fichiers cachés contenus dans ces répertoires ! | ||
- | Ça fait fait beaucoup trop :-/ | + | Ça fait beaucoup trop :-/ |
<note tip> | <note tip> | ||
Ligne 435: | Ligne 442: | ||
<code user>ls -la</code> | <code user>ls -la</code> | ||
- | <code> | + | <file config retour de la commande> |
total 8 | total 8 | ||
drwxr-xr-x 2 hypathie hypathie 4096 juil. 8 10:43 . | drwxr-xr-x 2 hypathie hypathie 4096 juil. 8 10:43 . | ||
Ligne 443: | Ligne 450: | ||
-rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 fichier2 | -rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 fichier2 | ||
-rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 .fichier2 | -rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 .fichier2 | ||
- | </code> | + | </file> |
* Pour en supprimer uniquement les fichiers cachés : | * Pour en supprimer uniquement les fichiers cachés : | ||
<code user>rm -i \.f*</code> | <code user>rm -i \.f*</code> | ||
- | <code> | + | <file config retour de la commande> |
rm : supprimer fichier vide « .fichier1 » ? | rm : supprimer fichier vide « .fichier1 » ? | ||
rm : supprimer fichier vide « .fichier2 » ? | rm : supprimer fichier vide « .fichier2 » ? | ||
- | </code> | + | </file> |
- | > Répondre "yes" et taper <entrée> | + | > Répondre "yes" et taper <key>Entrée</key> |
+ | > | ||
>L'option ''-i'' permet de demander une confirmation avant chaque effacement. | >L'option ''-i'' permet de demander une confirmation avant chaque effacement. | ||
Ligne 459: | Ligne 467: | ||
<code user>ls -la</code> | <code user>ls -la</code> | ||
- | <code> | + | <file config retour de la commande> |
total 8 | total 8 | ||
drwxr-xr-x 2 hypathie hypathie 4096 juil. 8 10:48 . | drwxr-xr-x 2 hypathie hypathie 4096 juil. 8 10:48 . | ||
Ligne 465: | Ligne 473: | ||
-rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 fichier1 | -rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 fichier1 | ||
-rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 fichier2 | -rw-r--r-- 1 hypathie hypathie 0 juil. 8 10:43 fichier2 | ||
- | </code> | + | </file> |
<note warning> | <note warning> | ||
Ligne 475: | Ligne 483: | ||
> Il suffit par exemple de mettre par accident un espace après le slash : | > Il suffit par exemple de mettre par accident un espace après le slash : | ||
+ | > | ||
> ''rm / home/user'' | > ''rm / home/user'' | ||
+ | > | ||
> et ce pourrait être la catastrophe ! :-/ | > et ce pourrait être la catastrophe ! :-/ | ||
Ligne 481: | Ligne 491: | ||
- l'option ''-r'' ou ''-R'': opère récursivement sur un dossier (=supprime ses sous-dossiers); | - l'option ''-r'' ou ''-R'': opère récursivement sur un dossier (=supprime ses sous-dossiers); | ||
+ | |||
- l'option ''-f'' : permet de forcer la suppression (lorsqu'un dossier n'est pas vide par exemple) | - l'option ''-f'' : permet de forcer la suppression (lorsqu'un dossier n'est pas vide par exemple) | ||
Ligne 490: | Ligne 501: | ||
rm /* | rm /* | ||
</code> | </code> | ||
- | <code> | + | <file config retour de la commande> |
rm: impossible de supprimer « /bin »: est un dossier | rm: impossible de supprimer « /bin »: est un dossier | ||
rm: impossible de supprimer « /boot »: est un dossier | rm: impossible de supprimer « /boot »: est un dossier | ||
rm: impossible de supprimer « /dev »: est un dossier | rm: impossible de supprimer « /dev »: est un dossier | ||
- | </code> | + | </file> |
>Les premières lignes du retour. | >Les premières lignes du retour. | ||
+ | > | ||
>Il faut utiliser ''--no-preserve-root'' pour inhiber cette mesure de sûreté :-x | >Il faut utiliser ''--no-preserve-root'' pour inhiber cette mesure de sûreté :-x | ||
Ligne 503: | Ligne 515: | ||
</code> | </code> | ||
- | >Après sont exécutions le système est effacé, vos données aussi, et vous êtes triste :-( | + | >Après son exécution le système est effacé, vos données aussi, et vous êtes triste :-( |
</note> | </note> | ||
Ligne 667: | Ligne 679: | ||
===== la suite c'est ICI : ===== | ===== la suite c'est ICI : ===== | ||
- | [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]] | + | [[docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]] |