Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Révision précédente | ||
scripts-bash [2018/09/06 19:29] |
scripts-bash [2023/05/07 18:55] (Version actuelle) pielo [Scripts bash] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Scripts bash ====== | ||
+ | |||
+ | ===== Changer le propriétaire de fichiers dans un stockage objet monté en S3FS ===== | ||
+ | |||
+ | Sources | ||
+ | - https:// | ||
+ | - https:// | ||
+ | - https:// | ||
+ | |||
+ | <code bash> | ||
+ | my_directory=< | ||
+ | my_user=< | ||
+ | my_group=< | ||
+ | find $my_directory \( ! -user $my_user -o ! -group $my_group \) -print0 | xargs -0 --max-args=1 --max-procs=10 chown -v $my_user: | ||
+ | </ | ||
+ | ===== Supprimer des fichiers en série ===== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | cd / | ||
+ | P=0 | ||
+ | T=`ls|wc -l` | ||
+ | echo "$T fichiers total" | ||
+ | Q=0 | ||
+ | for i in *; | ||
+ | do | ||
+ | let "Q += 1" | ||
+ | let "R = $Q % 1000" | ||
+ | if [ " | ||
+ | then | ||
+ | echo "$Q/$T scannes, $P supprimes" | ||
+ | fi | ||
+ | |||
+ | if grep -F " | ||
+ | then | ||
+ | rm $i; | ||
+ | let "P += 1" | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Supprimer la pièce jointe d'un email et le réexpédier ===== | ||
+ | |||
+ | <code bash> | ||
+ | #On regarde dabord à quelles lignes se trouvent les limites de contenu de lemail | ||
+ | #+ ces lignes commencent par --boundary | ||
+ | |||
+ | |||
+ | fichier=" | ||
+ | |||
+ | #on récupère le numéro de ligne du premier boundary | ||
+ | ligne1=`grep -m2 -n -e' | ||
+ | |||
+ | #Ensuite on récupère le numéro de ligne du deuxième boundary | ||
+ | ligne2=`grep -m2 -n -e' | ||
+ | |||
+ | #On affiche les lignes de lemail entre le premier et le deuxième boundary | ||
+ | |||
+ | let ligne1=ligne1+1 | ||
+ | let ligne2=ligne2-1 | ||
+ | sed -n ' '" | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Traitement d'un fichier texte ===== | ||
+ | |||
+ | <code bash> | ||
+ | #Deuxième partie traitement d'un fichier | ||
+ | #Préférer l' | ||
+ | #pour tester la fin de fichier, ça permet d' | ||
+ | #vides dans le fichier | ||
+ | |||
+ | cat donnees | while true; do # on dump le fichier | ||
+ | read ligne | ||
+ | if [ " | ||
+ | exit 0 #On a atteint la fin de fichier | ||
+ | #Attention il ne faut pas de lignes vides | ||
+ | #dans le fichier | ||
+ | fi | ||
+ | |||
+ | set -- $ligne | ||
+ | #dans des variables $1, $2... | ||
+ | #voir man bash pour la commande set | ||
+ | #il ne reste plus qu'à afficher | ||
+ | if [ $2 -ge 10 ]; then #si supérieur ou egal on affiche | ||
+ | echo -e "$1 \t $2" | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Chiffrer un fichier texte ===== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | #Script d' | ||
+ | |||
+ | gpg motsdepasse.txt.gpg | ||
+ | nano motsdepasse.txt | ||
+ | gpg -er user@domaine motsdepasse.txt | ||
+ | rm motsdepasse.txt | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Sauvegardes incrémentales avec rsync ===== | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | #Script de sauvegardes incrémentales | ||
+ | # | ||
+ | # 2 - nombre de sauvegardes à conserver | ||
+ | ## | ||
+ | #Auteur : Thierry Kauffmann | ||
+ | # | ||
+ | ## | ||
+ | # This program is free software; you can redistribute it and/or modify | ||
+ | # it under the terms of the GNU General Public License as published by | ||
+ | # the Free Software Foundation; either version 2 of the License, or | ||
+ | # (at your option) any later version. | ||
+ | # | ||
+ | # This program is distributed in the hope that it will be useful, | ||
+ | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
+ | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
+ | # GNU General Public License for more details. | ||
+ | # | ||
+ | # You should have received a copy of the GNU General Public License | ||
+ | # along with this program; if not, write to the Free Software | ||
+ | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 | ||
+ | ## | ||
+ | |||
+ | case $1 in | ||
+ | |||
+ | " | ||
+ | freq=$1 | ||
+ | ;; | ||
+ | |||
+ | *) | ||
+ | echo "usage $0 daily|weekly|monthly nombre_de_sauvegardes" | ||
+ | exit 1; | ||
+ | ;; | ||
+ | |||
+ | esac | ||
+ | |||
+ | #Nombre de sauvegardes | ||
+ | glisse=$2 | ||
+ | |||
+ | #Liste des répertoires à sauvegarder sur votre système séparés par des espaces | ||
+ | source="/ | ||
+ | |||
+ | # Vous devez créer des répertoires de sauvegarde du type | ||
+ | #> daily-backup, | ||
+ | |||
+ | cible=/ | ||
+ | |||
+ | |||
+ | cd $cible | ||
+ | |||
+ | #On calcule le nombre de répertoires de sauvegarde existants | ||
+ | nsauv=`ls | wc -w` | ||
+ | |||
+ | # S'il y a suffisamment de sauvegardes, | ||
+ | #> On supprime le répertoire le plus ancien | ||
+ | |||
+ | if [ " | ||
+ | |||
+ | oldest=`ls -tr --time=ctime | head -1` | ||
+ | rm -rf $oldest | ||
+ | |||
+ | fi | ||
+ | |||
+ | #On note le répertoire de sauvegarde le plus récent | ||
+ | recent=`ls -t --time=ctime | head -1` | ||
+ | |||
+ | # On crée un nouveau répertoire de sauvegarde | ||
+ | new=" | ||
+ | |||
+ | #On copie en hard-links le plus récent vers le nouveau | ||
+ | cp -al $recent $new | ||
+ | |||
+ | #On fait la sauvegarde incrémentale | ||
+ | rsync -avP --delete $source $cible/ | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Compter le nombre de fichiers dans un dossier ===== | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | IFS='' | ||
+ | ls -a1 | while read n; do echo `find $n | wc -l` $n; done| sort -n | ||
+ | </ | ||
+ | |||
+ | ===== Synchroniser 2 fichiers de type " | ||
+ | |||
+ | C'est la seule chose que rsync ne sache pas faire ... | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | #Adapted from : Stephane Chazelas stephane.chazelas at seebyte.com ; https:// | ||
+ | |||
+ | |||
+ | [[ -z " | ||
+ | [[ -z " | ||
+ | |||
+ | dev1=$1 | ||
+ | dev2=$2 | ||
+ | remote=backup@backup | ||
+ | |||
+ | ssh $remote "perl -' | ||
+ | lzop -dc | perl -' | ||
+ | pv | \ | ||
+ | ssh $remote "lzop -dc | perl -ne ' | ||
+ | |||
+ | #Local version | ||
+ | #perl -' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Modifier la valeur d'une variable dans un fichier exécutable (ELF) ===== | ||
+ | |||
+ | Installer les paquets nécessaires | ||
+ | < | ||
+ | apt install binutils hexedit | ||
+ | </ | ||
+ | |||
+ | Optionnel : lister les sections et les variables | ||
+ | < | ||
+ | readelf -a my_executable_elf_file | less | ||
+ | </ | ||
+ | |||
+ | Décompiler le fichier et rechercher la commande d' | ||
+ | < | ||
+ | objdump -M intel -d my_executable_elf_file | less | ||
+ | #/ | ||
+ | </ | ||
+ | Noter la chaîne hexadécimale correspondante | ||
+ | |||
+ | Éditer le fichier en recherchant la chaîne | ||
+ | < | ||
+ | hexedit my_executable_elf_file | ||
+ | #CTRL+S hexstring | ||
+ | #CTRL+X save and exit | ||
+ | </ | ||
+ | |||
+ | ===== Décaler uid et gid d'un fichier (shift uid and gid) ===== | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # | ||
+ | dir=$1 | ||
+ | range=$2 | ||
+ | |||
+ | declare -i uid | ||
+ | declare -i gid | ||
+ | declare -i newuid | ||
+ | declare -i newgid | ||
+ | |||
+ | while IFS= read -r -d $' | ||
+ | do | ||
+ | #echo $f | ||
+ | read uid gid < <(ls -dn " | ||
+ | #echo " | ||
+ | newuid=$(( uid + range )) | ||
+ | newgid=$(( gid + range )) | ||
+ | #echo " | ||
+ | (( $uid < $range )) && { echo " | ||
+ | #ls -dn $f | ||
+ | done < <(find $dir -print0) | ||
+ | </ | ||
+ | |||
+ | ===== Réencoder en utf8 un fichier texte mal encodé ===== | ||
+ | |||
+ | Lien : http:// | ||
+ | |||
+ | <code bash> | ||
+ | sed -e ' | ||
+ | </ | ||
+ | |||
+ | ===== Activer un certificat SSL pour l' | ||
+ | |||
+ | cf : https:// | ||
+ | <code bash> | ||
+ | / | ||
+ | |||
+ | dt=`date ' | ||
+ | cd / | ||
+ | for ext in csr key.secure key crt; do if [ -f ispserver.$ext ]; then mv ispserver.$ext ispserver.$ext.old.$dt; | ||
+ | |||
+ | ln -s / | ||
+ | ln -s / | ||
+ | |||
+ | service apache2 restart | ||
+ | </ | ||
+ | |||
+ | ===== Ajouter le support de php 5.6 dans une debian ===== | ||
+ | |||
+ | Lien | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | <code bash> | ||
+ | apt install apt-transport-https lsb-release ca-certificates | ||
+ | wget -O / | ||
+ | echo "deb https:// | ||
+ | apt update | ||
+ | apt install php5.6 php5.6-curl php5.6-xml php5.6-mysql php5.6-mbstring php5.6-mcrypt php5.6-gd php5.6-json php5.6-intl php5.6-fpm php5.6-cli | ||
+ | </ | ||
+ | |||
+ | ===== Redimensionner un disque virtuel et le faire rescanner par le système ===== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | <code bash> | ||
+ | echo " | ||
+ | resize2fs /dev/sdX | ||
+ | </ | ||
+ | |||
+ | Avec LVM, en plus | ||
+ | |||
+ | <code bash> | ||
+ | pvresize /dev/sdX | ||
+ | vgresize < | ||
+ | lvresize -l +100%FREE < | ||
+ | </ | ||