logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:programmation:bash:config [16/02/2014 16:28]
MicP [Dépièçage d'un Script contenant des Alias] ajout en tête
doc:programmation:bash:config [16/08/2023 01:05] (Version actuelle)
Switch [Configuration utilisateur] ajout image exemple prompt coloré
Ligne 1: Ligne 1:
-====== ​Dépièçage d'un Script contenant des Alias ====== +====== ​Bash, découverte avancée ​====== 
-LOL + 
-  * Objet : script alias +  * Objet : Comprendre à quoi servent les différentes configurations de bash 
-  * Niveau requis : {{tag>​débutant}} +  * Niveau requis : {{tag>​débutant ​avisé}} 
-  * Commentaires : //Dépièçage ​d'un Script contenant des [[:​doc:​programmation:​bash:​alias|Alias]]. //+  * Commentaires : //Bash possède bon nombre ​d'options et de fichiers de configurationsComment comprendre tout ça ?//
   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
-  * Suivi : {{tag>​à-corriger}} +  * Suivi : {{tag>​à-compléter à-tester}} 
-    * Création par : **devpsp** 18/08/2010 15:05 +    * Création par : [[user>devpsp]] le 18/08/2010 15:05 
     * Testé par :     * Testé par :
-  * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=2867 Lien (temporaire) vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))FIXME +  * Commentaires sur le forum : [[https://​debian-facile.org/​viewtopic.php?​id=12294 ici]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
-===== Scripts existants dans ~/user ou /root =====+
  
-Il y a 4 fichiers cachés (cachéscar le nom du fichier commence par un point "''​.''"​)dans votre répertoire utilisateur (/home/user noté aussi simplement ~/) :+**Nota :** Contributeursles FIXME sont là pour vous aidersupprimez-les une fois le problème corrigé ou le champ rempli !
  
-  -.profile +===== Les scripts de configuration =====
-  -.bashrc +
-  -.bash_logout +
-  -.bash_history+
  
-Ce sont des fichiers de script ​''​shell'', ​permettant de définir l'environnement de l'interface en ligne de commande.+Bash possède comme la plupart des logiciels ​des fichiers de configuration globaux à tout le système, rangés dans ''​/etc'' ​et des fichiers personnelsfichiers 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 ​se trouvent ici +Les scripts concernant tous les utilisateurs du système ​sont les suivants 
-  */​etc/​profile +  * /​etc/​profile 
-  */​etc/​bash.bashrc+  * /​etc/​bash.bashrc
  
 +Les fichiers de configuration personnels sont les suivants
  
 +  * ''​.bash_profile''​ ou ''​.bash_login''​ ou ''​.profile''​
  
 +  * ''​.bashrc''​
  
-===== Localisation des scripts dans l'arborescence du système de fichiers=====+  * ''​.bash_logout'​'
  
-Les chemins d'accès sont déclarés dans le fichier ​''/​etc/​profile''​+  * ''​.bash_history''​
  
-  ​Pour les utilisateurs : /​usr/​local/​bin:/​usr/​bin:/​bin:/​usr/​games +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''​.
-  ​Pour les administrateurs : /​usr/​local/​sbin:/​usr/​local/​bin:/​usr/​sbin:/​usr/bin:/sbin:/bin+
  
-**/etc/profile** concerne tous les utilisateurs :+ ​S'​il ne trouve pas ce dernier, il essaye d'​interpréter le fichier ''​~/.bash_login'',​ et à défaut tente le fichier ''​~/.profile''​.
  
-Pour visualiser ​le fichier ''/​etc/​profile'' ​de votre installationentrez la commande : +Il est possible de simuler un shell de login en tapant 
-<code user>​cat ​/​etc/​profile</​code>​ +<code user>​bash -l</​code>​ 
-<file bash /​etc/​profile> + 
-/etc/profilesystem-wide .profile file for the Bourne shell (sh(1)) +Au lancement d'un shell non-interactif,​ c'​est ​le fichier ''/​etc/​bash.bashrc'' ​qui est lusuivi de ''​~/​.bashrc''​. 
-# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).+ 
 + 
 +===== 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
  
-if [ "`id -u`" -eq 0 ]; then+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"​   PATH="/​usr/​local/​sbin:/​usr/​local/​bin:/​usr/​sbin:/​usr/​bin:/​sbin:/​bin"​
 else else
   PATH="/​usr/​local/​bin:/​usr/​bin:/​bin:/​usr/​local/​games:/​usr/​games"​   PATH="/​usr/​local/​bin:/​usr/​bin:/​bin:/​usr/​local/​games:/​usr/​games"​
 fi fi
-export PATH+export PATH</​file>​
  
-if [ "​$PS1"​ ]; then+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 [ "​$BASH"​ ] && [ "​$BASH"​ != "/​bin/​sh"​ ]; then
-    # The file bash.bashrc already sets the default PS1. 
-    # PS1='​\h:​\w\$ ' 
     if [ -f /​etc/​bash.bashrc ]; then     if [ -f /​etc/​bash.bashrc ]; then
       . /​etc/​bash.bashrc       . /​etc/​bash.bashrc
Ligne 63: Ligne 82:
     fi     fi
   fi   fi
-fi+fi</​file>​ 
 +Dans le cas contraire, il définit les prompts minimaux pour root et pour les utilisateurs. 
 + 
 +=== Chargement des configurations externes ===
  
-# The default umask is now handled by pam_umask.+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. # See pam_umask(8) and /​etc/​login.defs.
  
Ligne 75: Ligne 98:
   done   done
   unset i   unset i
-fi +fi</​file>​
-</​file>​+
  
 +==== Le fichier ''/​etc/​bash.bashrc''​ ====
 +FIXME
  
-Ici 4 chemins sont indiqués, séparés par le caractère "'':''"​. \\ +===== Configuration utilisateur =====
-Vous pouvez les utiliser ainsi :+
  
-  */​usr/​local/​bin : Vos premiers script à mettre ici pour votre système local (pleins de petits ​scripts) +Ces scripts ​ne concernent que l'​utilisateur dans le dossier personnel duquel ils se trouvent. ​ 
-  ​*/​usr/​bin : ici pour les scripts avancés, pour d'​autres utilisateurs (des scripts avec des menus) +Ce sont des fichiers cachésleur nom débute ​avec un point.
-  */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...+
  
-===== Scripts dans le /home/user =====+Mais si vous utilisez simplement [[:​doc:​systeme:​ls |la commande "​ls"​]] ainsi : 
 +<code user>​ls</​code>​ 
 +Vous obtenez : 
 +<file config retour de la commande>​ 
 +2010-02-26--10.13.22 ​          ​fstab ​            ​phpmyadmin.png 
 +caisse_060810.ods ​             gparted1.png ​     resilier-sfr 
 +commande_sed1.txt ​             liste-mail ​       RMLL_2.m4v 
 +commande_sed2.txt ​             konversation ​     scripts_user 
 +debian-504-i386-netinst.iso ​   listecamera_site ​ site_agen_100806.ods 
 +debian-facile-le-magazine.pdf ​ liste_site.ods ​   site_agen_100809.ods 
 +default ​                      
 +.../...</file>
  
-Ces scripts ne concernent que l'​utilisateur (/home/**user**). Où user est votre **login**.\\  +Ce sont vos fichiers simples présents dans votre //home//. \\ 
-Ce sont des fichiers cachés, leur nom débute ​avec un point.+Mais avec son option ''​-l''​ ainsi : 
 +<code user>ls -a</​code>​ 
 +vous verrez en plus __tous les fichiers cachés__ : 
 +<file config retour de la commande>​ 
 +                             ​.gnome2_private ​      ​nfs-df.odt 
 +..                             ​.gnupg ​               .openoffice.org 
 +2010-02-26--10.13.22 ​          ​gparted1.png ​         .openoffice.org2 
 +.aptitude ​                     .gstreamer-0.10 ​      ​out.ogv 
 +.../​...</​file>​
  
-==== .profile ====+==== ~/​.bash_profile,​ ~/​.bash_login et ~/.profile ====
  
-''​.profile'' ​(//avec un point devant !//) est le fichier qui est interprété au lancement de la console.+On voit que le fichier ​''​~/.bash_profile'' ​par défaut ne fait rien d'​autre que charger ​le ''​~/​.bashrc''​.
  
-Pour afficher votre propre fichier, tapez : +<file bash ~/​.bash_profile>if [ -f ~/.bashrc ]; then 
-<code user> +    ​. ​~/.bashrc 
-cat ~/.profile +fi</file
-  # ​~/.profile: executed by the command interpreter for login shells. + 
-  # This file is not read by bash(1)if ~/.bash_profile or ~/.bash_login +De mêmele ''​~/.profile''​ par défaut vérifie que le shell est bien bash, puis interprète le ''​~/.bashrc''​
-  # exists+<​file ​bash ~/.profile>if [ -n "​$BASH_VERSION"​ ]; then 
-  # see /​usr/​share/​doc/​bash/examples/​startup-files for examples. +   ​# include .bashrc if it exists 
-  # the files are located in the bash-doc package. +  if [ -f "​$HOME/​.bashrc"​ ]; then 
-   +       ​. "​$HOME/​.bashrc"​
-  # 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   fi
-   +fi</file>
-  # set PATH so it includes user's private bin if it exists +
-  if [ -d "​$HOME/​bin"​ ] ; then +
-    PATH="​$HOME/​bin:​$PATH"​ +
-  ​fi +
-</code>+
  
-Ce fichier déclare ​au système : +Il vérifie en plus si le dossier ''​~/​bin''​ existe, et, le cas échéant, l'​ajoute ​au PATH. 
-  - un fichier (.bashrc dans votre /home/user) et +<file bash ~/.profile>​if [ -d "$HOME/bin" ] ; then 
-  ​- un chemin (répertoire ​/bin dans votre /home/user).+  ​PATH="​$HOME/bin:​$PATH"​ 
 +fi</file>
  
-C'est dans ce fichier (**/​home/​user/.bashrc**) ou dans les fichiers du répertoire **/​home/​user/​bin**) que seront interprétées les commandes saisies dans la console. \\ +==== ~/​.bashrc ​====
-Les principales commandes étant contenues dans le répertoire **/bin** de la racine.+
  
-==== .bashrc ​====+Le fichier ''​~/​.bashrc''​ est celui contenant la réelle configuration utilisateur de **bash**.
  
-Pour afficher votre propre fichier ​''​.bashrc'', ​tapez +=== Uniquement pour le mode interactif === 
-<code user>cat ~/​.bashrc</​code+Il commence par vérifier qu'il est bien lancé par un utilisateur et non interpréteur d'un script((via #​!/​bin/​bash)). Il s'​arrête si ça n'est pas le cas. 
-   +<code bash ~/.bashrc>case $- in 
-Voici le début du script ​+    *i*) ;; 
-<code+      *) return;; 
-  # ~/​.bashrc: ​executed by bash(1for non-login shells+esac</​code>​ 
-  see /usr/share/doc/bash/examples/startup-files (in the package ​bash-doc) + 
-  ​# for examples</code>+=== Historique === 
 + 
 +Les lignes suviantes concernent la configuration de l'historique de bash. 
 +<file bash ~/​.bashrc>​HISTCONTROL=ignoreboth 
 +shopt -s histappend 
 +HISTSIZE=1000 
 +HISTFILESIZE=2000</​file>​ 
 +Ici, l'historique ne stocke pas les doublonsconserve le précédent historique, mais le limite à 1000 lignes et 2ko. 
 + 
 +=== Taille du terminal === 
 +Il met à jour la les variables d'​environnement de taille du terminal
 +<file bash ~/.bashrc>shopt -s checkwinsize</​file>​ 
 + 
 +=== Chroot === 
 +Il définit la variable debian_chroot s'il trouve un fichier ''/​etc/​debian_chroot''​. Cette variable sera ensuite utilisée dans le prompt. 
 +<file bash ~/​.bashrc>​if [ -z "​${debian_chroot:​-}"​ ] && [ -r /​etc/​debian_chroot ]; then 
 +    debian_chroot=$(cat /​etc/​debian_chroot) 
 +fi</​file>​ 
 + 
 +=== Terminal en couleur === 
 +Il tente de déterminer par plusieurs moyens s'il s'agit d'un terminal couleur ou non : 
 +<file bash ~/.bashrc>case "​$TERM"​ in 
 +    xterm-color) color_prompt=yes;;​ 
 +esac 
 + 
 +#​force_color_prompt=yes 
 + 
 +if [ -n "​$force_color_prompt"​ ]; then 
 +    if [ -x /​usr/​bin/​tput ] && tput setaf 1 >&/​dev/​null;​ then 
 + color_prompt=yes 
 +    else 
 + color_prompt= 
 +    fi 
 +fi</file
 +Vous pouvez forcer la détection en décommentant ''#​force_color_prompt=yes''​. 
 + 
 +=== Prompt === 
 + 
 +Il définit ​le prompt suivant que le terminal soit en couleur ou non 
 +<file bash ~/.bashrc>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</​file>​ 
 + 
 +<note tip>Il est possible de configurer son prompt avec des éléments et des couleurs de votre choix. Il suffit de configurer la variable $PS1 vous même dans votre fichier de configuration .bashrc. Exemple :<file config nom> 
 +PS1='​\[\e]0;​\u@\h:​ \w\a\]${debian_chroot:​+($debian_chroot)}\[\033[01;​32m\]\u@\h\[\033[00m\]:​\[\033[01;​34m\]\w\[\033[00m\]\$'​ 
 +</​file> ​ {{/​file-R71cdd53a1ad2a7e72584f602d833b88e.png}} [[https://​www.howtogeek.com/​307701/​how-to-customize-and-colorize-your-bash-prompt/​|Article détaillant les codes couleurs et éléments possibles]] , ou un générateur de prompt en ligne, pratique : [[https://​ezprompt.net/​|https://​ezprompt.net/​]] </​note>​ 
 + 
 + 
 +=== Titre du terminal === 
 +Si le terminal est compatible xterm ou rxvt, il change le prompt de manière à changer le titre tu terminal. 
 +<file bash ~/​.bashrc>​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</​file>​ 
 + 
 + 
 + 
 + 
 +=== Alias === 
 + 
 +Les alias sont des outils très pratiques, voir [[:​doc:​programmation:​bash:​alias]] pour un description plus approfondie. 
 + 
 +Le fichier ''​~/.bashrc''​ commence par définir des alias colorés pour ls dans le cas d'un terminal coloré : 
 +<​file ​bash ~/​.bashrc>#​ 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</​file>​ 
 + 
 +Le fichier propose ensuite de définir quelques alias bien pratiques :​ 
 +<file bash ~/.bashrc># some more ls aliases 
 +#alias ll='ls -l' 
 +#alias la='ls -A' 
 +#alias l='ls -CF'<​/file> 
 + 
 +Enfin, si le fichier ''​~/.bash_aliases''​ existe, il l'​interprète :​ 
 +<file bash ~/.bashrc>​if [ -f ~/.bash_aliases ]; then 
 +    . ~/​.bash_aliases 
 +fi</​file>​ 
 + 
 +Aussi, si vous voulez définir des alias personnels, la méthode la plus propre et portable est de les définir dans un fichier ''​~/​.bash_aliases'',​ à créer. 
 + 
 +=== Autocomplétion === 
 + 
 +Bash tente enfin de charger [[:​doc:​programmation:​bash:​autocompletion|l'​autocomplétion]] si elle est disponible et souhaitable :​ 
 +<file 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</file>
   ​   ​
-Je n'ai pas mis tout le début du script (assez long, peu utile ici).+==== ''~/.bash_logout''​ ====
  
-Pas besoin de modifier ce qui y est déclaré... Éventuellement,​ vous y reviendrez ​ plus tard.+Le fichier ''​~/​.bash_logout''​ s'​occupe d'​effacer le terminal à la déconnexion :​ 
 +<file bash ~/.bash_logout>​ 
 +if [ "​$SHLVL"​ = 1 ]; then 
 +  [ -x /​usr/​bin/​clear_console ] && /​usr/​bin/​clear_console -q 
 +fi</​file>​
  
-**La suite du fichier nous intéresse...**\\ +==== ''​~/​.bash_history''​ ====
-Cette partie traite des alias (raccourcis) pour vous simplifier la vie, rechercher plus bas dans le fichiers les lignes suivantes :+
  
 +Contient tout [[:​doc:​programmation:​bash:​history]|l'​historique des commandes]] que vous avez saisies.
  
 +===== Voir aussi =====
 +  * [[doc:​programmation:​shells:​debuter-avec-les-scripts-shell-bash | Apprendre à rédiger des scripts sous bash]] ​
doc/programmation/bash/config.1392564536.txt.gz · Dernière modification: 16/02/2014 16:28 par MicP

Pied de page des forums

Propulsé par FluxBB