Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format
PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:bash:config [18/08/2010 15:50] devpsp |
doc:programmation:bash:config [02/03/2014 14:52] captnfab |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Bash, découverte avancée ====== | ||
+ | |||
+ | * Objet : Comprendre à quoi servent les différentes configurations de bash | ||
+ | * Niveau requis : {{tag>débutant}} | ||
+ | * Commentaires : //Bash possède bon nombre d'options et de fichiers de configurations. Comment comprendre tout ça ?// | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
+ | * Suivi : {{tag>à-tester}} | ||
+ | * Création par : **devpsp** 18/08/2010 15:05 | ||
+ | * Testé par : | ||
+ | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=2867 | ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
+ | |||
+ | ===== Les scripts de configuration ===== | ||
+ | |||
+ | Bash possède comme la plupart des logiciels des fichiers de configuration globaux à tout le système, rangés dans ''/etc'' et des fichiers personnels, fichiers cachés((cachés: le nom du fichier commence par un point : « ''.'' », ils apparaissent avec un ''ls -a''.)) rangés dans le répertoire utilisateur (« ''~'' »). | ||
+ | |||
+ | Les scripts concernant tous les utilisateurs du système sont les suivants : | ||
+ | * /etc/profile | ||
+ | * /etc/bash.bashrc | ||
+ | |||
+ | Les fichiers de configuration personnels sont les suivants | ||
+ | |||
+ | * ''.bash_profile'' ou ''.bash_login'' ou ''.profile'' | ||
+ | * ''.bashrc'' | ||
+ | * ''.bash_logout'' | ||
+ | * ''.bash_history'' | ||
+ | |||
+ | Au lancement d'un shell de login (par exemple via ssh ou dans un tty), **bash** interprète le fichier ''/etc/profile'' s'il existe, puis le fichier ''~/.bash_profile''. S'il ne trouve pas ce dernier, il essaye d'interpréter le fichier ''~/.bash_login'', et à défaut tente le fichier ''~/.profile''. | ||
+ | |||
+ | Il est possible de simmuler un shell de login en tapant | ||
+ | <code user>bash -l</code> | ||
+ | |||
+ | Au lancement d'un shell non-interactif, c'est le fichier ''/etc/bash.bashrc'' qui est lu, suivi de ''~/.bashrc''. | ||
+ | |||
+ | |||
+ | ===== Configuration globale ===== | ||
+ | |||
+ | ==== Le fichier ''/etc/profile'' ==== | ||
+ | |||
+ | === PATH : Chemins contenant les exécutables === | ||
+ | Les chemins contenant les exécutables sont déclarés dans la variable d'environnement PATH via le fichier ''/etc/profile'' | ||
+ | |||
+ | * Pour les utilisateurs : /usr/local/bin:/usr/bin:/bin:/usr/games | ||
+ | * Pour l'administrateur : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||
+ | |||
+ | Voici l'extrait du ''/etc/profile'' définissant les PATH : | ||
+ | <file bash /etc/profile>if [ "`id -u`" -eq 0 ]; then | ||
+ | PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" | ||
+ | else | ||
+ | PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" | ||
+ | fi | ||
+ | export PATH</file> | ||
+ | |||
+ | Ici 4 chemins sont indiqués, séparés par le caractère "'':''". \\ | ||
+ | Vous pouvez les utiliser ainsi : | ||
+ | |||
+ | */usr/local/bin : Vos premiers script à mettre ici pour votre système local (pleins de petits scripts) | ||
+ | */usr/bin : ici pour les scripts avancés, pour d'autres utilisateurs (des scripts avec des menus) | ||
+ | */bin : ici il y en a déjà beaucoup, pour les scripts assurément finis (assez gros, avec des fonctions internes à vos scripts et aux autres) | ||
+ | */usr/games : il y en a déjà pas mal concernant les jeux... | ||
+ | |||
+ | === Chargement des options spécifiques à bash === | ||
+ | |||
+ | Le fichier ''/etc/profile'' vérifie ensuite d'il s'agit d'un shell bash interractif. Si c'est le cas, il charge les options globales spécifiques à //bash// (contenues dans ''/etc/bash.bashrc''). | ||
+ | |||
+ | <file bash /etc/profile>if [ "$PS1" ]; then | ||
+ | if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then | ||
+ | if [ -f /etc/bash.bashrc ]; then | ||
+ | . /etc/bash.bashrc | ||
+ | fi | ||
+ | else | ||
+ | if [ "`id -u`" -eq 0 ]; then | ||
+ | PS1='# ' | ||
+ | else | ||
+ | PS1='$ ' | ||
+ | fi | ||
+ | fi | ||
+ | fi</file> | ||
+ | Dans le cas contraire, il définit les prompts minimaux pour root et pour les utilisateurs. | ||
+ | |||
+ | === Chargement des configurations externes === | ||
+ | |||
+ | Enfin, ''/etc/profile'' charge les fichiers de configuration externes (potentiellement installés par l'utilisateur ou par d'autres paquets Debian), situés dans ''/etc/profile.d/'': | ||
+ | <file bash /etc/profile># The default umask is now handled by pam_umask. | ||
+ | # See pam_umask(8) and /etc/login.defs. | ||
+ | |||
+ | if [ -d /etc/profile.d ]; then | ||
+ | for i in /etc/profile.d/*.sh; do | ||
+ | if [ -r $i ]; then | ||
+ | . $i | ||
+ | fi | ||
+ | done | ||
+ | unset i | ||
+ | fi</file> | ||
+ | |||
+ | ==== Le fichier ''/etc/bash.bashrc'' ==== | ||
+ | FIXME | ||
+ | |||
+ | ===== Configuration utilisateur ===== | ||
+ | |||
+ | Ces scripts ne concernent que l'utilisateur dans le dossier personnel duquel ils se trouvent. | ||
+ | Ce sont des fichiers cachés, leur nom débute avec un point. | ||
+ | |||
+ | ==== ~/.bash_profile, ~/.bash_login et ~/.profile ==== | ||
+ | |||
+ | On voit que le fichier ''~/.bash_profile'' par défaut ne fait rien d'autre que charger le ''~/.bashrc''. | ||
+ | |||
+ | <file bash ~/.bash_profile># ~/.bash_profile: executed by bash(1) for login shells. | ||
+ | # see /usr/share/doc/bash/examples/startup-files for examples. | ||
+ | # the files are located in the bash-doc package. | ||
+ | |||
+ | # the default umask is set in /etc/login.defs | ||
+ | #umask 022 | ||
+ | |||
+ | # include .bashrc if it exists | ||
+ | if [ -f ~/.bashrc ]; then | ||
+ | . ~/.bashrc | ||
+ | fi</file> | ||
+ | |||
+ | De même, le ''~/.profile'' par défaut vérifie que le shell est bien bash, puis interprète le ''~/.bashrc''. | ||
+ | Il vérifie en plus si le dossier ''~/bin'' existe, et, le cas échéant, l'ajoute au PATH. | ||
+ | |||
+ | <file bash ~/.profile> | ||
+ | # ~/.profile: executed by the command interpreter for login shells. | ||
+ | # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login | ||
+ | # exists. | ||
+ | # see /usr/share/doc/bash/examples/startup-files for examples. | ||
+ | # the files are located in the bash-doc package. | ||
+ | |||
+ | # the default umask is set in /etc/profile; for setting the umask | ||
+ | # for ssh logins, install and configure the libpam-umask package. | ||
+ | #umask 022 | ||
+ | |||
+ | # if running bash | ||
+ | if [ -n "$BASH_VERSION" ]; then | ||
+ | # include .bashrc if it exists | ||
+ | if [ -f "$HOME/.bashrc" ]; then | ||
+ | . "$HOME/.bashrc" | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | # set PATH so it includes user's private bin if it exists | ||
+ | if [ -d "$HOME/bin" ] ; then | ||
+ | PATH="$HOME/bin:$PATH" | ||
+ | fi</file> | ||
+ | |||
+ | ==== ~/.bashrc ==== | ||
+ | |||
+ | Pour afficher votre propre fichier ''.bashrc'', tapez : | ||
+ | <code user>cat ~/.bashrc</code> | ||
+ | |||
+ | Que voici: | ||
+ | FIXME | ||
+ | <code bash ~/.bashrc># ~/.bashrc: executed by bash(1) for non-login shells. | ||
+ | # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) | ||
+ | # for examples | ||
+ | |||
+ | # If not running interactively, don't do anything | ||
+ | case $- in | ||
+ | *i*) ;; | ||
+ | *) return;; | ||
+ | esac | ||
+ | |||
+ | # don't put duplicate lines or lines starting with space in the history. | ||
+ | # See bash(1) for more options | ||
+ | HISTCONTROL=ignoreboth | ||
+ | |||
+ | # append to the history file, don't overwrite it | ||
+ | shopt -s histappend | ||
+ | |||
+ | # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) | ||
+ | HISTSIZE=1000 | ||
+ | HISTFILESIZE=2000 | ||
+ | |||
+ | # check the window size after each command and, if necessary, | ||
+ | # update the values of LINES and COLUMNS. | ||
+ | shopt -s checkwinsize | ||
+ | |||
+ | # If set, the pattern "**" used in a pathname expansion context will | ||
+ | # match all files and zero or more directories and subdirectories. | ||
+ | #shopt -s globstar | ||
+ | |||
+ | # make less more friendly for non-text input files, see lesspipe(1) | ||
+ | #[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" | ||
+ | |||
+ | # set variable identifying the chroot you work in (used in the prompt below) | ||
+ | if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then | ||
+ | debian_chroot=$(cat /etc/debian_chroot) | ||
+ | fi | ||
+ | |||
+ | # set a fancy prompt (non-color, unless we know we "want" color) | ||
+ | case "$TERM" in | ||
+ | xterm-color) color_prompt=yes;; | ||
+ | esac | ||
+ | |||
+ | # uncomment for a colored prompt, if the terminal has the capability; turned | ||
+ | # off by default to not distract the user: the focus in a terminal window | ||
+ | # should be on the output of commands, not on the prompt | ||
+ | #force_color_prompt=yes | ||
+ | |||
+ | if [ -n "$force_color_prompt" ]; then | ||
+ | if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then | ||
+ | # We have color support; assume it's compliant with Ecma-48 | ||
+ | # (ISO/IEC-6429). (Lack of such support is extremely rare, and such | ||
+ | # a case would tend to support setf rather than setaf.) | ||
+ | color_prompt=yes | ||
+ | else | ||
+ | color_prompt= | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | if [ "$color_prompt" = yes ]; then | ||
+ | PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | ||
+ | else | ||
+ | PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' | ||
+ | fi | ||
+ | unset color_prompt force_color_prompt | ||
+ | |||
+ | # If this is an xterm set the title to user@host:dir | ||
+ | case "$TERM" in | ||
+ | xterm*|rxvt*) | ||
+ | PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" | ||
+ | ;; | ||
+ | *) | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | # enable color support of ls and also add handy aliases | ||
+ | if [ -x /usr/bin/dircolors ]; then | ||
+ | test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | ||
+ | alias ls='ls --color=auto' | ||
+ | #alias dir='dir --color=auto' | ||
+ | #alias vdir='vdir --color=auto' | ||
+ | |||
+ | #alias grep='grep --color=auto' | ||
+ | #alias fgrep='fgrep --color=auto' | ||
+ | #alias egrep='egrep --color=auto' | ||
+ | fi | ||
+ | |||
+ | # some more ls aliases | ||
+ | #alias ll='ls -l' | ||
+ | #alias la='ls -A' | ||
+ | #alias l='ls -CF' | ||
+ | |||
+ | # Alias definitions. | ||
+ | # You may want to put all your additions into a separate file like | ||
+ | # ~/.bash_aliases, instead of adding them here directly. | ||
+ | # See /usr/share/doc/bash-doc/examples in the bash-doc package. | ||
+ | |||
+ | if [ -f ~/.bash_aliases ]; then | ||
+ | . ~/.bash_aliases | ||
+ | fi | ||
+ | |||
+ | # enable programmable completion features (you don't need to enable | ||
+ | # this, if it's already enabled in /etc/bash.bashrc and /etc/profile | ||
+ | # sources /etc/bash.bashrc). | ||
+ | if ! shopt -oq posix; then | ||
+ | if [ -f /usr/share/bash-completion/bash_completion ]; then | ||
+ | . /usr/share/bash-completion/bash_completion | ||
+ | elif [ -f /etc/bash_completion ]; then | ||
+ | . /etc/bash_completion | ||
+ | fi | ||
+ | fi</code> | ||
+ | | ||