QNA > L > Linux: C'è Un Modo Per Impedire La 'Cancellazione'/'Rinomina' Di Un File Aperto?

Linux: C'è un modo per impedire la 'cancellazione'/'rinomina' di un file aperto?

In Unix/Linux gli attributi di un file (il suo nome, e anche la sua esistenza) sono disaccoppiati dal suo utilizzo. Gli utenti che hanno i permessi appropriati sulla directory che contiene un file sono liberi di spostarlo all'interno del suo filesystem (con lo stesso nome o con uno diverso) o di cancellarlo. Nessuna delle due operazioni ha alcun effetto su un processo che ha il file in questione aperto. Questo perché il nome del percorso di un file è semplicemente un mezzo per localizzarlo. Una volta che il file è stato aperto, un descrittore di file (o un puntatore di file) viene utilizzato per fare successivamente riferimento ai dati.

Nota che su un sistema Unix la cancellazione di un file non fa altro che invocare "unlink" che semplicemente decrementa il numero di collegamenti del file. Questo perché quello che si considera il nome del file non è altro che un collegamento rigido al file vero e proprio. Ci può essere un numero qualsiasi di tali collegamenti, conservando così lo spazio su disco poiché non c'è che una singola istanza del contenuto del file. Gli hard link sono costretti a rimanere all'interno dello stesso filesystem (eccetto per Apple's OS X, che ha eliminato questo vincolo per supportare Time Machine).

Solo quando il numero di link va a zero il filesystem si dimentica di quel file. Dico "dimentica" perché è tutto ciò che è certo che accada allora... l'uso corrente dei dati di quel file non è influenzato. Cioè, quando c'è ancora un processo che ha quel file aperto, esso continuerà allegramente per la sua strada... lavorando bene. Il sistema operativo libererà lo spazio su disco sottostante solo quando tutti i processi che lo hanno collegato lo chiuderanno o saranno terminati. A causa di questo, a volte si vede un utilizzo più alto su un filesystem di quello che può essere spiegato dall'esame della struttura delle directory!

Posto quanto sopra, sarebbe bello se uno potesse "cancellare" un file, continuare ad usarlo, e più tardi (confidando che non sia intervenuto nessun evento spiacevole) mettere un nome di file su quei dati. Sfortunatamente (fortunatamente?) Unix non fornisce alcun mezzo per riattaccare tali dati. (La nuova serie di chiamate basate su directory-file-descriptor ("*at") richiedono tutte un pathname). Quindi l'approccio migliore è quello di nascondere i file come meglio si può.

Di Rudyard Eversley

Come si apre un file di testo di 30 GB su una macchina Linux? :: Qual è la differenza tra EXD e EXE?
Link utili