samedi, décembre 21, 2024
Nom d'utilisateur : Mot de passe :
[NEWS]
Envoyé par unreal
Tout admin sera confronté un jour à un embêtant problème de mélange de charsets dans des documents texte sur le disque. Comme il n'est pas très pratique de convertir chaque fichier à la main, nous allons utiliser iconv pour convertir de façon automatisée tous les fichiers vers l'encodage voulu (ici ISO-8859-1 ou Latin1). Le script prend en paramètre le nom du dossier contenant les fichiers à convertir, et il est possible de spécifier une liste d'extensions. Si un fichier est déjà au bon format, il ne sera pas converti.

#!/bin/bash

CONVPATH="$1"

EXTENSIONS=".php .txt"

if [ ! "$CONVPATH" ]; then
        echo "Usage: $0 <path>"
        exit
fi

echo "Converting from $CONVPATH..."

cd "$CONVPATH"

for ONESEARCH in $EXTENSIONS; do
        FILELIST="$FILELIST`echo ; find . -type f -name \"*$ONESEARCH\" | sed 's/ /@@@@/g'`"
done

for ONEFILE in $FILELIST; do
        ONEFILE_=`echo -n $ONEFILE | sed 's/@@@@/ /g'`
        iconv --from-code=UTF-8 --to-code=ISO-8859-1 "$ONEFILE_" > "$ONEFILE_.1" 2>/dev/null
        RV=$?
        if [ $RV -ne 0 ]; then
                echo "Error converting $ONEFILE_ ... rolling back."
                rm -f "$ONEFILE_.1"
        else
                mv "$ONEFILE_.1" "$ONEFILE_"
        fi
done


Posté le 05/11/10 à 00:20 - Commentaires désactivés

[NEWS]
Envoyé par unreal
Si vous disposez d'une dropbox FTP semi-publique, il peut être intéressant de modifier automatiquement et périodiquement son mot de passe et d'en informer les personnes compétentes.

Ce petit script se charge de l'opération pour vous. Il vous suffira de le mettre en crontab pour bénéficier d'une ré-initialisation automatique du mot de passe.

#!/bin/bash

#<config>
USERNAME=partagedefichiers
PWLEN=10
EMAILTO="root@localhost"
SUBJ="Changement automatique du mot de passe FTP"
MSG="Bonjour,\n\nLe mot de passe pour le compte FTP $USERNAME a ete change automatiquement.\n\nLe nouveau mot de passe est :"
#</config>

function createrandpw {
        LEN=$1
        echo "`date +%N`$RANDOM`uptime`" | md5sum | sed -r "s/(.{$LEN}).*/\1/g"
}

function setuserpw {
        PW=$1
        USERNAME=$2
        usermod -p `openssl passwd -1 $PW` $USERNAME
}

function emailnewpw {
        NEWPW=$1
        echo -e "$MSG $NEWPW" | mail -s "$SUBJ" "$EMAILTO"
}

NEWPW=`createrandpw $PWLEN`
setuserpw $NEWPW $USERNAME
emailnewpw $NEWPW

exit 0


Posté le 12/02/10 à 16:05 - 0 Commentaires...

[NEWS]
Envoyé par unreal
Cette fois-ci ce n'est pas un script 'système' mais plutôt un script rigolo qui permet de gérer facilement une base de données des films qu'on a vus, ou qu'on souhaite voir.

Il dispose des fonctionnalités suivantes :
- ajouter/supprimer un film
- rechercher
- changer de vu à pas vu et inversément
- lister les films vus, à voir, ou l'ensemble, en triant par nom ou date

Pour l'utiliser, il suffit de copier le code dans un fichier "movie", par exemple, qu'on rend exécutable avec chmod 755 movie.

Enjoy !

#!/bin/bash
#
# Movie script 1.0
# Keep track of your movie watching.
#
# Send bug reports to dev <at> slashorg <dot> net
#
# Last update: 20090525


#<config>
DBFILE="$HOME/.movie.db"
COLOR1="\033[32m"
#</config>

[ ! -f "$DBFILE" ] && touch "$DBFILE"

ACTION=$1
PARAM=$2

function cleanname {
        echo "$*" | sed -E -e 's/[ ]{2,}/ /g' -e 's/^[ ]+//' -e 's/[ ]+$//' -e 's/\./ /g' -e 's/[^a-zA-Z0-9 ]//g' | tr A-Z a-z
}

function missing {
        [ ! "$1" ] && echo " -> $2." && exit
}

function results {
        [ $1 -eq 0 ] && echo " -> No results found." && exit
        [ $1 -eq 1 ] && echo " - One result found -"
        [ $1 -ne 1 ] && echo " - $1 results found -"
}

case "$ACTION" in

        "add" )
                missing "$PARAM" "File name missing"
                NAME=`cleanname "$PARAM"`

                missing "$NAME" "File name may contain illegal characters"

                # Check for duplicate
                [ `cat "$DBFILE" | grep -i ":$NAME" | wc -l` -ne 0 ] && echo " -> $NAME already exists in database." && exit
                echo "`date +"%d-%m-%Y"`:$NAME" >> "$DBFILE"
                echo " -> Record added."
                ;;

        "remove" )
                missing "$PARAM" "File name missing"
                
                cat "$DBFILE" | grep -vi ":$PARAM" > "$DBFILE.new"
                if [ `diff "$DBFILE" "$DBFILE.new" | wc -l` -eq 0 ]; then
                        echo " -> Name not found."
                        rm -f "$DBFILE.new"
                        exit
                else
                        echo " -> One record deleted."
                        mv "$DBFILE.new" "$DBFILE"
                fi
                ;;

        "search" )
                missing "$PARAM" "Search query missing"

                SORTBY=2
                NAME=`cleanname "$PARAM"`
                RES="`cat $DBFILE | grep "$NAME" | sort -t ":" -k $SORTBY | awk 'BEGIN { FS = ":" } { print " \033[32m"$2"\033[31m"$3"\033[0m added "$1; }'`"
                COUNT=`echo "$RES" | sed '/^$/d' | wc -l | sed 's/[^0-9]//g'`

                results $COUNT
                echo "$RES"
                echo "# = unseen"
                ;;

        "flip" )
                missing "$PARAM" "File name missing"
                NAME=`cleanname "$PARAM"`

                [ `cat "$DBFILE" | grep -iE ":$NAME[:#]*$" | wc -l` -eq 0 ] && echo " -> $NAME cannot be found." && exit
                if [ "`cat "$DBFILE" | grep -i ":$NAME" | awk 'BEGIN { FS = ":" } { print $3; }'`" == "" ]; then
                        echo -e " -> Changing status to$COLOR1 unseen\033[0m."
                        cat "$DBFILE" | sed "s/:$NAME/:$NAME:#/" > "$DBFILE.new"
                else
                        echo -e " -> Changing status to$COLOR1 seen\033[0m."
                        cat "$DBFILE" | sed "s/:$NAME:#/:$NAME/" > "$DBFILE.new"
                fi
                mv "$DBFILE.new" "$DBFILE"
                ;;

        "list" | "seen" | "unseen" )
                SORTBY=1
                [ "$PARAM" == "date" ] && SORTBY=1
                [ "$PARAM" == "name" ] && SORTBY=2
                [ "$ACTION" == "list" ] && SEARCH="grep :"
                [ "$ACTION" == "seen" ] && SEARCH="grep -v :#$"
                [ "$ACTION" == "unseen" ] && SEARCH="grep :#$"
                RES="`cat $DBFILE | $SEARCH | sort -t ":" -k $SORTBY | awk 'BEGIN { FS = ":" } { print " \033[32m"$2"\033[0m added "$1; }'`"
                COUNT=`echo "$RES" | sed '/^$/d' | wc -l | sed 's/[^0-9]//g'`

                results $COUNT
                echo "$RES"
                ;;

        * )
                echo " - Usage -"
                echo -e "$COLOR1 $0 add <name>\033[0m - add <name> to database."
                echo -e "$COLOR1 $0 remove <name>\033[0m - remove <name> from database."
                echo -e "$COLOR1 $0 search <key>\033[0m - search database for <key>."
                echo -e "$COLOR1 $0 flip <name>\033[0m - change status from seen to unseen."
                echo -e "$COLOR1 $0 list [date|name]\033[0m - list complete database sorting by date or name."
                echo -e "$COLOR1 $0 seen [date|name]\033[0m - list seen database sorting by date or name."
                echo -e "$COLOR1 $0 unseen [date|name]\033[0m - list unseen database sorting by date or name."
                ;;
esac


Posté le 16/08/09 à 02:21 - 0 Commentaires...

[NEWS]
Envoyé par unreal
Ce tout petit script permet de voir l'activité d'un serveur MySQL local assez simplement. Il génère les stats en forme CSV ce qui permet de tracer les résultats :

crontab
*/1 * * * * /usr/local/bin/mysqlstat.sh >> mysqlstat.csv


mysqlstat.sh
#!/bin/bash

SAMPLE=10
USER=root
PW=myrootpassword
NOWDATE=`date +"%D %H:%M"`

MYSQLADMIN=/usr/local/mysql/bin/mysqladmin

T1=`$MYSQLADMIN -u $USER -p$PW status | sed 's/.*Questions: //' | sed 's/ Slow queries:.*//'`

sleep $SAMPLE

T2=`$MYSQLADMIN -u $USER -p$PW status | sed 's/.*Questions: //' | sed 's/ Slow queries:.*//'`

T=`expr $T2 - $T1`
TT=`expr $T / $SAMPLE`
echo "$NOWDATE ; Requests: $T ($TT per sec.)"


Posté le 24/04/09 à 15:22 - 0 Commentaires...

[NEWS]
Envoyé par unreal
On a reçu une nouvelle baie de stockage au travail, et comme je voulais être sûr de la fiabilité de la solution avant la mise en production, j'ai conçu une battérie de tests, dont le script suivant. Son but est de générer un très grand nombre (un million) de fichiers vides afin de mesurer l'efficacité du contrôleur RAID à travailler sur beaucoup de fichiers et de détecter des bugs de verouillage dans l'implémentation NFS de l'éditeur de la solution, sans oublier les performances de l'ensemble.
Il peut s'utiliser directement sur un disque local pour vérifier un contrôleur RAID, sur un partage SMB ou NFS ou bien sur un disque SAN ou iSCSI.

Quand la génération est terminée, je conseille un petit rm -rf /mnt/nfs/temp pour finir le test...

manyfiles.sh
#!/bin/bash

##################################################
# Date    : 20090417                             #
# License : BSD                                 #
# Author : dev -at- slashorg -dot- net         #
#                                                #
# About : FS and disk benching tool.         #
##################################################

FILECOUNT=1000000
FILEPERDIR=5000

COPYTO=/mnt/nfs/test

OSTYPE=`uname`

[ "$OSTYPE" == "Linux" ] && DIRSEQ=`seq -s " " -w 1000`
[[ "$OSTYPE" == "Darwin" || "$OSTYPE" == "FreeBSD" ]] && DIRSEQ=`jot -w %03d -s " " 1000`

ANS="N"
[ -d "$COPYTO" ] && echo -n "*** $COPYTO exists. Delete? (Y/N) " && read ANS

[ "$ANS" == "Y" ] && echo " -> $COPYTO deleted." && rm -rf "$COPYTO"

[ ! -d "$COPYTO" ] && mkdir -p "$COPYTO"

echo -n "Progress: "

I=0

for ONESEQ in $DIRSEQ; do
        mkdir "$COPYTO/$ONESEQ" && cd "$COPYTO/$ONESEQ"
        [ "$OSTYPE" == "Linux" ] && touch `seq -s " " -w $FILEPERDIR`
        [[ "$OSTYPE" == "Darwin" || "$OSTYPE" == "FreeBSD" ]] && touch `jot -w %04d -s " " $FILEPERDIR`
        echo -n "."

        I=$(( $I + $FILEPERDIR ))

        [ $I -ge $FILECOUNT ] && echo " done." && exit
done



Posté le 17/04/09 à 16:48 - 0 Commentaires...

2 pages... [1-5][6-7]