Niveau :      
Résumé : vi ~/.bashrc

Innovation : aujourd'hui c'est vous qui écrivez l'article.
Flash info : retrouvez le vimrc collaboratif

Il s'agit d'écrire un fichier .basrhc idéal avec toutes les fonctions et tous les alias qui vous semblent indispensables. Je commence par un minimum et par quelques choses que j'ai déjà écrites puis je rajouterai vos parties avec votre nom au fur et à mesure des commentaires.

Petite note sur le .bashrc : le fichier ~/.bashrc est lu par bash lorsqu'il est lancé en mode interactif (en gros à chaque nouveau terminal graphique et à chaque fois que vous tapez la commande bash sans paramètre). Lorsqu'on se connecte à une machine (en console ou pas ssh), le shell est lancé en mode login et il lit le .bash_profile à la place. Pour avoir un environnement commun dans tous les cas, je vous conseille d'ajouter les lignes suivantes dans votre .bash_profile

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Et si vous êtes dans un script ou un bash -c et que vous voudriez que le .bashrc soit pris en compte utilisez l'option -i

$ bash -i -c "ll"

Notez que si vous voulez avoir ces lignes disponibles pour l'ensemble des utilisateurs du système, écrivez les dans /etc/bash.bashrc

Notez aussi que debian par exemple propose de mettre tous les alias dans un fichier séparé : .bash_aliases

.bashrc

###################################################################

# ne rien faire en mode non interactif
[ -z "$PS1" ] && return

# ne pas mettre en double dans l'historique les commandes tapées 2x
export HISTCONTROL=ignoredups
# lignes de l'historique par session bash
export HISTSIZE=5000
# lignes de l'historique conservées
export HISTFILESIZE=20000
# supporte des terminaux redimensionnables (xterm et screen -r)
shopt -s checkwinsize

# une commande fréquemment utilisée
alias ll='ls -l'
# utilisation des couleurs pour certaines commandes
eval "`dircolors -b`"
alias ls='ls --color=auto'
alias grep='grep --color=auto'

# Interdire l'écrasement de fichier avec >
set -C

# affichage sympathique de la ligne de commande
PS1="[\t] \[\e[01;32m\]\u@\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[00m\]\$ "

# permettre une complétion plus "intelligente" des commandes (question de goût)
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

# lecture colorée de logs
logview()
{
    ccze -A < $1 | less -R
}

# lecture colorée de logs en directfunction logview()
logtail()
{
    tail -f $1 | ccze
}

###################################################################
# by Simon
##########

# Pour compter les mails non lus dans un maildir :
function cm {
    echo "Inbox: $(find -L ~/Maildir/  -type f -regex '.*/new/.*'| wc -l)" ;
}

# Utiliser vimdiff pour differ niveau mot des fichiers CVS :
# Usage : cvswdiff lefichier [-rVersion]
function cvswdiff {
    vimdiff $1 <(cvs co -p $2 $(cat $(dirname $1)/CVS/Repository)/$(basename $1)) ;
}

###################################################################
# by Schmurtz
#############

#Bien pratique pour ceux qui utilisent encore CVS, mais qui, heureusement, ont quand même quitté l'antique rsh :
export CVS_RSH=ssh

# Pour afficher user@host dans le titre de la fenêtre de terminal :
PROMPT_COMMAND='echo -ne "33]0;$(id -un)@$(hostname -s)07"'

# Pour définir l'éditeur par défaut utilisé par de nombreuses commandes (vipw, visudo, less, cvs, svn...) :
export EDITOR=nano # ou vim / emacs

# Pour ceux qui sont frileux (demande confirmation de chaque suppression ou écrasement) :
alias cp='cp -ip' # -p : conserve les dates, droits lors de la copie
alias mv='mv -i'
alias rm='rm -i'

# Pour utiliser des clefs ssh protégées par mot de passe, sans les retaper à chaque connexion (il faut alors utiliser sshk et scpk à la place de ssh et scp) :
if [[ -z "$SUDO_UID" && $UID -ne 0 ]]; then
    export SSH_AUTH_SOCK="/tmp/ssh-agent-$UID.socket"
    [[ -e "$SSH_AUTH_SOCK" ]] || ssh-agent -a $SSH_AUTH_SOCK -t 3000 > /dev/null
fi
alias ssh-add='ssh-add -t 3000' # une clé a une durée de vie de 50mn
sshk() { [[ "$(ssh-add -l)" == "The agent has no identities." ]] && ssh-add; ssh "$@"; }
scpk() { [[ "$(ssh-add -l)" == "The agent has no identities." ]] && ssh-add; scp "$@"; }

# Quelques paramètres pratiques :
alias ls='ls -AhF'
# -A : affiche aussi les fichiers commençant par un point
# -h : affiche la taille avec B/K/M/G;
# -F : affiche un caractère à la fin du nom indiquant le type de fichier
alias ll='ls -lo'
# -o : affiche les flags, pratique pour détecter les uchg (cf chflags(1))
alias chown='chown -h'
# -h : pour un lien, change le propriétaire/groupe du lien lui même

# Pour permettre de taper des caractères accentués dans le shell :
bind 'set convert-meta off'

###################################################################
# by Ebzao
##########

# utilisation de most (avec les couleurs) si disponible
export PAGER=`which most`
export PAGER=${PAGER:-less}

# Calendrier du mois en cours, en rouge le jour actuel
alias c='var=$(cal -m); echo "${var/$(date +%-d)/$(echo -e "\033[1;31m$(date +%-d)\033[0m")}"'

# Pour les gros doigts
alias cd..='cd ..'
alias grpe='grep'
alias mroe='more'
# d'autres par samybz
alias iv='vi'
alias tial='tail'
# d'autres par h0m3r
alias xs='cd'
alias vf='cd'
alias ..=' cd ..'

# Remonter d'un dossier et ls
alias u="cd .. && ls --color"

# Ne pas garder les trucs inutiles dans les logs (attention peut casser certaines habitudes)
export HISTIGNORE="cd:ls:[bf]g:clear"

# Correction automatique des petites typos
shopt -s cdspell

###################################################################
# by Chapi
##########

# Eviter d'eteindre un serveur par mégarde quand on part du boulot
alias halt="echo -e '\\n\\n\\nCa va pas non ? \\n\\n T es sur une becanne de prod mec !\\n\\n'"

# faire un diff rcs entre la version actuelle et la dernière automatiquement
function myrcsdiff {

  V=`rcsdiff $1 2>&1 | grep "^diff" | perl -pe 's/diff -r([d.]+) .*/$1/'`

  NB=`echo $V | cut -f2 -d"." | wc -c`
  NN=`expr $NB - 1`
  N1=`echo -e "scale=$NNn1/10^$NN"|bc -l`
  N2=`echo $V - $N1 | bc -l`
  echo $N2

  rcsdiff -r$N2 $1
}
###################################################################
# by Data
#########
alias du='du -h --max-depth=1'
alias dusort='du -x --block-size=1048576 | sort -nr'
alias df='df -h'

###################################################################
# by Julia
#########
## Mettre à jour sa distrib en quelques secondes (pour une SID assez marrant)
alias ap="apt-get update && apt-get upgrade && apt-get dist-upgrade && apt-get autoclean && apt-get clean && apt-get autoremove && debclean"

###################################################################
# by eric
#######
# ajouter ~/bin dans le PATH si celui-ci existe (indispensable)
if [ -d ~/bin ] ; then
  PATH=~/bin:"${PATH}"
fi

###################################################################
# by  h0m3r 
#########

alias most='most -ct3 -s'
alias grep=’egrep’ # Pour les regexp étendues
alias mm=’ll’
alias a=’alsamixer’
alias j=’jobs’
alias c=’clear’ # Parfois plus facile à atteindre que le ^L
alias vom=’vim’
alias cim=’vim’
alias p=’pwd’ # Pas de répértoire courant dans mon prompt (question de goûts) oblige.

###################################################################
# by  eric (http://blog.sietch-tabr.com/)
############################

# a utiliser avec des echo $_bold et echo $_normal
_bold=$(tput bold)
_normal=$(tput sgr0)

# imprime les infos du gestionnaire de version en cours
# si on en trouve un dans le pwd
__vcs_dir() {
    local vcs base_dir sub_dir ref
    sub_dir() {
        local sub_dir
        sub_dir=$(readlink -f "${PWD}")
        sub_dir=${sub_dir#$1}
        echo ${sub_dir#/}
    }
    # git
    git_dir() {
        base_dir=$(git rev-parse --show-cdup 2>/dev/null) || return 1
        if [ -n "$base_dir" ]; then
            base_dir=`cd $base_dir; pwd`
        else
            base_dir=$PWD
        fi
        sub_dir=$(git rev-parse --show-prefix)
        sub_dir="/${sub_dir%/}"
        ref=$(git symbolic-ref -q HEAD || git name-rev --name-only HEAD 2>/dev/null)
        ref=${ref#refs/heads/}
        vcs="git"
    }
    # subversion
    svn_dir() {
        [ -d ".svn" ] || return 1
        base_dir="."
        while [ -d "$base_dir/../.svn" ]; do
            base_dir="$base_dir/.."
        done
        base_dir=`cd $base_dir; pwd`
        sub_dir="/$(sub_dir "${base_dir}")"
        ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }')
        vcs="svn"
        alias pull="svn up"
        alias commit="svn commit"
        alias push="svn ci"
        alias revert="svn revert"
    }
    # mercurial
    hg_dir() {
        base_dir="."
        while [ ! -d "$base_dir/.hg" ]; do
            base_dir="$base_dir/.."
            [ $(readlink -f "${base_dir}") = "/" ] && return 1
        done
        base_dir=$(readlink -f "$base_dir")
        sub_dir="/$(sub_dir "${base_dir}")"
        ref=$(< "${base_dir}/.hg/branch")
        hgqtop=$(hg qtop)
        if [[ $hgqtop == 'No patches applied' ]]; then
            extra=""
        else
            extra=" >> $hgqtop"
        fi
        vcs="hg"
    }
    hg_dir || git_dir || svn_dir || base_dir="$PWD"
    echo "${vcs:+($vcs)}${_bold}${base_dir/$HOME/~}${_normal}${vcs:+[$ref]${_bold}${sub_dir}${_normal}$extra}"
}

# usage dans le prompt 
PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(__vcs_dir)\$ '

###################################################################

À vous ...