Personnaliser le shell bash : alias, historique, prompt
Table des matières
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.
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 :
Il est possible de saisir des alias dedans de la forme:
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.
Mettre à jour son système avec sudo sur une Gentoo en tapant maj :
Afficher les températures du système toutes les 2 secondes en tapant tt :
Voir les statistiques réseau d'une machine donnée
Il suffit par la suite d'appeler la commande via flic 10.0.0.1 par exemple.
D'autres alias que j'utilise :
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 :
Ainsi que HISTSIZE qui permet de définir le nombre de commandes dans l'historique :
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) :
Pour l'utilisateur root, on peut changer la couleur verte pour du rouge:
Si vous souhaitez un prompt tout simple mais coloré :
Pour root en rouge :
Ou pour les utilisateurs :
Pour harmoniser les prompts des utilisateurs, on peut créer ce script pour choisir la couleur en fonction de l'utilisateur (root ou non) :
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.
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 :
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.
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