CH-J Server Managerδιαχείριση διακομιστή πάνω από SSH
Μενού
Όλοι οι οδηγοί και τα άρθρα →

Ένα απομακρυσμένο αρχείο άλλαξε ενώ το επεξεργαζόσασταν: πώς να αποφύγετε την αντικατάστασή του

Πώς να εντοπίσετε αλλαγές άλλων σε ένα αρχείο διακομιστή κατά την επεξεργασία σας, να συγκρίνετε εκδόσεις και να αποθηκεύσετε χωρίς να χάσετε καμία αλλαγή.

Πώς προκύπτει το πρόβλημα

Ανοίγετε ένα αρχείο και, ενώ επεξεργάζεστε το αντίγραφό σας, κάτι άλλο γράφει στο πρωτότυπο: άλλος διαχειριστής, μια εκτέλεση του συστήματος διαχείρισης ρυθμίσεων, μια αναβάθμιση πακέτου ή η ίδια η εφαρμογή. Αν μετά αποθηκεύσετε, η άλλη αλλαγή χάνεται χωρίς μήνυμα σφάλματος. Η τοπική επεξεργασία και η μεταφόρτωση μέσω SFTP είναι ιδιαίτερα ευάλωτες, επειδή το διάστημα μεταξύ ανάγνωσης και εγγραφής είναι μεγάλο και μια απλή μεταφόρτωση δεν συγκρίνει τίποτα.

Καταγράψτε την κατάσταση πριν ξεκινήσετε

Σημειώστε το άθροισμα ελέγχου και την ώρα της τελευταίας αλλαγής όταν κατεβάζετε το αρχείο. Ελέγξτε τα ξανά αμέσως πριν από τη μεταφόρτωση. Διαφορετικό άθροισμα ελέγχου σημαίνει ότι το αρχείο άλλαξε και δεν πρέπει να το αντικαταστήσετε χωρίς να εξετάσετε τις αλλαγές.

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

Συγκρίνετε και συγχωνεύστε τις αλλαγές

Κρατήστε το επεξεργασμένο αντίγραφό σας με νέο όνομα, κατεβάστε την τρέχουσα έκδοση και συγκρίνετέ τη με την αρχική έκδοση και με τη δική σας. Στη συνέχεια εφαρμόστε την αλλαγή σας στην τρέχουσα έκδοση αντί να την αντικαταστήσετε. Η εντολή diff3 μπορεί να εμφανίσει και τις τρεις εκδόσεις μαζί.

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

Εντοπίστε τι αλλάζει το αρχείο

Αν το αρχείο αλλάζει συνεχώς, βρείτε την πηγή πριν το επεξεργαστείτε ξανά. Ελέγξτε ποιος το έχει ανοιχτό και εξετάστε το ημερολόγιο και το ιστορικό πακέτων. Αν το αρχείο ελέγχεται από σύστημα διαχείρισης ρυθμίσεων, αλλάξτε εκεί το πρότυπο, διαφορετικά η επόμενη εκτέλεση θα αντικαταστήσει την επεξεργασία σας.

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

Η προειδοποίηση δεν είναι κλείδωμα

Επεξεργαστές όπως οι vim και nano προειδοποιούν όταν ένα αρχείο έχει αλλάξει από τότε που ανοίχτηκε, αλλά δεν εμποδίζουν άλλη διεργασία να γράψει σε αυτό. Το ίδιο ισχύει για τις συγκρίσεις αθροισμάτων ελέγχου: ο έλεγχος λίγο πριν την αποθήκευση περιορίζει πολύ το χρονικό παράθυρο, αλλά δεν το μηδενίζει. Σε διακομιστές όπου εργάζονται πολλά άτομα, μια πηγή ρυθμίσεων υπό έλεγχο εκδόσεων σας προστατεύει καλύτερα από οποιονδήποτε επεξεργαστή.

Προστασία κατά την αποθήκευση στο CH-J Server Manager

Ο επεξεργαστής του File Manager ελέγχει ξανά το αρχείο κατά την αποθήκευση. Αν έχουν αλλάξει το περιεχόμενο, τα δικαιώματα ή ο προορισμός του συνδέσμου, η αποθήκευση σταματά και το πρωτότυπο παραμένει ως έχει. Μπορείτε μετά να φορτώσετε την τρέχουσα έκδοση από τον διακομιστή, αλλά αυτό απορρίπτει τις μη αποθηκευμένες αλλαγές σας, γι’ αυτό αντιγράψτε πρώτα το κείμενό σας αλλού. Ο επεξεργαστής δεν συγχωνεύει τις εκδόσεις για εσάς. Στις μεταφορές, η εφαρμογή ρωτά πριν αντικαταστήσει έναν προορισμό που έχει αλλάξει ή υπάρχει ήδη και σας ζητά να ξεκινήσετε από την αρχή αν η πηγή άλλαξε κατά τη μεταφορά.

Λεπτομερής τεκμηρίωση

man: stat →

man: diff →

Βιομετρική ξεκλείδωμα και ασφάλεια →