sysadmin function bakup

Mis a jours le 12 Mar 2020 à 10:19 · 411 mots · Lecture en 2 minutes sysadmin function backup script shell

sysadmin function bakup

Dans les règles d’or de tout sysadmin il y a bien sûr la nécessité de mettre en œuvre une politique de backup complet des systèmes. Ce n’est pas le sujet de cet article !!! Il existe une bonne pratique pour garantir la traçabilité et la capacité de revenir sur une mauvaise manip.

Avant de modifier une fichier, il faut en faire une copie !!!

Alors c’est simple à première vue:

cp /etc/fstab /etc/fstab.bkp

Bon ça c’est la base :) Franchement ça aide dans bien des cas. On peut aller un peu plus loin et ajouter un horodatage.

cp /etc/fstab /etc/fstab-bkp200312002553

Pour ma part je me suis souvent demandé pourquoi personne n’avait écrit en cp avec cette fonction… Bien probablement car il y a les function en shell :)

Il faut juste la créer dans son environnement et le mettre dans son fichier $HOME/.bashrc

bkp (){ cp -a $1 $1-bkp$(date +"%y%m%d%H%M%S") ; }

On peut alors ensuite l’utiliser comme une commande classique

root@pi3:~> bkp (){ cp -a $1 $1-bkp$(date +"%y%m%d%H%M%S") ; }
root@pi3:~> bkp /etc/fstab
root@pi3:~> ls -l /etc/fstab*
-rw-r--r-- 1 root root 305 nov.  29 18:40 /etc/fstab
-rw-r--r-- 1 root root 305 nov.  29 18:40 /etc/fstab-bkp200312003354

Cool non!!!

Bien sûr l’utilisation des fonctions en bash n’a pas de limite, voilà une autre que j’utilise souvent pour répéter X fois la même commande…

t10 (){ for x in {01..10}; do $@ ; done }

Et à l’utilisation

pi@pi3:~ $ t10 (){ for x in {01..10}; do $@ ; done }
pi@pi3:~ $ t10 echo g >> /tmp/10g
pi@pi3:~ $ cat /tmp/10g
g
g
g
g
g
g
g
g
g
g

On peut faire des choses beaucoup plus sophistiquées… Voila une fonction qui décompresse les principaux fichiers d’archive.

# Extract the content of an achive
function extract {
 if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
    return 1
 else
    for n in $@
    do
      if [ -f "$n" ] ; then
          case "${n%,}" in
            *.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
                         tar xvf "$n"       ;;
            *.lzma)      unlzma ./"$n"      ;;
            *.bz2)       bunzip2 ./"$n"     ;;
            *.rar)       unrar x -ad ./"$n" ;;
            *.gz)        gunzip ./"$n"      ;;
            *.zip)       unzip ./"$n"       ;;
            *.z)         uncompress ./"$n"  ;;
            *.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
                         7z x ./"$n"        ;;
            *.xz)        unxz ./"$n"        ;;
            *.exe)       cabextract ./"$n"  ;;
            *)
                         echo "extract: '$n' - unknown archive method"
                         return 1
                         ;;
          esac
      else
          echo "'$n' - file does not exist"
          return 1
      fi
    done
fi
}
Image de l'auteur Guillaume Moulard

L'auteur:  Guillaume Moulard

Mon premier code était sur un ZX81... Mes derniers emois sont le week-end pour mes Raspberrys PI et la semaine pour les techno du Cloud. www.moulard.org

Vous avez vu une erreur ? Quelque chose ne va pas ? Vous pouvez contribuer à cette page sur GitHub ou laisser un commentaire en dessous. Merci d'être passé par là :)