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 15:13] Hypathie [Shell BASH] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [09/07/2014 17:39] Hypathie [Métacaractères et méta-caractères !] |
||
---|---|---|---|
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 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.\\ | + | |
- | 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 repérer un processus, et le tuer.\\ | + | |
- | + | ||
- | >Pour simplifier, on peut dire qu'un processus est un programme en cours d’exécution. | + | |
- | >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. | + | |
- | + | ||
- | >De plus, 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, grâce au //système multitâche//. | + | |
- | >Cette impression est due à la rapidité de calcul du processeur, et à un programme essentiel au système, //l'ordonnanceur//, qui 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. | + | |
- | + | ||
- | >Pour ce faire, un processus doit être 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. | + | |
- | + | ||
- | >Enfin, une des particularités des systèmes GNU/Linux, 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 : | + | |
* [[doc:systeme:processus|processus]] | * [[doc:systeme:processus|processus]] | ||
* [[doc:systeme:ps?s[]=ps|la commande ps]] | * [[doc:systeme:ps?s[]=ps|la commande ps]] | ||
Ligne 209: | Ligne 188: | ||
* [[http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Processus]] | * [[http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNU-Linux/Processus]] | ||
- | ===Lister les processus=== | + | === Rappel : deux façons de lister les processus=== |
* Pour se faire plaisir en observant la hiérarchie des processus ;-) : | * Pour se faire plaisir en observant la hiérarchie des processus ;-) : | ||
Ligne 221: | Ligne 200: | ||
top | top | ||
</code> | </code> | ||
- | Pour aller plus loin sur la récupération du PID voir : | ||
=== Exemple pratique : tuer un processus === | === Exemple pratique : tuer un processus === | ||
Ligne 239: | Ligne 217: | ||
</code> | </code> | ||
>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. | + | >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 : | ||
Ligne 314: | 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 326: | 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 554: | 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 562: | 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 602: | 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 635: | 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 658: | 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]] |