Trovare e recuperare i file eliminati da lsof: Una guida completa

Come trovare e rimuovere/recuperare i file aperti ma eliminati con lsof

Cercate una soluzione per trovare, rimuovere e recuperare i file eliminati da lsof che sono ancora aperti nel vostro sistema? Scoprite come eseguire queste azioni in questo articolo.

Scarica | Win Scarica | Mac
100% sicuro e download gratuito

Una volta esaurito lo spazio su disco, spesso cerchiamo nel filesystem del nostro computer Linux alcuni file che non ci servono più e li cancelliamo. Purtroppo, l'eliminazione dei file potrebbe non avere successo se ci sono processi attivi che fanno riferimento ad essi. In questa situazione, è possibile arrestare ogni processo che mantiene un riferimento aperto prima di rimuovere i file.

Tuttavia, anche questo potrebbe essere problematico. Ad esempio, alcuni programmi non dovrebbero essere terminati durante l'orario di lavoro. Come soluzione, questo articolo fornirà un tutorial completo che copre tutti i passaggi necessari per aiutarvi a trovare, rimuovere e recuperare i file eliminati con lsof.

Parte 1. Che cos'è il comando lsof?

comando lsof

Il comando lsof nei sistemi Unix e Linux sta per "List Open Files". Si tratta di un potente strumento per la segnalazione di informazioni sui file aperti dai processi attivi di un sistema. Il comando lsof fornisce informazioni sui file aperti utilizzati dai processi, quali socket di rete, file regolari, directory, file speciali a blocchi e file di caratteri speciali.

  • La sintassi del comando lsof è la seguente:

lsof [options]

Le opzioni utilizzate con il comando lsof determinano le informazioni che verranno visualizzate e il formato in cui verranno presentate.

Il comando lsof dispone di numerose opzioni e la tabella seguente elenca gli argomenti più comunemente utilizzati.

Opzione
Descrizione
lsof Elenca tutti i file aperti
-b Nasconde i blocchi del kernel
/ [file system] / Visualizza i file aperti in un file system specificato
/dev/tty* Mostra i file associati al terminale
-u [username] Stampa i file aperti di proprietà di un particolare utente
-u ^[username] Stampa i file aperti di proprietà di tutti gli utenti tranne uno specifico.
-c [process] Elenca tutti i file utilizzati da un particolare processo
-p [process ID] Visualizza tutti i file aperti collegati a uno specifico ID di processo.
-p ^[process ID] Mostra i file aperti utilizzati da tutti gli altri ID di processo.
-R Elenca gli ID dei processi padre
+D [directory path] Stampa tutti i file aperti in una directory
-i Mostra tutti i file utilizzati dalle connessioni di rete
-i [IP version number] Filtra i file in base alla loro versione IP
- i [udp or tcp] Filtra i file aperti in base al tipo di connessione (TCP o UDP).
-i :[port number] Trova i processi in esecuzione su una porta specificata
-i :[port range] Trova i processi in esecuzione su una serie di porte
-t [file name] Elenca gli ID dei processi che hanno avuto accesso a un file specifico.
# kill -9 'lsof -t -u [user]' Uccide tutti i processi di proprietà di un utente
-d mem Visualizza tutti i file mappati in memoria
[path] | grep deleted Stampa dei file eliminati bloccati
man Apre la pagina del manuale

Parte 2. Come trovare e rimuovere i file aperti ma eliminati con lsof?

Cerchiamo innanzitutto di afferrare il concetto. Un file Linux è un collegamento a un inode, che consiste in tutte le proprietà del file dei blocchi di dati sul disco che comprendono il contenuto del file. Quando si rimuove un file, si rimuove il collegamento al suo inode, ma non l'inode stesso; altri processi possono ancora utilizzarlo. Solo dopo che hanno finito e tutti i collegamenti sono stati rimossi, un inode e i blocchi di dati a cui puntava vengono resi disponibili per la scrittura.

Anche se il file sembra scomparire nell'elenco delle directory, i dati si trovano altrove se un processo lo ha ancora aperto.

La directory/proc entrerà in gioco nello pseudo-filesystem dei processi Linux. Ogni processo sul sistema ha una directory con il suo nome, che contiene molte cose, tra cui una sottodirectory fd (file descriptor) con i collegamenti a tutti i file aperti dal processo. Anche se un file è stato eliminato dal filesystem, una copia dei dati è ancora presente:

Passo 1. Per determinare dove andare, ottenere process id e il file descriptordel processo che ha il file aperto usando lsof. Una volta ottenute queste informazioni da lsof, copiate i dati da /proc.

  • Creare un text file:

$ man lsof | col -b > myfile

Passo 2. Esaminate quindi il contenuto del file appena creato:

  • Il comando less dovrebbe visualizzare una versione in chiaro della massiccia pagina man di lsof.

$ less myfile

Passo 3. Per sospendere il comando less, premere Ctrl-Z.

  • Verificare che il file sia ancora presente nel prompt della shell:

$ ls -l myfile
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:14 myfile
$ stat myfile
File: `myfile'
Size: 114383 Blocks: 232 IO Block: 4096 regular file
Device: 341h/833d Inode: 1276722 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1010/ jimbo) Gid: ( 1010/ jimbo)
Access: 2006-10-31 16:15:08.423715488 -0400
Modify: 2006-10-31 16:14:52.684417746 -0400
Change: 2006-10-31 16:14:52.684417746 -0400

Passo 4. Per favore, rimuovetelo.

  • Questa volta non c'è più.

$ rm myfile
$ ls -l myfile
ls: myfile: No such file or directory
$ stat myfile
stat: cannot stat `myfile': No such file or directory
$

A questo punto, non si deve autorizzare il processo di continuazione dell'uso del file per uscire, perché così facendo il file andrà perso per sempre.

Parte 3. Come recuperare i file cancellati usando lsof?

Dopo aver trovato e rimosso i file aperti che sono stati eliminati, li recupereremo ora con lsof. Se un file è stato cancellato ma è ancora aperto da un processo, lsof può visualizzare informazioni sul file, compresi il descrittore di file, l'ID del processo e il percorso completo.

Passo 1. Date un'occhiata a ciò che lsof ha da dire al riguardo:

$ lsof | grep myfile
less 4158 jimbo 4r REG 3,65 114383 1276722 /home/jimbo/myfile (deleted)

La prima colonna mostra il nome del comando associato al processo, la seconda colonna contiene l'id del processo e la quarta colonna contiene il descrittore del file (la "r" indica che si tratta di un file regolare). Si sa che il processo 4158 ha il file aperto e il descrittore del file 4. È tutto ciò che occorre sapere per copiare il file da /proc.

Passo 2. Poiché si sta ripristinando il file, si potrebbe pensare che usare il flag -a con cp sia la cosa giusta da fare, ma non è una buona cosa da fare.

  • Invece di copiare i dati letterali del file, si copierà un collegamento simbolico ormai rotto al file, così come era precedentemente elencato nella sua directory originale:

$ ls -l /proc/4158/fd/4
lr-x------ 1 jimbo jimbo 64 Oct 31 16:18 /proc/4158/fd/4 -> /home/jimbo/myfile (deleted)
$ cp -a /proc/4158/fd/4 myfile.wrong
$ ls -l myfile.wrong
lrwxr-xr-x 1 jimbo jimbo 24 Oct 31 16:22 myfile.wrong -> /home/jimbo/myfile (deleted)
$ file myfile.wrong
myfile.wrong: broken symbolic link to `/home/jimbo/myfile (deleted)'
$ file /proc/4158/fd/4
/proc/4158/fd/4: broken symbolic link to `/home/jimbo/myfile (deleted)'

  • Quindi, invece di tutto questo, sarà sufficiente un semplice cp:

$ cp /proc/4158/fd/4 myfile.saved

  • Infine, ricontrollate che abbiate fatto tutto correttamente:

$ ls -l myfile.saved
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:25 myfile.saved
$ man lsof | col -b > myfile.new
$ cmp myfile.saved myfile.new

Parte 4. Una semplice alternativa a lsof per recuperare i file cancellati in Linux

Se cercate un'alternativa facile da usare a lsof per recuperare i file cancellati, prendete in considerazione l'uso di un software di recupero file per Linux come Wondershare Recoverit. A differenza di lsof, uno strumento a riga di comando, Recoverit ha una semplice interfaccia grafica (GUI) che lo rende facile da usare, anche per chi ha poca o nessuna esperienza tecnica. Con Recoverit è possibile scansionare rapidamente il disco rigido del computer e recuperare i file eliminati con pochi clic.

Wondershare Recoverit - Il Vostro Software di Recupero Linux Sicuro e Affidabile

5.481.435 persone lo hanno scaricato.

Recupera documenti, foto, video, musica, e-mail e altri oltre 1000 tipi di file persi o cancellati in modo efficace, sicuro e completo.

Compatibile con tutte le principali distro Linux, tra cui Ubuntu, Linux Mint, Debian, Fedora, Solus, Opensuse, Manjaro, ecc.

Assiste in oltre 500 scenari di perdita di dati, come l'eliminazione, la formattazione del disco, l'arresto del sistema operativo, l'interruzione di corrente, l'attacco di virus, la perdita di una partizione e molti altri.

La semplice interfaccia point-and-clic consente di recuperare i dati dai dischi rigidi Linux in pochi clic.

Funziona attraverso una connessione remota. È possibile recuperare i dati persi anche quando il dispositivo Linux si blocca.

Vi mostreremo come utilizzare Wondershare Recoverit in Linux per recuperare i dati cancellati. Se la lettura delle istruzioni risulta difficile da seguire, ecco un video con un'esercitazione più approfondita.

Scarica Gratis

Per Windows XP/Vista/7/8/10/11

Scarica Gratis

Per macOS X 10.10 - macOS 13

Passo 1. Recoverit Linux Recovery

Avviare il software Wondershare Recoverit sul dispositivo Linux. Quindi, selezionare le opzioni NAS and Linux sul lato sinistro dell'interfaccia principale. Per continuare, selezionare Linux Recovery.

recoverit linux recovery

Passo 2. connessione remota linux

Nella nuova finestra visualizzata, inserire le informazioni necessarie per stabilire una connessione remota. Al termine, premere Connetti.

connessione remota linux

Mentre si attende che venga stabilita la connessione, Recoverit inizierà una ricerca automatica dei dati persi su un computer Linux.

Passo 3. Processo di recupero

A seconda della quantità di dati da scansionare, la procedura di scansione può richiedere un certo tempo; lo stato di scansione viene visualizzato nella barra inferiore. La caratteristica migliore di Recoverit è la possibilità di mettere in pausa la scansione ogni volta che un file deve essere ripristinato.

processo di scansione automatica

Al termine del processo di scansione, Recoverit consente di ispezionare i file per verificare che siano quelli che si desidera recuperare. Selezionare Recupera per salvare il file sul dispositivo Linux.

anteprima e recupero dei dati

Il software vi chiederà di selezionare una posizione per i file recuperati sul vostro dispositivo. Assicuratevi di andare in una posizione diversa da quella in cui avete perso i file in precedenza.

Scarica Gratis

Per Windows XP/Vista/7/8/10/11

Scarica Gratis

Per macOS X 10.10 - macOS 13

Riassunto

In conclusione, "lsof" è un'utile utilità da riga di comando per visualizzare le informazioni sui file aperti dai processi nei sistemi Unix-like. Tuttavia, trovare e recuperare i file aperti ma eliminati è un processo complesso e richiede un certo livello di competenza tecnica. In questi casi, un software di recupero file come Recoverit può essere un'alternativa più facile da usare, in quanto fornisce una semplice interfaccia grafica per la scansione e il recupero rapido dei file eliminati.

Le persone chiedono anche