Re: [Ciotoflow] trovata soluzione a file che si rinomina, si…

Delete this message

Reply to this message
Autor: Giuseppe De Marco
Data:  
Dla: ciotoniflow
Temat: Re: [Ciotoflow] trovata soluzione a file che si rinomina, si sposta e scompare
>Mi sa che me ne avevi già parlato..molto utile sto coso!

Sì, per mezzo di file descriptors controlla le directories del disco e il file che si rinomina e sposta può essere notificato dal kernel nell'esatto momento in cui un inode del filesystem viene modificato.

>Comunque visto che e' stato nominato posto qui il "codice" (che mi sa che
>avevo mandato solo ad Asbesto via mail)

Wow, codice.

<codice>
#!/bin/bash
NOME=$RANDOM
find / -type d > .tree
NASCONDIGLIO=`cat .tree | sort --random-sort | head -1`
echo "$0 sparisce nei meandri dell'ano di CRISTO!!"
mv ./$0 $NASCONDIGLIO/$NOME
rm .tree
echo "sono $NASCONDIGLIO/$NOME"
</codice>

vabè, aldilà di inotify e inode triggers etc.etc. Ci sono alcuni elementi certi:

il file si rinomina numericamente, quindi può essere trovato con una regola di find + espressione regolare, tipo (questa funzia !):
find . -iregex '\./[a-z0-9/]*[0-9]$' -regextype posix-egrep 

...anzi ancora meglio, forziamo l'end numerico sulla path con egrep, specifichiamo che è un file e che è stato creato/modificato negli ultimi 5 minuti  :
find . -iregex '\./[a-z0-9/]*[0-9]$' -regextype posix-egrep -type f -cmin -5 | grep -e '/[0-9]*$'


cmq ripensandoci bene forse è meglio evitare di nominarlo esclusivamente con il random, metti caso andasse a sovrascrivere un filedescriptor del kernel tipo:
./proc/2284/task/2284/fdinfo/255

sarebbe cmq un mezzo dito al culo. Faccio queste proposte: 

per evitare collisioni e rendere ancora più difficile la ricerca dopo averlo rinominato con un random calcoliamo un md5sum e creiamo il nome md5sum+RANDOM;
L'attuale procedura può generare eccezioni, tipo: mv: impossibile creare il file regolare "/proc/1446/task/1446/attr/372" . Ovvero: In alcune directory di proc non è possibile scrivere. es: touch /proc/1446/task/1446/attr/cippa. Quindi si dovrebbero escludere le directories non scrivibili nemmeno da root !

inoltre:
possiamo velocizzare il processo di individuazione della directory random partendo da un array costruito sull'output di / e prelevare un altro array da una delle sue subdirectory con una ricorsione ad albero randomizzata, così da fare una selezione a cazzo senza sfriculiare tutto il filesystem. Anche perchè quel find ci mette una vita infinita.

Questi sono i miglioramenti possibili. I contro è che il codice aumenta... vabè, dopo diversi tentativi di randomizzare una navigata ad albero in bash scripting ho ceduto al pitone e ho embedato la routine che genera una directory random del filesystem, evitando quindi di smerigliare la testina del disco a mille quindi, ai fatti, il file si sposta molto più velocemente, diciamo in meno di un secondo:

<codice>
#!/bin/bash
if [ -n "$1" ]

then 
echo "$1 è la vittima sacrificale :)"
TRIPPER=$1
else
echo "vai $0, immolati nel filesystem... "
TRIPPER=$0
fi

NOME=$RANDOM

python <<END
import random
import os

subdir=None


def schiaffa():

top_dir='/'
recursion=random.randint(0, 33)
subdirs = [name for name in os.listdir(top_dir) if os.path.isdir(os.path.join(top_dir, name))]
subdirs.pop(subdirs.index('lost+found'))
subdirs.pop(subdirs.index('proc'))
subd = subdirs[random.randint(0, len(subdirs)-1)]
subdir = None
for dirname, dirnames, filenames in os.walk(os.path.join(top_dir,subd)):

try:
subdirname = dirnames[random.randint(0, len(dirnames)-1)]
subdir = os.path.join(dirname, subdirname)
except:

for subdirname in dirnames:
subdir = os.path.join(dirname, subdirname)

recursion -= 1

if recursion == 0 or recursion < 0: break
return subdir

while not subdir:
subdir = schiaffa()

f = open('.gnorla', 'w')

f.writelines(subdir)
f.close()
END

NASCONDIGLIO=(`cat .gnorla`)
rm .gnorla


echo "$TRIPPER is taking away..."
mv ./$TRIPPER $NASCONDIGLIO/$NOME

MD5_HASH=`md5sum $NASCONDIGLIO/$NOME | awk -F' ' {'print $1'}`
mv $NASCONDIGLIO/$NOME $NASCONDIGLIO/$MD5_HASH$NOME
#rm .tree
echo "sono $NASCONDIGLIO/$MD5_HASH$NOME"
</codice>


Cmq preferisco allegarlo... 
Non ho resistito alla opzione di passare anche un file come argomento... disagio... è puro disagio...
buona notte e asta l'asta