Jak powstaje problem
Otwierasz plik i podczas edycji swojej kopii coś innego zapisuje oryginał: inny administrator, uruchomiony system zarządzania konfiguracją, aktualizacja pakietu lub sama aplikacja. Jeśli potem zapiszesz plik, druga zmiana zniknie bez komunikatu o błędzie. Lokalna edycja i przesyłanie przez SFTP są szczególnie narażone, ponieważ między odczytem a zapisem mija dużo czasu, a zwykłe przesłanie niczego nie porównuje.
Zanotuj stan przed rozpoczęciem
Podczas pobierania pliku zanotuj sumę kontrolną i czas ostatniej zmiany. Sprawdź je ponownie tuż przed przesłaniem. Inna suma kontrolna oznacza, że plik się zmienił i nie należy go nadpisywać bez sprawdzenia.
sha256sum /etc/example.conf
stat -c '%y %U %G %a' /etc/example.confPorównaj i scal zmiany
Zachowaj swoją zmodyfikowaną kopię pod nową nazwą, pobierz aktualną wersję i porównaj ją z wersją początkową oraz ze swoją. Następnie nanieś swoją zmianę na aktualną wersję zamiast ją nadpisywać. Polecenie diff3 może pokazać wszystkie trzy wersje razem.
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.currentUstal, co zmienia plik
Jeśli plik ciągle się zmienia, ustal źródło zmian przed kolejną edycją. Sprawdź, kto ma go otwartego, oraz przejrzyj dziennik i historię pakietów. Jeśli plikiem zarządza system zarządzania konfiguracją, zmień szablon w tym systemie, inaczej kolejne uruchomienie zastąpi twoje poprawki.
sudo lsof /etc/example.conf
sudo journalctl --since "1 hour ago" --no-pager | grep example.conf
grep example.conf /var/log/dpkg.logOstrzeżenie nie jest blokadą
Edytory takie jak vim i nano ostrzegają, gdy plik zmienił się od chwili otwarcia, ale nie powstrzymują innego procesu przed zapisem. To samo dotyczy porównywania sum kontrolnych: sprawdzenie tuż przed zapisem bardzo skraca przedział ryzyka, ale nie redukuje go do zera. Na serwerach, na których pracuje wiele osób, źródło konfiguracji objęte kontrolą wersji chroni lepiej niż dowolny edytor.
Ochrona zapisu w CH-J Server Manager
Edytor File Manager ponownie sprawdza plik podczas zapisu. Jeśli zmieniła się zawartość, uprawnienia lub cel dowiązania, zapis zostaje wstrzymany, a oryginał pozostaje bez zmian. Możesz wtedy wczytać aktualną wersję z serwera, ale spowoduje to odrzucenie niezapisanych zmian, więc najpierw skopiuj swój tekst w inne miejsce. Edytor nie scala wersji za ciebie. Podczas transferów aplikacja pyta przed zastąpieniem celu, który się zmienił lub już istnieje, i informuje o konieczności rozpoczęcia od nowa, jeśli źródło zmieniło się w trakcie transferu.