[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]
Re: shell script
- To:
- Subject: Re: shell script
- From: Fabien Ninoles <>
- Date: Thu Jun 27 00:17:01 2002
- User-agent: Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:1.0.0) Gecko/20020529
Nicolas Couture wrote:
>
>>
>># Extrait les lignes nouvelles de suid vs. suid.old
>>(cat suid suid.old | sort | uniq -u; cat suid) | sort | uniq -d > suid.new
>># sort trie les lignes en ordre (nécessaire pour uniq)
>># uniq -u n'imprime que les lignes uniques
>># uniq -d n'imprime que les lignes dupliquées (une seule fois)
>># cat suid suid.old | sort | uniq -u récupère donc les lignes qui
>>n'appartiennent
>># qu'à un seul des deux fichiers
>># on ajoute ensuite le contenu du nouveau fichier: cat suid
>># L'ensemble de la sortie sera trié et seule les lignes dupliquées
>>(appartenant
>># donc à la fois aux lignes uniques des deux fichiers et à suid
>># seront sélectionnées ( | sort | uniq -d )
>># 'test -s file' vérifie si le fichier a une taille plus grande que zéro.
>>if [ -s suid.new ]; then
>> echo "proceed suid.new";
>>else
>> echo "No new suid files found."
>>fi
>>
>>A+
>>Fabien
>>
>
>Le seul probleme c'est que je n'veux pas savoir s'il y a eu des fichiers effaces. Dans ce cas, je n'ai seulement trouve ce que je cherchais avec diff. Ce que je veux vraiment faire c'est de ne voir que la difference avec le nouveau fichier cree et pas le .old.
>
Le problème avec diff, c'est qu'il peut parfois décider de faire un truc
comme ça:
< fichierA
< fichierB
< fichierC
> fichier1
> fichier2
> fichierB
Comme tu vois, fichierB qui était déjà là, est présenté comme un nouveau
fichier.
La ligne de commande que je te suggère permet justement de sélectionner
que les
lignes vraiment nouvelles du fichier suid qui ne sont pas suid.old.
Comme expliqué
dans les commentaires, ça se fait en 2 étapes:
1- Sélectionnez les lignes qui sont uniques aux deux fichiers. C'est le
rôle
de 'cat suid suid.old | sort | uniq -u'
2- Puis, filtrez toute celle qui sont uniquement dans suid (j'aurais
aussi bien pu choisir de filtrez que celles qui ne sont PAS dans
suid.old aussi, c'est la même chose).
>
<snip>
#! /bin/sh
# Copyright 2001, 2002 Nicolas Couture, Rosemere, Quebec, CA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
+ # function diff à réutiliser partour
+ function getnewlines()
+ {
+ (cat $1 $2 | sort | uniq -u; cat $1) | sort | uniq -d
+ }
+
+ function checkfiles()
+ {
+ filename=$1;
+ if [ "$(getnewlines $filename $filename.old)" = "" ];
+ then
+ echo "No new $filename found.";
+ else
+ echo "New $filename found:"
+ getnewlines $filename $filename.old
+ fi
+ }
# vrfy if user is root before executing this script.
if [ ! "$UID" = "0" ]; then
echo "You need to be root to run this script."
exit 1
fi
# vrfy and create needed files and directories.
if [ -r ./md5sum ]; then
mv ./md5sum ./md5sum.old
for path in `echo $PATH | tr : '\n'`; do
for file in $path/*; do
md5sum $file > ./md5sum; done;
done;
else if [ ! -r ./md5sum ]; then
for path in `echo $PATH | tr : '\n'`; do
for file in $path/*; do
md5sum $file > ./md5sum; done;
done; fi;
fi;
if [ -r ./suid ]; then
mv ./suid ./suid.old
find / \( -perm -004000 -o -perm -002000 \) -type f -print >
../suid; else
find / \( -perm -004000 -o -perm -002000 \) -type f
-print > ./suid ; fi
if [ -r ./guid ]; then
mv guid ./guid.old
find / -group kmem -perm -2000 -print > ./guid; else
find / -group kmem -perm -2000 -print > ./guid; fi
<cut everything else and replace with:>
+ checkfiles suid
+ checkfiles guid
+ checkfiles md5sum
<snip>
>
>Voila!
>
>Si tu as une suggestion je suis le premier en vouloir en entendre parler! :)
>
Voilà pour moi aussi... je n'ai pas testé toutefois, j'avoue, il se
pourrait donc qu'une erreur se soit glissée quelque part, mais bon, si
c'est le cas, ça te permettra d'étudier le code!
>Merci,
> Nicolas
>
A+
Fabien