Come posso scoprire quali file sono stati eliminati da `rm -rf`?


1

Ho avuto un piccolo problema durante l'esecuzione di uno script: questo script legge un file di configurazione $HOMEe aveva ~/Downloadsal suo interno.

Invece di salvare un file all'interno ~/Downloadsquando ho eseguito lo script, poiché l'ho eseguito all'interno ~/Library, ha creato ~/Library/~/Downloads.

All'interno ~/Library, l'ho fatto rm -rf ~. Dopo 1-2 secondi ho capito il mio errore e ho smesso di usare ˆ-C- stava cancellando il mio $HOME.

So che alcuni file sono stati eliminati, ma non so quali. Alcuni file nascosti (bash_functions, bash_aliases) sono stati eliminati e ho avuto un backup, ma alcuni file su $HOMEnon sono sottoposti a backup .

Ho fatto una rapida verifica sui miei file (vedendo accese le date modificate della cartella $HOME), mi è sembrato ok, ma so che non posso fidarmi dei miei occhi usando questo approac.

So che se cambio un file all'interno di una cartella, Mac cambierà il flag "modificato" per quella cartella, ma solo se un figlio diretto di quella cartella è stato modificato. Esempio:

~/Downloads
    - file.txt
    /Mp3
        - music.mp3

Quindi, se si cambia file.txt, ~/Downloadsverrà modificato il flag modificato, ma se si cambia music.mp3, ~/Downloadsnon verrà modificato il flag modificato.

Quindi qui sta il problema: non so come rm -rfinizia a cancellare i miei file. È sequenzialmente? È in un ordine arbitrario? Potrebbe essere che ha iniziato a cancellare ~/Pictures/Weddinge improvvisamente è andato a fare ~/Videos? Non lo so. Credo che non si elimini in sequenza, quindi ora posso avere una directory davvero profonda senza file importanti dopo il mio rm -rferrore.

C'è un posto sul Mac in cui rm -rfsono conservati tutti i file eliminati (solo i nomi dei file)? Non ho trovato nulla del genere, quindi l'ho fatto

find ~ -type d -mtime -1 > modified_folders.txt

sul mio terminale da quando ho fatto l'errore rm -rfoggi. Il risultato del findcomando, le cartelle modificate (se si elimina un file, Mac cambia il flag modificato della cartella principale diretta) sembra non avere una struttura "profondamente arbitraria" come ~/Pictures/Personal/Birthday/2010/Cake... posso quindi supporre che rm -rfnon abbia toccato il punto sbagliato file e sono stato in grado di fermare l'armageddon semplicemente fermandomi rm -rf ~dopo 1-2 secondi (quindi ha eliminato solo alcuni dei file nascosti $HOME)?

(Ho già riavviato la mia macchina, funziona bene. Sono su Snow Leopard, quindi tmutil non è una soluzione penso ...)

(Conosco già alcune soluzioni per il ripristino come TestDisk , ma sto provando a usarlo come ultimo approccio (se sbaglio nei miei presupposti sullo findsnippet).

Risposte:


4

Non c'è modo di sapere con certezza quali file siano stati eliminati. Non c'è nessun elenco memorizzato, nessun cestino, questo è unix (bene BSD) e non hai buone seconde possibilità con rm -rf

Come hai visto però, puoi dedurre cosa potrebbe essere stato cancellato prima osservando il comportamento del comando rm.

Ho creato una cartella con alcune sottocartelle, tra cui alcune con un punto all'inizio del nome e ho inserito alcuni file in ciascuna.

L'ordine è sempre in ordine alfabetico con le directory nascoste con prefisso punto che vengono prima eliminate.

Se confronti un backup con la tua struttura di directory, una volta che ti sei spostato in ordine alfabetico e hai iniziato a trovare i file nel backup che sono ancora sul tuo disco principale, penso che puoi essere certo di non aver perso altri file.


Questo test sull'ordine è stato interessante, come hai fatto? Hai creato un mucchio di file, fatto rm -rfe fermato come ho fatto io? Se è vero che solo i punti vengono eliminati per primi, credo di aver perso solo bash_functions e bash_aliases (probabilmente altri file / directory dot, ma le distribuzioni Python sono installate su .local e non è stato eliminato, quindi almeno da quella cartella ad altri , tutto è intatto).
Qualcuno usa ancora il tuo MS-DOS il

2
In bash crea una directory temporanea e poi touch b{a..z}{a..z}.foo. In una seconda shell sudo fs_usage -w | grep unlink. Divertiti a guardare la sequenza di rmin azione.
bmike

L'ho fatto piuttosto manualmente e ho usato il flag -i per porre il veto alla cancellazione effettiva. @bmike, è davvero fantastico!
Neil Trodden,

3

rmelimina le voci della struttura / directory dell'inode senza creare un registro. Saresti salvato se hai attivato il controllo dei file, ma non è una cosa predefinita su Mac OS X.

A mio avviso della situazione descritta, hai le seguenti opzioni:

  • coinvolgere un software non ripristinato per tentare di trovare frammenti di file o dati che somigliano a voci / inode di file e filtrare quei risultati per potenziali file modificati nell'intervallo di tempo di rm.
  • confrontare l'attuale struttura delle directory con un backup recente ( tmutil comparesarebbe uno strumento Lion ideale, ma è possibile utilizzare BackupLoupe o altri se il backup è TimeMachine)

"controllo file attivato" - che cos'è esattamente? Posso attivare questa opzione in qualche modo sul mio mac? Questo sembra utile.
Qualcuno usa ancora MS-DOS il

2
man auditdovrebbe iniziare. È standard BSD con alcuni speciali aslper la gestione della registrazione in modo Mac, ma la configurazione di auditd è standard UNIX.
bmike

2

C'è un posto sul Mac in cui sono conservati tutti i file eliminati con rm -rf (solo i nomi dei file)?

Come altri hanno già sottolineato: non esiste un posto simile a meno che non ti sia capitato di avere il tuo filesystem configurato con auditing e snapshot.

Tuttavia, puoi usare Time Machine per capire cosa è cambiato. Stavi eseguendo un normale backup di Time Machine del tuo disco che conteneva la tua home directory, giusto?

In tal caso: apri Time Machine per la tua home directory e torna indietro nel tempo appena prima di eseguire il rm. Dovresti essere in grado di vedere i file che sono stati modificati o mancanti. E persino ripristinarli. Non è un'ottima vista del sistema, ma lo farà in un pizzico.


2
O ripristinare in una posizione alternativa e diff directory ...
bmike
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.