著者: Giuseppe De Marco 日付: To: ciotoniflow 題目: 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)):
Cmq preferisco allegarlo...
Non ho resistito alla opzione di passare anche un file come argomento... disagio... è puro disagio...
buona notte e asta l'asta