Archive pour février 2012

 

Formation en Ligne « Linux – Les Bases » Gratuite

Cet article est issu de la leçon Le Shell Bash de la formation en ligne LX01 – Linux – Les Bases du site www.linuxelearning.com. La formation en ligne LX01 – Linux – Les Bases couvre les distributions CentOS/Redhat, Debian et openSUSE et contient 5 leçons :

  • Système de Fichiers,
  • Commandes de Base,
  • L’Editeur VI,
  • Aide et Documentation,
  • Le Shell Bash et les Scripts.
Pour plus d’informations cliquez-ici.

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’exploitation.

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 Linux : /bin/sh
csh C-Shell 1978 Bill Joy csh Le shell BSD. Sous Linux : /bin/csh
tcsh Tenex C-Shell 1979 Ken Greer tcsh Un dérivé du shell csh. Sous Linux : /bin/tcsh
ksh Korn Shell 1980 David Korn ksh Uniquement libre depuis 2005. Sous Linux : /bin/ksh
bash Bourne Again Shell 1987 Brian Fox bash Le shell par défaut de Linux et de MacOS X. Sous Linux : /bin/bash

Cette unité concerne l’utilisation du shell bash sous Linux.

Le shell/bin/bash permet de:

  • 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’arithmétique du langage C
  • Gérer des chaînes de caractères
  • Utiliser les fonctions

Une commande commence toujours par un mot clef. Ce mot clef est interpréter par le shell selon le type de commande et dans l’ordre qui suit :

  1. Les alias
  2. Les fonctions
  3. Les commandes internes au shell
  4. 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:

[root@centos ~]# type cd
cd est une primitive du shell

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 :

[root@centos ~]# type ifconfig
ifconfig est /sbin/ifconfig

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’environnement de l’utilisateur :

[root@centos ~]# exit
logout
[trainee@centos ~]$ type ls
ls est un alias vers « ls --color=auto »
Notez que dans ce cas l’alias ls est en effet un alias qui utilise la commande ls elle-même.

Un alias se définit en utilisant la commande alias:

[trainee@centos ~]$ alias dir='ls -l'
[trainee@centos ~]$ dir
total 64
-rw-rw-r-- 1 trainee trainee 0 22 oct. 10:24 aac
-rw-rw-r-- 1 trainee trainee 0 22 oct. 10:24 abc
-rw-rw-r-- 1 trainee trainee 0 22 oct. 10:24 bca
drwxrwxr-x 2 trainee trainee 4096 1 déc. 14:01 bin
drwxr-xr-x 2 trainee trainee 4096 3 août 14:14 Bureau
drwxr-xr-x 2 trainee trainee 4096 28 juil. 14:45 Documents
drwxr-xr-x 2 trainee trainee 4096 22 oct. 07:26 Images
drwxr-xr-x 2 trainee trainee 4096 28 juil. 14:45 Modèles
drwxr-xr-x 2 trainee trainee 4096 28 juil. 14:45 Musique
drwxr-xr-x 2 trainee trainee 4096 28 juil. 14:45 Public
drwxr-xr-x 2 trainee trainee 4096 14 nov. 15:56 Téléchargements
drwxr-xr-x 2 trainee trainee 4096 28 juil. 14:45 Vidéos
-rw-rw-r-- 1 trainee trainee 0 22 oct. 10:24 xyz
Notez que la commande dir existe vraiment. Le fait de créer un alias qui s’appelle dirimplique que l’alias sera exécuté à la place de la commandedir.

La liste des alias définis peut être visualisée en utilisant la commandealias:

[trainee@centos ~]$ alias
alias dir='ls -l'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
Notez que cette liste contient, sans distinction, les alias définis dans les fichiers de démarrage du système ainsi que l’aliasdircréé par trainee qui n’est que disponible à trainee dans le terminal courant.

Pour forcer l’exécution d’une commande et non l’alias il faut faire précéder la commande par le caractère:

[trainee@centos ~]$ dir
aac bca Documents Modèles Public Vidéos
abc Bureau Images Musique Téléchargements xyz

Pour supprimer un alias, il convient d’utiliser la commande unalias:

[trainee@centos ~]$ unalias dir
[trainee@centos ~]$ dir
aac bca Documents Modèles Public Vidéos
abc Bureau Images Musique Téléchargements xyz

Le shell des utilisateurs est défini par root dans le dernier champs du fichier/etc/passwd:

[trainee@centos ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
abrt:x:498:498::/etc/abrt:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
saslauth:x:497:495:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
trainee:x:500:500:trainee:/home/trainee:/bin/bash
vboxadd:x:495:1::/var/run/vboxadd:/bin/false
prison:x:501:502:chroot_user:/home/prison:/bin/chroot

Cependant l’utilisateur peut changer son shell grâce à la commandechsh. Les shells disponibles aux utilisateurs du système sont inscrits dans le fichier /etc/shells. Saisissez la commande cat /etc/shells:

[trainee@centos ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh

Ensuite utilisez la commande echo pour afficher le shell actuel de trainee:

[trainee@centos ~]$ echo $SHELL
/bin/bash

Changez ensuite le shell de trainee en utilisant la commande chshen indiquant la valeur de /bin/sh pour le nouveau shell :

[trainee@centos ~]$ chsh
Modification du shell pour trainee.
Mot de passe : trainee
Nouveau shell [/bin/bash]: /bin/sh
Shell a changé.
Notez que le mot de passe saisi ne sera pas visible.

Vérifiez ensuite le shell actif pour trainee:

[trainee@centos ~]$ echo $SHELL
/bin/bash

Dernièrement contrôlez le shell stipulé dans le fichier /etc/passwd pour trainee:

[trainee@centos ~]$ cat /etc/passwd | grep trainee
trainee:x:500:500:trainee:/home/trainee:/bin/sh
Vous noterez que le shell actif est toujours /bin/bash tandis que le shell stipulé dans le fichier /etc/passwd est le /bin/sh. Le shell /bin/sh ne deviendra le shell actif de trainee que lors de sa prochaine connexion au système.

Modifiez votre shell à /bin/bash de nouveau en utilisant la commande chsh :

[trainee@centos ~]$ chsh
Modification du shell pour trainee.
Mot de passe : trainee
Nouveau shell [/bin/sh]: /bin/bash
Shell a changé.
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/bin/bashpermet le rappel des dernières commandes saisies. Afin de connaître la liste des commandes mémorisées, utilisez la commande history :

[trainee@centos ~]$ history
...
203 vi script
204 echo "Entrez un nombre entier : "
205 read nombre
206 chmod u+x script
207 ./script
208 echo "Entrez un nombre entier : "
209 read nombre
210 exit 0
211 ls
212 ./script
213 vi script
214 vi Téléchargements/vitexte
215 vim -r Téléchargements/vitexte
216 vi Téléchargements/vitexte
217 cat .bash_profile
218 history

L’historique des commandes est en mode emacs par défaut. De ce fait, le rappel de la dernière commande se fait en utilisant la touche [Flèche vers le haut] ou bien les touches [CTRL]-[P] et le rappel de la commande suivante se fait en utilisant la touche [Flèche vers le bas]ou bien les touches[CTRL]-[N]:

Caractère de Contrôle Définition
[CTRL]-[P] (= flèche vers le haut) Rappelle la commande précédente
[CTRL]-[N] (= flèche vers le bas) Rappelle la commande suivante

Il est aussi possible de rappeler la dernière commande de l’historique en utilisant les caractères!!:

[trainee@centos ~]$ ls
aac bca Documents Modèles Public Vidéos
abc Bureau Images Musique Téléchargements xyz
[trainee@centos ~]$ !!
ls
aac bca Documents Modèles Public Vidéos
abc Bureau Images Musique Téléchargements xyz

Vous pouvez rappeler une commande spécifique de l’historique en utilisant le caractère!suivi du numéro de la commande à rappeler :

[trainee@centos ~]$ !5
dir
aac bca Documents Modèles Public Vidéos
abc Bureau Images Musique Téléchargements xyz

Le paramétrage de la fonction du rappel des commandes est fait à partir du fichier /etc/profile. Dans ce fichier, les variables concernant le rappel des commandes peuvent être définis. Le plus important est HISTSIZE:

[trainee@centos ~]$ cat /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
...
HOSTNAME=`/bin/hostname 2>/dev/null`
HISTSIZE=1000
...
unset pathmunge

Vous noterez que dans le cas précédent, la valeur de HISTSIZE est de 1000. Ceci implique que les dernières mille commandes sont mémorisées.

Les commandes mémorisées sont stockées dans le fichier ~/.bash_history ou ~/ indique le répertoire personnel de l’utilisateur concerné :

[trainee@centos ~]$ nl .bash_history
...
203 vi script
204 echo "Entrez un nombre entier : "
205 read nombre
206 chmod u+x script
207 ./script
208 echo "Entrez un nombre entier : "
209 read nombre
210 exit 0
211 ls
212 ./script
213 vi script
Notez l’utilisation de la commandenlpour numéroter les lignes de l’affichage du contenu du fichier .bash_history.

La comparaison du contenu de ce fichier avec la sortie de la commande history démontre que les deux sont diffèrents. En effet, le fichier .bash_history ne contient pas les lignes 214 à 218 de la sortie de la commande history.

Les lignes 214et supérieures ne seront inscrites dans le fichier .bash_history qu’au moment de la fermeture du terminal dans lequel les commandes ont étaient saisies.

Copyright © 2012 FenestrOs.com. All Rights Reserved. Tous Droits Réservés.

Linux E-Learning
Accès gratuit pendant 1 mois aux leçons Système de Fichiers, Commandes de Base, l’Éditeur VI, Aide et Documentation et le Shell Bash. Cliquez ici pour plus d'informations ...
[Fermer la fenêtre]