این مشکل چگونه رخ میدهد
فایلی را باز میکنید و در حالی که کپی خود را ویرایش میکنید، عامل دیگری در نسخهٔ اصلی مینویسد: مدیر دیگری، اجرای مدیریت پیکربندی، ارتقای بسته یا خود برنامه. اگر سپس ذخیره کنید، تغییر دیگر بدون هیچ خطایی ناپدید میشود. ویرایش محلی و بارگذاری از طریق 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 هنگام ذخیره، فایل را دوباره بررسی میکند. اگر محتوا، مجوزها یا مقصد پیوند تغییر کرده باشد، ذخیره متوقف میشود و نسخهٔ اصلی به همان صورت باقی میماند. سپس میتوانید نسخهٔ فعلی را از سرور بارگذاری کنید، اما این کار تغییرات ذخیرهنشدهٔ شما را دور میریزد؛ پس ابتدا متن خود را در جای دیگری کپی کنید. ویرایشگر نسخهها را برای شما ادغام نمیکند. در انتقالها، برنامه پیش از جایگزینی مقصدی که تغییر کرده یا از قبل وجود دارد سؤال میکند و اگر مبدأ هنگام انتقال تغییر کرده باشد، از شما میخواهد دوباره شروع کنید.