شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime

متى لا يعني “تغيير” “تعديل”؟ عندما نتحدث عن الطوابع الزمنية لملفات Linux. سنشرح في هذا الدليل كيفية قيام النظام بتحديثها وكيفية تعديلها بنفسك.

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

الفرق بين atime وmtime وctime

يحتوي كل ملف Linux على ثلاثة طوابع زمنية: الطابع الزمني للوصول (atime)، والطابع الزمني المعدل (mtime)، والطابع الزمني الذي تم تغييره (ctime).

الطابع الزمني للوصول هو آخر مرة تمت فيها قراءة الملف. وهذا يعني أن شخصًا ما استخدم برنامجًا لعرض محتويات الملف أو قراءة بعض القيم منه. لم يتم تعديل أو إضافة أي شيء إلى الملف. تمت الإشارة إلى البيانات ولكن دون تغيير.

يشير الطابع الزمني المعدل إلى آخر مرة تم فيها تعديل محتويات الملف. يقوم برنامج أو عملية بتحرير الملف أو معالجته. “تم التعديل” تعني أنه تم تعديل أو حذف شيء ما داخل الملف، أو إضافة بيانات جديدة.

لا تشير الطوابع الزمنية التي تم تغييرها إلى التغييرات التي تم إجراؤها على محتويات الملف. بل هو الوقت الذي تم فيه تغيير البيانات الوصفية المتعلقة بالملف. على سبيل المثال، ستعمل تغييرات أذونات الملف على تحديث الطابع الزمني الذي تم تغييره.

يخصص نظام الملفات ext4 Linux القياسي أيضًا مساحة للطابع الزمني لإنشاء الملف في هياكل نظام الملفات الداخلية الخاصة به، ولكن لم يتم تنفيذ هذا بعد. في بعض الأحيان، يتم ملء هذا الطابع الزمني، لكن لا يمكنك الاعتماد على القيم الموجودة فيه.

تفصيل الطابع الزمني

تحتوي الطوابع الزمنية لنظام Linux على رقم بدلاً من التاريخ والوقت. هذا الرقم هو عدد الثواني منذ عصر يونكس، الذي كان منتصف الليل (00:00:00) في 1 يناير 1970، بالتوقيت العالمي المنسق (UTC). يتم تجاهل الثواني الكبيسة في الطوابع الزمنية لنظام التشغيل Linux، لذا فهي لا تشبه الوقت الفعلي.

عندما يحتاج Linux إلى عرض طابع زمني، فإنه يترجم عدد الثواني إلى تاريخ ووقت. وهذا يجعل من السهل على البشر أن يفهموا. يرشد الموقع والمنطقة الزمنية التي يشاهد فيها الكمبيوتر الملف إلى تحويل عدد الثواني إلى تاريخ ووقت. كما أنه يضمن أن الشهر باللغة الصحيحة.

إذن، كم ثانية يمكن تخزينها في الطابع الزمني؟ الكثير – 2,147,483,647 على وجه الدقة. وهذا رقم كبير، ولكن هل يكفي؟ إذا أضفت ذلك إلى عصر Unix، ثم ترجمته إلى تاريخ ووقت، فستحصل على يوم الثلاثاء، 19 يناير 2038، الساعة 03:14:07 صباحًا. سنحتاج إلى نظام مختلف للطوابع الزمنية قبل ذلك الحين.

عرض الطوابع الزمنية

عند استخدام الخيار -l (القائمة الطويلة) مع ls، كما هو موضح أدناه، يمكنك رؤية الطابع الزمني المعدل:

ls -l dp.c

إذا كنت تريد رؤية الطابع الزمني للوصول، فاستخدم خيار -lu (وقت الوصول) كما يلي:

ls -lu dp.c

وأخيرًا، لرؤية الطابع الزمني للتغيير، يمكنك استخدام خيار -lc (وقت التغيير)؛ اكتب ما يلي:

ls -lc dp.c

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

توضح الطوابع الزمنية أعلاه أن آخر تعديل لمحتويات الملف كان في 21 أبريل 2019. إن الوصول والطوابع الزمنية المتغيرة متطابقة لأنه تم نسخ الملف من كمبيوتر آخر إلى هذا الكمبيوتر في 20 يناير 2020، وتم تحديث كلا الطوابع الزمنية في ذلك الوقت.

اقرأ أيضا:  5 أدوات لإنشاء توزيعة Linux مخصصة بسهولة

لرؤية جميع الطوابع الزمنية في وقت واحد، استخدم الأمر stat كما يلي:

stat dp.c

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

يتم إدراج المناطق الزمنية في الجزء السفلي من الشاشة. كما ترون، لديهم مكون ثواني دقيق للغاية. وفي نهاية كل طابع زمني، ترى أيضًا -0500 أو -0400 .

هذه هي إزاحات المنطقة الزمنية. يسجل نظام الملفات الطوابع الزمنية بالتوقيت العالمي المنسق (UTC) ويحولها إلى المنطقة الزمنية المحلية عند عرضها بواسطة الإحصائيات. تم تكوين الكمبيوتر الذي استخدمناه للبحث في هذه المقالة كما لو كان في منطقة التوقيت الشرقي القياسي (EST) بالولايات المتحدة.

هذه المنطقة الزمنية متأخرة بخمس ساعات عن التوقيت العالمي المنسق (UTC) عندما يكون التوقيت الشرقي ساري المفعول. ومع ذلك، فهو متأخر بأربع ساعات عن التوقيت العالمي المنسق (UTC) عندما يكون التوقيت الصيفي الشرقي (EDT) ساري المفعول. في أبريل 2019، عندما تم تغيير الطابع الزمني المعدل، أصبح توقيت شرق الولايات المتحدة ساري المفعول. ولهذا السبب فإن اثنين من الطوابع الزمنية لهما إزاحة مدتها خمس ساعات، لكن النسخة المعدلة لها إزاحة مدتها أربع ساعات.

لا يتم تخزين الإزاحات والمناطق الزمنية في أي مكان. لا يوجد inode ولا مساحة نظام ملفات مخصصة للاحتفاظ بهذه القيم. يجب عليك حساب ذلك بسرعة باستخدام الطابع الزمني (الذي يكون دائمًا بتوقيت UTC)، والمنطقة الزمنية المحلية للكمبيوتر الذي يعرض الملف، وما إذا كان التوقيت الصيفي ساريًا أم لا.

ستشاهد أيضًا الطابع الزمني “الميلاد”، والذي تم حجزه لتاريخ إنشاء الملف. لم يتم تنفيذ ذلك، وسترى واصلة “-” بدلاً من الطابع الزمني.

تغيير الطوابع الزمنية

إذا أردت، يمكنك تغيير الطوابع الزمنية على الملف. يمكنك استخدام أمر اللمس لتغيير الوصول أو الطوابع الزمنية المعدلة، أو كليهما:

touch -a dp.c

لتعيين طابع زمني جديد للوصول، يمكنك استخدام الخيار -a (وقت الوصول). يقوم هذا الأمر بتعيين الطابع الزمني للوصول إلى الوقت الحالي للكمبيوتر:

stat dp.c

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

تم تغيير الطابع الزمني للوصول، كما هو متوقع. ومع ذلك، تم تحديث الطابع الزمني الذي تم تغييره أيضًا؛ هذا امر طبيعي.

لتغيير الطابع الزمني المعدل، يمكنك استخدام الخيار -m (الوقت المعدل):

touch -m dp.c
stat dp.c

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

هذه المرة، تم تحديث الطوابع الزمنية المعدلة والمتغيرة.

يمكنك استخدام الخيار -d (التاريخ) إذا كنت تريد تغيير كل من الطوابع الزمنية والوصول المعدلة في وقت واحد. يمكنك أيضًا تحديد الوقت والتاريخ — لست مقيدًا بتغيير الطوابع الزمنية إلى الوقت الحاضر.

سنستخدم الأمر التالي لتعيين الوصول والطوابع الزمنية المعدلة إلى 10:30:45 في 15 يناير 2020:

touch -d "2020-01-15 10:30:45" dp.c
stat dp.c

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

لقد قمنا الآن بتعيين الوصول والطوابع الزمنية المعدلة إلى تاريخ في الماضي. تم أيضًا تحديث الطابع الزمني الذي تم تغييره إلى الوقت الحالي للكمبيوتر.

يمكنك أيضًا استخدام الخيار -r (المرجع)، كما هو موضح أدناه، إذا كنت تريد تعيين الطوابع الزمنية لملف واحد على قيم الطابع الزمني لملف آخر:

touch dp.c -r dice_words.sl3
stat dp.c

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

وبعد ذلك، عدنا تقريبًا إلى حيث بدأنا، بمزيج من الطوابع الزمنية -0400 و-0500.

اقرأ أيضا:  Linux Kernel 6.8 يصل بميزات مستقبلية

لنفعل شيئًا يؤثر فقط على الطابع الزمني المتغير. سنستخدم الأمر chmod لمنح الملف القابل للتنفيذ أذونات التنفيذ لجميع المستخدمين:

chmod +x dp
stat dp

كان الطابع الزمني الذي تم تغييره هو الطابع الوحيد الذي تم تحديثه. وذلك لأن الملف نفسه لم يتغير، ولم يتم الوصول إليه أو تعديله. ومع ذلك، تم تغيير البيانات التعريفية حول الملف.

كيف يقوم نظام الملفات بتحديث الطوابع الزمنية

عندما يتم تثبيت نظام الملفات، هناك خيارات يمكنك استخدامها لتحديد كيفية تشغيل نظام الملفات هذا أو كيفية التعامل معه. ويتم تخزينها في الملف /etc/fstab، الذي تتم قراءته ومعالجته في وقت التمهيد. يمكنك أيضًا تعيين خيارات لإملاء النظام الذي يجب استخدامه لتحديث الطابع الزمني للوصول.

فيما يلي بعض الخيارات الأكثر شيوعًا:

strictatime(atime الصارم): يقوم هذا الخيار بتحديث الطابع الزمني للوصول إلى الملفات في كل مرة يتم الوصول إليها. هناك تكاليف إضافية مرتبطة بهذا الأسلوب، ولكن يمكن لبعض الخوادم الاستفادة من هذا المخطط. ليس له سوى القليل من المزايا على جهاز كمبيوتر سطح المكتب أو الكمبيوتر المحمول.
noatime(no atime): يعمل هذا الخيار على تعطيل الطوابع الزمنية للوصول للملفات والأدلة بشكل كامل من التحديث. ومع ذلك، سيتم تحديث الطوابع الزمنية المعدلة.
nodiratime (no dir atime): يتيح هذا الخيار الوصول إلى الطوابع الزمنية للملفات المراد تحديثها، ولكنه يعطلها للأدلة.
relatime (الوقت النسبي): يقوم هذا الخيار بتحديث الطابع الزمني للوصول فقط إذا كان عمره أكثر من 24 ساعة، أو كان الطابع السابق أقدم من الطوابع الزمنية الحالية المعدلة أو المتغيرة. يحقق هذا توازنًا جيدًا بين تحديث الطوابع الزمنية للوصول بشكل متكرر أو عدم التحديث على الإطلاق.
دعونا نلقي نظرة على الملف /etc/fstab لهذا الكمبيوتر ونرى الخيارات التي تم تعيينها:

less /etc/fstab

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

يظهر لنا الملف /etc/fstab كما هو موضح أدناه.

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

إليك محتوى الملف بدون الالتفاف:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
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“، معرف القرص الصلب.

اقرأ أيضا:  كيفية حماية كمبيوتر Linux الخاص بك من محركات أقراص USB الإحتيالية

نكتب ما يلي:

cat /proc/mounts | grep "sda"

شرح الطوابع الزمنية لملفات Linux لـ : atime وmtime وctime - %categories

الآن نرى الخيارات التالية:

rw: سيتم تركيب نظام الملفات كنظام ملفات للقراءة والكتابة.
relatime: سيستخدم نظام الملفات نظام “الوقت النسبي” لتحديث الطوابع الزمنية للوصول.
من اين جاء هذا؟ حسنًا، يتم استخدام مخطط الارتباط في المواقف التالية:

عند استخدام الخيار الافتراضي /etc/fstab.
عند استخدام خيار relatime /etc/fstab.
عندما لا يتم استخدام خيارات الطابع الزمني للوصول في /etc/fstab، وكنت تستخدم Linux kernel 2.6.30 أو أحدث.
لم يحدد إدخال /etc/fstab الخاص بنا لنظام الملفات ext4 أي خيارات لتحديث الطابع الزمني للوصول، لذلك اتخذ Linux الاختيار المعقول واستخدم relatime.

الطوابع الزمنية مهمة

توفر لنا الطوابع الزمنية طريقة سهلة لمعرفة متى تم الوصول إلى الملف أو تعديله أو تغييره. ولكن الأهم من ذلك أنها توفر طريقة لعمل نسخة احتياطية من البرنامج ومزامنته لتحديد الملفات التي تحتاج إلى نسخ احتياطي.

ستكون القدرة على معالجة الطوابع الزمنية مفيدة عندما تحتاج إلى إقناع برنامج ما بالقوة بتضمين أو تجاهل ملف أو مجموعة من الملفات.

Linux Commands
Files tar·pv·cat·tac·chmod·grep ·diff·sed·ar·man·pushd·popd·fsck·testdisk·seq·fd·pandoc·cd·$PATH·awk·join·jq·fold·uniq·journalctl·tail·stat·ls·fstab·echo·less·chgrp·chown·rev·look·strings·type·rename·zip·unzip·mount·umount·install·fdisk·mkfs·rm·rmdir·rsync·df·gpg·vi·nano·mkdir·du·ln·patch·convert·rclone·shred·srm·scp·gzip·chattr·cut·find·umask·wc· tr
Processes alias·screen·top·nice·renice·progress·strace·systemd·tmux·chsh·history·at·batch·free·which·dmesg·chfn·usermod·ps·chroot·xargs·tty·pinky·lsof·vmstat·timeout·wall·yes·kill·sleep·sudo·su·time·groupadd·usermod·groups·lshw·shutdown·reboot·halt·poweroff·passwd·lscpu·crontab·date·bg·fg·pidof·nohup·pmap
Networking netstat·ping·traceroute·ip·ss·whois·fail2ban·bmon·dig·finger·nmap·ftp·curl·wget·who·whoami·w·iptables·ssh-keygen·ufw·arping·firewalld
قد يعجبك ايضا