Memo
From AleikoumWiki
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/ #Envoie de mail a la volee sendmail -f plop@oo.com -F "plop le ouf" erwan@oo.com echo "Subject: Le sujet" | cat fichier | /usr/sbin/sendmail -F "plop le ouf" -f plop.oo.cim erwan@oo.com uuencode Master.csv Master.csv | /usr/sbin/sendmail -f erwan@eo.com -F "Test" erwan@eo.com #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/* -type f -ctime +30 -exec rm -v {} \; #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 ! find /srv/samba/lnk_crea/ -maxdepth 0 -mtime +30 -exec du -sh {} \; for dossier in `find /mnt/vd0/administratif-* -maxdepth 0 -mtime +10`; do echo "plop : $dossier"; done #astuce sur : http://www.ai.univ-paris8.fr/~fb/Cours/Exposes0405-1/find.html # oui parle moi petit serveur nmap -sV -p port addresse server # avec -O on peut avoir l'OS !! # scanner par ping son reseau nmap -sP A.B.C.* # 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" # shell and perl pour convertir des entrees en base64 cat file \ | perl -e 'use MIME::Base64;while (<>) { if (/^(.*):: (.*)$/) { print "$1: ".decode_base64($2)."\n";} else {print $_;}}' #tcpdump tcpdump -X port xxxx src host A.B.C.D #divers petite chose sur apt-get apt-config dump # pour avoir la conf apt-cache search plop # recherche de paquet plop dpkg -l # liste des paquets installes # monter une iso mount -o loop -t iso9660 /home/erwan/plop.iso /mnt/iso #bigmem or not ? grep HIGHMEM /boot/config-`uname -r` # envoie d'email par sendmail en ligne de commande cat test | sendmail -toi -vv -f plop@plop.com cat test = To:plip@plip.com Subject:Essai Test de mail . #afficher le contenu d'un fichier PEM : openssl x509 -inform PEM -in file -noout -text #afficher le contenu d'un fichier PKCS#12 : openssl pkcs12 -in file
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
Nota :
export SORTIE="/dev/stdout" ... [ $DEBUG_VALUE -ge 1 ] && echo "$NOM_SHELL - CRITICAL : cas critique" >> $SORTIE 2>&1
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" ); # qqmanipulations avec Manip # convertir un timestamp my $date = DateCalc("Jan 1, 1970 00:00:00 GMT","+ $secs"); $date = UnixDate($date,"%Y%m%d.%H%M%S"); # pour manipuler des date au format DD/MM/YYYY Date_Init("Language=French", "DateFormat=non-US"); # my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time); my $file_timestamp = sprintf "%4d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;
# 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");
Certificat Auto-signed
# Creation de la cle du CA et de son certif openssl req -new -x509 -days 365 -keyout ca.key -out ca.crt # Creation du certificat openssl genrsa -out what.cert 1024 # Requete pour signer le certif openssl req -in what.cert -out what.req -keyout what.key -new -nodes # Signature du certificat par le CA openssl x509 -req -in what.req -out what.crt -CA ca.crt -CAkey ca.key -days 2000 -CAcreateserial # le pem est généré de la facon suivante cat what.crt what.key > what.pem
IMAP en Telnet
$ telnet <@_serveur> <port> Trying X.X.X.180... Connected to X.X.X.180. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc. See COPYING for distribution information. A LOGIN "<login>" "<password>" A OK LOGIN Ok. BC SELECT "Inbox" * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent) * OK [PERMANENTFLAGS (\Draft \Answered \Flagged \Deleted \Seen)] Limited * 0 EXISTS * 0 RECENT * OK [UIDVALIDITY 1214902187] Ok * OK [MYRIGHTS "acdilrsw"] ACL BC OK [READ-WRITE] Ok ZZZZ LOGOUT * BYE Courier-IMAP server shutting down ZZZZ OK LOGOUT completed Connection closed by foreign host.
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
Drop de toutes les DB sauf les exludes
USER="root" PASS="password" HOST="127.0.0.1" PORT="3307" EXCLUDE="\(plop\|mysql\|test\)" ######################## COMMANDE="mysql -N -u${USER} -p${PASS} --host=${HOST} --port=${PORT}" #MYSQL=$(mysql -N -u${USER} -p${PASS} --host=${HOST} --port=${PORT} <<<"SHOW DATABASES" | grep -v -e $EXCLUDE | tr "\n" " ") DB=$($COMMANDE <<<"SHOW DATABASES" | grep -v -e $EXCLUDE) for a in $DB do echo "$COMMANDE -e \"drop database \`$a\`\"" $COMMANDE -e "drop database \`$a\`" done