Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/plugins/portfolio-slideshow/portfolio-slideshow.php:65) in /var/www/html/wp-includes/feed-rss2.php on line 8
Bash – Les mémos d'un admin système https://blog-sysadmin.archives.slashroot.fr Sat, 29 Jul 2017 07:31:37 +0000 fr-FR hourly 1 https://wordpress.org/?v=4.8.23 [Linux] tar over ssh https://blog-sysadmin.archives.slashroot.fr/?p=1463 https://blog-sysadmin.archives.slashroot.fr/?p=1463#respond Tue, 25 Jul 2017 08:45:06 +0000 http://blog.slashroot.fr/?p=1463 Dans certains cas spécifiques, notamment lors de migration de données entre différents réseaux, le transfert de dossiers distants/locaux par SSH m’a été fort utile. Cela permet notamment de palier à un manque de place de chaque côté (source ou destination).

Exemple pour archiver en local un dossier se trouvant sur un serveur distant :

bob@server1:~$ ssh bob@server2 tar czf - /srv/data/ > /srv/data_server2.tar.gz

Exemple pour archiver un dossier local sur un serveur distant :

bob@server1:~$ tar zcvf - /srv/data | ssh bob@server2 "cat > /srv/data_server1.tar.gz"

 

]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=1463 0
[Bash] Script pour dumper des bases MySQL https://blog-sysadmin.archives.slashroot.fr/?p=1402 https://blog-sysadmin.archives.slashroot.fr/?p=1402#respond Mon, 24 Jul 2017 09:07:30 +0000 http://blog.slashroot.fr/?p=1402 #!/bin/bash # # MySQL_DB_Dump # # Auteur : Johan # Contact : johan@slashroot.fr # Date : 13/07/2011 # Version : 1.0 # Description : Dump une base donnee MySQL # Commentaire : Le fichier de dump peut etre envoye par email # Requis : Besoin de mutt si l'option -m est selectionnee # # # Usage # usage(){ echo "" echo "Utilisation : mysql_db_dump -s server_name -u mysql_user -p file/password -b database1,database2... -d save_folder [-m adresse@domain.com]" echo "" echo "OPTIONS :" echo " -h Affiche l'aide" echo " -u Utilisateur MySQL a utilise pour le dump" echo " -s Serveur contenant la base de données" echo " -p Type d'authentification a utiliser (prompt du password ou fichier ~/.my.cnf)" echo " -b Specifie la ou les bases a dumper" echo " -d Dossier a utiliser pour stocker les dumps" echo " -m Envoi le fichier de dump par email" echo "" echo "EXEMPLE :" echo " - Dump des bases db1 et db2 avec une authentification par fichier et l'envoi des fichiers par email" echo " mysql_db_dump -s localhost -u bob -p file -b db1,db2 -m dba@slashroot.fr" echo "" } # # getopts # while getopts "s:u:p:b:d:m:h" opt; do case $opt in s) serveur=$OPTARG ;; u) user=$OPTARG ;; p) auth=$OPTARG ;; b) bases=$OPTARG ;; m) dest=$OPTARG if [ ! -f /bin/mutt ] ; then echo "ERREUR - L'utilitaire mutt est introubable" exit 1 fi ;; d) folder=$OPTARG ;; h) usage exit 0 ;; \?) usage exit 1 ;; 🙂 usage exit 1 ;; esac done # # Variables et verifications # # Verification des parametres choisis if [[ $# -eq 0 || -z $serveur || -z $user || -z $auth || -z $bases || -z $folder ]] ; then usage exit 1 fi # Verification du dossier de sauvegarde if [ ! -d $folder ] ; then echo "ERREUR - Le dossier cense accueillir les dumps est introuvable" exit 1 fi # Verification de l'authentification choisi if [ $auth == "file" ] ; then if [ ! -f ~/.my.cnf ] ; then echo " ERREUR - Le fichier .my.cnf est introuvable" # exit 1 else if [ $(stat -c %a ~/.my.cnf) != 600 ] ; then echo "Warning - Votre fichier ~/.my.cnf n'a pas les droits recommandes" fi fi elif [ ! $auth == "password" ] ; then usage exit 1 fi # Date du jour date=`date +%m-%d-%Y` host=`hostname` res="\n" # # Au boulot # # Pour chaque base for base in $(echo $bases | sed "s/,/ /g") ; do dump="$folder/dump-$base-$date.sql" if [[ $auth == "file" ]] ; then mysqldump -u $user $base > $dump else mysqldump -u $user -p $base > $dump fi gzip $dump if [ -n $dest ] ; then echo "" | mutt -s "[Save-SQL] Dump base $base du $date" -a ""$dump".gz" -- $dest fi done ]]> https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=1402 0 [Bash] Récupérer la taille des bases MySQL https://blog-sysadmin.archives.slashroot.fr/?p=1405 https://blog-sysadmin.archives.slashroot.fr/?p=1405#respond Wed, 19 Jul 2017 09:09:27 +0000 http://blog.slashroot.fr/?p=1405 #!/bin/bash # # MySQL_DB_Sizes # # Auteur : Johan # Contact : johan@slashroot.fr # Date : 13/07/2011 # Version : 1.0 # Description : Recupère la taille de chaque base de données et envoi les résultats par email # Commentaire : L'utilisateur doit avoir acces en lecture a toutes les bases dont on souhaite connaitre la taille # Reminder for a MySQL read only user # CREATE USER 'ro-user'@'localhost' IDENTIFIED BY 'MySQL_Ro_User_Password'; # GRANT SELECT ON database1.* TO 'ro-user'@'localhost'; # GRANT SELECT ON database2.* TO 'ro-user'@'localhost'; # ... # # Usage # usage(){ echo "" echo "Utilisation : mysql_db_sizes -s server_name -u mysql_user -p file/password [-b database1,database2...] [-m adresse@domain.com]" echo "" echo "OPTIONS :" echo " -h Affiche l'aide" echo " -u Utilisateur MySQL a utilise pour la requete SQL" echo " -s Serveur contenant la base de données" echo " -p Type d'authentification a utiliser (prompt du password ou fichier ~/.my.cnf)" echo " -b Specifie les bases a afficher (par defaut toutes celles accessibles" echo " -m Envoi le resultat par email au lieu de l'afficher dans le terminal" echo "" echo "EXEMPLES :" echo " 1 - Affichage de la taille de toutes les bases avec une authentification par mot de passe" echo " mysql_db_sizes -s localhost-u bob -p password" echo " 2 - Envoi de la taille des bases db1 et db2 par email avec une authentification par fichier" echo " mysql_db_sizes -s localhost -u bob -p file -b db1,db2 -m bob@admin.fr" echo "" } # # getopts # while getopts "s:u:p:b:m:h" opt; do case $opt in s) serveur=$OPTARG ;; u) user=$OPTARG ;; p) auth=$OPTARG ;; b) bases=$OPTARG ;; m) dest=$OPTARG ;; h) usage exit 0 ;; \?) usage exit 1 ;; 🙂 usage exit 1 ;; esac done # # Variables et verifications # # Verification des parametres choisis if [[ $# -eq 0 || -z $serveur || -z $user || -z $auth ]] ; then usage exit 1 fi # Verification de l'authentification choisi if [ $auth == "file" ] ; then if [ ! -f ~/.my.cnf ] ; then echo " ERREUR - Le fichier .my.cnf est introuvable" exit 1 else if [ $(stat -c %a ~/.my.cnf) != 600 ] ; then echo "Warning - Votre fichier ~/.my.cnf n'a pas les droits recommandes" fi fi elif [ ! $auth == "password" ] ; then usage exit 1 fi host=`hostname` res="\n" # Fichier de sortie temporaire tmp="/tmp/mysql_db_sized.tmp" # # Au boulot # # On extrait dans un fichier toutes les bases du serveurs if [ $auth == "file" ] ; then mysql -h $serveur -u $user -B --exec="SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS 'Size (MB)' FROM information_schema.tables GROUP BY table_schema;" > $tmp else mysql -h $serveur -u $user -p -B --exec="SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS 'Size (MB)' FROM information_schema.tables GROUP BY table_schema;" > $tmp fi # On supprime la premières ligne du fichier comprenant les titres ainsi que la base schema sed -i '1d' $tmp sed -i '/information_schema/d' $tmp # Pour chaque base while read line ; do # On recupere son nom et sa taille nom=`echo $line | cut -f1 -d ' '` taille=`echo $line | cut -f2 -d ' '` # On l'ajoute au resultat si on veut toutes les bases ou si elle fait partie des bases choisies if [ -z $bases ] && ( echo $bases | grep -wq $nom ) ; then res+="$nom : $taille Mo\n" elif [ -n $bases ] && ( echo $bases | grep -wq $nom ) ; then res+="$nom : $taille Mo\n" fi done < $tmp # On redige et on envoi l'email si demande if [ ! -z $dest ] ; then corps="Bonjour,\n\nVoici les informations concernant la taille de ma/mes base(s) de données :\n\n$res\n\nnCordialement,\n\n$host" echo -e $corps | mail -s "Infos : Taille base MySQL" $dest # Sinon on affiche le resultat dans le terminal else echo -e $res fi # On supprime le fichier de sortie temporaire rm -f $tmp

]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=1405 0
[Bash] Replication d’une base Kerberos https://blog-sysadmin.archives.slashroot.fr/?p=1400 https://blog-sysadmin.archives.slashroot.fr/?p=1400#respond Mon, 17 Jul 2017 09:05:02 +0000 http://blog.slashroot.fr/?p=1400 Ce script permet de répliquer une base de royaume Kerberos d’un master vers un ou plusieurs slave en s’appuyant sur le service kpropd.

#!/bin/bash  
#
# Kerberos_Replication
#
# Auteur      : Johan
# Contact     : johan@slashroot.fr
# Date        : 04/07/16
# Version     : 1.0
# Description : Ce script permet de repliquer une base de royaume kerberos vers un ou plusieurs serveurs slaves
# Commentaire : A mettre en crontab


print_usage ()
{
    echo ""
    echo "Utilisation : kerberos_replication ROYAUME SLAVE1 SLAVE2 ..."
    echo ""
}


err=0

# Le script prend au moins deux parametres
if [[ $# -lt 2 ]] ; then
    echo ""
    echo "ERREUR - Il faut au moins renseigner deux parametres"
    print_usage
    exit 1
fi

# On recupere le royaume
REALM=${1^^}
realm=${1,,}

# On verifie qu'on dispose de la base
if [[ ! -d "/var/kerberos/krb5kdc/$realm" ]] ; then
    echo ""
    echo "ERREUR - Il semble que la base ne soit pas presente"
    echo ""
    exit 1
fi

# On dump la base pour la propager
/usr/sbin/kdb5_util -r "$REALM" dump "/var/kerberos/krb5kdc/$realm/slave_datatrans"

# Les parametres apres le premier doivent etre des serveurs fonctionnels
shift
for slave in $@ ; do
    if ( sleep 1 | nc -w 1 -v $slave 754 &> /dev/null ) ; then
        /usr/sbin/kprop -r $REALM -f "/var/kerberos/krb5kdc/$realm/slave_datatrans" $slave &> /dev/null
    else
        err=$((err+1))
    fi
done

if [[ $err -eq 0 ]] ; then
    exit 0
fi

# Affichage du resultat
if [[ $err -eq $# ]] ; then
    echo ""
    echo "ERREUR - La replication de n'est pas bien passee"
    echo ""
    exit 1
else
    echo ""
    echo "WARNING - Il y a $err replication(s) en erreur"
    echo ""
    exit 1
fi
]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=1400 0
[Cron] Dernier jour de chaque mois https://blog-sysadmin.archives.slashroot.fr/?p=653 https://blog-sysadmin.archives.slashroot.fr/?p=653#comments Wed, 04 Jul 2012 09:55:26 +0000 http://blog.slashroot.fr/?p=653 Voici la configuration à renseigner dans la crontab pour exécuter un script à 23h59 le dernier jour du mois :

59 23 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && /scripts/Stats_Du_Mois.sh
]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=653 2
[Bash] Alias https://blog-sysadmin.archives.slashroot.fr/?p=619 https://blog-sysadmin.archives.slashroot.fr/?p=619#respond Mon, 30 Apr 2012 08:46:06 +0000 http://blog.slashroot.fr/?p=619 Pour configurer ses propres alias ca se passe dans le fichier .bashrc de l’utilisateur.

Alias que j’utilise couramment :

alias maj='apt-get update && apt-get upgrade'
alias mem='ps aux --sort:rss'
alias ..='cd ..'
alias ...='cd ../../'
alias ....='cd ../../../'
alias clean='sed '\''/^#/d;/^$/d'\'''
alias l.='ls -d .* --color=auto'
alias ll='ls -lh --color'
alias lla='ls -lah --color'
alias taille='ls -lahSr --color'
alias vi='vim'

A noter qu’il faut se reconnecter pour pouvoir profiter des alias fraîchement créés.

]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=619 0
[Bash] Rechercher des fichiers contenant une chaîne de caractère https://blog-sysadmin.archives.slashroot.fr/?p=216 https://blog-sysadmin.archives.slashroot.fr/?p=216#respond Wed, 28 Dec 2011 11:12:23 +0000 http://blog.slashroot.fr/?p=216 Syntaxe :

find /chemin -name "FiltrageNomFic" -exec grep -Hn "chaine" {} \;

Exemple : tous les fichiers de log dans le dossier /var/log contenant la chaîne « Ven 18 »

find /var/log -name "*.log" -exec grep -Hn "Ven 18" {} \;

-H permet d’afficher le nom du fichier où se trouve la chaîne

-n permet d’afficher le numéro de ligne où se trouve la chaîne

Cette méthode permet également de rechercher des chaines de caractères dans des fichiers.

]]>
https://blog-sysadmin.archives.slashroot.fr/?feed=rss2&p=216 0