Ceci est une ancienne révision du document !
Table des matières
Alias
Le fichier
Ces alias sont écris pour être utilisés avec le shell bash.
- alias.sh
# navigation alias ..1='cd ..' alias ..2='cd ../..' alias ..3='cd ../../..' alias ..4='cd ../../../..' alias ..5='cd ../../../../..' alias ll='ls -l' alias la='ls -Al' # arch. switch alias prod='dir=`pwd | sed "s#/test#/prod#"`; if [ -d "$dir" ]; then cd "$dir"; fi' alias test='dir=`pwd | sed "s#/prod#/test#"`; if [ -d "$dir" ]; then cd "$dir"; fi' alias winX051='pwd | grep -qe "win[AX][0-9]\{3\}" -e "rheA[0-9]\{3\}"; if [ $? -eq 0 ]; then dir=`pwd | sed "s|/win[AX][0-9]\{3\}|/winX051|;s|/rheA[0-9]\{3\}|/winX051|"`; if [ -d "$dir" ]; then cd "$dir"; fi; else cd /data/winX051/prod; fi' alias winA052='pwd | grep -qe "win[AX][0-9]\{3\}" -e "rheA[0-9]\{3\}"; if [ $? -eq 0 ]; then dir=`pwd | sed "s|/win[AX][0-9]\{3\}|/winA052|;s|/rheA[0-9]\{3\}|/winA052|"`; if [ -d "$dir" ]; then cd "$dir"; fi; else cd /data/winA052/prod; fi' alias winA061='pwd | grep -qe "win[AX][0-9]\{3\}" -e "rheA[0-9]\{3\}"; if [ $? -eq 0 ]; then dir=`pwd | sed "s|/win[AX][0-9]\{3\}|/winA061|;s|/rheA[0-9]\{3\}|/winA061|"`; if [ -d "$dir" ]; then cd "$dir"; fi; else cd /data/winA061/prod; fi' alias rheA060='pwd | grep -qe "win[AX][0-9]\{3\}" -e "rheA[0-9]\{3\}"; if [ $? -eq 0 ]; then dir=`pwd | sed "s|/win[AX][0-9]\{3\}|/rheA060|;s|/rheA[0-9]\{3\}|/rheA060|"`; if [ -d "$dir" ]; then cd "$dir"; fi; else cd /data/rheA060/prod; fi' # snapshot switch (NetApp) alias snapin='pwd | grep -qe "/\.snapshot/\(hour\|night\|week\)ly\.[0-9]"; if [ $? -ne 0 ]; then s1=`pwd | cut -d/ -f-3`; s3=`pwd | cut -d/ -f4-`; dir="$s1/.snapshot/hourly.0/$s3"; if [ -d "$dir" ]; then cd "$dir"; fi; fi' alias snapout='pwd | grep -qe "/\.snapshot/\(hour\|night\|week\)ly\.[0-9]/"; if [ $? -eq 0 ]; then dir=`pwd | sed "s#/\.snapshot/\(hour\|night\|week\)ly\.[0-9]##"`; if [ -d "$dir" ]; then cd "$dir"; fi; fi' alias hourly='pwd | grep -qe "/\.snapshot/\(night\|week\)ly\.[0-9]/"; if [ $? -eq 0 ]; then dir=`pwd | sed "s#/\(night\|week\)ly.[0-9]#/hourly.0#"`; if [ -d "$dir" ]; then cd "$dir"; fi; fi' alias nightly='pwd | grep -qe "/\.snapshot/\(hour\|week\)ly\.[0-9]/"; if [ $? -eq 0 ]; then dir=`pwd | sed "s#/\(hour\|week\)ly.[0-9]#/nightly.0#"`; if [ -d "$dir" ]; then cd "$dir"; fi; fi' alias weekly='pwd | grep -qe "/\.snapshot/\(hour\|night\)ly\.[0-9]/"; if [ $? -eq 0 ]; then dir=`pwd | sed "s#/\(hour\|night\)ly.[0-9]#/weekly.0#"`; if [ -d "$dir" ]; then cd "$dir"; fi; fi' alias snap+='[[ `pwd` =~ (.*\.snapshot/(hour|night|week)ly\.)([0-9])(.*$) ]] && dir="${BASH_REMATCH[1]}$((BASH_REMATCH[3] + 1))${BASH_REMATCH[4]}"; if [ -d "$dir" ]; then cd "$dir"; fi' alias snap-='[[ `pwd` =~ (.*\.snapshot/(hour|night|week)ly\.)([0-9])(.*$) ]] && dir="${BASH_REMATCH[1]}$((BASH_REMATCH[3] - 1))${BASH_REMATCH[4]}"; if [ -d "$dir" ]; then cd "$dir"; fi' # add home to path echo $PATH | grep -q "<my_login>"; if [ $? -ge 1 ]; then PATH="${PATH}:/home/<my_login>"; fi # custom prompt export PS1="\n\w\n\u@\h \$ "
Explications du code
Partie 1 : navigation
Cette partie est assez basique et ne nécessite pas d'explications particulières.
Partie 2 : arch. switch
Petite explications sur la signification des codes :
win | A | 061 |
OS | architecture | version |
code | signification |
winX051 | Windows XP 32bit |
winA052 | Windows XP 64bit |
winA061 | Windows 7 64bit |
rheA060 | Red Hat Enterprise Linux 6.0 64bit |
Ces alias facilitent la navigation entre des répertoires qui ont la même structure.
Prenons pour exemple l'arborescence suivante :
+- data +- winA052 | +- prod | | +- soft1 | | | +- V12 | | +- soft3 | | +- V3 | | +- V4 | +- test | +- soft1 | +- V13 +- winA061 | +- prod | | +- soft2 | | +- V1 | +- test | +- soft2 | +- V2 +- winX051 | +- prod | +-soft1 | +-V12 +- rheA060 +- prod | +- soft2 | +- V1 +- test +- soft2 +- V2
ALIAS prod, test
Agissent comme une bascule : prod permet de passer de test vers prod et inversement pour test.
Pour naviguer de /data/winA052/prod/soft1
vers /data/winA052/test/soft1
la commande cd ../../test/soft1
ici est remplacée par l'alias test
.
alias test=' dir=`pwd | sed "s#/prod#/test#"`; if [ -d "$dir" ]; then cd "$dir"; fi'
sed remplace “prod” par “test” dans le répertoire courant (pwd)
si ce répertoire existe alors on fait un cd pour s'y rendre.
ALIAS winX051, winA052, winA061, rheA060
Si on veut passer de /data/winA061/prod/soft2/V1
vers /data/rheA060/prod/soft2/V1
l'alias rheA060
remplacera cd ../../../../rheA060/prod/soft2/V1
.
alias rheA060=' pwd | grep -qe "win[AX][0-9]\{3\}" -e "rheA[0-9]\{3\}"; if [ $? -eq 0 ]; then dir=`pwd | sed "s|/win[AX][0-9]\{3\}|/rheA060|; s|/rheA[0-9]\{3\}|/rheA060|"`; if [ -d "$dir" ]; then cd "$dir"; fi; else cd /data/rheA060/prod; fi'
grep recherche le code de l'architecture (winA061, …) dans le répertoire courant (pwd)
si grep a trouvé quelque chose alors sed remplace le code d'architecture par rheA060
si le répertoire existe on s'y rend avec cd
si rien a été trouvé par grep au premier test on se rend directement dans /data/rheA060/prod
.
Partie 3 : snapshot switch (NetApp)
Ces alias permettent de naviguer entre les snapshots.
Les snapshots étant à la racine des volumes et les volumes tous montés dans le même répertoire alors le dossier .snapshot sera donc toujours en troisième position /mnt/vol1/.snapshot/nightly.0/folders
.
ALIAS snapin, snapout
Permet d'entrer / sortir des snapshots, le principe est le même que les précédents alias.
Illustration d'utilisation
$ pwd /mnt/voldata1/projets/ABC123/test/archive $ snapin $ pwd /mnt/voldata1/.snapshot/hourly.0/projets/ABC123/test/archive
ALIAS hourly, nightly, weekly
Même principe, on navigue entre les snapshots hourly, nightly et weekly.
Illustration d'utilisation
$ pwd /mnt/voldata1/.snapshot/hourly.0/projets/ABC123/test/archive $ nightly $ pwd /mnt/voldata1/.snapshot/nightly.0/projets/ABC123/test/archive
ALIAS snap+, snap-
Toujours la même chose, on navigue en incrémentant ou décrémentant le snapshot dans lequel on est.
Illustration d'utilisation
$ pwd /mnt/voldata1/.snapshot/nightly.0/projets/ABC123/test/archive $ snap+ $ pwd /mnt/voldata1/.snapshot/nightly.1/projets/ABC123/test/archive
Mise en situation
Le but est de retrouver dans les snapshots un fichier qui a été effacé et qui se nomme “fichier_effacé.txt”
Les commandes sans l'utilisation des alias
$ pwd /mnt/voldata1/projets/ABC123/test $ cd ../../../.snapshot $ ls hourly.0 hourly.1 hourly.2 hourly.3 hourly.4 nightly.0 nightly.1 nightly.2 $ cd nightly.0/projets/ABC123/test $ ls fichier.txt $ cd ../../../../nightly.1/projets/ABC123/test $ ls fichier.txt fichier_effacé.txt $ cp fichier_effacé.txt /mnt/voldata1/projets/ABC123/test/ $ cd /mnt/voldata1/projets/ABC123/test/
La commande avec l'alias
$ pwd /mnt/voldata1/projets/ABC123/test $ snapin $ pwd /mnt/voldata1/.snapshot/hourly.0/projets/ABC123/test $ nightly $ pwd /mnt/voldata1/.snapshot/nightly.0/projets/ABC123/test $ ls fichier.txt $ snap+ $ pwd /mnt/voldata1/.snapshot/nightly.1/projets/ABC123/test $ ls fichier.txt fichier_effacé.txt $ cp fichier_effacé.txt /mnt/voldata1/projets/ABC123/test/ $ snapout $ pwd /mnt/voldata1/projets/ABC123/test
Explications des alias
alias snapin=' pwd | grep -qe "/\.snapshot/\(hour\|night\|week\)ly\.[0-9]"; if [ $? -ne 0 ]; then s1=`pwd | cut -d/ -f-3`; s3=`pwd | cut -d/ -f4-`; dir="$s1/.snapshot/hourly.0/$s3"; if [ -d "$dir" ]; then cd "$dir"; fi; fi'
- grep recherche par expressions régulières '/.snapshot/hourly.#' ou '/.snapshot/nightly.#' ou '/.snapshot/weekly.#' dans le répertoire courant (pwd
/mnt/voldata1/projets/ABC123/test
).
- si grep n'a rien trouvé alors
- cut découpe le répertoire courant en prenant le caractère '/' comme séparateur et ne garde que les 3 premiers champs (
/mnt/voldata1
) pour les stocker dans la chaîne 's1'.
- cut découpe le répertoire courant en prenant le caractère '/' comme séparateur et ne garde que les champs 4 et supérieurs (
projets/ABC123/test
) pour les stocker dans la chaîne 's3'.\\. - on crée une chaîne de caractère 'dir' dans laquelle on met 's1' + '/.snapshot/hourly.0/' + 's3'
- si ce dossier existe alors on s'y rend avec cd.
alias nightly=' pwd | grep -qe "/\.snapshot/\(hour\|week\)ly\.[0-9]/"; if [ $? -eq 0 ]; then dir=`pwd | sed "s#/\(hour\|week\)ly.[0-9]#/nightly.0#"`; if [ -d "$dir" ]; then cd "$dir"; fi; fi'
- grep recherche avec une expression régulière “/.snapshot/hourly.#” ou “/.snapshot/weekly.#” dans le répertoire courant 'pwd).
- si quelque chose est trouvé alors sed remplace “hourly.#” ou “weekly.#” par “nightly.0” dans le répertoire courant (pwd) et met le résultat dans la chaîne “dir”.
- si ce répertoire existe alors on s'y rend avec un cd.
alias snap+=' [[ `pwd` =~ (.*\.snapshot/(hour|night|week)ly\.)([0-9])(.*$) ]] && dir="${BASH_REMATCH[1]}$((BASH_REMATCH[3] + 1))${BASH_REMATCH[4]}"; if [ -d "$dir" ]; then cd "$dir"; fi'
- si bash trouve dans le répertoire courant (pwd) “.snapshot/hourly.#” ou “.snapshot/nightly.#” ou “.snapshot/weekly.#”
- et on crée une chaîne avec ce que bash a trouvé
- bash numérote ses variables en suivant les parenthèses ouvrantes '('
- ${BASH_REMATCH[1]} = (.*\.snapshot/(hour|night|week)ly\.) =
/mnt/voldata1/.snapshot/nightly.
- (BASH_REMATCH[3] = ([0-9]) = 0
- $1) = 0 + 1 = 1
- ${BASH_REMATCH[4]} = (.*$) = /projets/ABC123/test
- si le répertoire créé avec la chaîne “dir” existe alors on s'y rend avec un cd.