متى لا تعني كلمة “تغيير” “تعديل”؟ عندما نتحدث عن طوابع زمنية لملفات Linux. في هذا الدليل، سنشرح كيفية تحديث النظام لها، وكيفية تعديلها بنفسك.
الفرق بين atime وmtime وctime
يحتوي كل ملف Linux على ثلاثة الطوابع الزمنية: طابع زمني للوصول (atime)، وطابع زمني معدّل (mtime)، وطابع زمني متغير (ctime).
طابع وقت الوصول هو آخر مرة تمت فيها قراءة الملف. وهذا يعني أن شخصًا ما استخدم برنامجًا لعرض محتويات الملف أو قراءة بعض القيم منه. لم يتم تحرير أي شيء أو إضافته إلى الملف. تمت الإشارة إلى البيانات ولكن لم يتم تغييرها.
يشير الطابع الزمني المعدّل إلى آخر مرة تم فيها تعديل محتويات الملف. حيث قام برنامج أو عملية بتحرير الملف أو التلاعب به. وتعني كلمة “معدّل” أنه تم تعديل شيء ما داخل الملف أو حذفه، أو إضافة بيانات جديدة.
لا تشير الطوابع الزمنية المتغيرة إلى التغييرات التي تم إجراؤها على محتويات الملف. بل تشير إلى الوقت الذي تم فيه تغيير البيانات الوصفية المتعلقة بالملف. على سبيل المثال، ستؤدي تغييرات أذونات الملف إلى تحديث الطابع الزمني المتغير.
يخصص نظام الملفات القياسي ext4 Linux أيضًا مساحة لعلامة زمنية لإنشاء ملف في هياكل نظام الملفات الداخلية، ولكن لم يتم تنفيذ ذلك بعد. في بعض الأحيان، يتم ملء علامة الوقت هذه، ولكن لا يمكنك الاعتماد على القيم الموجودة فيها.
تشريح الطابع الزمني
تحتوي طوابع الوقت في Linux على رقم وليس تاريخًا ووقتًا. هذا الرقم هو عدد الثواني منذ عصر يونكس، والتي كانت منتصف الليل (00:00:00) في الأول من يناير 1970، التوقيت العالمي المنسق (UTC)يتم تجاهل الثواني الكبيسة في الطوابع الزمنية لنظام Linux، وبالتالي فهي ليست مماثلة للوقت الحقيقي.
عندما يحتاج Linux إلى عرض علامة زمنية، فإنه يترجم عدد الثواني إلى تاريخ ووقت. وهذا يجعل الأمر أسهل على البشر لفهمه. كما أن الموقع والمنطقة الزمنية التي يتواجد بها الكمبيوتر الذي يعرض الملف يوجهان تحويل عدد الثواني إلى تاريخ ووقت. كما يضمن أيضًا أن يكون الشهر باللغة الصحيحة.
إذن، كم ثانية يمكن تخزينها في طابع زمني؟ كثير جدًا—2,147,483,647، على وجه التحديد. هذا رقم كبير، ولكن هل يكفي؟ إذا أضفت ذلك إلى حقبة يونكس، ثم ترجمته إلى تاريخ ووقت، فستحصل على الثلاثاء، 19 يناير 2038، الساعة 03:14:07 صباحًا. سنحتاج إلى مخطط مختلف للطوابع الزمنية قبل ذلك.
عرض الطوابع الزمنية
عند استخدام الخيار -l (القائمة الطويلة) مع ls، كما هو موضح أدناه، يمكنك رؤية الطابع الزمني المعدل:
ls -l dp.c
إذا كنت تريد رؤية طابع زمني للوصول، استخدم الخيار -lu (وقت الوصول) كما يلي:
ls -lu dp.c
وأخيرًا، لرؤية طابع زمني للتغيير، يمكنك استخدام الخيار -lc (تغيير الوقت)؛ اكتب ما يلي:
ls -lc dp.c
تُظهر الطوابع الزمنية أعلاه أن محتويات الملف تم تعديلها آخر مرة في 21 أبريل 2019. طوابع الوقت الخاصة بالوصول والتغيير متطابقة لأن الملف تم نسخه من جهاز كمبيوتر آخر إلى هذا الجهاز في 20 يناير 2020، وتم تحديث كلا الطوابع الزمنية في ذلك الوقت.
ل رؤية جميع الطوابع الزمنية في وقت واحداستخدم الأمر stat على النحو التالي:
stat dp.c
تظهر المناطق الزمنية في أسفل الشاشة. وكما ترى، فهي تحتوي على مكون ثوانٍ دقيق للغاية. وفي نهاية كل علامة زمنية، سترى أيضًا -0500 أو -0400.
هذه هي إزاحات المنطقة الزمنية. يسجل نظام الملفات الطوابع الزمنية بالتوقيت العالمي المنسق ويحولها إلى المنطقة الزمنية المحلية عند عرضها بواسطة stat. تم تكوين الكمبيوتر الذي استخدمناه للبحث في هذه المقالة كما لو كان في منطقة التوقيت القياسي الشرقي (EST) للولايات المتحدة
إن هذه المنطقة الزمنية متأخرة خمس ساعات عن التوقيت العالمي المنسق عندما يكون التوقيت الشرقي ساريًا. ومع ذلك، فهي متأخرة أربع ساعات عن التوقيت العالمي المنسق عندما يكون التوقيت الصيفي الشرقي ساريًا. في أبريل 2019، عندما تم تغيير الطابع الزمني المعدل، كان التوقيت الصيفي الشرقي ساريًا. ولهذا السبب فإن اثنين من الطوابع الزمنية لها إزاحة بمقدار خمس ساعات، ولكن الطابع الزمني المعدل له إزاحة بمقدار أربع ساعات.
لا يتم تخزين الإزاحات والمناطق الزمنية في أي مكان. ولا توجد عقدة أو مساحة نظام ملفات مخصصة لتخزين هذه القيم. يتعين عليك حساب هذه القيم أثناء التنقل باستخدام الطابع الزمني (الذي يكون دائمًا بتوقيت UTC)، والمنطقة الزمنية المحلية للكمبيوتر الذي يعرض الملف، وما إذا كان التوقيت الصيفي ساريًا.
سترى أيضًا علامة زمنية “الميلاد”، وهي مخصصة لتاريخ إنشاء الملف. لم يتم تنفيذ ذلك، وسترى شرطة “-” بدلاً من علامة زمنية.
تغيير الطوابع الزمنية
إذا أردت، يمكنك تغيير الطوابع الزمنية على ملف. يمكنك استخدام أمر اللمس لتغيير الطوابع الزمنية للوصول أو التعديل، أو كلاهما:
touch -a dp.c
لتعيين طابع زمني جديد للوصول، يمكنك استخدام الخيار -a (وقت الوصول). يضبط هذا الأمر طابع الوقت للوصول على الوقت الحالي للكمبيوتر:
stat dp.c
لقد تم تغيير طابع الوقت للوصول كما هو متوقع. ومع ذلك، تم تحديث طابع الوقت المتغير أيضًا؛ وهذا أمر طبيعي.
لتغيير الطابع الزمني المعدل، يمكنك استخدام الخيار -m (الوقت المعدل):
touch -m dp.c
stat dp.c
هذه المرة، تم تحديث الطوابع الزمنية المعدلة والمتغيرة.
يمكنك استخدام الخيار -d (التاريخ) إذا كنت تريد تغيير كل من الطوابع الزمنية الخاصة بالوصول والتعديل في نفس الوقت. يمكنك أيضًا تحديد وقت وتاريخ – لست مقيدًا بتغيير الطوابع الزمنية إلى الوقت الحاضر.
سنستخدم الأمر التالي لتعيين أوقات الوصول والتعديل إلى 10:30:45 في 15 يناير 2020:
touch -d "2020-01-15 10:30:45" dp.c
stat dp.c
لقد قمنا الآن بتعيين طوابع زمنية للوصول والتعديل إلى تاريخ في الماضي. كما تم تحديث الطابع الزمني المتغير إلى الوقت الحالي للكمبيوتر.
يمكنك أيضًا استخدام الخيار -r (المرجع)، كما هو موضح أدناه، إذا كنت تريد تعيين الطوابع الزمنية لملف واحد إلى قيم الطوابع الزمنية لملف آخر:
touch dp.c -r dice_words.sl3
stat dp.c
وبعد ذلك، عدنا إلى حيث بدأنا تقريبًا، مع مزيج من الطوابع الزمنية -0400 و-0500.
دعنا نفعل شيئًا يؤثر فقط على الطابع الزمني المتغير. سنستخدم الأمر chmod لإنشاء ملف قابل للتنفيذ تنفيذ الأذونات لجميع المستخدمين:
chmod +x dp
stat dp
كان الطابع الزمني المتغير هو الطابع الزمني الوحيد الذي تم تحديثه. وذلك لأن الملف نفسه لم يتغير – لم يتم الوصول إليه أو تعديله. ومع ذلك، تم تغيير البيانات الوصفية الخاصة بالملف.
كيفية تحديث الطوابع الزمنية لنظام الملفات
عند تثبيت نظام ملفات، توجد خيارات يمكنك استخدامها لتحديد كيفية تشغيل نظام الملفات هذا أو التعامل معه. يتم تخزين هذه الخيارات في ملف /etc/fstab، والذي يتم قراءته ومعالجته في وقت التمهيد. يمكنك أيضًا تعيين خيارات لتحديد المخطط الذي يجب عليهم استخدامه لتحديث طابع زمني للوصول.
وفيما يلي بعض الخيارات الأكثر شيوعًا:
- الوقت الصارم (الوقت الصارم):يعمل هذا الخيار على تحديث طابع زمني لوصول الملفات في كل مرة يتم فيها الوصول إليها. هناك تكلفة إضافية مرتبطة بهذا النهج، ولكن بعض الخوادم يمكن أن تستفيد من هذا المخطط. ليس له أي فائدة على أجهزة الكمبيوتر المكتبية أو المحمولة.
- لا وقت (لا وقت): يعمل هذا الخيار على تعطيل تحديث طوابع زمنية للوصول إلى الملفات والدلائل بشكل كامل. ومع ذلك، ستظل طوابع الوقت المعدلة قابلة للتحديث.
- nodiratime (لا يوجد وقت محدد): يتيح هذا الخيار إمكانية الوصول إلى طوابع زمنية للملفات للتحديث، ولكنه يعطل هذه الميزة بالنسبة للمجلدات.
- الزمن النسبي (الزمن النسبي): يقوم هذا الخيار بتحديث طابع الوقت للوصول فقط إذا كان عمره أكثر من 24 ساعة، أو كان الطابع السابق أقدم من طابع الوقت الحالي المعدل أو المتغير. وهذا يحقق توازنًا جيدًا بين تحديث طابع الوقت للوصول بشكل متكرر أو عدم تحديثه على الإطلاق.
دعونا نلقي نظرة على ملف /etc/fstab لهذا الكمبيوتر ونرى الخيارات التي تم تعيينها:
less /etc/fstab
يظهر لنا الملف /etc/fstab كما هو موضح أدناه.
فيما يلي محتوى الملف بدون الالتفاف:
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0
يوجد مدخلان فقط، أحدهما عبارة عن ملف مبادلة، والذي يمكننا تجاهله. والمدخل الآخر يتم تثبيته في جذر نظام الملفات ( / ) وكان موجودًا على الجهاز /dev/sda1 في وقت التثبيت. هذا هو القسم الأول على القرص الصلب الأول، ويصادف أنه يحتوي على نظام ملفات ext4.
الخيار الوحيد الذي يتم تمريره إليه هو errors=remount-ro، والذي يخبر نظام التشغيل بإعادة تحميل نظام الملفات هذا للقراءة فقط إذا كانت هناك أخطاء عند محاولة تحميله كنظام ملفات للقراءة والكتابة.
لذا، لا يوجد ذكر لكيفية التعامل مع طابع الوقت للوصول. دعنا نبحث بعمق ونرى ما يمكن أن يخبرنا به /proc/mounts. سننقل الناتج من /proc/mounts عبر grep. سلسلة البحث لدينا ستكون “sda”، معرف القرص الصلب.
نكتب ما يلي:
cat /proc/mounts | grep "sda"
الآن نرى الخيارات التالية:
- قراءة:سيتم تثبيت نظام الملفات كنظام ملفات للقراءة والكتابة.
- زمن نسبي:سيستخدم نظام الملفات مخطط “الوقت النسبي” لتحديث طوابع زمنية للوصول.
من أين جاء ذلك؟ حسنًا، يتم استخدام مخطط relatime في المواقف التالية:
- عندما الإفتراضيات يتم استخدام الخيار /etc/fstab.
- عندما زمن نسبي يتم استخدام الخيار /etc/fstab.
- عندما لا يتم استخدام خيارات طابع زمني للوصول في /etc/fstab، وتستخدم Linux kernel 2.6.30 أو أحدث.
لم يحدد إدخال /etc/fstab الخاص بنظام الملفات ext4 أي خيارات لتحديث طابع زمني للوصول، لذا اتخذ Linux الخيار المعقول واستخدم relatime.
الطوابع الزمنية مهمة
تمنحنا الطوابع الزمنية طريقة سهلة لمعرفة متى تم الوصول إلى ملف أو تعديله أو تغييره. ولكن الأهم من ذلك أنها توفر طريقة لعمل نسخة احتياطية ومزامنة البرامج لتحديد الملفات التي تحتاج إلى نسخ احتياطي.
ستثبت القدرة على التعامل مع الطوابع الزمنية أنها مفيدة عندما تحتاج إلى إقناع برنامج بالقوة بتضمين ملف أو مجموعة من الملفات أو تجاهلها.
متعلق ب:أفضل أجهزة الكمبيوتر المحمولة التي تعمل بنظام Linux للمطورين والمتحمسين