Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
linux:exemple_alias [2017/08/18 23:13] – pascal | linux:exemple_alias [2017/08/19 13:21] (Version actuelle) – [Partie 3 : snapshot switch (NetApp)] pascal |
---|
| |
Agissent comme une bascule : //prod// permet de passer de //test// vers //prod// et inversement pour //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''. | 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''. |
| |
<code bash> | <code bash> |
</code> | </code> |
| |
//sed// remplace "prod" par "test" dans le répertoire courant (//pwd//)\\ | * //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. | * **si** ce répertoire existe **alors** on fait un //cd// pour s'y rendre. |
| |
=== ALIAS winX051, winA052, winA061, rheA060 === | === 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''. | 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''. |
| |
<code bash> | <code bash> |
fi' | fi' |
</code> | </code> |
//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\\ | * //grep// recherche le code de l'architecture (winA061, ...) dans le répertoire courant (//pwd//)\\ |
**si** le répertoire existe on s'y rend avec //cd//\\ | * **si** //grep// a trouvé quelque chose **alors** //sed// remplace le code d'architecture par rheA060\\ |
si rien a été trouvé par //grep// au premier test on se rend directement dans ''/data/rheA060/prod''. | * **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) ==== | ==== Partie 3 : snapshot switch (NetApp) ==== |
| |
Permet d'entrer / sortir des snapshots, le principe est le même que les précédents alias. | Permet d'entrer / sortir des snapshots, le principe est le même que les précédents alias. |
Exemple : | |
| == Illustration d'utilisation == |
| |
<code bash> | <code bash> |
$ pwd | $ pwd |
/mnt/voldata1/projets/ABC123/test/archive | /mnt/voldata1/projets/ABC123/test/archive |
$ cd ../../../../.snapshot | $ snapin |
$ ls -l | $ pwd |
| /mnt/voldata1/.snapshot/hourly.0/projets/ABC123/test/archive |
| </code> |
| |
| === ALIAS hourly, nightly, weekly === |
| |
| Même principe, on navigue entre les snapshots hourly, nightly et weekly. |
| |
| == Illustration d'utilisation == |
| |
| <code bash> |
| $ pwd |
| /mnt/voldata1/.snapshot/hourly.0/projets/ABC123/test/archive |
| $ nightly |
| $ pwd |
| /mnt/voldata1/.snapshot/nightly.0/projets/ABC123/test/archive |
| </code> |
| |
| === 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 == |
| |
| <code bash> |
| $ pwd |
| /mnt/voldata1/.snapshot/nightly.0/projets/ABC123/test/archive |
| $ snap+ |
| $ pwd |
| /mnt/voldata1/.snapshot/nightly.1/projets/ABC123/test/archive |
| </code> |
| |
| === 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 == |
| |
| <code bash> |
| $ 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 | hourly.0 hourly.1 hourly.2 hourly.3 hourly.4 nightly.0 nightly.1 nightly.2 |
$ cd hourly.1/projets/ABC123/test/archive | $ 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/ |
</code> | </code> |
| |
| == La commande avec l'alias == |
| |
<code bash> | <code bash> |
$ pwd | $ pwd |
/mnt/voldata1/projets/ABC123/test/archive | /mnt/voldata1/projets/ABC123/test |
$ snapin | $ snapin |
$ pwd | $ pwd |
/mnt/voldata1/.snapshot/hourly.0/projets/ABC123/test/archive | /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 | $ snapout |
$ pwd | $ pwd |
/mnt/voldata1/projets/ABC123/test/archive | /mnt/voldata1/projets/ABC123/test |
</code> | </code> |
| |
| == Explications des alias == |
| |
<code bash> | <code bash> |
</code> | </code> |
| |
//grep// recherche '/.snapshot/hourly.#' ou '/.snapshot/nightly.#' ou '/.snapshot/weekly.#' dans le répertoire courant (//pwd// ''/mnt/voldata1/projets/ABC123/test'').\\ | * //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**\\ | * **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 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'.\\. | * //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'\\ | * 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//. | * **si** ce dossier existe **alors** on s'y rend avec //cd//. |
=== ALIAS hourly, nightly, weekly === | |
=== ALIAS snap+, snap- === | <code bash> |
| 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' |
| </code> |
| |
| * //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//. |
| |
| <code bash> |
| 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' |
| </code> |
| |
| * **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\\ ''**<color #ed1c24>(</color>**.*\.snapshot/**<color #ed1c24>(</color>**hour|night|week)ly\.)**<color #ed1c24>(</color>**[0-9])**<color #ed1c24>(</color>**.*$)'' |
| * **et** on crée une chaîne avec ce que //bash// a trouvé |
| * '<color #00a2e8>${ }</color>' sert à délimiter les variables et '<color #22b14c>$( )</color>' sert à exécuter une commande.\\ ''<color #00a2e8>${</color>BASH_REMATCH[1]<color #00a2e8>}</color><color #22b14c>$(</color> (BASH_REMATCH[3] + 1) <color #22b14c>)</color><color #00a2e8>${</color>BASH_REMATCH[4]<color #00a2e8>}</color>'' |
| * ''<color #00a2e8>${</color>BASH_REMATCH[1]<color #00a2e8>}</color>'' = ''(.*\.snapshot/(hour|night|week)ly\.)'' = "/mnt/voldata1/.snapshot/nightly." |
| * ''BASH_REMATCH[3]'' = ''([0-9])'' = "0" |
| * ''<color #22b14c>$(</color> (BASH_REMATCH[3] + 1) <color #22b14c>)</color>'' = 0 + 1 = "1" |
| * ''<color #00a2e8>${</color>BASH_REMATCH[4]<color #00a2e8>}</color>'' = ''(.*$)'' = "/projets/ABC123/test" |
| * **si** le répertoire créé avec la chaîne "dir" existe **alors** on s'y rend avec un //cd//. |