Ciao,
io avrei la necessità di sapere, all'interno di un file system ext4, qual'e' l'ultima data in cui è stato modificato un file al suo interno. Non mi serve sapere il file, solo il timestamp di ultima modifica (ma non di ultima lettura ne' quando è stato montato l'ultima volta).
Attualmente per farlo mi leggo tutti i file e prendo la data di modifica più grande. funziona, ma è poco efficiente perchè devo scorrermi tutti i file (parecchi GB). C'e' forse qualche parametro direttamente sul file system?
Spero di essermi spiegato.
Saluti!
Ciao,
io avrei la necessità di sapere, all'interno di un file system ext4, qual'e' l'ultima data in cui è stato modificato un file al suo interno. Non mi serve sapere il file, solo il timestamp di ultima modifica (ma non di ultima lettura ne' quando è stato montato l'ultima volta).
Attualmente per farlo mi leggo tutti i file e prendo la data di modifica più grande. funziona, ma è poco efficiente perchè devo scorrermi tutti i file (parecchi GB). C'e' forse qualche parametro direttamente sul file system?
Spero di essermi spiegato.
Saluti!
Occhio croce non c'e` un *singolo* punto dove salva il timestamp di ultima modifica a qualsiasi file. Se ci fosse, mi sa che sarebbe un bel bottle neck. Almeno cosi` penso da considerazioni teoriche... qualcuno mi corregga se non e` cosi`.
Invece forse potrebbe darti una man fanotify (7) che e` il cugino di inotify e` almeno dalla man page sembra riesca a trappare eventi sull'intero filesystem...
Bye, Chris.
On 25/02/2018 16:35, Chris Mair wrote:
Se ci fosse, mi sa che sarebbe un bel bottle neck.
Ciao Chris,
già sembra logico. Poi mi è venuto in mente che c'e' il comando df che da lo spazio usato in un tempo brevissimo, quindi lo spazio usato dovrebbe essere scritto in un punto globale o?
Sì, se ricordo bene è il superblock a mantenere il conto dei blocks liberi. Però afaik nulla riguardo la data di ultimo accesso/modifica.
On Feb 26, 2018 07:45, "Davide" d@vide.bz wrote:
On 25/02/2018 16:35, Chris Mair wrote:
Se ci fosse, mi sa che sarebbe un bel bottle neck.
Ciao Chris,
già sembra logico. Poi mi è venuto in mente che c'e' il comando df che da lo spazio usato in un tempo brevissimo, quindi lo spazio usato dovrebbe essere scritto in un punto globale o? _______________________________________________ http://lists.lugbz.org/cgi-bin/mailman/listinfo/lugbz-list
Se ci fosse, mi sa che sarebbe un bel bottle neck.
Ciao Chris,
già sembra logico. Poi mi è venuto in mente che c'e' il comando df che da lo spazio usato in un tempo brevissimo, quindi lo spazio usato dovrebbe essere scritto in un punto globale o?
In effetti...
Apparentemente df usa statfs() ma se leggi man statfs vedi che in struct statfs c'e` lo spazio, ma non il timestamp di ultima modifica.
Bisognerebbe chiedere a qualcuno che conosce meglio l'API del kernel. Summon THOMAS! Vediamo se funziona lo spell ;)
Bye, Chris.
On Mon, 26 Feb 2018, Chris Mair wrote:
Summon THOMAS! Vediamo se funziona lo spell ;)
Certo che funziona, però non conosco il file system API abbastanza per poter dare un consiglio utile. Ho dato un'occhiata al VFS interface, ma non ho visto niente che potrebbe essere d'aiuto. Il superblock del ext4fs contiene un campo "s_wtime" (Write time, in seconds since the epoch) però non so se vale la pena di usare questo campo: è specifico per ext4 e poi potrebbe non contenere l'informazione cercata: se il file system è stato montato con le opzioni standard (cioé senza noatime) allora un update del campo atime è un'operazione di scrittura, dal punto di vista del file system…
Una domanda per Davide, a che cosa ti serve questa informazione? Forse esiste un'modo alternativo per ottenere la data che cerchi?
Thomas
On Sun, Feb 25, 2018 at 04:35:10PM +0100, Chris Mair wrote:
Ciao,
io avrei la necessità di sapere, all'interno di un file system ext4, qual'e' l'ultima data in cui è stato modificato un file al suo interno. Non mi serve sapere il file, solo il timestamp di ultima modifica (ma non di ultima lettura ne' quando è stato montato l'ultima volta).
Attualmente per farlo mi leggo tutti i file e prendo la data di modifica più grande. funziona, ma è poco efficiente perchè devo scorrermi tutti i file (parecchi GB). C'e' forse qualche parametro direttamente sul file system?
Spero di essermi spiegato.
Saluti!
Occhio croce non c'e` un *singolo* punto dove salva il timestamp di ultima modifica a qualsiasi file. Se ci fosse, mi sa che sarebbe un bel bottle neck. Almeno cosi` penso da considerazioni teoriche... qualcuno mi corregga se non e` cosi`.
Invece forse potrebbe darti una man fanotify (7) che e` il cugino di inotify e` almeno dalla man page sembra riesca a trappare eventi sull'intero filesystem...
Prova a controllare uno di questi:
https://stackpointer.io/unix/linux-monitor-file-system-changes/397/
ho trovato che "tune2fs -l" riporta la data di ultima scrittura del file system :-) (oltre che l'ultimo mount, ecc...)
Solo che non sembra l'ultima modifica di un file ma probabilmente di "qualsiasi" cosa nel file system.
Provo a disabilitare gli access timestamp sui file per vedere se in questo modo la data potrebbe corrispondere con le modifiche dei file
On 26/02/2018 09:12, Marco Ciampa wrote:
On Sun, Feb 25, 2018 at 04:35:10PM +0100, Chris Mair wrote:
Ciao,
io avrei la necessità di sapere, all'interno di un file system ext4, qual'e' l'ultima data in cui è stato modificato un file al suo interno. Non mi serve sapere il file, solo il timestamp di ultima modifica (ma non di ultima lettura ne' quando è stato montato l'ultima volta).
Attualmente per farlo mi leggo tutti i file e prendo la data di modifica più grande. funziona, ma è poco efficiente perchè devo scorrermi tutti i file (parecchi GB). C'e' forse qualche parametro direttamente sul file system?
Spero di essermi spiegato.
Saluti!
Occhio croce non c'e` un *singolo* punto dove salva il timestamp di ultima modifica a qualsiasi file. Se ci fosse, mi sa che sarebbe un bel bottle neck. Almeno cosi` penso da considerazioni teoriche... qualcuno mi corregga se non e` cosi`.
Invece forse potrebbe darti una man fanotify (7) che e` il cugino di inotify e` almeno dalla man page sembra riesca a trappare eventi sull'intero filesystem...
Prova a controllare uno di questi:
https://stackpointer.io/unix/linux-monitor-file-system-changes/397/
Ciao,
2018-02-25 15:56 GMT+01:00 Davide d@vide.bz:
Ciao,
io avrei la necessità di sapere, all'interno di un file system ext4, qual'e' l'ultima data in cui è stato modificato un file al suo interno. Non mi serve sapere il file, solo il timestamp di ultima modifica (ma non di ultima lettura ne' quando è stato montato l'ultima volta).
Senza scomodare le API del kernel come suggerisce Chris, puoi forse ottenere la stessa informazione usando una combinazione di find (opzioni -mtime -newer o newerXY) e stat.
Potresti provare una cosa del genere (Standard disclaimer: untested!): 1. trovi un elenco dei file modificati con find (find -t file -mtime 1 # file modificati nelle ultime 24 ore) 2. ottieni l'ultima modifica del contenuto di questo/i file con stat -c %y (valore di "Modify"), 3. ordini l'output con sort -r e prendi il primo risultato. 4. conservi il nome del file più recente ed alla successiva invocazione del programma al punto 1 usi find -newer $filename.
Forse non è la soluzione migliore, ma dovrebbe funzionare. Stefano