====== Aliases, couleur de prompt & co ======
Pour les users ayant bash comme shell (attention, avec squeeze le shell par défaut est dash, qui devrait réagir à peu près pareil, pas vérifié), le processus au login est le suivant
* /etc/profile (prompt $ ou #, ), qui source
* /etc/bash.bashrc (active notamment /etc/bash_completion)
* /etc/profile.d/*
* ~/.profile qui source
* ~/.bashrc (qui lui est aussi lu par les "non-login shell")
Mais attention, c'est **au login seulement** et pas au lancement de bash (qui lit alors seulement /etc/bash.bashrc et ~/.bashrc), donc si on veut que les commandes soient lancées à l'ouverture d'un nouveau terminal dans une session graphique, il faut le mettre dans un de ces deux fichiers, éventuellement avec un test ''if [ -n "$PS1" ] ...'' avant pour limiter les commandes à un shell interactif.
Attention aussi à ne pas faire de ''echo "Bonjour"'' dans un .bashrc pour les shell non interactifs qui n'apprécient guère (rsync marche plus par exemple), ce genre de chose irait plutôt dans un .profile pour l'afficher au login ssh, ou dans .bashrc avec un test sur le shell interactif.
Cf http://www.fam.tuwien.ac.at/~schamane/_/blog:110814_bash_shell_startup_files_in_debian_squeeze
===== ~/.profile =====
umask 022
# les variables d´environnement
export HISTSIZE=2500
export PATH="$PATH:/home/bin"
# dans une VM de base faut ajouter
export HISTFILE=~/.bash_history
# et on prend tous les params par défaut (surtout LC_ALL)
while read var
do
export $var
done < /etc/environment
# Pour le reste, on charge alias et prompt et complétion
if [ -f ~/.bash_prompt ]; then
. ~/.bash_prompt
fi
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Cf http://doc.ubuntu-fr.org/variables_d_environnement pour la liste des variables dispo
===== .bash_aliases =====
# on est jamais trop prudent, autant demander confirmation par défaut (taper /bin/cp pour revenir au comportement "normal")
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# alias perso
# dates
ts2date() { [ $# -lt 1 ] && echo "prend un timestamp comme argument" || date -d "1970-01-01 UTC +$1 seconds" "+%Y-%m-%d %H:%M:%S"; }
date2ts() { [ $# -lt 1 ] && echo "entrez une date comme argument (sous la forme 'YYYY-MM-DD' ou 'YYYY-MM-DD hh:mm' ou 'YYYY-MM-DD hh:mm:ss', etc.)" || date -d "$*" "+%s"; }
# gestion des paquets
alias apse='aptitude search'
apsi() { aptitude search ~i$1; }
alias apin='aptitude install'
alias apre='aptitude remove'
alias appu='aptitude purge'
alias apsh='aptitude show'
alias apud='aptitude update'
alias apug='aptitude safe-upgrade'
alias apwh='aptitude why'
alias apwn='aptitude why not'
alias apfs='apt-file search'
alias apfu='apt-file updtate'
alias apcp='apt-cache policy'
alias pkgr='dpkg -l|grep'; # liste des paquets dont le nom contient $1
alias pkl='dpkg -l'; # pour voir l´état local du paquet $1
alias pkL='dpkg -L'; # la liste des fichiers du paquet $1
# pour utiliser les backport
alias aplbin='aptitude install -t squeeze-backports'
alias aplbsh='aptitude show -t squeeze-backports'
alias aplbfs='apt-file search -t squeeze-backports'
alias aplbfu='apt-file updtate -t squeeze-backports'
alias aplbcp='apt-cache policy -t squeeze-backports'
# fichiers
# un peu de couleurs pour ls
export LS_OPTIONS='--color=auto'
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lAh'
alias la='ls $LS_OPTIONS -la'
# et pour les couleurs de fichiers suivant droits / extensions, on exporte LS_COLORS
eval "$(dircolors)"
ltr() { ls -altr $*|tail; }
# un cd qui accepte les fichiers
cdf() { [ -f "$1" ] && r="$(dirname "$1")" || r="$1"; cd "$r" ; }
alias chweb='chown -R www-data:www-data'
alias chdan='chown -R daniel:daniel' # évidemment à adapter avec vos users fréquemment utilisés
alias chmodstd='chmod -R a-r-w-x-s-t,a+r+X,u+w' # 644 pour les fichiers et 755 pour les dossiers
# et pour grep
alias grep='grep --color=auto'
# et les locales utf8 que awk n'aime pas trop
alias awk='env LANGUAGE=C LANG=C LC_ALL=C LC_NUMERIC=C awk'
# taille d´un rep (sans les éventuels autres filesystems montés dedans)
alias du1='du -schx'
alias du1m='du -scxm'
alias du1a='echo -e "Mo\tchemin"; du -camx --max-depth=1' # la liste du contenu d'un dossier, en Mo
du1A() { echo -e "Mo\tchemin"; du -camx --max-depth=1 $1 | sort -n -k 1; } # idem, triés
du1Ag() { du -camx --max-depth=1 $1 | sed -e "/^.[^0-9]/d; 1 i Mo\tchemin (< 10Mo non affichés)" | sort -n -k 1; } # idem > 9Mo
alias tf='tail -f'
alias t50='tail -n50'
alias h50='head -n50'
# liste un fichier sans les commentaires ni les lignes vides
alias catsc="sed -e '/^[ \t]*[#;]/d;/^[ \t]*\/\//d;/^[ \t]*$/d;' "
# affiche une tranche de fichier
cattr() { [ $# != 3 ] && echo "3 arguments requis (n° 1re ligne, n° dernière ligne, fichier)" || sed -ne "$1,$2 p;" $3; }
# pour lister tous les exemplaires uniques (on se fie à date et taille) d´un fichier
luf() {
tl=/tmp/luf.list;
locate "$1" > $tl;
while read f;
do
ls -l "$f";
done<$tl |awk '{
sp=" ";
if (NF>8) {
for(i=8;i<=NF;i++) {f=(f " " $i)}
} else {f=$8};
print $6 sp $7 sp $5 sp f
}' |sort -k 1,3 -u;
rm -f $tl;
}
# pour nettoyer les noms de fichiers
cleanfichname() { if [ $# -lt 1 ]
then
echo "Il faut au moins un argument (fichier(s) à traiter)"
else
rename 'y/A-Z/a-z/' $* # tout en minuscules
# sans accents ni espace
rename 'y/áàâäçéèêëíìîïñóòôöúùûü ÁÀÂÄÇÉÈÊËÍÌÎÏÑÓÒÔÖÚÙÛÜ/aaaaceeeeiiiinoooouuuu_aaaaceeeeiiiinoooouuuu/' $*
# et on remplace tout ce qui n´est pas lettre, chiffre, underscore, tiret, point par underscore
rename 's/[^a-z0-9_\-\.]/_/g' $*
# on vire les doubles underscores
rename 's/__/_/g' $*
# et ceux avant un point
rename 's/_\./\./g' $*
fi
}
# les logs
alias tme='tail -n30 /var/log/messages'
alias tsl='tail -n30 /var/log/syslog'
slgr() { [ $# -lt 1 ] && echo "prend un pattern en argument (pour grep sur syslog)" || grep $1 /var/log/syslog;}
# les derniers logs systeme modifiés
alias lvl='ls -ltr /var/log/ |tail';
# la fin d´un log systeme
tvl() { [ $# -lt 1 ] && echo "Il faut indiquer un fichier de /var/log/" || tail /var/log/$1; }
# les derniers logs web
alias lwa='ls -ltr /var/log/apache2/ |tail';
alias lwn='ls -ltr /var/log/nginx/ |tail';
alias lwp='ls -ltr /var/log/php5/ |tail';
# la fin d´un log
twa() { [ $# -lt 1 ] && echo "Il faut indiquer un log apache" || tail /var/log/apache2/$1; }
twn() { [ $# -lt 1 ] && echo "Il faut indiquer un log nginx" || tail /var/log/php5/$1; }
twp() { [ $# -lt 1 ] && echo "Il faut indiquer un log php" || tail /var/log/php5/$1; }
alias hi='history | tail -n30' # les 30 dernières commandes
alias higr='history | grep'
alias psf='ps auxwf'
alias psgr='ps auxw | grep'
# reseau
alias nst='netstat -tanpu'
alias nstgr='netstat -tanpu|grep'
# sous lenny, pas moyen de désactiver autoindent et wordwrap dans /etc/joe/joerc
# apparemment un bug...
alias joe='joe --autoindent --wordwrap'
# mysql avec user debian (seul root peut s´en servir car il faut les accès à /etc/mysql/debian.cnf)
alias sql='mysql --defaults-file=/etc/mysql/debian.cnf'
alias sqldump='mysqldump --defaults-file=/etc/mysql/debian.cnf'
alias sqlcheck='mysqlcheck --defaults-file=/etc/mysql/debian.cnf'
alias sqladmin='mysqladmin --defaults-file=/etc/mysql/debian.cnf'
# Pour mettre à jour les vm openvz (ici tmp en noexec sur le host)
apudall() { echo "Sur le host $(hostname) :"
aptitude update && aptitude safe-upgrade
for id in $(vzlist|awk '/^ *[0-9]+/ {print $1}')
do
echo -e "\n\nVM $id";
vzctl exec $id "aptitude update"
echo "Il faut lancer 'aptitude safe-upgrade' manuellement dans chaque vm (apug)"
echo "Pour éviter les 'dpkg-preconfigure: unable to re-open stdin'"
echo "que l'on obtient si on lance la commande directement depuis le host avec vzctl"
vzctl enter $id
done
echo -e "\nFIN"
}
# pour svn
svnc() {
if [ $# -lt 2 ] || [ -f "$1" ] || [ -d "$1" ]
then
echo "Le 1er argument doit être le commentaire"
else
com="$1"
shift
svn commit -m "$com" $@
fi
}
alias svnu='svn update'
alias svns='svn status'
alias svnd='svn diff'
alias svnl='svn log'
alias svnlv='svn log -v'
# un truc perso car 2 db locales
alias locatefull='locate -d /var/lib/mlocate/mlocate-full.db'
# en ayant modifié la fin de /etc/cron.daily/mlocate comme suit (pour avoir les deux bases)
# $IONICE /usr/bin/updatedb.mlocate --add-prunepaths /backup
# $IONICE -c3 /usr/bin/updatedb.mlocate --output /var/lib/mlocate/mlocate-full.db
# en desktop
alias gop='gnome-open'
alias xop='xdg-open'
===== .bash_prompt =====
Pour plus d'info, voir notamment http://jipe.homelinux.org/trucs_bash/prompt.html et son code pour tester les couleurs ftp://jipe.homelinux.org/Download/scripts/colors2 ou bien
for f in $(echo {30..39}); do for b in $(echo {40..49}); do echo -n -e "\e[0;$f;${b}m$f-$b\e[0m ";done;echo;done;
dans un fichier .bash_prompt (appelé par .bashrc)
# un prompt en couleur sur chaque machine, pour pas se gourer de serveur
# code et trucs à mettre dans le prompt sur http://www.trustonme.net/didactels/132.html
# et http://docs.mandragor.org/files/Misc/GLFM/lm33/Xterm_de_la_couleur.html
# et http://www.linuxfocus.org/Francais/May2004/article335.shtml
# valeur 1 : attribut
# 0 normal, 1 gras, 4 souligne, 5 clignotant, 7 inverse (et 21 non gras, 24 non souligne, 25 non clignotant, 27 non inverse)
# il y aurait aussi 2 pale, 3 en evidence?, 8 cache?
# valeur 2 : couleur du texte, valeur 3 : couleur du fond
# couleur txt fond
# Noir 30 40
# Rouge 31 41
# Vert 32 42
# Jaune 33 43
# Bleu 34 44
# Magenta 35 45
# Cyan 36 46
# Blanc 37 47 (plutot gris)
# Defaut 39 49
NOIR='\e[0;30m'
GRIS='\e[1;30m'
ROUGE='\e[0;31m'
ROSE='\e[1;31m'
VERT='\e[0;32m'
VERTC='\e[1;32m'
BRUN='\e[0;33m'
JAUNE='\e[1;33m'
BLEU='\e[0;34m'
BLEUC='\e[1;34m'
MAGENTAC='\e[0;35m'
MAGENTA='\e[1;35m'
CYAN='\e[0;36m'
CYANC='\e[1;36m'
GRISC='\e[0;37m'
BLANC='\e[1;37m'
DEFAUT='\e[0m'
HOSTCOLOR='\e[0;34;47m'; # bleu sur fond gris par exemple
#HOSTCOLOR='\e[1;33;46m'; # jaune/amande
#HOSTCOLOR='\e[1;32;45m'; # vert/violet
#HOSTCOLOR='\e[0;35;47m'; # magenta
# pour voir les combinaisons :
# for f in {40..47}; do for j in 0 1; do echo; for i in {30..37}; do echo -ne "\e[$j;$i;${f}m${j}-${i} test "; done;done;done;
# sur fond noir (40), on peut utiliser rouge (1;31), vert (1;32), jaune (1;33), bleu (1;34) violet (1;35), cyan (1;36) et blanc (1;37)
# sur fond rouge (41), c´est pas terrible mais peuvent passer vert (1;32), jaune (1;33), blanc (1;37)
# fond vert (42), noir (0;30), vert (1;32), jaune (1;33), blanc (1;37)
# fond moutarde (43), noir (0;30), rouge (0;31), blanc (1;37)
# fond bleu (44), noir (0;30), vert (1;32), jaune (1;33), bleu (1;34), mauve (1;35), cyan (1;36), blanc (1;37)
# fond violet potable avec noir (0;30) vert (1;32), jaune (1;33), bleu (1;34), cyan (1;36), blanc (1;37) ou gris (0;37)
# fond cyan/amande pas top hors jaune (1;33) et blanc (1;37)
# fond gris OK avec presque tout
USERCOLOR=$HOSTCOLOR
[ $USER == 'root' ] && USERCOLOR='\e[0;31;47m'; # rouge sur fond gris pour root
export PS1="$GRISC[$USERCOLOR\u@$HOSTCOLOR\h $BLANC: $HOSTCOLOR\w$GRISC - \#]#$DEFAUT\n"
# et pour les titres de console
case $TERM in
xterm*)
HOST=$HOSTNAME
# pour changer le titre dynamiquement
PROMPT_COMMAND='echo -ne "\033]0;${USER}@$HOST: ${PWD}\007"'
# pour initialiser le titre du term à la connexion
echo -ne "\033]0;${USER}@$HOST:${PWD}\007"
;;
*)
;;
esac
et d'une machine à l'autre je ne change que HOSTCOLOR.
Je précise la couleur de fond pour que ça marche avec des terminaux en blanc sur noir ou noir sur blanc (ou n'importe quoi d'autre).
===== Virer les bips dans xterm =====
echo "set bell-style none" >> ~/.inputrc
(merci à Edi Stojicevic)
===== /tmp en noexec =====
Dans /etc/apt/apt.conf, mettre par exemple
APT::ExtractTemplates::TempDir "/var/tmp";
cf http://www.debian-administration.org/articles/57
===== Personnalisations diverses =====
==== joe ====
Pour ma part, j'ajoute ''%%-nobackups%%'' et ''%%--autoindent%%'' (à la fin de la section 2) à /etc/joe/joerc (ou ~/.joerc, au choix). Il est possible d'annuler ce -nobackups pour certains fichiers (regex) et de préciser un path particulier pour les backups (rep courant avec suffixe ~ par défaut).
Par exemple, à la fin de la section 2, (mais les --autoindent et --wordwrap marchent pas sur ma lenny, d'où l'alias ci dessus)
Default local options
-highlight
-indentc 32
-istep 2
-spaces
--autoindent
--wordwrap
*.php
-autoindent
===== Pb compatibilité applis java / bureau 3D =====
Ajouter dans ~/.bash_profile ou dans /etc/environment (pour tous les users) ''export AWT_TOOLKIT=MToolkit'' pour que les applis java (myfreeTV par ex) s'affichent correctement avec un gestionnaire de bureau 3D.