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 [08/07/2014 14:30] Hypathie [Shell BASH] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [10/07/2014 07:00] Hypathie [Shell BASH] |
||
---|---|---|---|
Ligne 14: | Ligne 14: | ||
> [[user>Hypathie]] | > [[user>Hypathie]] | ||
+ | * ;-) | ||
* [[atelier:chantier:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] | * [[atelier:chantier: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]] | * [[atelier:chantier:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] | ||
Ligne 89: | Ligne 90: | ||
Une commande interne est une commande dont le code est implémenté au sein même du shell. | Une commande interne est une commande dont le code est implémenté au sein même du shell. | ||
- | Les commandes sont intégrées, soit pour des raisons de performances (l'appel d'une telle commande ne crée pas de processus fils du shell courant); soit parce qu'une commande intégrée se sert des variables internes du shell. | + | Les commandes sont intégrées, soit pour des raisons de performances (l'appel d'une telle commande ne crée pas de processus fils(([[doc:systeme:processus|processus]])) du shell courant); soit parce qu'une commande intégrée se sert des variables internes du shell. |
Cela signifie que lorsqu'on change de shell courant (par exemple bash, dash, zsh ou C-shell((Voir : http://fr.wikipedia.org/wiki/Csh)), on ne dispose plus des mêmes commandes internes. | Cela signifie que lorsqu'on change de shell courant (par exemple bash, dash, zsh ou C-shell((Voir : http://fr.wikipedia.org/wiki/Csh)), on ne dispose plus des mêmes commandes internes. | ||
Ligne 135: | Ligne 136: | ||
<code user>type sleep</code> | <code user>type sleep</code> | ||
<code>sleep est /bin/sleep</code> | <code>sleep est /bin/sleep</code> | ||
- | //''/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> | ||
Ligne 145: | Ligne 146: | ||
<code user>which ls</code> | <code user>which ls</code> | ||
<code>/bin/ls</code> | <code>/bin/ls</code> | ||
- | //''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 180: | Ligne 181: | ||
==== Notion de processus ==== | ==== Notion de processus ==== | ||
- | ===Généralité=== | + | ===Tout est là === |
- | De façon générale, la notion de processus recouvre tout le fonctionnement de\\ | + | |
- | notre système GNU/linux et revoie à l'utilisation du processeur de notre machine.\\ | + | * [[doc:systeme:processus|processus]] |
- | L'étude des processus mériterait à elle seule un livre entier, et dépasse largement celle du shell.\\ Voyons simplement dans les grandes lignes ce qu'est un processus, comment le shell permet de repérer un processus, et un exemple très simple d'utilisation d'un processus.\\ | + | * [[doc:systeme:ps?s[]=ps|la commande ps]] |
- | + | * [[doc:systeme:top?s[]=top|la commande top]] | |
- | >Pour simplifier, on peut dire qu'un processus est un programme en cours d’exécution. | + | * [[http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Processus]] |
- | >Quand on lance une commande cela fait appel à un exécutable (un binaire ou un script), | + | |
- | >qui est dans la mémoire morte (dans le disque dur). | + | |
- | >Mais lorsqu'un processus se lance, les instructions du programme passe en | + | |
- | >mémoire vive pour que le programme soit exécuté par le processeur. | + | |
- | + | ||
- | >Enfin un processeur ne peut exécuter qu'un processus à la fois, même si | + | |
- | >du point de vue de l'utilisateur, il semble que le système fait plusieurs | + | |
- | >choses en même temps. | + | |
- | >Cette impression est due à la rapidité de calcul du processeur, | + | |
- | >mais en réalité un programme essentiel au système, //l'ordonnanceur//, | + | |
- | >gère la priorité des différents processus placés en mémoire vive. | + | |
- | + | ||
- | >Un processus peut donc être suspendu, relancé, mis en arrière plan (job), | + | |
- | >en premier plan, être un processus père ou enfant, être orphelin, et même devenir un zombie 8-). | + | |
- | >La gestion des processus nécessite donc que chaque processus possède un identifiant. | + | |
- | >Enfin, une des particularités des systèmes GNU/Linux, | + | === Rappel : deux façons de lister les processus=== |
- | >c'est qu'un processus s'exécute en fonction les droits accordés | + | |
- | >à l'utilisateur qui l'a lancé. | + | |
- | >Ceci participe fortement à la sécurité du système. | + | |
- | + | ||
- | Pour aller plus loin : tout est là : [[doc:systeme:processus|processus]] | + | |
- | ===Identifier un processus=== | + | |
- | Un processus est identifié par un numéro unique que l'on appelle le PID (Process IDentifiant).\\ | + | |
- | Et chaque processus dispose d'un processus père que l'on appelle le PPID (Parent PID).\\ | + | |
- | + | ||
- | Excepté le processus ''init'' qui a comme particularité d'être le premier processus\\ | + | |
- | et de toujours utiliser le ''PID 1''.\\ | + | |
- | Ce processus démarre ensuite des processus noyaux et les premiers processus systèmes. | + | |
* Pour se faire plaisir en observant la hiérarchie des processus ;-) : | * Pour se faire plaisir en observant la hiérarchie des processus ;-) : | ||
Ligne 226: | Ligne 200: | ||
top | top | ||
</code> | </code> | ||
- | Pour aller plus loin sur la récupération du PID voir : | ||
- | * [[doc:systeme:ps?s[]=ps|la commande ps]] | ||
- | * [[doc:systeme:top?s[]=top|la commande top]] | ||
- | * [[http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Processus]] | ||
=== 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éveille 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 : ''ctrl+Alt+F1'' | ||
- 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 241: | Ligne 213: | ||
ps -A | grep icedove | ps -A | grep icedove | ||
</code> | </code> | ||
+ | <code> | ||
+ | 4245 pts/0 00:00:02 icedove | ||
+ | </code> | ||
+ | >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. | ||
+ | |||
* Tuer le processus : | * Tuer le processus : | ||
<code user> | <code user> | ||
- | 4245 pts/0 00:00:02 icedove | + | kill 4245 |
</code> | </code> | ||
<code user> | <code user> | ||
exit | exit | ||
</code> | </code> | ||
+ | >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 : ''ctrl+Alt+F7'' | ||
Ligne 312: | Ligne 292: | ||
À ne pas lancer dans votre dossier personnel sous peine perdre de manière irrémédiable de tous vos fichiers ! | À ne pas lancer dans votre dossier personnel sous peine perdre de manière irrémédiable de tous vos fichiers ! | ||
</note> | </note> | ||
- | >Pour vérifier que tout a été supprimé : | ||
<code user>ls</code> | <code user>ls</code> | ||
+ | |||
+ | > Pour vérifier que tout a été supprimé : | ||
* comparez maintenant avec : | * comparez maintenant avec : | ||
Ligne 324: | Ligne 305: | ||
<code user>ls | xargs rm | <code user>ls | xargs rm | ||
</code> | </code> | ||
- | >Pour vérifier que tout a été supprimé : | + | |
<code user>ls</code> | <code user>ls</code> | ||
+ | |||
+ | > Pour vérifier que tout a été supprimé : | ||
* Autre exemple : | * Autre exemple : | ||
Ligne 552: | Ligne 535: | ||
<note tip> En bref !!! | <note tip> En bref !!! | ||
- | * Les caractères servant au globbing et au perttern, sont désignés dans le man bash de caractères génériques.\\ Mais à l'usage on parle de métacaractères. | + | * Les caractères servant __au globbing et au patterns__, sont désignés dans le man bash de caractères génériques.\\ Mais à l'usage on parle de __métacaractères__. |
- | * Les caractères qui permettent le mécanisme de lecture d'une ligne de commande par le shell sont appelés dans le man bash méta-caractères.\\ Mais à l'usage on parle de mots réservés. | + | * Les caractères qui permettent le mécanisme de lecture d'une ligne de commande par le shell sont appelés dans le man bash méta-caractères.\\ Mais à l'usage on parle __de mots réservés__. |
* On distingue deux sortes de mots réservés : les opérateurs de contrôle et les opérateurs de redirection. | * On distingue deux sortes de mots réservés : les opérateurs de contrôle et les opérateurs de redirection. | ||
Ligne 560: | Ligne 543: | ||
==== Les opérateurs de contrôle ==== | ==== Les opérateurs de contrôle ==== | ||
- | + | ||
- | <code> | + | ===Parmi tous les opérateurs de contrôle ci-dessous :=== |
+ | <code text man bash> | ||
|| && ; & ;; ( ) | <retour-chariot> | || && ; & ;; ( ) | <retour-chariot> | ||
</code> | </code> | ||
+ | |||
+ | ===Il faut premièrement distinguer ceux qui servent à enchaîner les commandes :=== | ||
+ | |||
+ | '' || && ; <retour-chariot> '' | ||
+ | |||
+ | Voir : | ||
+ | * [[doc:programmation:shell:shell|Le shell pour tous]] | ||
+ | * [[doc:programmation:shell:shell#enchainer-plusieurs-commandes]] | ||
+ | * [[atelier:chantier:script-bash-enchainement-de-commandes-et-etat-de-sortie#enchainements-de-commandes-dans-les-scripts|Enchaînements de commandes dans les scripts]] | ||
+ | * [[atelier:chantier:script-bash-etat-de-sorie-et-les-tests?&#l-enchainement-conditionnel-est-fonde-sur-le-code-de-retour|l'enchaînement conditionnel]] | ||
+ | |||
+ | ===Remarques === | ||
<note tip> | <note tip> | ||
- | Premièrement, à strictement parler, parmi les caractères de la liste ci-dessus, ceux qui servent à enchaîner les commandes sont : | + | Quant aux autres : '' & ;; ( ) | '' |
- | <code> || && ; <retour-chariot> </code> | + | * Le signe ''|'' est un "ou" logique. |
- | > Le signe ''|'' est un "ou" logique. | ||
> Il ne fait pas référence ici au pipe qui sert dans les tubes. | > Il ne fait pas référence ici au pipe qui sert dans les tubes. | ||
- | > Ce "ou" logique qui apparaît dans deux cas : | + | > Ce "ou" logique apparaît dans deux cas : |
- | + | ||
- | * avec '';;'' dans le contexte de la commande ''case'' | + | |
- | <code bash> | + | |
- | case $variable-name in | + | |
- | pattern1|pattern2|pattern3 | + | |
- | # ^ ^ | + | |
- | # ou ou | + | |
- | command1 | + | |
- | ... | + | |
- | commandN | + | |
- | *) | + | |
- | esac | + | |
- | </code> | + | |
- | * dans le contexte d'utilisation des globs étendus et des expressions rationnelles\\ voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#les-globs-etendus]]\\ Par exemple : <code user>ls ~/Test/!(*jpg|*bmp)</code> | + | |
- | Deuxièmement, on retrouve la paire de parenthèses simples ''( )'': | + | * le ''|'' dans le contexte d'utilisation des globs étendus et des expressions rationnelles\\ voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#les-globs-etendus]]\\ Par exemple : <code user>ls ~/Test/!(*jpg|*bmp)</code> |
- | + | * Le ''|'' avec les '';;'' dans contexte de la commande ''case'' | |
- | > Avec la commande ''function'' | + | <code> |
+ | case chaîne in | ||
+ | choix1 ) commande ;; | ||
+ | choix2 | choix3 ...) commande ;; | ||
+ | # ^ | ||
+ | ... | ||
+ | * ) commande ... ;; | ||
+ | esac | ||
+ | </code> | ||
+ | * On retrouve la paire de parenthèses simples ''( )'': | ||
+ | * Avec la commande ''function'' | ||
<code bash> | <code bash> | ||
Ligne 600: | Ligne 591: | ||
</code> | </code> | ||
- | > Avec les substitutions de commande ''$( )'' | + | * Avec les substitutions de commande ''$( )'' |
- | + | * Avec les globs étendus (voir lien ci-dessus) ;\\ | |
- | > Avec les globs étendus (voir lien ci-dessus) ;\\ | + | |
ou dans les expressions rationnelle (voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#liste-des-caracteres-utilises-dans-les-expressions-regulieres-de-type-bashiste]]\\ | ou dans les expressions rationnelle (voir : [[atelier:chantier:bash-vii-globs-etendus-regex?&#liste-des-caracteres-utilises-dans-les-expressions-regulieres-de-type-bashiste]]\\ | ||
- | > Ne pas confondre avec la double paire de parenthèse ''<nowiki>(( ))</nowiki>'' qui ne figure pas\\ dans la liste et qui sert à faire des calculs\\ (voir : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques]]. | + | > Et à pas confondre avec la double paire de parenthèse ''<nowiki>(( ))</nowiki>'' qui ne figure pas\\ dans la liste et qui sert à faire des calculs\\ (voir : [[atelier:chantier:page-man-bash-iv-symboles-dans-les-calculs-mathematiques]]. |
</note> | </note> | ||
- | À voir : [[doc:programmation:shell:shell#enchainer-plusieurs-commandes]] | + | |
==== Les opérateurs de redirection ==== | ==== Les opérateurs de redirection ==== | ||
Ligne 633: | Ligne 624: | ||
<note> | <note> | ||
- | Enfin, ne sont pas désignés de méta-caractères :\\ | + | Enfin, ne sont pas désignés de méta-caractères, ni d'opérateurs de contrôle :\\ |
Tous les caractères spéciaux, c'est-à-dire les symboles auxquels le shell est sensible.\\ | Tous les caractères spéciaux, c'est-à-dire les symboles auxquels le shell est sensible.\\ | ||
Comme nous le verrons dans cette série de wiki, il s'agit : | Comme nous le verrons dans cette série de wiki, il s'agit : | ||
Ligne 656: | Ligne 647: | ||
* **Pour les DÉBUTANTS AVISÉS et anglophile, voir là :[[http://mywiki.wooledge.org/BashFAQ]]** | * **Pour les DÉBUTANTS AVISÉS et anglophile, voir là :[[http://mywiki.wooledge.org/BashFAQ]]** | ||
- | * **À voir aussi : scripts debian-facile :** | + | * **À voir aussi : les scripts debian-facile :** |
*[[:doc:programmation:python:boutonfermer|[pygtk] Comment faire un notebook avec bouton "fermer"]] | *[[:doc:programmation:python:boutonfermer|[pygtk] Comment faire un notebook avec bouton "fermer"]] | ||
*[[:doc:programmation:bash:alias|[bash] Réalisation d'un script contenant des Alias]] | *[[:doc:programmation:bash:alias|[bash] Réalisation d'un script contenant des Alias]] |