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 [26/05/2014 08:40] Hypathie [A ) Shell BASH] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [26/05/2014 10:01] Hypathie [B ) Métacaractères et méta-caractères !] |
||
---|---|---|---|
Ligne 46: | Ligne 46: | ||
**Pour savoir quel shell vous utilisez par défaut, tapez :** | **Pour savoir quel shell vous utilisez par défaut, tapez :** | ||
- | <code bash> | + | <code user> |
user@debian-facile:~$ echo $SHELL | user@debian-facile:~$ echo $SHELL | ||
/bin/bash | /bin/bash | ||
</code> | </code> | ||
Pour connaître la version de votre Shell Bash, tapez : | Pour connaître la version de votre Shell Bash, tapez : | ||
- | <code bash> | + | <code user> |
user@debian-facile:~$ bash --version | user@debian-facile:~$ bash --version | ||
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) | GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu) | ||
Ligne 101: | Ligne 101: | ||
**Pour obtenir une information sommaire sur une commande externe**\\ | **Pour obtenir une information sommaire sur une commande externe**\\ | ||
<code user> | <code user> | ||
- | --help commande | + | --help nom_commande |
</code> | </code> | ||
Ligne 109: | Ligne 109: | ||
La localisation du code d'une commande externe doit être connu du shell pour qu'il puisse exécuter cette commande. A cette fin, bash utilise la valeur de sa variable prédéfinie PATH. | La localisation du code d'une commande externe doit être connu du shell pour qu'il puisse exécuter cette commande. A cette fin, bash utilise la valeur de sa variable prédéfinie PATH. | ||
- | <note> | + | ====Connaître le TYPE (interne ou externe) d'une commande : ==== |
+ | |||
+ | <note tip> | ||
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> | + | <code user> |
type cd | type cd | ||
cd est une primitive du shell | cd est une primitive du shell | ||
</code> | </code> | ||
- | <code> | + | <code user> |
type cp | type cp | ||
cp est /bin/cp | cp est /bin/cp | ||
</code> | </code> | ||
- | <code> | + | <code user> |
type sleep | type sleep | ||
sleep est /bin/sleep | sleep est /bin/sleep | ||
</code> | </code> | ||
- | => /bin/commande signifie que c'est une commande externe. | + | => /bin/commande signifie donc que c'est une commande externe. |
+ | <code user> | ||
+ | type ls | ||
+ | ls est un alias vers « ls --color=auto » | ||
+ | </code> | ||
+ | <code user> | ||
+ | whereis ls | ||
+ | ls: /bin/ls /usr/share/man/man1/ls.1.gz | ||
+ | </code> | ||
+ | <code user> | ||
+ | which ls | ||
+ | /bin/ls | ||
+ | # => ls est donc l'alias de la commande externe /bin/ls | ||
+ | </code> | ||
</note> | </note> | ||
- | ====3) les commandes simples :==== | + | ====3) Les commandes simples :==== |
**Les commandes simples peuvent être des commandes internes ou des commandes externes.** | **Les commandes simples peuvent être des commandes internes ou des commandes externes.** | ||
- | * commandes internes par exemple : type, cd , echo , pwd ... | + | * commandes internes par exemple : type, cd , echo , pwd, export ... |
- | * commandes externes par exemple : ls, mkdir, vi, cal ... | + | * commandes externes par exemple : ls, mkdir, rm, rmdir, vi, cal ... |
* Voici une liste non exhaustive des commandes simples, on y retrouve des commandes internes et externes : | * Voici une liste non exhaustive des commandes simples, on y retrouve des commandes internes et externes : | ||
<code> | <code> | ||
- | cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, ed, | + | cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, ed, export, |
false, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, | false, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, | ||
rm, rmdir, sed, setserial, sh, stty, su, sync, true, umount, uname. | rm, rmdir, sed, setserial, sh, stty, su, sync, true, umount, uname. | ||
Ligne 139: | Ligne 154: | ||
* Consultez la documentation pour chacune d'entre elles | * Consultez la documentation pour chacune d'entre elles | ||
- | ====4) les commandes composées par des mots clés : ==== | + | ====4) Les commandes composées par des mots clés : ==== |
**Les commandes composées peuvent toutes être considérées comme des commandes internes, en tant qu'elles sont des structures de contrôle.** | **Les commandes composées peuvent toutes être considérées comme des commandes internes, en tant qu'elles sont des structures de contrôle.** | ||
Ligne 200: | Ligne 215: | ||
C'est le sujet chap. 7 : [[atelier:chantier:man-bash-vi-les-caracteres-de-transformation-de-parametres|Bash : les caractères de transformation de parametres]] | C'est le sujet chap. 7 : [[atelier:chantier:man-bash-vi-les-caracteres-de-transformation-de-parametres|Bash : les caractères de transformation de parametres]] | ||
- | ====2) "Globs simples" ou "métacaractères", utilisation avancée==== | + | ====2) "Globs simples" ou "métacaractères"==== |
- | **Détails et exercices sur : [[doc:programmation:shell:les-metacaracteres|métacaractères, ou globs, ou encore patterns]]** | + | **__Détails et exercices, l'essentiel est là :__ [[doc:programmation:shell:les-metacaracteres|métacaractères, ou globs, ou encore patterns]]** |
| | ||
Ligne 227: | Ligne 242: | ||
</code> | </code> | ||
- | * **Rappel :**\\ | + | ===Il y a un piège ! === |
+ | |||
+ | **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".**\\ | ||
- | **C'est là qu'il y a un petit piège ! m( **\\ | + | -**Mais attention : . représente un point (.) mais aussi deux points (..)** m( |
- | + | ||
- | **.* représente un point (.) mais aussi deux points (..)** | + | |
<code user> | <code user> | ||
Ligne 240: | Ligne 255: | ||
mais aussi du répertoire parent (..) : 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 ! | mais aussi du répertoire parent (..) : 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 ! | ||
- | * Contournement : | + | * Solutions : |
<code user> | <code user> | ||
ls .[!.]* | ls .[!.]* | ||
Ligne 249: | Ligne 264: | ||
</code> | </code> | ||
=> liste du répertoire courant : tous les noms de fichiers normaux cachés et le nom de tous les fichiers cachés de type-répertoire (sans leurs contenus cette fois !) | => liste du répertoire courant : tous les noms de fichiers normaux cachés et le nom de tous les fichiers cachés de type-répertoire (sans leurs contenus cette fois !) | ||
+ | |||
+ | ===Vivre dangereusement supprimer tous les fichiers cachés d'un répertoire ! === | ||
+ | Soit un répertoire "FICHIER-cach.essai" contenant : | ||
+ | <code> | ||
+ | ls -la | ||
+ | total 8 | ||
+ | drwxr-xr-x 2 hypathie hypathie 4096 mai 26 09:29 . | ||
+ | drwxr-xr-x 34 hypathie hypathie 4096 mai 26 09:28 .. | ||
+ | -rw-r--r-- 1 hypathie hypathie 0 mai 26 09:29 fichier1 | ||
+ | -rw-r--r-- 1 hypathie hypathie 0 mai 26 09:29 .fichier1 | ||
+ | -rw-r--r-- 1 hypathie hypathie 0 mai 26 09:29 fichier2 | ||
+ | -rw-r--r-- 1 hypathie hypathie 0 mai 26 09:29 .fichier2 | ||
+ | -rw-r--r-- 1 hypathie hypathie 0 mai 26 09:29 fichier3 | ||
+ | -rw-r--r-- 1 hypathie hypathie 0 mai 26 09:29 .fichier3 | ||
+ | </code> | ||
+ | |||
+ | Pour en supprimer que les fichiers cachés : | ||
+ | |||
+ | <code user> | ||
+ | user@nom-machine:~/FICHIER-cach.essai$ rm -i \.f* | ||
+ | rm : supprimer fichier vide « .fichier1 » ? | ||
+ | #répondre yes | ||
+ | rm : supprimer fichier vide « .fichier2 » ? | ||
+ | #répondre yes | ||
+ | rm : supprimer fichier vide « .fichier3 » ? | ||
+ | #répondre yes | ||
+ | </code> | ||
+ | |||
+ | <note important> | ||
+ | **NE PAS FAIRE CELA SANS COMPRENDRE CE QUI SE PASSE**\\ | ||
+ | **-toujours s'assurer que vous êtes dans le répertoire parent des fichiers cachés à supprimer ;**\\ | ||
+ | **Observez le prompt : "user@nom-machine:~/REPERTOIRE-PARENT$"**\\ | ||
+ | **-l'option -i pour plus de maîtrise ;**\\ | ||
+ | **-restez en user et pas de **rm /** en root !**\\ | ||
+ | **-mieux vaut encore ne pas chercher à supprimer d'un coup tous les fichiers cachés d'un répertoire, et mettre l'étoile après la première lettre\\ **rm \.f* **\\ plutôt que de la placer sur le slash /* pour aller plus vite.**\\ | ||
+ | **(Il suffit de mettre par accident un espace après le slash : ** rm / home/user-à-supprimer** et c'est la catastrophe !)**\\ | ||
+ | |||
+ | **SI VOUS VOUS TROMPEZ VOUS POUVEZ DÉTRUIRE ENTIÈREMENT VOTRE SYSTÈME !**\\ | ||
+ | **NE FAITES JAMAIS :**\\ | ||
+ | <code root> | ||
+ | rm -rf / | ||
+ | </code> | ||
+ | **-l'option -r (ou -R): permet de supprimer un dossier ;**\\ | ||
+ | **-l'option -f : permet de forcer la suppression (lorsqu'un dossier n'est pas vide par exemple)**\\ | ||
+ | </note> | ||
====3) "Méta-caractères" désignation particulière du man bash pour "opérateurs de contrôle et de redirection"==== | ====3) "Méta-caractères" désignation particulière du man bash pour "opérateurs de contrôle et de redirection"==== |