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 ←

الفتح بالقياسات الحيوية والأمان ←