Console

Personnaliser le shell bash : alias, historique, prompt

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction




Le shell (bash ou autre) est personnalisable via un fichier de configuration.

Pour BASH, il s'agit du fichier .bashrc. Il se situe dans le dossier /home/$USER/.bashrc. Il est lu à chaque ouverture de console par l'utilisateur $USER.

S'il n'est pas lu, vérifier que le fichier soit exécutable, et vérifier aussi la présence de .bash_profile qui doit contenir :

Code BASH :
# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi
 


Pour le shell CSH , il s'agit du fichier .cshrc. Il se situe dans le dossier /home/$USER/.cshrc. Il est lu à chaque ouverture de console par l'utilisateur $USER.

Après modification du fichier .bashrc, il faut relancer bash ou recharger le fichier :

Code BASH :
source ~/.bashrc


Avec BASH




Les alias avec BASH




Il est possible de saisir des alias dedans de la forme:

Code BASH :
alias code="commande"


Le but est de rajouter ses propres alias pour se simplifier l'utilisation quotidienne.

Il suffira de saisir l'alias pour lancer la commande associée.

Quelques exemples d'alias




Mettre à jour son système avec sudo sur une Gentoo en tapant maj :

Code BASH :
alias maj="sudo emerge -avquDN --with-bdeps=y @world"


Afficher les températures du système toutes les 2 secondes en tapant tt :

Code BASH :
alias tt="watch sensors"


Voir les statistiques réseau d'une machine donnée

Code BASH :
alias flic="nmap -v -Pn -A"


Il suffit par la suite d'appeler la commande via flic 10.0.0.1 par exemple.

D'autres alias que j'utilise :

Code BASH :
alias gg="ping google.fr"
alias log="tail -f /var/log/messages"


Personnalisation de l'historique



Il existe des variables HISTXXX qui permettent de personnaliser le comportement de la commande history.

Parmi ces variables, je modifie HISTTIMEFORMAT pour avoir un horodatage sur la date et heure d'exécution de la commande :

Code BASH :
HISTTIMEFORMAT="%F %T "


Ainsi que HISTSIZE qui permet de définir le nombre de commandes dans l'historique :

Code BASH :
HISTSIZE=5000




Personnalisation du prompt




Le prompt est personnalisable directement dans le .bashrc.

Pour afficher le prompt d'un utilisateur en vert, avec la date, on peut y ajouter ceci (c'est ma personnalisation, elle est à adapter selon vos cas) :

Code BASH :
PS1="\# \[\e[0;36m\][\t]\[\e[0;m\] \[\e[0;32m\]\u@\h\[\e[0;m\]: \[\e[1;35m\]\w\[\e[0;m\] \[\e[1;32m\] \\$\[\e[0;m\] "


Pour l'utilisateur root, on peut changer la couleur verte pour du rouge:

Code BASH :
PS1="\# \[\e[0;36m\][\t]\[\e[0;m\] \[\e[0;31m\]\u@\h\[\e[0;m\]: \[\e[1;35m\]\w\[\e[0;m\] \[\e[1;31m\] \\$\[\e[0;m\] "



Si vous souhaitez un prompt tout simple mais coloré :

Pour root en rouge :

Code BASH :
PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '


Ou pour les utilisateurs :

Code BASH :
PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '




Pour harmoniser les prompts des utilisateurs, on peut créer ce script pour choisir la couleur en fonction de l'utilisateur (root ou non) :

Code BASH :
if [[ ${EUID} == 0 ]] ; then
        #Prompt de root
else
        #Prompt de l'utiliateur
fi


Mettre ce morceau de code dans les fichers ~/.bashrc des utilisateurs concernés.

On peut aussi créer un script colorprompt.sh par exemple et le placer dans /etc/profile.d et le rendre exécutable. Il sera automatiquement exécuté à chaque ouverture de shell.


Avec CSH




Les alias avec CSH


Au travail, nous utilisons le shell CSH (Le C Shell).

Pour les alias, ça se passe un peu différemment au niveau de la syntaxe :

Code BASH :
alias nom "commande"




Mon fichier .bashrc




Code BASH :
HISTSIZE=5000
HISTTIMEFORMAT="%F %T "
########## ~/.profile doit exister et être exécutable avec :
#! /bin/bash
#if [ -n "$BASH_VERSION" ]; then
#    if [ -f "$HOME/.bashrc" ]; then
#        . "$HOME/.bashrc"
#    fi
#fi
#########
# MES RAJOUTS (A copier coller dans /root/.bash pour en bénéficier en root également)
#### ALIAS COMMANDE SYS ####
alias ls="ls --color"
alias grep="grep --color"
alias ll="ls -la"
alias lh="ls -lh"
alias la="ls -a"
alias igrep="grep -i"
##### ALIAS NESS ROOT ####
alias log="sudo tailf /var/log/messages | ccze -A"
alias maj="sudo cl-update -o"
alias maj2="FEATURES=\"-getbinpkg\" sudo cl-update -o"
alias swap="sudo swapoff -a && sudo swapon -a"
alias majsrv="cl-console --host oxygen.linuxtricks.fr --port 8888 --method update"
##### ALIAS SYSTEMES ####
alias gg="ping google.fr"
alias lspci="/usr/sbin/lspci"
alias cpu++="sudo cpupower frequency-set -u 3.2GHz"
alias cpu--="sudo cpupower frequency-set -u 1.2GHz"
alias cpu+-="sudo cpupower frequency-set -u 2.3GHz" 
##### ALIAS PERSOS ######
alias flic="nmap -v -Pn -A"
alias lst="ls -c1X"
alias ledon="sudo chmod a+rwx /sys/class/leds/asus\:\:kbd_backlight/brightness && echo 3 > /sys/class/leds/asus\:\:kbd_backlight/brightness"
alias ledoff="sudo chmod a+rwx /sys/class/leds/asus\:\:kbd_backlight/brightness && echo 0 > /sys/class/leds/asus\:\:kbd_backlight/brightness"
alias youtube2mp3="youtube-dl -t -x --audio-format mp3 --audio-quality 0"
alias youtube2mp4="youtube-dl -t -f mp4"
alias aix="export TERM=vt100; ssh aix"
alias lpar1="export TERM=vt100; ssh aix1"
alias shutdown="sudo shutdown"
alias FUN="mplayer -nocache http://streaming.radio.funradio.fr/fun-1-48-192"
alias FUNenr="mplayer -ao pcm:file=radio.wav -nocache http://streaming.radio.funradio.fr/fun-1-48-192"
alias CKOI="mplayer http://158.69.4.238:8000/cfel.mp3"
alias RYTHMEFM="mplayer http://142.4.207.11:8000/cfgl.mp3"
alias GARDANNE="mplayer http://radiart.eu:10097/stream"
alias GARDANNEenr="mplayer -ao pcm:file=radio.wav -nocache http://radiart.eu:10097/stream"
alias EURODANCE="mplayer http://91.121.59.45:8394/stream"
alias EURODANCEenr="mplayer -ao pcm:file=radio.wav -nocache http://91.121.59.45:8394/stream"
alias MFM="mplayer http://mfm.ice.infomaniak.ch/mfm-128.mp3"
alias musique="cd /media/DATA/Documents-Perso/Album-Musique"
alias pp="mplayer"
alias ppp="mplayer -shuffle"
alias testoptimus="primusrun glxspheres" 
alias data="cd /media/DATA"
alias pileface="shuf -i 0-1 -n 1"
alias screencast="ffmpeg -threads 0 -async 30 -f x11grab -s 1920x1080 -r 30 -i :0 -vcodec libx264 -preset superfast -crf 16 -f mp4 out.mp4"
alias screencastaudio="ffmpeg -threads 0 -async 30 -f alsa -i pulse -f x11grab -s 1920x1080 -r 30 -i :0 -vcodec libx264 -preset superfast -crf 16 -acodec libmp3lame -f mp4 out.mp4"
alias arc-en-ciel='yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .02; done'
alias tunnel1="ssh -L 5900:localhost:9999 o1"
alias tunnel="ssh -L 5900:localhost:9999 o"
alias assistance="x11vnc -many -rfbauth ~/.vnc_passwd -xkb"
alias mic-on="pactl load-module module-loopback"
alias mic-off="pactl unload-module module-loopback"
alias divia="/home/adrien/.adrien/divia-totem-parser/divia-totem-parser.pl -l=89 -a=666 ; /home/adrien/.adrien/divia-totem-parser/divia-totem-parser.pl -l=185 -a=1498"
alias genmanifest="DISTDIR=\"/tmp/adrien-overlay\" ebuild *.ebuild manifest"
alias webcam1="mplayer -tv driver=v4l2:gain=1:width=640:height=480:device=/dev/video1:fps=10:outfmt=rgb16 tv://"
##### FONCTIONS #####
ex ()
{
  if [ -f $1 ] ; then
    case $1 in
      *.tar.bz2)   tar xjf $1   ;;
      *.tar.gz)    tar xzf $1   ;;
      *.bz2)       bunzip2 $1   ;;
      *.rar)       unrar x $1     ;;
      *.gz)        gunzip $1    ;;
      *.tar)       tar xf $1    ;;
      *.tbz2)      tar xjf $1   ;;
      *.tgz)       tar xzf $1   ;;
      *.zip)       unzip $1     ;;
      *.Z)         uncompress $1;;
      *.7z)        7z x $1      ;;
      *)           echo "'$1' ne peut etre extrait par ex()" ;;
    esac
  else
    echo "'$1' fichier invalide"
  fi
}
# Random password generator (8 caractères par défaut)
genpasswd() {
date +%s | sha256sum | base64 | head -c$1 ;echo
}
###### PROMPT ######
if [ "$UID" -ge 500 ] ; then 
        PS1="\# \[\e[0;36m\][\t]\[\e[0;m\] \[\e[0;32m\]\u@\h\[\e[0;m\]: \[\e[1;35m\]\w\[\e[0;m\] \[\e[1;32m\] \\$\[\e[0;m\] " 
fi
if [ "$UID" -eq 0 ] ; then
        PS1="\# \[\e[0;36m\][\t]\[\e[0;m\] \[\e[0;31m\]\u@\h\[\e[0;m\]: \[\e[1;35m\]\w\[\e[0;m\] \[\e[1;31m\] \\$\[\e[0;m\] "
fi