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.#”
- bash numérote ses variables en suivant les parenthèses ouvrantes dans l'expression régulière
(.*\.snapshot/(hour|night|week)ly\.)([0-9])(.*$)
- et on crée une chaîne avec ce que bash a trouvé
- '${ }' sert à délimiter les variables et '$( )' sert à exécuter une commande.
${BASH_REMATCH[1]}$( (BASH_REMATCH[3] + 1) )${BASH_REMATCH[4]}
${BASH_REMATCH[1]}
=(.*\.snapshot/(hour|night|week)ly\.)
= “/mnt/voldata1/.snapshot/nightly.”BASH_REMATCH[3]
=([0-9])
= “0”$( (BASH_REMATCH[3] + 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.