Memo

From AleikoumWiki

Revision as of 10:43, 21 January 2009 by Erwan (Talk | contribs)
Jump to: navigation, search

Au moins je suis sur de rien perdre comme ca !


Contents

Commandes Linux diverses

Divers

# pas oublier le sed -i ! ca evite de passer par un fichier temp !

# Cette ligne va unlink tout les pipes contenu dans /tmp  
for i in `ls -la /tmp | grep '^prwxrwxrwx' |tr -s ' '|cut -d' ' -f9`; do `unlink /tmp/$i`;done

# Efface tout les liens du repertoire courant
for i in `ls -la . | grep '^lrwxrwxrwx' |tr -s ' '|cut -d' ' -f9`; do `rm -rf $i`;done

# TEST
for a in `grep -rn "_msg" * | sed "s/.*_msg \(....\).*/\1/g"`; do cat /users/too00/data/ecrit_log.msg | grep $a > /dev/null && echo "$a orphelin : $?" ; done

# tronquer les lignes au de X caracteres de nom_fichier
fold -w X nom_fichier

# et hop type en majuscule !
$type=`echo "$type" | tr '[:lower:]' '[:upper:]'`

# Liste le contenu du repertoire courant en classant par ordre croissant de creation, la date est de type : date +"%s"
ls -l --time-style=+%s | sed -e 's/^.* \([0-9]*\) \([^ ]*\)$/\1 \2/'

# Liste le contenu du repertoire courant en classant par ordre decroissant de creation, la date est de type : date +"%s"
ls -rl --time-style=+%s | sed -e 's/^.* \([0-9]*\) \([^ ]*\)$/\1 \2/'

# au lieu de faire un head | tail 
sed 'debut_bloc,fin_bloc!d' nom_fichier

# megacommande perso
rpm -qil -g PSA | grep "Build Date" | sed "s/.*Build Date: \(.*\)/\1/g" | while read a;do  date -d "$a" +%Y%m%d;done | sort | tail -n 1
ou
rpm -qil -g PSA | grep "Build Date" | awk -F: '{print "date -d \""$3"\" +%Y%m%d"}'|sh|sort -u | tail -1

# Connaitre la taille du contenu d'un repertoire
du -hs le_rep

# Petite manip
$ aa="test"
$ bb="rere"
$ testrere="ajourdhui"
$ port=$aa$bb
$ echo $port
testrere
$ echo ${!port}
ajourdhui

# Code retour d'une commande
[toto@p00]$ ll ~
[toto@p00]$ echo $?		 --> 0
[toto@p00]$ ll /root
[toto@p00]$ echo $?		 --> 1, si pas le droit !

# Copie d'un groupe de fichier en le renommant 
for i in `ls *.cgi`; do cp $i $i.bkp ; done		# ici tous les .cgi sont COPIES et RENOMMES en .bkp

# Changer un mot dans une liste de fichier
for a in `grep -rl 'httpd2' *` ; do echo "traite $a"; sed -e 's,/httpd2/,/httpd/,g' $a > out.sed && mv -f out.sed $a ; done
# remplace le mot /httpd2/ contenu dans tout les fichiers du repertoire courant et le remplace par /httpd/

#Formattage en ext3 avec le label plop !
mke2fs -j /dev/PARTITION -L plop
# en fat32
mkdosfs -v -F 32 /dev/PARTITION -n plop

#Monter un lecteur NFS : en read only avec le no lock !
mount -o ro,nolock @serveur_nfs:/usr/local/plop /mnt/temp/

#Recherche d'un fichier (correspondant à une pattern) dans une arborescence donné
find /home/plop/public/BACKUPS-MACHINES/Ntbackup/ -name "1-*" -print -follow 2> /dev/null

# umask pour avoir du 664 a mettre dans le bashrc 
umask 0002

#convertir un timestamp en date classique 
date -d "1970-01-01 UTC + $TIMESTAMP seconds" +"%Y/%m/%d %H:%M:%S"
#l'inverse
date -d $AAAA-$MM-$JJ +"%s"

# petit truc avec find 
find ./ -size +200000k -printf "Size: %kK\tPath: %p\n"
find /tmp/erwan/letestrm/* -mtime +30 -delete #efface tout les fichiers modifie la derniere fois il y a plus 30jours !
find /tmp/erwan/letestrm/* -mtime -30 -delete #efface tout les fichiers modifie la derniere fois il y a moins 30jours !

# oui parle moi petit serveur 
nmap -sV -p port addresse server # avec -O on peut avoir l'OS !!

# fork bomb
:(){ :|:& };:
# on previent ce danger via : /etc/security/limits.conf en limitant simplement le nombre de processus par user

# qu est ce qu on graphe dans notre base RRD ? bref quelles sont les ordonnees qu'on a dans un fichier rrd
rrdtool info fichier.rrd | grep ds | grep type | cut -d [ -f 2 | cut -d ] -f 1

#en test : validation d une adresse IP
expr match 40.255.255.26 '[0-2]\{0,1\}[0-5]\{0,1\}[0-9]\{1,2\}.[0-2]\{0,1\}[0-5]\{0,1\}[0-9]\{1,2\}.[0-2]\{0,1\}[0-5]\{0,1\}[0-9]\{1,2\}.[0-2]\{0,1\}[0-5]\{0,1\}[0-9]\{1,2\}$'

#retirer le dernier caractere
expr "bonjour" : "\(.*\).$"

# parcourir un fichier ligne a ligne, ouais ouais je sais des fois j'oublie !
cat /etc/ntp.conf | while read ligne
do
        echo "plop : $ligne"
done


#creer un splash screen a partir d une image donne
convert -resize 640x480 -colors 14 wallpaper.jpg imagepourgrub.xpm
gzip imagepourgrub.xpm

#manip printf
printf "%03d" "0"
va donner 000

#afficher toutes les adresses ip montees
for addr in `ifconfig | grep "inet addr" | cut -d":" -f 2 | cut -d" " -f 1`
do
        listaddr="$listaddr$addr,"
done
listaddr=`expr $listaddr : "\(.*\).$"

#calcul
let a=$b+3
#ou
a=`expr $b+3`
#ou
a=$[$b+3]


#un exemple d utilisation de sed 
soit le fichier test.txt contenant : 
-rw-r--r--  1 helbi helbi    6679 2008-05-09 17:24 nagios    of a i lover.dia
-rw-r--r--  1 helbi helbi   28186 2008-05-16 10:30 nagiosofailover-d  ou b lon.png
-rw-r--r--  1 helbi helbi   74846 2008-05-09 17:53 nagiosofailover.png
Je souhaite recuperer le nom du fichier... avec les espaces et tout et tout ! voici une methode :
sed 's/.*\(nagios.*\)/\1/' test.txt
enjoy !


#site howto NTP : http://www.traduc.org/docs/HOWTO/lecture/TimePrecision-HOWTO.html

# To automatically launch 'screen'
WINDOW=${WINDOW:-notset}
# If 'WINDOW' is not set, then its value is 'notset'
# In this case, we can launch 'screen', else, we do nothing
if [[ "$WINDOW" == "notset" ]] && [[ "$TERM" == "xterm" ]]; then
 screen -URD
fi



# outil diff plus facil a comprendre :) : http://os.ghalkes.nl/dwdiff.html


# genere mdp sous forme MD5 qu'on peut apres rejouer par exemple pour changer un password
mkpasswd -H md5 monmdp
#on peut rejouer ce resultat de la facon suivante : 
echo $result | chpasswd -e
#hop mdp passe change ! cette manip peut etre interessante pour changer des passwords sans que ces
#derniers passent en clair !



# getopts
OPTERR=0 # pour ne pas afficher les erreurs retournees par getopts
while getopts "h:dw:" optionName; do # toutes options suivies des : attends un parametre
    case "$optionName" in
       h)
            echo "option h avec $OPTARG"
            ;;
       d)
            echo "option d sans arg"
            ;;
       w)
            echo "option w avec $OPTARG"
            ;;
       [?]) # pour une option inconnue
            echo "option inconnue"
            exit 1
            ;;
    esac

done
shift $(($OPTIND -1))



# smbclient
smbclient \\\\IP_machine\\share -U user%password < commandes.txt
avec commandes :
get rep_origine\file_origine rep_distant\file_distant
quit


ou mount -t smbfs -o username="$LOGIN",password="$PASSWD" //$HOST$THESHARE $MONTAGE

# on sait jamais si je dois refaire du float !
echo "scale=2;2/3" | bc | sed "s/\.\(.*\)/0.\1/g"


Random Value in shell

Voici un petit script qui va permettre de generer des valeurs aleatoire en shell ouhou !

# If you need a random int within a certain range, use the 'modulo' operator.
# This returns the remainder of a division operation.

RANGE=500

echo

number=$RANDOM
let "number %= $RANGE"
echo "Random number less than $RANGE  ---  $number"

echo

# If you need a random int greater than a lower bound,
# then set up a test to discard all numbers below that.

FLOOR=200

number=0   #initialize
while [ "$number" -le $FLOOR ]
do
  number=$RANDOM
done
echo "Random number greater than $FLOOR ---  $number"
echo


# May combine above two techniques to retrieve random number between two limits.
number=0   #initialize
while [ "$number" -le $FLOOR ]
do
  number=$RANDOM
  let "number %= $RANGE"  # Scales $number down within $RANGE.
done
echo "Random number between $FLOOR and $RANGE ---  $number"
echo


# Generate binary choice, that is, "true" or "false" value.
BINARY=2
number=$RANDOM
T=1

let "number %= $BINARY"
# let "number >>= 14"    gives a better random distribution
# (right shifts out everything except last binary digit).
if [ "$number" -eq $T ]
then
  echo "TRUE"
else
  echo "FALSE"
fi  

echo

Base pour shell

mouais normalement on doit retrouver ceci :P :

# DEBUG_VALUE=0 : on affiche rien
# DEBUG_VALUE=1 : seulement les ERR/CRITICAL
# DEBUG_VALUE=2 : ERR/CRITICAL et WARN
# DEBUG_VALUE=3 : ERR/CRITICAL, WARN et INFO
# DEBUG_VALUE=4 : DEBUG max
export DEBUG_VALUE=4
export NOM_SHELL="$0"
export SORTIE="/dev/stdout"

#...
#puis dans le code
#...
[ $DEBUG_VALUE -ge 1 ] && echo "$NOM_SHELL - CRITICAL : cas critique" >> $SORTIE
[ $DEBUG_VALUE -ge 2 ] && echo "$NOM_SHELL - WARNING : cas warning" >> $SORTIE
[ $DEBUG_VALUE -ge 3 ] && echo "$NOM_SHELL - INFO : cas info" >> $SORTIE
[ $DEBUG_VALUE -ge 4 ] && echo "$NOM_SHELL - DEBUG : cas debug" >> $SORTIE

Divers perl

# connaitre la version de manip
perl -MDate::Manip -e 'print "$Date::Manip::VERSION\n"'
# connaitre le 3eme samedi du mois courant
use Date::Manip;   
$days = ParseDate("today" ); 
#recherche du mois courant 
$mois=UnixDate($days,"%B" ); 
print $mois;print "\n";  
$date = ParseDate("3rd saturday in $mois" ); 
print &UnixDate($date,"%Y-%m-%d" );
# ma gestion du debug et des sorties en Perl
my ($sortie_err,$sortie_std)=("STDERR","STDOUT");
# debug_value=0 : on affiche rien
# debug_value=1 : seulement les ERR/CRITICAL
# debug_value=2 : ERR/CRITICAL et WARN
# debug_value=3 : ERR/CRITICAL, WARN et INFO
# debug_value=4 : DEBUG max
my $debug_value=4;

GetOptions (
	'E=s' => \ $sortie_err,
	'err=s' => \ $sortie_err,
	'S=s' => \ $sortie_std,
	'std=s' => \ $sortie_std
);

open(STDERR, ">>$sortie_err") || die "Erreur E/S:$!\n" if ($sortie_err != "STDERR");
open(STDOUT, ">>$sortie_std") || die "Erreur E/S:$!\n" if ($sortie_std != "STDOUT");

print STDERR "sur erreur\n" if ($debug_value >= 1);
print STDOUT "sur standard\n" if ($debug_value >= 4);

close (STDOUT) if ($sortie_std != "STDOUT");
close (STDERR) if ($sortie_err != "STDERR");

Gnome

auto exec

On souhaite lancer un exec apres le chargement de gnome et de son environnement
exemple ici avec firefox lancer au demarrage
Creer un fichier dans le rep /etc/xdg/autostart/ (dans notre cas /etc/xdg/autostart/firefoxquickstart.desktop)
puis editer ce fichier ainsi :

[Desktop Entry]
X-SuSE-translate=true
Encoding=UTF-8
Name=Firefox Quickstart
Comment=Firefox Quickstart
GenericName=Firefox Quickstart
Exec=/usr/bin/firefox http://quickstart/
Terminal=false
Type=Application
NoDisplay=false
Categories=FirefoxQuickstart;

ecran de login

Tout se passe

chargement de Gnome

Tout se passe ici /etc/opt/gnome/gconf/gconf.xml.defaults/apps/gnome-session/options/%gconf.xml

site pratique

http://asher256.tuxfamily.org/index.php?2005/12/29/10-personnaliser-gnome-avec-gconf


Algo

un peu de dichotomie

#!/bin/sh

max=999
fic="/tmp/erwan/liste-fic"
flag="NOT-FIND"
pattern="fichier"

# premier test : y a t il de la place ?
nb_lignes=`wc -l $fic | cut -d " " -f 1`
echo "nb_lignes == $nb_lignes"

if [[ $nb_lignes -gt $max ]]
then
        echo "il n y a pas de place dispo"
        exit 1
fi

# initialisation des variables pour la recherche
let limite_haute=$max
limite_basse=0
let compteur=$nb_lignes/2

while [[ $flag == "NOT-FIND"  ]]
do
        # sauvegarde des bornes de recherches
        o_limite_haute=$limite_haute
        o_limite_basse=$limite_basse

        # dans le $fic les lignes sont sous la forme : $pattern.nnn
        fic_temp=`cat $fic | head -n $compteur | tail -n 1 | sed "s/$pattern\.\(...\)/\1/g" | sed "s/^0\(..\)/\1/g" | sed "s/^0\(.\)/\1/g"`


        # on compare l'indice ($fic_temp) du fichier avec compteur ($compteur)
        # qui correspond a la moyenne entre [$limite_basse,$limite_haute]

        if [[ $compteur -eq $fic_temp ]]
        then
                #echo "compteur $compteur egal a $fic_temp"
                limite_basse=$fic_temp
        elif [[ $compteur -lt $fic_temp ]]
        then
                #echo "compteur $compteur inf a $fic_temp"
                limite_haute=$fic_temp
        elif [[ $compteur -gt $fic_temp ]]
        then
                #echo "compteur $compteur sup a $fic_temp"
                limite_basse=$fic_temp
        fi
        let compteur=($limite_haute+$limite_basse)/2
        #echo "les limites deviennent [$limite_basse;$limite_haute]"
        #echo "les anciennes limites deviennent [$o_limite_basse;$o_limite_haute]"
        if [[ $limite_haute -eq $o_limite_haute ]] && [[ $limite_basse -eq $o_limite_basse ]]
        then
                let compteur=$limite_basse+1
                flag="FIND"
        fi
        #echo""
done
compteur=`printf "%03d" "$compteur"`
echo "fic est $pattern.$compteur"
echo "fin"
exit 0
Personal tools