Le programme de shell /bin/bash
(auquel
on se référera ci-après sous le nom de « shell » utilise un ensemble
de fichiers de démarrage pour aider à la création d'un environnement.
Chaque fichier a une utilisation spécifique et il peut concerner
différemment la connexion et les environnements interactifs. Les
fichiers du répertoire /etc
fournissent
en général les paramètres globaux. Si un fichier équivalent existe
dans votre répertoire home, il peut remplacer les paramètres globaUx.
Un shell de connexion interactif démarre après une connexion réussie,
en utilisant /bin/login
, en lisant le
fichier /etc/passwd
. Cet appel du shell
lit normalement /etc/profile
et son
équivalent privé ~/.bash_profile
au
démarrage.
Un shell de non connexion interactif démarre normalement en ligne de
commande en utilisant un programme de shell (comme [prompt]$
/bin/bash) ou par la commande
/bin/su. Un shell de
non-connexion interactif démarre également avec un programme de
terminal tel que xterm
ou konsole depuis un
environnement graphique. Ce type d'appel de shell copie normalement
l'environnement parent puis lit le fichier ~/.bashrc
de l'utilisateur pour des instructions de
configuration de démarrage supplémentaires.
Un shell non interactif est présent en général lorsqu'un script shell s'exécute. Il n'est pas interactif car il exécute un script et n'attend pas d'entrée de l'utilisateur entre les commandes. Pour ces appels de shell, seul l'environnement hérité du shell parent est utilisé.
Le fichier ~/.bash_logout
n'est pas
utilisé pour un appel du shell. Il est lu et exécuté lorsqu'un
utilisateur quitte un shell de connexion interactif.
De nombreuses distributions utilisent /etc/bashrc
pour l'initialisation pour tout le
système de shells de non connexion. Ce fichier est en général appelé
depuis le fichier ~/.bashrc
de
l'utilisateur et il n'est pas construit directement dans bash lui-même. On suit cette
convention dans cette section.
Pour plus d'informations, voir info bash -- Nodes: Bash Startup Files et Interactive Shells.
La plupart des instructions ci-dessous sont utilisées pour créer
des fichiers qui se trouvent dans la structure de répertoires
/etc
, ce qui implique que vous
exécutiez les commandes en tant qu'utilisateur root
. Si vous optez plutôt pour la création des
fichiers dans le répertoire home de l'utilisateur, vous devriez
lancer les commandes en tant qu'utilisateur non privilégié.
Voici un /etc/profile
de base. Ce
fichier démarre en paramétrant des fonctions d'aide et quelques
paramètres de base. Il spécifie des paramètres d'historique de
bash et, pour des
raisons de sécurité, il désactive la conservation d'un fichier
d'historique permanent pour l'utilisateur root
. Il paramètre aussi un invite utilisateur
par défaut. Il appelle ensuite de petits scripts à finalité unique
dans le répertoire /etc/profile.d
pour fournir la plupart de l'initialisation.
Pour plus d'informations sur les séquences d'échappement que vous
pouvez utiliser pour votre invite (à savoir la variable
d'environnement PS1
) voir info bash -- Node: Printing a Prompt.
cat > /etc/profile << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>
# System wide environment variables and startup programs.
# System wide aliases and functions should go in /etc/bashrc. Personal
# environment variables and startup programs should go into
# ~/.bash_profile. Personal aliases and functions should go into
# ~/.bashrc.
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
# Set the initial path
export PATH=/bin:/usr/bin
if [ $EUID -eq 0 ] ; then
pathappend /sbin:/usr/sbin
unset HISTFILE
fi
# Setup some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"
# Setup a red prompt for root and a green one for users.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi
for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
# Now to clean up
unset pathremove pathprepend pathappend
# End /etc/profile
EOF
Maintenant créez le répertoire /etc/profile.d
, où sont mis les scripts
d'initialisation individuels :
install --directory --mode=0755 --owner=root --group=root /etc/profile.d
Ce script utilise les fichiers ~/.dircolors
et /etc/dircolors
pour contrôler les couleurs des
noms de fichiers dans la liste du contenu d'un répertoire. Ils
contrôlent la sortie en couleurs d'éléments tels que ls --color. L'explication de la
façon d'initialiser ces fichiers se trouvent à la fin de cette
section.
cat > /etc/profile.d/dircolors.sh << "EOF"
# Setup for /bin/ls to support color, the alias is in /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
eval $(dircolors -b /etc/dircolors)
if [ -f "$HOME/.dircolors" ] ; then
eval $(dircolors -b $HOME/.dircolors)
fi
fi
alias ls='ls --color=auto'
EOF
Ce script ajoute plusieurs chemins utiles aux variables
d'environnement PATH
et PKG_CONFIG_PATH
. Si vous le voulez, vous pouvez
décommenter la dernière section pour mettre un point à la fin de
votre chemin. Ceci permettra aux exécutables du répertoire de
travail actuel de s'exécuter sans spécifier de ./, mais soyez
averti que ceci est en général considéré comme un risque de
sécurité.
cat > /etc/profile.d/extrapaths.sh << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
pathprepend /usr/local/sbin
fi
if [ -d ~/bin ]; then
pathprepend ~/bin
fi
#if [ $EUID -gt 99 ]; then
# pathappend .
#fi
EOF
Ce script règle le fichier de configuration inputrc
par défaut. Si l'utilisateur n'a pas de
paramètres individuels, il utilise le fichier global.
cat > /etc/profile.d/readline.sh << "EOF"
# Setup the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF
Le paramétrage de la valeur umask est important pour la sécurité. Ici, les droits d'écriture par défaut du groupe sont désactivés pour les utilisateurs systèmes et quand le nom d'utilisateur et le nom du groupe ne sont pas les mêmes.
cat > /etc/profile.d/umask.sh << "EOF"
# By default, the umask should be set.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
umask 002
else
umask 022
fi
EOF
Ce script règle une variable d'environnement nécessaire au support des langues natives. Vous pouvez trouver un point complet sur la détermination de cette variable sur la page Fichiers de démarrage du shell bash de LFS page.
cat > /etc/profile.d/i18n.sh << "EOF"
# Set up i18n variables
export LANG=<ll>
_<CC>
.<charmap>
<@modifiers>
EOF
On peut facilement ajouter d'autres réglages à profile
en ajoutant des scripts supplémentaires
au répertoire /etc/profile.d
.
Voici un /etc/bashrc
de base. Les
commentaires dans ce fichier devraient vous expliquer tout ce dont
vous avez besoin.
cat > /etc/bashrc << "EOF"
# Begin /etc/bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
# System wide aliases and functions.
# System wide environment variables and startup programs should go into
# /etc/profile. Personal environment variables and startup programs
# should go into ~/.bash_profile. Personal aliases and functions should
# go into ~/.bashrc
# Provides a colored /bin/ls command. Used in conjunction with code in
# /etc/profile.
alias ls='ls --color=auto'
# Provides prompt for non-login shells, specifically shells started
# in the X environment. [Review the LFS archive thread titled
# PS1 Environment Variable for a great case study behind this script
# addendum.]
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi
# End /etc/bashrc
EOF
Voici un ~/.bash_profile
de base. Si
vous voulez que chaque nouvel utilisateur ait automatiquement ce
fichier, renvoyez seulement la sortie de la commande vers
/etc/skel/.bash_profile
et vérifiez
les droits après l'exécution de la commande. Vous pouvez alors
copier /etc/skel/.bash_profile
dans
les répertoires home des utilisateurs existant, y compris celui de
root
, et réglez comme il faut le
propriétaire et le groupe d'appartenance.
cat > ~/.bash_profile << "EOF"
# Begin ~/.bash_profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>
# Personal environment variables and startup programs.
# Personal aliases and functions should go in ~/.bashrc. System wide
# environment variables and startup programs are in /etc/profile.
# System wide aliases and functions are in /etc/bashrc.
append () {
# First remove the directory
local IFS=':'
local NEWPATH
for DIR in $PATH; do
if [ "$DIR" != "$1" ]; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
# Then append the directory
export PATH=$NEWPATH:$1
}
if [ -f "$HOME/.bashrc" ] ; then
source $HOME/.bashrc
fi
if [ -d "$HOME/bin" ] ; then
append $HOME/bin
fi
unset append
# End ~/.bash_profile
EOF
Voici un ~/.bashrc
de base. Les
commentaires et les instructions d'utilisation de /etc/skel
pour .bash_profile
ci-dessus s'appliquent aussi ici.
Seuls les noms de fichiers cibles sont différents.
cat > ~/.bashrc << "EOF"
# Begin ~/.bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# Personal aliases and functions.
# Personal environment variables and startup programs should go in
# ~/.bash_profile. System wide environment variables and startup
# programs are in /etc/profile. System wide aliases and functions are
# in /etc/bashrc.
if [ -f "/etc/bashrc" ] ; then
source /etc/bashrc
fi
# End ~/.bashrc
EOF
C'est un ~/.bash_logout
vide qui peut
être utilisé comme modèle. Vous remarquerez que le ~/.bash_logout
de base n'inclut pas de commande
clear
. Ceci car le
vidage se gère dans le fichier /etc/issue
.
cat > ~/.bash_logout << "EOF"
# Begin ~/.bash_logout
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# Personal items to perform on logout.
# End ~/.bash_logout
EOF
Si vous utilisez la possibilité dircolors
, lancez la commande suivante. Les
étapes de paramétrage de /etc/skel
indiquées ci-dessus peuvent être utilisées ici pour avoir un
fichier ~/.dircolors
lors du réglage
d'un nouvel utilisateur. Comme tout à l'heure, envoyez simplement
le nom du fichier sorti vers la commande suivante et assurez-vous
que les droits, le propriétaire et le groupe conviennent aux
fichiers créés et/ou soient copiés.
dircolors -p > /etc/dircolors
Si vous souhaitez personnaliser les couleurs utilisées pour
différents types de fichiers, vous devez éditer le fichier
/etc/dircolors
. Les instructions pour
régler les couleurs sont comprises dans le fichier.
Enfin, Ian Macdonald a écrit un ensemble excellent de modèles et de bidouillages pour améliorer votre environnement de shell. Vous pouvez le lire en ligne sur http://www.caliban.org/bash/index.shtml.
Last updated on : 2012-12-19 20:57:20 +010