Outils pour utilisateurs

Outils du site


scripts-bash

Scripts bash

Changer le propriétaire de fichiers dans un stockage objet monté en S3FS

Sources - https://stackoverflow.com/questions/65217118/using-find-to-locate-files-not-owned-by-user-or-group - https://stackoverflow.com/questions/30733158/s3fs-recursive-chown-chmod-takes-a-long-time - https://stackoverflow.com/questions/66079888/chmod-chown-is-slow-on-files-stored-using-s3fs-on-ec2

my_directory=<my_directory>
my_user=<my_user>
my_group=<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:$my_group

Supprimer des fichiers en série

#!/bin/bash
cd /var/mail/virtual/map3.net/save/new
P=0
T=`ls|wc -l`
echo "$T fichiers total"
Q=0
for i in *;
  do
   let "Q += 1"
     let "R = $Q % 1000"
     if [ "$R" -eq 0 ]
     then
       echo "$Q/$T scannes, $P supprimes"
     fi
 
   if grep -F "htdocs/egroupware" $i > /dev/null;
   then
     rm $i;
     let "P += 1"
   fi
  done

Supprimer la pièce jointe d'un email et le réexpédier

#On regarde dabord à quelles lignes se trouvent les limites de contenu de lemail
#+ ces lignes commencent par --boundary
 
 
fichier="fax-email-test"
 
#on récupère le numéro de ligne du premier boundary
ligne1=`grep -m2 -n -e'--boundary' $fichier | sed -n '1 p' | awk --field-separator=":" '{print $1}'`
 
#Ensuite on récupère le numéro de ligne du deuxième boundary
ligne2=`grep -m2 -n -e'--boundary' $fichier | sed -n '2 p' | awk --field-separator=":" '{print $1}'`
 
#On affiche les lignes de lemail entre le premier et le deuxième boundary
 
let ligne1=ligne1+1
let ligne2=ligne2-1
sed -n ' '"$ligne1"','"$ligne2"' p' <$fichier

Traitement d'un fichier texte

#Deuxième partie traitement d'un fichier
#Préférer l'utilisation du code retour du script
#pour tester la fin de fichier, ça permet d'avoir des lignes
#vides dans le fichier
 
cat donnees | while true; do    # on dump le fichier
read ligne
        if [ "$ligne" == "" ] ;then
         exit 0                 #On a atteint la fin de fichier
                                #Attention il ne faut pas de lignes vides
                                #dans le fichier
        fi
 
set --­­ $ligne                   #On split les valeurs de la ligne lue
                                #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"   #-­e pour avoir le caractère de tabulation
        fi
done 

Chiffrer un fichier texte

#!/bin/bash
#Script d'ouverture du fichier de mots de passe
 
gpg motsdepasse.txt.gpg
nano motsdepasse.txt
gpg -er user@domaine motsdepasse.txt
rm motsdepasse.txt

Sauvegardes incrémentales avec rsync

#!/bin/bash
#Script de sauvegardes incrémentales
#paramètres obligatoires : 1- fréquence (daily|weekly|monthly),
#                          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.  See the
#    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  USA
##
 
case $1 in
 
  "daily" | "weekly" | "monthly" )
  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="/home /var"
 
#  Vous devez créer des répertoires de sauvegarde du type
#> daily-backup, weekly-backup, monthly-backup
 
cible=/mnt/backup/${freq}-backup
 
 
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 [ "$nsauv" -ge "$glisse" ]; then
 
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="$freq-backup-`date +%Y-%m-%d-%R:%S`"
 
#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/$new/

Compter le nombre de fichiers dans un dossier

#!/bin/bash
IFS=''
ls -a1 | while read n; do echo `find $n | wc -l` $n; done| sort -n

Synchroniser 2 fichiers de type "block-device"

C'est la seule chose que rsync ne sache pas faire …

#!/bin/bash
#Incremental distant backup of block devices
#Adapted from : Stephane Chazelas stephane.chazelas at seebyte.com ; https://lists.samba.org/archive/rsync/2010-June/025164.html
 
 
[[ -z "$1" ]] && { echo "Required first argument is source dev"; exit 1; }
[[ -z "$2" ]] && { echo "Required second argument is remote dev"; exit 1; }
 
dev1=$1
dev2=$2
remote=backup@backup
 
ssh $remote "perl -'MDigest::MD5 md5' -ne 'BEGIN{\$/=\1024};print md5(\$_)' $dev2 | lzop -c" | \
    lzop -dc | perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};$b=md5($_); read STDIN,$a,16;if ($a eq $b) {print "s"} else {print "c" . $_}' $dev1 | lzop -c | \
    pv | \
    ssh $remote "lzop -dc | perl -ne 'BEGIN{\$/=\1} if (\$_ eq\"s\") {\$s++} else {if (\$s) { seek STDOUT,\$s*1024,1; \$s=0}; read ARGV,\$buf,1024; print \$buf}' 1<> $dev2"
 
#Local version
#perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};print md5($_)' $dev2 | perl -'MDigest::MD5 md5' -ne 'BEGIN{$/=\1024};$b=md5($_); read STDIN,$a,16;if ($a eq $b) {print "s"} else {print "c" . $_}' $dev1 | perl -ne 'BEGIN{$/=\1} if ($_ eq"s") {$s++} else {if ($s) { seek STDOUT,$s*1024,1; $s=0}; read ARGV,$buf,1024; print $buf}' 1<> $dev2

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'affectation de la variable

objdump -M intel -d my_executable_elf_file | less
#/ma_variable

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)

#!/bin/bash
 
#dir=/var/lib/lxc/gestion/rootfs/
dir=$1
range=$2
 
declare -i uid
declare -i gid
declare -i newuid
declare -i newgid
 
while IFS= read -r -d $'\0' f
do
	#echo $f
	read uid gid < <(ls -dn "$f" | awk '{print $3,$4}')
	#echo "$uid:$gid"
	newuid=$(( uid + range ))
	newgid=$(( gid + range ))
	#echo "$newuid:$newgid"
	(( $uid < $range )) && { echo "$f" $newuid:$newgid; chown -h $newuid:$newgid "$f"; }
	#ls -dn $f
done < <(find $dir -print0)

Réencoder en utf8 un fichier texte mal encodé

Lien : http://www.i18nqa.com/debug/utf8-debug.html

sed -e 's/â/â/g' -e 's/Ã\xA0/à/g' -e 's/ê/ê/g' -e 's/ë/ë/g' -e 's/è/è/g' -e 's/é/é/g' -e 's/ï/ï/g' -e 's/ô/ô/g' -e 's/û/û/g' -e 's/ü/ü/g' -e 's/ç/ç/g' mon_fichier

Activer un certificat SSL pour l'interface d'administration de ISPconfig3

cf : https://www.howtoforge.com/community/threads/get-ssl-certificate-for-ispconfig-admin-from-letsencrypt.73097/

/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@`hostname -d` --domains `hostname -f` --webroot-path /usr/local/ispconfig/interface/acme
 
dt=`date '+%Y%m%d%H%M%S'`
cd /usr/local/ispconfig/interface/ssl/
for ext in csr key.secure key crt; do if [ -f ispserver.$ext ]; then mv ispserver.$ext ispserver.$ext.old.$dt; fi; done
 
ln -s /etc/letsencrypt/live/`hostname -f`/privkey.pem ispserver.key
ln -s /etc/letsencrypt/live/`hostname -f`/fullchain.pem ispserver.crt
 
service apache2 restart

Ajouter le support de php 5.6 dans une debian

Lien

apt install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
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://geekpeek.net/rescan-scsi-bus-on-linux-system/

echo "1" > /sys/class/block/sdX/device/rescan
resize2fs /dev/sdX

Avec LVM, en plus

pvresize /dev/sdX
vgresize <volume>
lvresize -l +100%FREE <logical-volume>
scripts-bash.txt · Dernière modification: 2023/05/07 18:55 de pielo