Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
elearning:workbooks:lpic:11:500:l103 [2023/06/09 05:31] – admin | elearning:workbooks:lpic:11:500:l103 [2024/04/05 07:59] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
- | Version : **2023.01** | + | Version : **2024.01** |
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
Ligne 4404: | Ligne 4404: | ||
[root@centos7 ~]# ip addr show enp0s3 | grep " | [root@centos7 ~]# ip addr show enp0s3 | grep " | ||
10.0.2.15 | 10.0.2.15 | ||
+ | </ | ||
+ | |||
+ | =====Le Shell===== | ||
+ | |||
+ | Un shell est un **interpréteur de commandes** ou en anglais un** Command Line Interpreter (C.L.I)**. Il est utilisé comme interface pour donner des instructions ou **commandes** au système d' | ||
+ | |||
+ | Le mot shell est générique. Il existe de nombreux shells dans le monde Unix, par exemple : | ||
+ | |||
+ | ^ Shell ^ Nom ^ Date de Sortie ^ Inventeur ^ Commande ^ Commentaires ^ | ||
+ | | tsh | Thompson Shell | 1971 | Ken Thompson | sh | Le premier shell | | ||
+ | | sh | Bourne Shell | 1977 | Stephen Bourne | sh | Le shell commun à tous les Unix. Sous RHEL/CentOS 7 : /usr/bin/sh | | ||
+ | | csh | C-Shell | 1978 | Bill Joy | csh | Le shell BSD. Sous RHEL/CentOS 7 : / | ||
+ | | tcsh | Tenex C-Shell | 1979 | Ken Greer | tcsh | Un dérivé du shell csh. Sous RHEL/CentOS 7 : / | ||
+ | | ksh | Korn Shell | 1980 | David Korn | ksh | Uniquement libre depuis 2005. Sous RHEL/CentOS 7 : / | ||
+ | | bash | Bourne Again Shell | 1987 | Brian Fox | bash | Le shell par défaut de Linux et de MacOS X. Sous RHEL/CentOS 7 : / | ||
+ | | zsh | Z Shell | 1990 | Paul Falstad | zsh | Zsh est plutôt orienté pour l' | ||
+ | |||
+ | Sous RHEL/CentOS 7 le shell **/bin/sh** est un lien symbolique vers **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls -l /bin/sh | ||
+ | lrwxrwxrwx. 1 root root 4 30 sept. 06:01 /bin/sh -> bash | ||
+ | </ | ||
+ | |||
+ | =====Le Shell / | ||
+ | |||
+ | Ce module concerne l' | ||
+ | |||
+ | * Rappeler des commandes | ||
+ | * Générer la fin de noms de fichiers | ||
+ | * Utiliser des alias | ||
+ | * Utiliser les variables tableaux | ||
+ | * Utiliser les variables numériques et l' | ||
+ | * Gérer des chaînes de caractères | ||
+ | * Utiliser les fonctions | ||
+ | |||
+ | Une commande commence toujours par un mot clef. Ce mot clef est interprété par le shell selon le type de commande et dans l' | ||
+ | |||
+ | - Les alias | ||
+ | - Les fonctions | ||
+ | - Les commandes internes au shell | ||
+ | - Les commandes externes au shell | ||
+ | |||
+ | ====Les Commandes Internes et Externes au shell==== | ||
+ | |||
+ | Les commandes internes au shell sont des commandes telles **cd**. Pour vérifier le type de commande, il faut utiliser la commande **type** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ type cd | ||
+ | cd is a shell builtin | ||
+ | </ | ||
+ | |||
+ | Les commandes externes au shell sont des binaires exécutables ou des scripts, généralement situés dans /bin, /sbin, /usr/bin ou /usr/sbin : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ type passwd | ||
+ | passwd is / | ||
+ | </ | ||
+ | |||
+ | ====Les alias==== | ||
+ | |||
+ | Les alias sont des noms permettant de désigner une commande ou une suite de commandes et ne sont spécifiques qu'au shell qui les a créés ainsi qu'à l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ type ls | ||
+ | ls is aliased to `ls --color=auto' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que dans ce cas l' | ||
+ | </ | ||
+ | |||
+ | Un alias se définit en utilisant la commande **alias** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ alias dir=' | ||
+ | [trainee@centos7 ~]$ dir | ||
+ | total 4 | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | drwxr-xr-x. 2 trainee trainee | ||
+ | -rw-rw-r--. 1 trainee trainee 442 29 sept. 00:53 vitext | ||
+ | -rw-rw-r--. 1 trainee trainee | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que la commande **dir** existe vraiment. Le fait de créer un alias qui s' | ||
+ | </ | ||
+ | |||
+ | La liste des alias définis peut être visualisée en utilisant la commande **alias** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ alias | ||
+ | alias dir=' | ||
+ | alias egrep=' | ||
+ | alias fgrep=' | ||
+ | alias grep=' | ||
+ | alias l.='ls -d .* --color=auto' | ||
+ | alias ll='ls -l --color=auto' | ||
+ | alias ls='ls --color=auto' | ||
+ | alias vi=' | ||
+ | alias which=' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que cette liste contient, sans distinction, | ||
+ | </ | ||
+ | |||
+ | Pour forcer l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ \dir | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Pour supprimer un alias, il convient d' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ unalias dir | ||
+ | [trainee@centos7 ~]$ dir | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Le shell des utilisateurs est défini par **root** dans le dernier champs du fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat /etc/passwd | ||
+ | root: | ||
+ | bin: | ||
+ | daemon: | ||
+ | adm: | ||
+ | lp: | ||
+ | sync: | ||
+ | shutdown: | ||
+ | halt: | ||
+ | mail: | ||
+ | operator: | ||
+ | games: | ||
+ | ftp: | ||
+ | nobody: | ||
+ | avahi-autoipd: | ||
+ | systemd-bus-proxy: | ||
+ | systemd-network: | ||
+ | dbus: | ||
+ | polkitd: | ||
+ | abrt: | ||
+ | usbmuxd: | ||
+ | colord: | ||
+ | libstoragemgmt: | ||
+ | setroubleshoot: | ||
+ | rpc: | ||
+ | rtkit: | ||
+ | chrony: | ||
+ | unbound: | ||
+ | tss: | ||
+ | geoclue: | ||
+ | ntp: | ||
+ | sssd: | ||
+ | rpcuser: | ||
+ | nfsnobody: | ||
+ | pulse: | ||
+ | gdm: | ||
+ | gnome-initial-setup: | ||
+ | avahi: | ||
+ | postfix: | ||
+ | sshd: | ||
+ | tcpdump: | ||
+ | trainee: | ||
+ | vboxadd: | ||
+ | named: | ||
+ | </ | ||
+ | |||
+ | Cependant l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat /etc/shells | ||
+ | /bin/sh | ||
+ | /bin/bash | ||
+ | / | ||
+ | /usr/bin/sh | ||
+ | / | ||
+ | / | ||
+ | /bin/tcsh | ||
+ | /bin/csh | ||
+ | </ | ||
+ | |||
+ | Ensuite utilisez la commande **echo** pour afficher le shell actuel de **trainee** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo $SHELL | ||
+ | /bin/bash | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez sous RHEL/CentOS 7 que le système nous informe que le shell courant de l' | ||
+ | </ | ||
+ | |||
+ | Changez ensuite le shell de **trainee** en utilisant la commande **chsh** en indiquant la valeur de **/bin/sh** pour le nouveau shell : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ chsh | ||
+ | Changing shell for trainee. | ||
+ | New shell [/ | ||
+ | Password: trainee | ||
+ | Shell changed. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le mot de passe saisi ne sera **pas** visible. | ||
+ | </ | ||
+ | |||
+ | Vérifiez ensuite le shell actif pour **trainee** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo $SHELL | ||
+ | /bin/bash | ||
+ | </ | ||
+ | |||
+ | Dernièrement contrôlez le shell stipulé dans le fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat /etc/passwd | grep trainee | ||
+ | trainee: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Vous noterez que le shell actif est toujours **/ | ||
+ | </ | ||
+ | |||
+ | Modifiez votre shell à **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ chsh | ||
+ | Changing shell for trainee. | ||
+ | New shell [/bin/sh]: /bin/bash | ||
+ | Password: trainee | ||
+ | Shell changed. | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le mot de passe saisi ne sera **pas** visible. | ||
+ | </ | ||
+ | |||
+ | ====Le Prompt==== | ||
+ | |||
+ | Le prompt d'un utilisateur dépend de son statut : | ||
+ | |||
+ | * **$** pour un utilisateur normal, | ||
+ | * **#** pour root. | ||
+ | |||
+ | ==== Rappeler des Commandes ==== | ||
+ | |||
+ | Le shell **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ history | more | ||
+ | 1 su - | ||
+ | 2 df -h | ||
+ | 3 su - | ||
+ | 4 exit | ||
+ | 5 su - | ||
+ | 6 su - | ||
+ | 7 vi vitext | ||
+ | 8 view vitext | ||
+ | 9 vi vitext | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important**: | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | ^ Caractère de Contrôle | ||
+ | | [CTRL]-[P] (= flèche vers le haut) | Rappelle la commande précédente | ||
+ | | [CTRL]-[N] (= flèche vers le bas) | Rappelle la commande suivante | ||
+ | |||
+ | Pour se déplacer dans la ligne de l' | ||
+ | |||
+ | ^ Caractère de Contrôle | ||
+ | | [CTRL]-[A] | Se déplacer au début de la ligne | | ||
+ | | [CTRL]-[E] | Se déplacer à la fin de la ligne | | ||
+ | | [CTRL]-[B] | Se déplacer un caractère à gauche | | ||
+ | | [CTRL]-[F] | Se déplacer un caractère à droite | | ||
+ | | [CTRL]-[D] | Supprimer le caractère sous le curseur | | ||
+ | |||
+ | Pour rechercher dans l' | ||
+ | |||
+ | ^ Caractère de Contrôle | ||
+ | | [CTRL]-[R] // | ||
+ | | [CTRL]-[S] // | ||
+ | | [CTRL]-[G] | Sortir du mode recherche | | ||
+ | |||
+ | Il est aussi possible de rappeler la dernière commande de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | [trainee@centos7 ~]$ !! | ||
+ | ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Vous pouvez rappeler une commande spécifique de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ !123 | ||
+ | ls | ||
+ | aac bca Documents | ||
+ | abc Desktop | ||
+ | </ | ||
+ | |||
+ | Le paramétrage de la fonction du rappel des commandes est fait pour tous les utilisateurs dans le fichier **/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ cat / | ||
+ | HISTSIZE=1000 | ||
+ | export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL | ||
+ | </ | ||
+ | |||
+ | Vous noterez que dans le cas précédent, | ||
+ | |||
+ | Les commandes mémorisées sont stockées dans le fichier **~/ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ nl .bash_history | more | ||
+ | 1 su - | ||
+ | 2 df -h | ||
+ | 3 su - | ||
+ | | ||
+ | 5 su - | ||
+ | 6 su - | ||
+ | 7 vi vitext | ||
+ | | ||
+ | 9 vi vitext | ||
+ | 10 locale | ||
+ | 11 LANG=en_GB.UTF-8 | ||
+ | 12 export LANG | ||
+ | 13 locale | ||
+ | 14 vi vitext | ||
+ | 15 vi .exrc | ||
+ | 16 vi vitext | ||
+ | 17 clear | ||
+ | 18 stty -a | ||
+ | 19 date | ||
+ | 20 locale | ||
+ | 21 who | ||
+ | 22 df | ||
+ | 23 df -h | ||
+ | --More-- | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | ====Générer les fins de noms de fichiers==== | ||
+ | |||
+ | Le shell /bin/bash permet la génération des fins de noms de fichiers. Celle-ci est accomplie grâce à l' | ||
+ | |||
+ | $ ls .b [Tab][Tab][Tab] | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls .bash | ||
+ | .bash_history | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez qu'en appuyant sur la touche < | ||
+ | </ | ||
+ | |||
+ | La même possibilité existe pour la génération des fins de noms de commandes. Dans ce cas saisissez la commande suivante : | ||
+ | |||
+ | $ mo [Tab][Tab] | ||
+ | |||
+ | Appuyez sur la touche < | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ mo | ||
+ | mobj_dump | ||
+ | modifyrepo | ||
+ | modinfo | ||
+ | modprobe | ||
+ | </ | ||
+ | |||
+ | ==== Le shell interactif ==== | ||
+ | |||
+ | Lors de l' | ||
+ | |||
+ | ^ Caractère Spéciaux ^ Description ^ | ||
+ | | ***** | Représente 0 ou plus de caractères | | ||
+ | | **?** | Représente un caractère | | ||
+ | | **[abc]** | Représente un caractère parmi ceux entre crochets | | ||
+ | | **[!abc]** | Représente un caractère ne trouvant pas parmi ceux entre crochets | | ||
+ | | **? | ||
+ | | ***(expression1|expression2| ...)** | Représente 0 à x fois l' | ||
+ | | **+(expression1|expression2| ...)** | Représente 1 à x fois l' | ||
+ | | **@(expression1|expression2| ...)** | Représente 1 fois l' | ||
+ | | **!(expression1|expression2| ...)** | Représente 0 fois l' | ||
+ | |||
+ | ===Caractère *=== | ||
+ | |||
+ | Dans votre répertoire individuel, créez un répertoire **training**. Ensuite créez dans ce répertoire 5 fichiers nommés respectivement f1, f2, f3, f4 et f5 : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ mkdir training | ||
+ | [trainee@centos7 ~]$ cd training | ||
+ | [trainee@centos7 training]$ touch f1 f2 f3 f4 f5 | ||
+ | </ | ||
+ | |||
+ | Afin de démontrer l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo f* | ||
+ | f1 f2 f3 f4 f5 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le caractère ***** remplace un caractère ou une suite de caractères. | ||
+ | </ | ||
+ | |||
+ | ===Caractère ?=== | ||
+ | |||
+ | Créez maintenant les fichiers f52 et f62 : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ touch f52 f62 | ||
+ | </ | ||
+ | |||
+ | Saisissez ensuite la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo f?2 | ||
+ | f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que le caractère **?** remplace **un seul** caractère. | ||
+ | </ | ||
+ | |||
+ | ===Caractères [ ]=== | ||
+ | |||
+ | L' | ||
+ | |||
+ | ^ Joker ^ Description ^ | ||
+ | | [xyz] | Représente le caractère x ou y ou z | | ||
+ | | [m-t] | Représente le caractère m ou n .... t | | ||
+ | | [!xyz] | Représente un caractère autre que x ou y ou z | | ||
+ | | [!m-t] | Représente un caractère autre que m ou n .... t | | ||
+ | |||
+ | Afin de démontrer l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ touch a100 | ||
+ | </ | ||
+ | |||
+ | Ensuite saisissez les commandes suivantes et notez le résultat : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [a-f]* | ||
+ | a100 f1 f2 f3 f4 f5 f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que tous les fichiers commençant par les lettres **a**, **b**, **c**, **d**, **e** ou **f** sont affichés à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [af]* | ||
+ | a100 f1 f2 f3 f4 f5 f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que tous les fichiers commençant par les lettres **a** ou **f** sont affichés à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [!a]* | ||
+ | f1 f2 f3 f4 f5 f52 f62 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que tous les fichiers sont affichés à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [a-b]* | ||
+ | a100 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que seul le fichier commençant par la lettre **a** est affiché à l' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo [a-f] | ||
+ | [a-f] | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que dans ce cas, il n' | ||
+ | </ | ||
+ | |||
+ | ====L' | ||
+ | |||
+ | Activez l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ shopt -s extglob | ||
+ | </ | ||
+ | |||
+ | La commande **shopt** est utilisée pour activer ou désactiver les options du comportement optional du shell. La liste des options peut être visualisée en exécutant la commande **shopt** sans options : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ shopt | ||
+ | autocd | ||
+ | cdable_vars | ||
+ | cdspell | ||
+ | checkhash | ||
+ | checkjobs | ||
+ | checkwinsize | ||
+ | cmdhist | ||
+ | compat31 | ||
+ | compat32 | ||
+ | compat40 | ||
+ | compat41 | ||
+ | direxpand | ||
+ | dirspell | ||
+ | dotglob | ||
+ | execfail | ||
+ | expand_aliases on | ||
+ | extdebug | ||
+ | extglob | ||
+ | extquote | ||
+ | failglob | ||
+ | force_fignore | ||
+ | globstar | ||
+ | gnu_errfmt | ||
+ | histappend | ||
+ | histreedit | ||
+ | histverify | ||
+ | hostcomplete | ||
+ | huponexit | ||
+ | interactive_comments on | ||
+ | lastpipe | ||
+ | lithist | ||
+ | login_shell | ||
+ | mailwarn | ||
+ | no_empty_cmd_completion off | ||
+ | nocaseglob | ||
+ | nocasematch | ||
+ | nullglob | ||
+ | progcomp | ||
+ | promptvars | ||
+ | restricted_shell off | ||
+ | shift_verbose | ||
+ | sourcepath | ||
+ | xpg_echo | ||
+ | </ | ||
+ | |||
+ | ===? | ||
+ | |||
+ | Créez les fichiers f, f.txt, f123.txt, f123123.txt, | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ touch f f.txt f123.txt f123123.txt f123123123.txt | ||
+ | </ | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f?(123).txt | ||
+ | f123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant 0 ou 1 occurence de la chaîne **123**. | ||
+ | </ | ||
+ | |||
+ | ===*(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f*(123).txt | ||
+ | f123123123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant de 0 jusqu' | ||
+ | </ | ||
+ | |||
+ | ===+(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f+(123).txt | ||
+ | f123123123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant entre 1 et x occurences de la chaîne **123**. | ||
+ | </ | ||
+ | |||
+ | ===@(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f@(123).txt | ||
+ | f123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande affiche les fichiers ayant un nom contenant 1 seule occurence de la chaîne **123**. | ||
+ | </ | ||
+ | |||
+ | ===!(expression)=== | ||
+ | |||
+ | Saisissez la commande suivante : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ ls f!(123).txt | ||
+ | f123123123.txt | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez ici que la commande n' | ||
+ | </ | ||
+ | |||
+ | ===Caractères d' | ||
+ | |||
+ | Afin d' | ||
+ | |||
+ | ^ Caractère ^ Description ^ | ||
+ | | \ | Protège le caractère qui le suit | | ||
+ | | ' ' | Protège tout caractère, à l' | ||
+ | | " " | Protège tout caractère, à l' | ||
+ | |||
+ | Afin d' | ||
+ | |||
+ | $ echo * est un caractère spécial [Entrée] | ||
+ | |||
+ | Lors de la saisie de cette commande dans votre répertoire **training**, | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ echo * est un caractère spécial | ||
+ | a100 f f1 f123123123.txt f123123.txt f123.txt f2 f3 f4 f5 f52 f62 f.txt est un caractère spécial | ||
+ | |||
+ | [trainee@centos7 training]$ echo \* est un caractère spécial | ||
+ | * est un caractère spécial | ||
+ | |||
+ | [trainee@centos7 training]$ echo "* est un caractère spécial" | ||
+ | * est un caractère spécial | ||
+ | |||
+ | [trainee@centos7 training]$ echo '* est un caractère spécial' | ||
+ | * est un caractère spécial | ||
+ | </ | ||
+ | |||
+ | ====Codes Retour==== | ||
+ | |||
+ | Chaque commande retourne un code à la fin de son exécution. La variable spéciale **$?** sert à stocker le code retour de la dernière commande exécutée. | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ cd .. | ||
+ | [trainee@centos7 ~]$ mkdir codes | ||
+ | [trainee@centos7 ~]$ echo $? | ||
+ | 0 | ||
+ | [trainee@centos7 ~]$ touch codes/ | ||
+ | [trainee@centos7 ~]$ rmdir codes | ||
+ | rmdir: failed to remove ‘codes’: | ||
+ | [trainee@centos7 ~]$ echo $? | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | Dans cette exemple la création du répertoire **codes** s'est bien déroulée. Le code retour stocké dans la variable $? est un zéro. | ||
+ | |||
+ | La suppression du répertoire a rencontré une erreur car **codes** contenait le fichier **retour**. Le code retour stocké dans la variable $? est un **un**. | ||
+ | |||
+ | Si le code retour est **zéro** la dernière commande s'est déroulée sans erreur. | ||
+ | |||
+ | Si le code retour est **autre que zéro** la dernière commande s'est déroulée avec une erreur. | ||
+ | |||
+ | ====Redirections==== | ||
+ | |||
+ | Votre dialogue avec le système Linux utilise des canaux d’entrée et de sortie. On appelle le clavier, le **canal d’entrée standard** et l’écran, le **canal de sortie standard** : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Autrement dit, en tapant une commande sur le clavier, vous voyez le résultat de cette commande à l’écran. | ||
+ | |||
+ | Parfois, cependant il est utile de re-diriger le canal de sortie standard vers un fichier. De cette façon, le résultat d’une commande telle **free** peut être stocké dans un fichier pour une consultation ultérieure : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Cet effet est obtenu en utilisant une **redirection** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ pwd | ||
+ | / | ||
+ | [trainee@centos7 ~]$ cd training | ||
+ | [trainee@centos7 training]$ free > file | ||
+ | [trainee@centos7 training]$ cat file | ||
+ | total used free shared | ||
+ | Mem: | ||
+ | Swap: | ||
+ | </ | ||
+ | |||
+ | Si le fichier cible n’existe pas, il est créé et son contenu sera le résultat de la commande free. | ||
+ | |||
+ | Par contre si le fichier existe déjà, il sera écrasé : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ date > file | ||
+ | [trainee@centos7 training]$ cat file | ||
+ | Mon 28 Nov 15:48:09 CET 2016 | ||
+ | </ | ||
+ | |||
+ | Pour ajouter des données supplémentaires au même fichier cible, il faut utiliser une **double redirection** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ free >> file | ||
+ | [trainee@centos7 training]$ cat file | ||
+ | Mon 28 Nov 15:48:09 CET 2016 | ||
+ | total used free shared | ||
+ | Mem: | ||
+ | Swap: | ||
+ | </ | ||
+ | |||
+ | De cette façon, la date du jour sera rajoutée à la fin de votre fichier après les informations de la commande free. | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez que la sortie standard ne peut être redirigée que dans **une seule direction**. | ||
+ | </ | ||
+ | |||
+ | Les canaux d’entrées et de sorties sont numérotés : | ||
+ | |||
+ | * 0 = Le Canal d’entrée Standard | ||
+ | * 1 = Le Canal de Sortie Standard | ||
+ | * 2 = Le Canal d’erreur | ||
+ | |||
+ | La commande suivante créera un fichier nommé **errorlog** qui contient les messages d’erreur de l’exécution de la commande **rmdir** : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 training]$ cd .. | ||
+ | [trainee@centos7 ~]$ rmdir training/ 2> | ||
+ | [trainee@centos7 ~]$ cat errorlog | ||
+ | rmdir: failed to remove ‘training/ | ||
+ | </ | ||
+ | |||
+ | En effet l' | ||
+ | |||
+ | Nous pouvons également réunir des canaux. Pour mettre en application ceci, il faut comprendre que le shell traite les commandes de **gauche à droite**. | ||
+ | |||
+ | Dans l’exemple suivant, nous réunissons le canal de sortie et le canal d’erreurs : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ free > file 2>&1 | ||
+ | </ | ||
+ | |||
+ | La syntaxe **2>& | ||
+ | |||
+ | Il est possible de modifier le canal d' | ||
+ | |||
+ | $ wc -w < errorlog [Entrée] | ||
+ | |||
+ | Dans cet exemple la commande wc compte le nombre de mots ( -w ) dans le fichier errorlog et l’affiche à l’écran : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ wc -w < errorlog | ||
+ | 8 | ||
+ | </ | ||
+ | |||
+ | D' | ||
+ | |||
+ | ^ Caractères | ||
+ | | %%&> | ||
+ | | %%<< | ||
+ | | %%<> | ||
+ | |||
+ | ====Pipes==== | ||
+ | |||
+ | Il est aussi possible de relier des commandes avec un pipe **|** . | ||
+ | |||
+ | Dans ce cas, le canal de sortie de la commande à gauche du tube est envoyé au canal d’entrée de la commande à droite du pipe : | ||
+ | |||
+ | $ ls | wc -w [Entrée] | ||
+ | |||
+ | Cette commande, lancée dans votre répertoire personnel, prend la sortie de la commande **ls** et demande à la commande **wc** de compter le nombre de mots inclus dans la sortie de ls : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ ls | wc -w | ||
+ | 17 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Il est à noter qu'il est possible de relier plusieurs tubes dans la même commande. | ||
+ | </ | ||
+ | |||
+ | Rappelez-vous que la sortie standard ne peut être redirigée que dans une seule direction. Afin de pouvoir rediriger la sortie standard vers un fichier **et** la visualiser à l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ date | tee file1 | ||
+ | Mon 28 Nov 16:14:24 CET 2016 | ||
+ | [trainee@centos7 ~]$ cat file1 | ||
+ | Mon 28 Nov 16:14:24 CET 2016 | ||
+ | </ | ||
+ | |||
+ | Cette même technique nous permet de créer **deux fichiers** : | ||
+ | |||
+ | $ date | tee file1 > file2 [Entrée] | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ date | tee file1 > file2 | ||
+ | [trainee@centos7 ~]$ cat file1 | ||
+ | Mon 28 Nov 16:15:57 CET 2016 | ||
+ | [trainee@centos7 ~]$ cat file2 | ||
+ | Mon 28 Nov 16:15:57 CET 2016 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Par défaut la commande tee écrase le fichier de destination. Pour ajouter des données supplémentaires au même fichier cible, il convient d' | ||
+ | </ | ||
+ | |||
+ | ====Substitutions de Commandes==== | ||
+ | |||
+ | Il est parfois intéressant, | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo date | ||
+ | date | ||
+ | [trainee@centos7 ~]$ echo $(date) | ||
+ | Mon 28 Nov 16:19:35 CET 2016 | ||
+ | [trainee@centos7 ~]$ echo `date` | ||
+ | Mon 28 Nov 16:19:35 CET 2016 | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important> | ||
+ | **Important** : Notez le format de chaque substitution **$(commande)** ou **`commande`**. Sur un clavier français, l' | ||
+ | </ | ||
+ | |||
+ | ====Chainage de Commandes==== | ||
+ | |||
+ | Il est possible de regrouper des commandes à l’aide d’un sous-shell : | ||
+ | |||
+ | $ (ls -l; ps; who) > list [Entrée] | ||
+ | |||
+ | Cet exemple envoie le résultat des trois commandes vers le fichier **list** en les traitant en tâches de fond. | ||
+ | |||
+ | Les commandes peuvent être aussi chainées en fonction du code retour de la commande précédente. | ||
+ | |||
+ | **&& | ||
+ | |||
+ | **||** est utilisé afin de s’assurer de l’inverse. | ||
+ | |||
+ | Le syntaxe de cette commande est : | ||
+ | |||
+ | Commande1 && Commande2 | ||
+ | |||
+ | Dans ce cas, Commande 2 est exécutée uniquement dans le cas où Commande1 s’est exécuté sans erreur | ||
+ | |||
+ | Ou : | ||
+ | |||
+ | Commande1 || Commande2 | ||
+ | |||
+ | Dans ce cas, Commande2 est exécuté si Commande1 a rencontré une erreur. | ||
+ | |||
+ | |||
+ | ==== Affichage des variables du shell==== | ||
+ | |||
+ | Une variable du shell peut être affichée grâce à la commande : | ||
+ | |||
+ | $ echo $VARIABLE [Entrée] | ||
+ | |||
+ | === Les variables principales === | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | BASH | Le chemin complet du shell. | | ||
+ | | BASH_VERSION | La version du shell. | | ||
+ | | EUID | EUID de l' | ||
+ | | UID | UID de l' | ||
+ | | PPID | Le PID du processus père. | | ||
+ | | PWD | Le répertoire courant. | | ||
+ | | OLDPWD | Le répertoire avant la dernière commande cd. Même chose que la commande **cd -**.| | ||
+ | | RANDOM | Un nombre aléatoire entre 0 et 32767 | | ||
+ | | SECONDS | Le nombre de scondes écoules depuis le lancement du shell | | ||
+ | | LINES | Le nombre de lignes de l' | ||
+ | | COLUMNS | La largeur de l' | ||
+ | | HISTFILE | Le fichier historique | | ||
+ | | HISTFILESIZE | La taille du fichier historique | | ||
+ | | HISTSIZE | Le nombre de commandes mémorisées dans le fichier historique | | ||
+ | | HISTCMD | Le numéro de la commande courante dans l' | ||
+ | | HISTCONTROL | **ignorespace** ou **ignoredups** ou **ignoreboth** | | ||
+ | | HOME | Le répertoire de connexion. | | ||
+ | | HOSTTYPE | Le type de machine. | | ||
+ | | OSTYPE | Le système d' | ||
+ | | MAIL | Le fichier contenant le courrier. | | ||
+ | | MAILCHECK | La fréquence de vérification du courrier en secondes. | | ||
+ | | PATH | Le chemin de recherche des commandes. | | ||
+ | | PROMPT_COMMAND | La commande exécutée avant chaque affichage du prompt. | | ||
+ | | PS1 | Le prompt par défaut. | | ||
+ | | PS2| Le deuxième prompt par défaut | | ||
+ | | PS3 | Le troisième prompt par défaut | ||
+ | | PS4 | Le quatrième prompt par défaut | ||
+ | | SHELL | Le shell de préférence. | | ||
+ | | SHLVL | Le nombre d' | ||
+ | | TMOUT | Le nombre de secondes moins 60 d' | ||
+ | |||
+ | === Les Variables de Régionalisation et d' | ||
+ | |||
+ | L' | ||
+ | |||
+ | * longueur des mots, | ||
+ | * accents, | ||
+ | * écriture de gauche à droite ou de droite à gauche, | ||
+ | * unité monétaire, | ||
+ | * styles typographiques et modèles rédactionnels, | ||
+ | * unités de mesures, | ||
+ | * affichage des dates et des heures, | ||
+ | * formats d' | ||
+ | * format du clavier, | ||
+ | * etc ... | ||
+ | |||
+ | Le **Régionalisation**, | ||
+ | |||
+ | Le code pays complet prend la forme suivante : **langue-PAYS.jeu_de_caractères**. Par exemple, pour la langue anglaise les valeurs de langue-PAYS sont : | ||
+ | |||
+ | * en_GB = Great Britain, | ||
+ | * en_US = USA, | ||
+ | * en_AU = Australia, | ||
+ | * en_NZ = New Zealand, | ||
+ | * en_ZA = South Africa, | ||
+ | * en_CA = Canada. | ||
+ | |||
+ | Les variables système les plus importants contenant les informations concernant le régionalisation sont : | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | LC_ALL | Avec une valeur non nulle, celle-ci prend le dessus sur la valeur de toutes les autres variables d' | ||
+ | | LANG | Fournit une valeur par défaut pour les variables d' | ||
+ | | LC_CTYPE | Détermine les paramètres régionaux pour l' | ||
+ | |||
+ | Par exemple : | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ echo $LC_ALL | ||
+ | en_GB.UTF-8 | ||
+ | [trainee@centos7 ~]$ echo $LC_CTYPE | ||
+ | |||
+ | [trainee@centos7 ~]$ echo $LANG | ||
+ | en_GB.UTF-8 | ||
+ | |||
+ | [trainee@centos7 ~]$ locale | ||
+ | LANG=en_GB.UTF-8 | ||
+ | LC_CTYPE=" | ||
+ | LC_NUMERIC=" | ||
+ | LC_TIME=" | ||
+ | LC_COLLATE=" | ||
+ | LC_MONETARY=" | ||
+ | LC_MESSAGES=" | ||
+ | LC_PAPER=" | ||
+ | LC_NAME=" | ||
+ | LC_ADDRESS=" | ||
+ | LC_TELEPHONE=" | ||
+ | LC_MEASUREMENT=" | ||
+ | LC_IDENTIFICATION=" | ||
+ | LC_ALL=en_GB.UTF-8 | ||
+ | </ | ||
+ | |||
+ | ===Les variables spéciales=== | ||
+ | |||
+ | ^ Variable ^ Description ^ | ||
+ | | $LINENO | Contient le numéro de la ligne courante du script ou de la fonction | | ||
+ | | $$ | Contient le PID du shell en cours | | ||
+ | | $PPID | Contient le PID du processus parent du shell en cours | | ||
+ | | $0 | Contient le nom du script en cours tel que ce nom ait été saisi sur la ligne de commande | | ||
+ | | $1, $2 ... | Contient respectivement le premier argument, deuxième argument etc passés au script | | ||
+ | | $# | Contient le nombre d' | ||
+ | | $* | Contient l' | ||
+ | | $@ | Contient l' | ||
+ | |||
+ | ====La Commande env==== | ||
+ | |||
+ | La commande **env** envoie sur la sortie standard les valeurs des variables système de l' | ||
+ | |||
+ | < | ||
+ | [trainee@centos7 ~]$ env | ||
+ | XDG_SESSION_ID=1 | ||
+ | HOSTNAME=centos7.fenestros.loc | ||
+ | SELINUX_ROLE_REQUESTED= | ||
+ | TERM=xterm-256color | ||
+ | SHELL=/ | ||
+ | HISTSIZE=1000 | ||
+ | SSH_CLIENT=10.0.2.2 33896 22 | ||
+ | SELINUX_USE_CURRENT_RANGE= | ||
+ | SSH_TTY=/ | ||
+ | LC_ALL=en_GB.UTF-8 | ||
+ | USER=trainee | ||
+ | LS_COLORS=rs=0: |