CH-J Server Managergestione server su SSH
Menu
Tutte le guide e gli articoli →

Un file remoto è cambiato mentre lo modificavi: come evitare di sovrascriverlo

Come rilevare che qualcun altro ha modificato un file sul server durante il tuo intervento, confrontare le versioni e salvare senza perdere nessuna delle due modifiche.

Come si presenta il problema

Apri un file e, mentre modifichi la tua copia, qualcos’altro scrive nell’originale: un altro amministratore, un’esecuzione del sistema di gestione della configurazione, un aggiornamento di un pacchetto o l’applicazione stessa. Se poi salvi, l’altra modifica scompare senza un errore. La modifica locale seguita dal caricamento tramite SFTP è particolarmente esposta, perché il tempo tra lettura e scrittura è lungo e un semplice caricamento non confronta nulla.

Registra lo stato prima di iniziare

Annota il checksum e l’ora dell’ultima modifica quando scarichi il file. Controllali di nuovo immediatamente prima di caricarlo. Un checksum diverso significa che il file è cambiato e non dovresti sovrascriverlo senza esaminarlo.

sha256sum /etc/example.conf
stat -c '%y %U %G %a' /etc/example.conf

Confronta e unisci le modifiche

Conserva la tua copia modificata con un nuovo nome, recupera la versione attuale e confrontala con quella da cui sei partito e con la tua. Poi applica la tua modifica alla versione attuale anziché sovrascriverla. Il comando diff3 può mostrare tutte e tre le versioni insieme.

diff -u example.conf.orig example.conf.current
diff -u example.conf.orig example.conf.mine
diff3 example.conf.mine example.conf.orig example.conf.current

Scopri cosa modifica il file

Se il file continua a cambiare, individua la causa prima di modificarlo di nuovo. Controlla chi lo tiene aperto ed esamina il journal e la cronologia dei pacchetti. Se il file è gestito da un sistema di gestione della configurazione, modifica lì il modello, altrimenti l’esecuzione successiva sostituirà la tua modifica.

sudo lsof /etc/example.conf
sudo journalctl --since "1 hour ago" --no-pager | grep example.conf
grep example.conf /var/log/dpkg.log

Un avviso non è un blocco

Editor come vim e nano ti avvertono quando un file è cambiato dopo l’apertura, ma non impediscono a un altro processo di scriverci. Lo stesso vale per il confronto dei checksum: un controllo subito prima del salvataggio riduce molto l’intervallo di rischio, ma non lo azzera. Sui server su cui lavorano più persone, una fonte della configurazione sotto controllo di versione protegge meglio di qualsiasi editor.

Protezione del salvataggio in CH-J Server Manager

L’editor di File Manager ricontrolla il file al salvataggio. Se il contenuto, i permessi o la destinazione del collegamento sono cambiati, il salvataggio si interrompe e l’originale resta com’è. Puoi quindi caricare la versione attuale dal server, ma questo elimina le modifiche non salvate: prima copia il tuo testo altrove. L’editor non unisce le versioni al posto tuo. Per i trasferimenti, l’applicazione chiede conferma prima di sostituire una destinazione cambiata o già esistente e ti invita a ricominciare se l’origine è cambiata durante il trasferimento.

Documentazione dettagliata

man: stat →

man: diff →

Sblocco biometrico e sicurezza →