====== Alias ======
===== Le fichier =====
Ces alias sont écris pour être utilisés avec le shell //bash//.
# 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 "";
if [ $? -ge 1 ];
then
PATH="${PATH}:/home/";
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//.