Introduction au shell Bash.pdf
(
117 KB
)
Pobierz
Introduction au shell Bash/Jean Gourdin
Page 1 sur 9
Introduction au shell Bash
Le shell
Un interpréteur de commandes (le "shell", la coquille qui entoure le "noyau" du système) est un
programme qui sert d'intermédiaire entre l'utilisateur et le système d'exploitation.
Sa tâche essentielle est l'exécution de programmes.
Pour cela, il effectue (en boucle infinie) :
la lecture d'une ligne
sa compréhension comme une demande d'exécution d'un programme avec d'éventuels paramètres.
le lancement de ce programme avec passage des paramètres
d'éventuelles redirections d'entrées-sorties
les exécutions de scripts (fichiers de commandes)
Démarrage du shell
Lors de la création de son compte, un utilisateur est associé à un type de
shell
Lire le fichier
/etc/passwd
: le dernier champ contient le nom du fichier exécutable (shell par
défaut)
/bin/bash
Le shell associé est ainsi lancé automatiquement dès la saisie du login utilisateur.
Il poursuit sa configuration en exécutant des scripts globaux à tous les utilisateurs et des
scripts liés au compte et qui permettent une personnalisation.
Enfin, il affiche le prompt et se met en attente de la lecture d'une commande.
Jusqu'à la commande
exit
, pour quitter le shell (ce qui équivaut à se déconnecter (logout))
Les scripts de connexion
1. d'abord le script
/etc/profile
communs à tous les users y compris
root
. On y trouve
notamment la définition de
umask
2. celui-ci cherche à exécuter tous les scripts
/etc/profile.d/*.sh
(parcourir
alias.sh
et
numlock.sh
)
3. puis il y a exécution de
$HOME/.bash_profile
(la variable $HOME contient le chemin vers le
répertoire personnel). Il s'agit ainsi d'un fichier de démarrage personnel et paramétrable.
4. A son tour il exécute
$HOME/.bashrc
dans lequel il est recommandé de placer toutes les
fonctions ou alias personnels (car
.bashrc
est exécuté dans tout shell)
5. Enfin le précédent script exécute
/etc/bashrc
, dans lequel on place les alias globaux et la
définition symbolique du prompt
$PS1
6. Puis le prompt utilisateur s'affiche et le shell attend une commande ...
Personnalisation des commandes bash
/etc/bashrc
étant le dernier script d'initialisation du shell bash,
root
peut y définir des alias
globaux pour tous les utilisateurs
Exemple avec
vi
(pour utiliser l'éditeur de Midnigth Commander lancer
mc
)
# vi /etc/bashrc
alias lll="ll | less"
alias x="startx"
alias m="mc"
:wq
(pour écrire dans le fichier et quitter vi)
file://C:\doc\introduction.au.shell.bash_j.gourdin.htm
04/04/2001
Introduction au shell Bash/Jean Gourdin
Page 2 sur 9
Puis se reloguer (
exit
) pour que ces nouvelles commandes soient prises en compte par le
nouveau shell.
Personnalisation du login utilisateur
Chaque utilisateur peut ajouter des commandes shell au fichier de profil personnel,
~/.bash_profile
Par exemple, voici ce que j'ai mis à la fin de ce fichier :
clear
salut="Bonjour $USER !\nJe te souhaite bon courage ...\n\
# le dernier \ pour pouvoir continuer la commande sur la ligne suivante
# $( ..) pour obtenir le résultat de l'exécution de la commande incluse
Nous sommes le $(date) "
# -e option indispensable pour interpréter les \n
echo -e $salut
Les variables d'environnement système
La liste en est accessible par la commande :
env
La commande
echo
permet d'obtenir la valeur d'une telle variable.
Par exemple :
echo
$PATH
,
echo
$USER
Ajout d'un nouveau chemin : attention à ne pas écraser la liste des chemins existants (
PATH
en
majuscules !)
PATH="$PATH:/home/jean/bin"
pour ajouter le chemin vers les exécutables du rép. personnel
(Attention ! pas d'espace
autour du symbole =)
PATH="$PATH :./"
pour toujours ajouter le répertoire courant (non présent par défaut)
La variable
$HOME
contient le chemin du rép. personnel.
La commande
cd $HOME
est abrégée en
cd
La variable
$USER
contient le nom de l'utilisateur
$SHLVL
donne le niveau du shell courant
Facilités de saisie des commandes
Comme les commandes Unix sont souvent longues à saisir, diverses facilités sont offertes :
Historique des commandes
Cette liste numérotée est accessible en tapant
history | less
Pour relancer la commande numéro
n,
saisir (sans espace)
!n
On peut aussi parcourir les précédentes lignes de commandes avec les flèches (comme
doskey)
et les
éditer. Ceci permet très facilement de reprendre une précédente commande pour l'éditer et la
modifier.
Le clic-droit
Dans un terminal console, sélectionner un texte quelconque. Un clic-droit recopie ce texte sur la
ligne de commande, même dans une autre console.
L'opérateur tilde
Le caractère tilde ~ (alt 126)
seul
renvoie au
rép. personnel
de l'utilisateur actuel.
Si l'user actif est toto, chaque occurrence du caractère ~ est remplacé par le chemin
/home/toto
file://C:\doc\introduction.au.shell.bash_j.gourdin.htm
04/04/2001
Introduction au shell Bash/Jean Gourdin
Page 3 sur 9
Le tilde ~ suivi d'un nom d'user, par ex jean, renvoie au
rép. personnel
de jean, c-à-d
/home/jean
Ainsi par cette commande
cd ~stagiaire3
tente en vain d'aller dans le rép.
/home/stagiaire3
TP 1
1. Personnaliser le script
.bash_logout
situé dans votre répertoire personnel pour que le contenu
du cache de Netscape soit effacé au moment de votre déconnexion
Puis comme
root
, compléter le script "modèle"
/etc/skel/.bash_logout
, afin que ce
"nettoyage" soit effectué pour tout nouvel utilisateur.
2. Expérimenter les "tab" et "clic-droit".
Saisir
echo -n "Bonjour $USER ! Nous sommes le "; date
Puis utiliser le "clic-droit" pour exécuter cette commande dans une autre console.
3. [root@pc5 /root]
cat > essai.txt
<Entr> envoie la saisie dans le fichier
Ceci est un essai tout simple !
<Entr>
mais tout-à-fait intéressant.
<Entr>
<CTRL-D>
caractère fin de fichier sous Linux
[root@pc5 /root]
cat essai.txt
envoie le contenu à la console
[root@pc5 /root] cp essai.txt ~jean copie le fichier dans /home/jean
Compléter une commande
Lorsqu'on tape une commande en ligne la touche
TAB
, l'interpréteur cherche à compléter le nom du
fichier.
home/toto ]$ less
/etc/fs
TAB
S'il y a plusieurs propositions, il y a attente d'un complément d'info de la part de l'utilisateur (avec un
"tut").
Un autre
TAB
et l'interpréteur affiche toutes les possibilités ou en indique le nombre, s'il y en a
beaucoup !
TP 2
$
cd /etc
<TAB>
there are 111 possibilities. Do you really wish to see them all ? (y or n)
$ cd /etc/s
<TAB>
security services smb.conf syslog.conf etc ..
$ cd /etc/sys<TAB>
# on tape y, le système complète s et ... attend
sysconfig syslog.conf syslog.conf.inn
$ cd /etc/sysc<TAB>
# on ajoute c, le système complète aussitôt à
sysconfig
$ cd /etc/sysconfig/
<Entr>
Exo : poursuivre ainsi jusqu'à afficher le contenu du fichier de configuration de l'interface
Ethernet
/etc/sysconfig/network-scripts/ifcfg-eth0
file://C:\doc\introduction.au.shell.bash_j.gourdin.htm
04/04/2001
Introduction au shell Bash/Jean Gourdin
Page 4 sur 9
Désigner un ensemble de fichiers
Travailler avec le shell nécessite souvent de manipuler des ensembles de fichiers. L'utilisation
de caractères spéciaux (appelés aussi
méta-caractères
) dans les noms de fichiers, permet de
générer des modèles pour désigner ces ensembles.
Il existe quatre constructeurs de modèles
*, ? , [] et ^
.
Modèle
*
?
[]
[^ ]
Signification
remplace une chaine de longueur qcq, même vide
remplace un seul caractère qcq
un caractère qcq de la liste ou de l'intervalle
n'importe quel caractère
sauf
ceux de la liste
Attention ! en raison de certaines ressemblances, ne pas confondre ces constructeurs
d'ensembles de fichiers avec les expressions rationnelles (utilisées par exemple dans
grep
ou
sed
)
Un modèle de la forme
X*Y
où X et Y sont 2 chaînes quelconques, éventuellement vides,
désigne l'ensemble des noms de fichiers de la forme
XZY
où Z est une chaîne quelconque elle
aussi éventuellement vide.
Un modèle de la forme
X?Y
désigne l'ensemble des noms de fichiers de la forme
XuY
, où u est
un seul caractère
Exemples
ll
ll
rm
cp
cp
/*/*.d
tous les fichiers d'un rép de / qui se terminent par .d
-d /home/*
tous les sous-répertoires de /home
*
attention ! commande dangereuse, supprime tout le rép courant !
/lib/modules/*/*/*.? /home/toto
toto copie tous les pilotes dans son ré
/home/stage? /root/tmp
Le modèle
[]
permet de sélectionner un élément de la liste ou de l'intervalle spécifié.
Le séparateur en ligne de commandede étant l'espace, aucun espace ne doit être mis au début
ou à la fin entre
[ ]
Plus précisément, un modèle de la forme
X [abc...z ]Y
où X et Y peuvent être vides,
désigne l'ensemble des noms de fichiers suivants:
XaY, XbY ... XzY
.
Dans le cas d'un suite ordonnée de caractères comme
abc ...z
, on peut utiliser la notation
intervalle
a-z
.
On peut mélanger les deux notations, comme dans
[a-z].[0-9]
, ensemble des fichiers a.0,
a.1, .., b.0 b.1 etc ...
Quelques exemples :
ll a*
ll [a-dA-D]*
liste les fichiers du rép. courant dont le nom commence par a, b, c ou d
minuscule ou majuscule (y compris les sous-rép.)
cp ventes1[00-50].xls /home/toto/bilan
copie tous les fichiers ventes100.xls
jusqu'à ventes150.xls
lpr ~toto/formation/plan9[345].html
imprime les 3 fichiers plan93.html,
plan94.html, ..
file://C:\doc\introduction.au.shell.bash_j.gourdin.htm
04/04/2001
Introduction au shell Bash/Jean Gourdin
Page 5 sur 9
TP 3
Etudier et commenter les commandes suivantes, en étant connecté
root
Commande
Signification de cette commande ? que remarquez vous ?
ll ~/m*
cd
ll *.*
ll *
ll *i*
ll [a-n]*
ll [an]*
ll [^an]* | less
ll *.*htm*
ll [a-z]*/*.pl
mkdir ~
où sont passés les autres fichiers ?
que viennent ici faire les répertoires ?
quelle différence ?
# lister tous les répertoires dont le nom commence par stage, avec une variable
user=stage
echo $user
ll -d home/$user*
Les commandes du shell
référence :
man bash
Analyse de la ligne de commande
Le shell commence par découper la ligne en mots séparés par des blancs.
Le premier mot attendu est le nom d'une commande. Les mots suivants sont considérés comme
des paramètres dont la "compréhension" incombe à la commande (ces paramètres ont-ils pour
la commande la signification d'options, de noms de fichiers, etc ...).
Donc la syntaxe à
appliquer aux paramètres dépend de la commande.
Voici un exemple : supposons les comptes
stagex
, x=1..9 déjà crées.
grep -n stage. /etc/passwd
La commande
grep
attend des options précédées de -, puis un
modèle (expression rationnelle) des chaines à chercher, et enfin un ensemble de fichiers où
elle doit chercher.
TP 4
grep -n sta /etc/passwd
--->
recherche dans le fichier
/etc/passwd
la sous-chaine
sta,
en indiquant les N° de lignes (option -n)
grep -nw sta /etc/passwd
--->
recherche ... (l'option -w impose la recherche d'un mot
entier, et pas d'une sous-chaine
grep -nw stage. /etc/passwd
---> recherche ...
grep -nw stage? /etc/passwd
---> quelle signification pour grep du ?
grep -nw stage? /etc/*
--->
grep -n ftp* /etc/rc.d/init.d/*
-->
file://C:\doc\introduction.au.shell.bash_j.gourdin.htm
04/04/2001
Plik z chomika:
musli_com
Inne pliki z tego folderu:
Guide avance d_ecriture des scripts Bash.pdf
(2467 KB)
Batch.pdf
(971 KB)
Cours_de_MS-DOS.pdf
(444 KB)
Commandes Bash sous Linux 2003.pdf
(214 KB)
Langage_scripts.pdf
(504 KB)
Inne foldery tego chomika:
batch
Zgłoś jeśli
naruszono regulamin