Table des matières
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";
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.