what Posté(e) le 13 août 2005 Partager Posté(e) le 13 août 2005 Topic très instructif. Juste une petite question: chmod a-x /lib/ld-* Ca donne quoi? Sinon une question de rapidité. Imaginons qu'on définisse des variables comme suit: V0=zero V1=un V2=deux V3=trois ... V1000=mille Le nombre de variables définies est donné par la variable nb_var, exemple: nb_var=1001 Comment afficher le contenu de toutes ces variables une par une avec un script shell ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 13 août 2005 Partager Posté(e) le 13 août 2005 Imaginons qu'on définisse des variables comme suit: V0=zero V1=un V2=deux V3=trois ... V1000=mille Le nombre de variables définies est donné par la variable nb_var, exemple: nb_var=1001 Comment afficher le contenu de toutes ces variables une par une avec un script shell ? Avec eval (quoi que ce serait plus facile si on mettait les variables dans un tableau à la base, hein, mais après l'exo est moins drôle ) #!/bin/sh V0=zero V1=un V2=deux V3=trois nb=4 for i in $(seq 0 $(($nb-1))) do Vi=$(eval "echo \$V$i") echo $Vi done Ceci donne : zero un deux trois EDIT : encadrage du seq par $() au lieu de `` pour des raisons d'homogénéité Lien vers le commentaire Partager sur d’autres sites More sharing options...
what Posté(e) le 13 août 2005 Partager Posté(e) le 13 août 2005 Wep tuxxx c'était eval que j'attendais Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 17 août 2005 Partager Posté(e) le 17 août 2005 une un peu velue ?? j'ai une machine Linux sur laquelle je m'authentifie via LDAP. Du coup les usernames sont "nomdudomaine\nomduuser" quand je fais un ls -l, je n'ai que les qq premiers caractères du nom du domaine, alors qu'évidemment c'est le nomduuser qui m'intéresse ... :/home/GROUPELDAP]$ ls -al total 164 drwxrwxrwx 38 root pgsql 4096 Aug 17 11:31 . drwxr-xr-x 16 root root 4096 Aug 1 13:30 .. drwx------ 2 GROUPELD pgsql 4096 Jun 30 15:41 user1 drwx------ 2 GROUPELD pgsql 4096 Nov 15 2004 user2 alors qu'en colonne 3 je voudrais "GROUPELDAP\user1" ... j'ai essayé un export COLUMNS avant, mais sans effet (alors que pour dpkg -l c'est bien utile) quand je créé un user local sur ma kubuntu avec un nom très long, ça marche, le ls me donne tout /home # ls -l total 28 drwxr-xr-x 2 guest guest 4096 Jul 8 10:43 guest drwxr-xr-x 2 kilestlongcenomdeuser kilestlongcenomdeuser 4096 Aug 17 11:40 kilestlongcenomdeuser mais sur la machine qui m'intéresse (RH7.3), keudchiq ... - ce n'est pas masqué, un ls -l | awk '{print $3}' ne me donne que le fragment ... - ls -l --tabisze=0 ne résoud pas mon pb ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 18 août 2005 Partager Posté(e) le 18 août 2005 Bon Sandeman c'est pas pour répondre à cette question là que je posete, mais à l'autre ("Avoir toutes les photos du topic plus beau bureaux") Un peu violent, mais ça marche Fichier get_links.sh : #!/bin/sh # # Copyright (c) 2005 Damien THEBAULT # # 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. # ls $1 1>/dev/null || exit 1 PSEUDOS=$( cat $1 | sed -nr "s|.*<span class='normalname'><a href=.*>(.*)</a></span></td>.*|\1|g p; T; =" | sed -e 'N; s/\n/:/' ) PICS=$( tmp=$(cat $1 | sed -e '=' | sed -e 'N; s/\n/ /') while echo -e "$tmp" | grep -vE "^ *$" | grep -qv "^<img" do tmp=$(echo -e "$tmp" | grep "<img" | grep "user posted image" | grep -v "class='signature'" | sed -nr "s/^([0-9]*)(.*)<img/\1 \2\n<img \1/g p" | grep "<img") done echo -e "$tmp" | sed -nr "s|.*<img *([0-9]*) *src='(.*)' border='0' alt='user posted image' />.*|\1\|\2|g p" ) LINKS=$( tmp=$(cat $1 | sed -e '=' | sed -e 'N; s/\n/ /') while echo -e "$tmp" | grep -vE "^ *$" | grep -qv "^<a" do tmp=$(echo -e "$tmp" | grep "<img" | grep "user posted image" | grep -v "class='signature'" | sed -nr "s/^([0-9]*)(.*)<a/\1 \2\n<a \1/g p" | grep "<a") done echo -e "$tmp" | sed -nr "s|.*<a *([0-9]*) *href='(.*)' target='_blank'><img src='(.*)' border='0' alt='user posted image' />.*|\1\|\2|g p" ) MINIS=$( tmp=$(cat $1 | sed -e '=' | sed -e 'N; s/\n/ /') while echo -e "$tmp" | grep -vE "^ *$" | grep -qv "^<a" do tmp=$(echo -e "$tmp" | grep "<img" | grep "user posted image" | grep -v "class='signature'" | sed -nr "s/^([0-9]*)(.*)<a/\1 \2\n<a \1/g p" | grep "<a") done echo -e "$tmp" | sed -nr "s|.*<a *([0-9]*) *href='(.*)' target='_blank'><img src='(.*)' border='0' alt='user posted image' />.*|\1\|\3|g p" ) for i in $MINIS do PICS=$(echo "$PICS" | sed -e "s^$i^^g" | grep -v "^$") done for i in $LINKS $PICS do IMG=$(echo $i | awk -F "|" '{print $2}') LINE=$(echo $i | awk -F "|" '{print $1}') PSEUDO="" for i in $(echo $PSEUDOS) do PSLINE=$(echo $i | awk -F ":" '{print $2}') [ "$LINE" ] && [ "$PSLINE" ] && [ "$PSLINE" -lt "$LINE" ] && PSEUDO=$(echo $i | awk -F ":" '{print $1}') done echo "$PSEUDO|$IMG" done fichier principal pci_screens.sh : #!/bin/sh # # Copyright (c) 2005 Damien THEBAULT # # 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. # GREEN='\033[01;32m' RED='\033[01;31m' NORM='\033[00m' echo "Usage : $0 <opts>" 1>&2 echo "-no-dl : don't download" 1>&2 echo "-f : force download of already downloaded files" 1>&2 echo "-no-up : don't update preprocessed output" 1>&2 echo "-html : html output" 1>&2 echo "-bbcode : bbcode output" 1>&2 echo "" 1>&2 MAX=900 for i in $@ do case $i in -no-dl) NO_DL="1";; -f) FORCE="1";; -no-up) NO_DL="1"; NO_UP="1";; -html) HTML="1";; -bbcode) BBCODE="1";; esac done [ "$HTML" ] || [ "$BBCODE" ] || HTML="1" [ "$HTML" ] && [ "$BBCODE" ] && HTML="" if [ ! "$NO_DL" ] then [ -d dl ] || mkdir dl pushd dl for i in $(seq 0 20 $MAX) do if [ "$FORCE" ] || [ ! -f $i ] then wget http://www.pcinpact.com/forum/sujet_23732_$i.htm -O $i.html fi done popd #dl fi if [ ! "$NO_UP" ] then { for i in $(seq 0 20 $MAX) do echo dl/$i.html 1>&2 ./get_links.sh dl/$i.html done } | sort > list.tmp fi [ "$HTML" ] && echo "<html>" ni=0 n=$(cat list.tmp | wc -l) for i in $(cat list.tmp) do ((ni=ni+1)) PSEUDO=$(echo $i | awk -F "|" '{print $1}') LINK=$(echo $i | awk -F "|" '{print $2}') echo -n "$ni/$n checking $PSEUDO ( $LINK )... " 1>&2 HOST=$(echo $LINK | sed 's|http://||g') while echo $HOST | grep -q "/" do HOST=$(dirname $HOST) done if ping -W 1 -c 1 $HOST 2>/dev/null 1>&2 then if wget --spider $LINK 2>/dev/null 1>&2 then echo -e "${GREEN}OK${NORM}" 1>&2 [ "$HTML" ] && echo "<a href=\"$LINK\">$PSEUDO</a><br>" [ "$BBCODE" ] && echo "[URL=$LINK]$PSEUDO[/URL]" else echo -e "${RED}NO${NORM}" 1>&2 fi else echo -e "${RED}NO${NORM}" 1>&2 fi done [ "$HTML" ] && echo "</html>" Si quelqu'un veut les fichiers je les lui envoie (hein Sandeman) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 19 août 2005 Partager Posté(e) le 19 août 2005 bah zyva je suis preneur ... joli travail au passage ... je vais rajouter un poil d'imagemagick, et essayer de refaire le post #1 des plus beaux desktops ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 20 novembre 2005 Auteur Partager Posté(e) le 20 novembre 2005 Une petite question ? :)Que fait ma signature Pour rappel : /lib/ld-linux.so.2 /bin/echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlb xq |/lib/ld-linux.so.2 /usr/bin/dc J'en ai une autre sympa aussi dans le même genre (mais un peu plus simple) : perl -e'map{print pack c,($|++?1:13)+ord,select$,,$,,$,,$|}split//,ESEL.$/' Encore une pour rester sur dc, mais bien plus compliqué là : echo '9k[l:l;s<s=0l>x]s"[1+l<dd*l=d*-l;+ds<rl=2**l:+ds=d*rd*+4<-d15>>] s>[q]s-[d77/3*2-s;47l"x-P1+d78>`]s`0[d23/.5-3*s:0l`xr10P1+d24>$]ds$x'|dc Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 14 janvier 2006 Partager Posté(e) le 14 janvier 2006 Bon, pour déporter tous les messages du bar à un endroit plus approprié, et comme l'a dit duke98, je vais poser le problème ici : Comment bloquer les attaques de type fork-bomb sur un système? Je ressort le script bash : :(){ :|:& };: On peut déjà utiliser /etc/security/limits.conf ou ulimit Mais est-il aussi possible de limiter l'utilisation CPU? (par exemple, 33% par utilisateur) Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 14 janvier 2006 Partager Posté(e) le 14 janvier 2006 Ah, en fait y'a aussi /etc/limits... Mais il semble que lui aussi n'affecte que les programmes utilisant pam (à vérifier quand même), donc autant utiliser /etc/security/limits.conf qui est plus flexible (par groupes par exemple) Voici comment mettre une limite de 250/300 processus : @users soft nproc 250@users hard nproc 300 sources (c'est pas ma faute si j'ai trouvé de la doc principalement sur des sites gentoo ) : http://gentoo-wiki.com/SECURITY_Limit_User_Processes http://www.gentoo.org/doc/en/security/secu...l?part=1&chap=5 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 15 janvier 2006 Partager Posté(e) le 15 janvier 2006 j'ai dumal à croire qu'on puisse limiter l'utilisation cpu... quand un process s'execute, il à acces à toutes les ressources de calcul du calcul pendant son temps d'exécution. ce temps d'exécution est fixe (qq ms), et la politique d'ordonnacement des process est anonyme (elle ne prend pas en compte le nom.user/group/etc... du processus, uniquement sont le temps qu'il a passé à être éxécuté et sa priorité). donc à partir du moment où un processus s'exécute, il pourra être à 100% cpu. dans le cas de la fork bomb, ce n'est pas grave dans le cas ou on à fixé une limite aux nombre de process. en effet, root peut toujours se logguer (créer un process de login) et tuer tous les processus de l'utilisateur concerné. c'est juste que face à la masse de processus à ordonancer, le temps qu'il mettra pour y arriver est un peu plus incertain. vous pouvez essayer : fixez la limite à 200, lancez votre fork bomb, via ssh loguez vous et tuez les tous, normalement, ça marche (j'ai déjà testé - je crois même avoir posté un screen de ça dans le bar...). c'est juste que le systeme perd en réactivité Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 28 mai 2006 Partager Posté(e) le 28 mai 2006 C'est bien calme ici Bon un tout piti problème tiré de mon dernier tuto ... Le soft utilisé tente de lire des données sur un media abîmé, mais n'est pas d'une grande stabilité. Il y a une fonction de reprise, mais vers un nouveau fichier ... avec un padding de 0 dans l'intervalle. Bien entendu la taille des fichiers n'est pas prévisible ... donc en gros, si j'essaie de lire la chaine ABCDEFGHIJKLMNOPQRSTUVWXYZ j'aurai fichier 1 : ABCDE fichier 2 : 000000FGHIJK fichier 3 : 000000000000LM fichier 4 : 00000000000000NOPQRSTUVW fichier 5 : 00000000000000000000000000XYZ Le but du jeu : écrire un petit script qui me reconstruit proprement la cible (sachant qu'on parle de fichiers binaires de 700 Mo Il y a plus d'infos et un exemple de résolution dans le topic pré-cité, mais si vous avez des idées plus flashy Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 28 mai 2006 Partager Posté(e) le 28 mai 2006 C'est bien calme ici Bon un tout piti problème tiré de mon dernier tuto ... Le soft utilisé tente de lire des données sur un media abîmé, mais n'est pas d'une grande stabilité. Il y a une fonction de reprise, mais vers un nouveau fichier ... avec un padding de 0 dans l'intervalle. Bien entendu la taille des fichiers n'est pas prévisible ... donc en gros, si j'essaie de lire la chaine ABCDEFGHIJKLMNOPQRSTUVWXYZ j'aurai fichier 1 : ABCDE fichier 2 : 000000FGHIJK fichier 3 : 000000000000LM fichier 4 : 00000000000000NOPQRSTUVW fichier 5 : 00000000000000000000000000XYZ Le but du jeu : écrire un petit script qui me reconstruit proprement la cible (sachant qu'on parle de fichiers binaires de 700 Mo Il y a plus d'infos et un exemple de résolution dans le topic pré-cité, mais si vous avez des idées plus flashy je pense qu'il y a moyen de s'en sortir avec "dd", "wc -c"... et peut-etre l'option offset. touch NewImage && for FILE in $( ls fichiers* | sort); do dd if=${FILE} of=NewImage skip=${wc -c NewImage} seek=${wc -c NewImage} bs=1; done Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 28 mai 2006 Partager Posté(e) le 28 mai 2006 pas mal je vais essayer ça ... mais pour l'instant je retourne au décollage (de ma tapisserie) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 28 mai 2006 Partager Posté(e) le 28 mai 2006 pas mal je vais essayer ça ... mais pour l'instant je retourne au décollage (de ma tapisserie) c'est un exemple théorique, faudra sans doute jouer sur les paramètres de "sort" A+ Je retourne à mon install d'XGl ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 28 mai 2006 Partager Posté(e) le 28 mai 2006 un "ls -r --sort=size" devrait suffire non? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Angel Eyes Posté(e) le 29 mai 2006 Partager Posté(e) le 29 mai 2006 un "ls -r --sort=size" devrait suffire non? effectivement ... je me basais sur le nom des fichiers ... mais vu l'algo, vaut mieux se baser sur leur taille Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 allez, comme vous vous ennuyez. je vous en soumets une petite : (un pote qui me l'a posée, je lui ai donné une réponse qui tient en une ligne ) : j'ai deux fichiers : #cat fichier1.txt Sand arr de p des qu trop f #cat fichier2.txt eman êtes oser estions aciles ! et à partir de ça je récupère un fichier : #cat fichier.txt Sandeman arrêtes de poser des questions trop faciles ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
yoda222 Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 allez, comme vous vous ennuyez. je vous en soumets une petite : (un pote qui me l'a posée, je lui ai donné une réponse qui tient en une ligne ) : j'ai deux fichiers : #cat fichier1.txt Sand arr de p des qu trop f #cat fichier2.txt eman êtes oser estions aciles ! et à partir de ça je récupère un fichier : #cat fichier.txt Sandeman arrêtes de poser des questions trop faciles ! Trop facile... : i=0 ; while [ $i -lt `cat fichier1 | wc -l ` ] ; do i=$((i+1)) ; echo `head fichier1 -n$i | tail -n1``head fichier2 -n$i | tail -n1` >> fichier ; done C'est la première solution qui me soit venue à l'esprit... c'est simple, non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 Moi j'en ai une à base de sed : ((i=1)) while true do line1=$(sed -n "$i{p;q;}" fichier1.txt) line2=$(sed -n "$i{p;q;}" fichier2.txt) [ -z "$line1" ] && [ -z "$line2" ] && return echo "$line1$line2" ((i++)) done (en plus on peut avoir des fichiers de tailles différentes et quitter quand on veut...) Mais je ne suis pas sûr que le faire en shell soit le plus approprié. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 14 juin 2006 Auteur Partager Posté(e) le 14 juin 2006 En partant de la sotution de yoda222 : i=0; while [ $i -lt `cat file1 | wc -l` ] ; do ((i=i+1)) ; sed -n ${i}p file1 | tr -d '\n'; sed -n ${i}p file2 ; done Mais bon ça reste un peu crade. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 c'est marrant je sais pas pourquoi je m'attendais à des trucs à rallonge (cmb) ... aller encore un petit effort Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 comme prévu, en perl c'est bien plus efficace : open(f1,"fichier1.txt") or die;@l1=<f1>;close(f1);chomp @l1; open(f2,"fichier2.txt") or die;@l2=<f2>;close(f2);chomp @l2; for( $i=0; $i<=$#l1 && $i<=$#l2; $i++){print "$l1[$i]$l2[$i]\n";} $ perl script.pl Sandeman arrêtes de poser des questions trop faciles ! Une petite comparaison de vitesse : $ % sh ./test.sh 100 loops shell... real 0m3.953s user 0m1.304s sys 0m2.656s perl... real 0m0.604s user 0m0.272s sys 0m0.328s et en C : #include <stdio.h> int main() { FILE *f1 = fopen("fichier1.txt","r"); FILE *f2 = fopen("fichier2.txt","r"); int c1,c2; while(!(feof(f1) && feof(f2))) { do { c1 = fgetc(f1); if(c1 != EOF && c1!='\n') putchar(c1); } while(c1 != EOF && c1!='\n'); do { c2 = fgetc(f2); if(c2 != EOF) putchar(c2); } while(c2 != EOF && c2!='\n'); } fclose(f2); fclose(f1); return 0; } ça va encore plus vite... C... real 0m0.184s user 0m0.060s sys 0m0.124s (on est limité par les appels sytèmes là) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 fais donc un time paste -d '' fichier1.txt fichier2.txt alors Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 fais donc un time paste -d '' fichier1.txt fichier2.txt alors Sauf que là t'en fait qu'un seul, moi c'est une boucle avec 100 itérations... Et donc le code C est meilleur (compilé avec à peu près les mêmes options que paste) C... real 0m0.194s user 0m0.056s sys 0m0.096s paste... real 0m0.342s user 0m0.096s sys 0m0.184s et les autres options de paste sont faciles à implémenter... ils ont fait quoi quand ils ont programmé? Lien vers le commentaire Partager sur d’autres sites More sharing options...
yoda222 Posté(e) le 14 juin 2006 Partager Posté(e) le 14 juin 2006 Ah ben merci, connaissait pas paste ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.