Outils pour utilisateurs

Outils du site


linux:exemple_alias

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.
linux/exemple_alias.txt · Dernière modification: 2017/08/19 13:21 de pascal