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 d un 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
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"'
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