Les fichiers de démarrage du shell Bash

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.

[Note]

Note

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é.

/etc/profile

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"
# Début de /etc/profile
# Écrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>
# modifications par Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>

# Variables d'environnement globales et programmes au démarrage

# Les aliases et les fonctions du système devraient être dans /etc/bashrc. 
# Les variables d'environnement personnelles et les programmes de démarrage 
# devraient être dans ~/.bash_profile. Les aliases et les fonctions personnelles
# devraient aller dans ~/.bashrc.

# Fonctions pour nous aider à gérer les chemins. Le deuxième argument est le nom
# de la variable de chemin à modifier (par défaut : 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"
}


# Réglage du path (chemin) initial
export PATH=/bin:/usr/bin

if [ $EUID -eq 0 ] ; then
        pathappend /sbin:/usr/sbin
        unset HISTFILE
fi

# Initialisation des variables d'environnement.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"

# Paramétrage d'un invite rouge pour root et d'un vert pour les utilisateurs.
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

# Pour nettoyer maintenant
unset pathremove pathprepend pathappend

# Fin de /etc/profile
EOF

Le répertoire /etc/profile.d

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

/etc/profile.d/dircolors.sh

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"
# Réglage pour que /bin/ls supporte les couleurs, l'alias est dans 
# /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

/etc/profile.d/extrapaths.sh

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

/etc/profile.d/readline.sh

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"
# Paramétrage de la variable d'environnement INPUTRC.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
        INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF

/etc/profile.d/umask.sh

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"
# Par défaut, on veut que umask soit paramétré.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
  umask 002
else
  umask 022
fi
EOF

/etc/profile.d/i18n.sh

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"
# Réglages des variables i18n
export LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Autres valeurs d'Initialisation

On peut facilement ajouter d'autres réglages à profile en ajoutant des scripts supplémentaires au répertoire /etc/profile.d.

/etc/bashrc

Voici un /etc/bashrc de base. Les commentaires dans ce fichier devraient vous expliquer tout ce dont vous avez besoin.

cat > /etc/bashrc << "EOF"
# Début de /etc/bashrc
# Écrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>
# mis à jour par Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Aliases et fonctions pour tout le système.

# Les aliases et les fonctions du système devraient être dans /etc/bashrc. 
# Les variables d'environnement personnelles et les programmes de démarrage 
# devraient être dans ~/.bash_profile. Les aliases et les fonctions personnelles
# devraient aller dans ~/.bashrc.

# Fournit une commande /bin/ls en couleurs. Utilisé avec le code dans
# /etc/profile.

alias ls='ls --color=auto'

# Invite pour les shells de non connexion, en particulier les shells
# démarrés dans l'environnement X. [Consultez le fil des archives de LFS 
# intitulé PS1 Environment Variable pour un superbe cas d'école derrière la
# modification de ce script.]

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

# Fin de /etc/bashrc
EOF

~/.bash_profile

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"
# Début de ~/.bash_profile
# Écrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>
# mise à jour par Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Les variables d'environnement personnel et les programmes de démarrage.

# Les aliases et les fonctions personnelles devraient aller dans ~/.bashrc.  
# Les variables d'environnement et les programmes de démarrage pour tout le 
# système devraient aller dans /etc/profile. Les aliases et les fonctions de tout
# le système sont dans /etc/bashrc.

append () {
  # Supprimer d'abord le répertoire
  local IFS=':'
  local NEWPATH
  for DIR in $PATH; do
     if [ "$DIR" != "$1" ]; then
       NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
     fi
  done

  # Puis créer le répertoire
  export PATH=$NEWPATH:$1
}

if [ -f "$HOME/.bashrc" ] ; then
  source $HOME/.bashrc
fi

if [ -d "$HOME/bin" ] ; then
  append $HOME/bin
fi

unset append

# Fin de ~/.bash_profile
EOF

~/.bashrc

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"
# Début de ~/.bashrc
# Écrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>


# Fonctions et aliases personnels.

# Les variables d'environnement et les programmes de démarrage personnels 
# devraient aller dans ~/.bash_profile.  Les variables d'environnement et les 
# programmes de démarrage pour tout le système devraient aller dans /etc/profile.
# Les aliases et les fonctions de tout le système sont dans /etc/bashrc.

if [ -f "/etc/bashrc" ] ; then
  source /etc/bashrc
fi

# Fin de ~/.bashrc
EOF

~/.bash_logout

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"
# Début de ~/.bash_logout
# Écrit pour Beyond Linux From Scratch
# par James Robertson <jameswrobertson@earthlink.net>

# Éléments personnels à traiter lors de la déconnexion.

# Fin de ~/.bash_logout
EOF

/etc/dircolors

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-06-12 04:55:33 +020