Jak problém vzniká
Otevřete soubor a zatímco upravujete svou kopii, do originálu zapíše někdo nebo něco jiného: další správce, běh nástroje pro správu konfigurace, aktualizace balíčku nebo samotná aplikace. Když poté uložíte soubor, cizí změna zmizí bez chybového hlášení. Zvlášť náchylné jsou místní úpravy s následným nahráním přes SFTP, protože mezi čtením a zápisem uplyne dlouhá doba a obyčejné nahrání nic neporovnává.
Před začátkem zaznamenejte stav
Při stažení souboru si poznamenejte kontrolní součet a čas poslední změny. Bezprostředně před nahráním je znovu zkontrolujte. Jiný kontrolní součet znamená, že se soubor změnil, a neměli byste jej přepsat bez prohlédnutí změn.
sha256sum /etc/example.conf
stat -c '%y %U %G %a' /etc/example.confPorovnejte a slučte změny
Uchovejte upravenou kopii pod novým názvem, stáhněte aktuální verzi a porovnejte ji s výchozí verzí i se svou upravenou kopií. Poté svou změnu zapracujte do aktuální verze místo jejího přepsání. Příkaz diff3 dokáže zobrazit všechny tři verze společně.
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.currentZjistěte, co soubor mění
Pokud se soubor stále mění, před další úpravou zjistěte příčinu. Zkontrolujte, kdo jej má otevřený, a prohlédněte journal a historii balíčků. Pokud soubor spravuje nástroj pro správu konfigurace, změňte šablonu v něm, jinak příští běh vaši úpravu nahradí.
sudo lsof /etc/example.conf
sudo journalctl --since "1 hour ago" --no-pager | grep example.conf
grep example.conf /var/log/dpkg.logUpozornění není zámek
Editory jako vim a nano upozorní, když se soubor od otevření změnil, ale nezabrání jinému procesu do něj zapisovat. Totéž platí pro porovnávání kontrolních součtů: kontrola těsně před uložením časové okno velmi zkrátí, ale neodstraní. Na serverech, kde pracuje více lidí, vás zdroj konfigurace ve správě verzí chrání lépe než jakýkoli editor.
Ochrana při ukládání v CH-J Server Manager
Editor ve File Manager při ukládání soubor znovu zkontroluje. Pokud se změnil jeho obsah, oprávnění nebo cíl odkazu, ukládání se zastaví a originál zůstane beze změny. Poté můžete načíst aktuální verzi ze serveru, čímž se zahodí vaše neuložené změny, proto si nejprve text zkopírujte stranou. Editor verze neslučuje za vás. Při přenosech se aplikace před nahrazením cíle, který se změnil nebo již existuje, zeptá a v případě změny zdroje během přenosu vás vyzve k opakování od začátku.