Fichier .bashrc, alias et fonctions

Voici quelques alias ou fonction que j’utilise dans le fichier .bashrc ou .profile. Dans un terminal linux, un alias est une sorte de raccourcis permettant de créer des commandes personnelles. L’intérêt d’un alias est de regrouper dans une commande simple une commande ou un ensemble de commandes plus complexes ou comportant de nombreuses options que vous utilisez fréquement. Pour aller plus loin, les fonctions bash permettent de gérer les arguments de cette commandes personnelles.

# Alias basiques
alias ll='ls -lrth'
alias la="ls -a"
alias cp="cp -ip"
alias mv="mv -i"
alias clr="clear; pwd; ls -lrth"
alias le="less"
 
# une fonction pour faire un cd suivi d'un ls
function cl { 
    cd $* && ls 
}
 
alias vi="gvim -geometry 120x50"
alias orthographe="aspell -t check --lang=fr"
 
# fonction pour suivre une commande
function suivre { 
    gnome-terminal -e "watch -n1 $*" 
}
 
# cleantex, fonction pour nettoyer les fichiers output de latex
function cleantex {
    rm -vf $1.aux $1.log $1.out $1.bbl $1.toc $1.lof $1.lot $1.snm $1.nav $1.vrb $1.blg
}
 
# quelque options de compilation
alias gfcomp="gfortran -o exe -g -fbounds-check -fbacktrace -Wall"
alias ifcomp="ifort -o exe -g -traceback -check bounds -check uninit -warn unused"
alias compc="gcc -o exe -O1 -lm -W -Wall -Wuninitialized -fbounds-check "

Il est souvant pratique de faire des alias pour se connecter à diverses machines avec ssh. Une autre possibilité est l’utilisation de sshfs. Cette commande permet de monter un dossier d’une autre machine. Le montage est possible si la machine est accessible par ssh, il est donc inutile de faire un montage réseau. Vos fichiers de la machine distante sont alors accessible depuis votre machine locale comme s’il s’agissait d’une clef usb ou d’un dossier quelconque. Attention, je pense qu’il est quand même préférable que l’id utilisateur soit le même sur la machine distante et la machine locale si vous voulez écrire dans les fichiers de la machine distante.

# connexions ssh
alias machine="ssh -Y user@machine"
 
# montage ssh d'un dossier avec sshfs. Cette commande montera votre dossier 
# utilisateur de la machine distante sur le dossier machine de votre ordinateur
# local.
alias mntmachine="sshfs user@machine:/home/user/ /home/user/machine/"

La variable PATH contient la liste des dossiers dans lesquels se trouvent les exécutables. Si vous voulez installer des programmes ou scripts personnels, mettez les dans un dossier et ajoutez ce dossier à PATH.

# rajout d'un dossier dans le PATH.
export PATH=/home/user/bin/:$PATH

Pour pouvoir utiliser mes modules python n’importe où, je les ai tous mis dans un même dossier et les lignes suivantes ajoutent ces dossiers à la variable PYTHONPATH. Lors de l’importation d’un module, python cherche parmi les dossiers contenu dans PYTHONPATH s’ils contiennent ce module.

# python : recuperation des dossiers contenant les classes python
classDir="/home/user/Python/classes/"
liste=`ls $classDir`
monpath="$classDir:"
for dossier in $liste
do
	monpath="$classDir$dossier:$monpath"
done
export PYTHONPATH=$PYTHONPATH:$monpath

Pour la personnalisation du prompt

  • \e ou \033 sequence d’echappement pour les couleurs
  • \[ \] début et fin de texte non imprimable
  • format : [ format texte ; couleur1; couleur2 m

J’avais utlisé ce lien pour écrire les lignes ci-dessous : Mettez de la couleur dans votre prompt.

# prompt
PS1="\[\e[0;32m\]\n# \u@\h \[\e[1;33m\] \w\[\e[0m\]\n> "
 
# autre variante :
PS1="\[\e[0;34m\]\n# \u@\h \[\e[1;33m\] \w\[\e[0m\]\n> "
 
# sans couleur :
#PS1="[\u@\h \W]> "

Script de post-installation pour ubuntu

Voici un script bash dont je me sers lorsque je dois installer une série de paquets après une installation ou réinstallation toute fraiche d’Ubuntu. Ce script est assez simpliste, il installe simplement des paquets les uns après les autres préalablement enregistrés dans une liste. Pour l’écrire je me suis inspiré des nombreux autres scripts du même genre existant sur le web.

Comme tous ces scripts, il est bien entendu adapté à mon utilisation d’ubuntu. La première chose à faire pour l’adapter à vous est de supprimer les paquets qui ne vous intéressent pas et de rajouter les votre. Je ne prétend pas donner ici la liste des paquets indispensable.

Je vous met également en garde, étant donné que ce script doit être lancé avec les droits administrateur il est préférable de le comprendre avant de l’exécuter car il pourrait endommager votre machine.

#!/bin/bash
 
# Germain Vallverdu
# 15 Avril 2011
# <germain.vallverdu@univ-pau.fr>
 
# ----------------------------------------------------------------------------------------
# paquets disponnibles dans les dépots ubuntu
# ----------------------------------------------------------------------------------------
compilateur="build-essential gcc gfortran"
 
python="idle python-qt4 python-numpy python-scipy python-matplotlib pymol bpython python-profiler"
 
editeur="vim-gnome jabref poedit"
 
sciences="grace gnuplot gperiodic gchempaint mpich2"
 
video="vlc mozilla-plugin-vlc libdvdread4 ubuntu-restricted-extras cheese" 
 
son="audacity banshee-extension-alarm banshee-extension-jamendo tuxguitar"
 
graphisme="gimp inkscape povray"
 
latex="texlive texlive-lang-french texlive-latex-extra aspell-fr lyx"
 
divers="filezilla compizconfig-settings-manager acroread pdfsam conky"
 
# paquets à installer
paquets="$compilateur $python $editeur $sciences $video $son $graphisme $latex $divers"
 
# ----------------------------------------------------------------------------------------
# Options de apt-get pour l'installation des paquets
# ----------------------------------------------------------------------------------------
options="--auto-remove --yes -q"
 
# ----------------------------------------------------------------------------------------
# Test des droits administrateur
# ----------------------------------------------------------------------------------------
if [ $USER != "root" -o $UID != 0 ]
then
  echo "Ce script doit être exécuté en tant qu'administrateur (root)."
  echo "Placez sudo devant votre commande :"
  echo "sudo $0"
  echo "Abandon"
  exit 1
fi
 
echo "Assurez-vous d'avoir lu et compris le script avant de l'exécuter."
echo -n "Êtes-vous sûr de savoir ce que vous faites ? (o/n) "
read rep
if [ $rep != "o" ] && [ $rep != "oui" ] && 
   [ $rep != "y" ] && [ $rep != "yes" ]
then
  echo "Pour lire le script, entrez la commande suivante :"
  echo "gedit $0 &"
  exit 1
fi
 
# version d'ubuntu
version=`lsb_release -cs`
echo "* Ajout des dépots pour Ubuntu $version"
 
# ----------------------------------------------------------------------------------------
# ajouts de dépots
# ----------------------------------------------------------------------------------------
 
# partenaires
echo -e "\n* Canonical partners"
cp -v /etc/apt/sources.list /etc/apt/sources.list.bak
echo "sed \"s/# deb http\:\/\/archive.canonical.com/deb http\:\/\/archive.canonical.com/\" /etc/apt/sources.list > sources.list.new"
sed "s/# deb http\:\/\/archive.canonical.com/deb http\:\/\/archive.canonical.com/" /etc/apt/sources.list > sources.list.new
cp -v sources.list.new /etc/apt/sources.list
 
# medibuntu
echo -e "\n* Medibuntu"
wget http://www.medibuntu.org/sources.list.d/${version}.list --output-document=/etc/apt/sources.list.d/medibuntu.list
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -
apt-get -q update
apt-get --yes -q --allow-unauthenticated install medibuntu-keyring
 
codecs="non-free-codecs libdvdcss2"
 
# virtual box
echo "deb http://download.virtualbox.org/virtualbox/debian $version contrib" | sudo tee -a /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 98AB5139 
virtualbox=" virtualbox"
 
# wine
add-apt-repository ppa:ubuntu-wine/ppa
wine=" wine1.3"
 
paquets="$codecs $paquets $virtualbox $wine"
 
# ----------------------------------------------------------------------------------------
# mise à jour des sources de logiciels
# ----------------------------------------------------------------------------------------
echo -e "\napt-get -q clean"
apt-get -q clean
echo -e "\napt-get -q update"
apt-get -q update
echo -e "\napt-get -q --yes upgrade"
apt-get -q --yes upgrade
 
# ----------------------------------------------------------------------------------------
# installation des paquets
# ----------------------------------------------------------------------------------------
for paquet in $paquets
do
    echo -e "\n----------------------------------------------------------------"
    echo " INSTALLATION DE : $paquet"
    echo -e "----------------------------------------------------------------\n"
    apt-get $options install $paquet
done
 
# ----------------------------------------------------------------------------------------
# parametrage de libdvdread4
# ----------------------------------------------------------------------------------------
echo -e "\n----------------------------------------------------------------"
echo " parametrage de libdvdread4"
echo -e "----------------------------------------------------------------\n"
echo -e "/usr/share/doc/libdvdread4/install-css.sh\n"
/usr/share/doc/libdvdread4/install-css.sh
 
# ----------------------------------------------------------------------------------------
# nettoyage
# ----------------------------------------------------------------------------------------
echo -e "\n----------------------------------------------------------------"
echo " PURGE : apt-get -q --yes autoremove"
echo -e "----------------------------------------------------------------\n"
apt-get -q --yes autoremove