ولی من سعی میکنم واستون یک چیز ساده و بدرد بخور بگذارم و به قول معروف سخنی نرانم که گویند شرم باد آن پیر را
قبل از هر چیز لازمه توضیح بدم که اصولا ویژگیهای زمانی فایل چیه؟
در مورد هر فایل یا پوشهای توی لینوکس چند موضوع زمانی وجود داره که اینجا من به سه تایی که به نظرم به هم مربوط ترند میپردازم. مابقیش رو یا خودتون میدونین یا خواهید دانست.
Modify time
که در واقع مربوط به آخرین زمانی است که محتوای فایل تغییر کرده است. مثلا شما یک فایل داشتین، بعد اون فایل رو ویرایش کردین و نتیجهش رو هم ذخیره کردین. در این حالت این ویژگی هم تغییر میکنه.
Change time
خب این یکی از نظر اسمی خیلی شبیه بالایی هستش ولی کارش اینه که وقتی شما تغییری رو در بخش متافایل فایلتون اعمال کنین، اون وقت تغییر میکنه. مثالهای تغییر در متافایل میتونه تنظیم دسترسی chmod یا تغییر مالک chown یا تغییراتی از این دست باشه.
Acess time
این یکی بر اساس منابع و مراجع، مربوط به حالتی است که فایل مورد خواندن قرار میگیره. تصور کنین هر وقت فایلتون خونده بشه این مقدار تغییر پیدا میکنه.
اما کارگاه عملی نتایج جالبی به ما میده (حداقل به من یکی داد!):
در ترمینال یک فایل متنی ساده بسازید به یک اسم دلخواه و توش یکم چیز بنویسید. من این کار رو میکنم:
- کد: گزینش همه
ls > filetest.txt
خب فایلمون حاضر شده. حالا برای دیدن این پارامترهایی که من گفتم وارد میکنم:
- کد: گزینش همه
stat ./filetest.txt
در خروجی دستور ظاهر میشود:
- کد: گزینش همه
File: `./filetest.txt'
Size: 55 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 14 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2010-01-28 01:56:01.000000000 +0330
Modify: 2010-01-28 01:56:01.000000000 +0330
Change: 2010-01-28 01:56:01.000000000 +0330
همونطور که انتظار نداشتین! اطلاعات خوبی علاوه بر این سه گزینه در اختیار شما قرار گذاشته شد (من از تاکس خواستم شما رو غافلگیر کنه!
در خروجی میبینم که هر سه پارامتر یک تاریخ و حتی یک ساعت رو نشون میدن! این نشون میده که برای ساخته شدن یک فایل، باید به اون دسترسی داشت، مجوزهای لازم رو براش در نظر گرفت و بعدش اون رو ذخیره کرد!!!
به عنوان تمرین میتوانید این فایل را با ویرایشگر محبوبتان باز کرده، تغییراتی در آن ایجاد کنید و فایل را ذخیره کنید و دوباره با کمک همین دستور تغییرات را رصد کنید. علاوه بر این بد نیست با دستور chmod مجوزهای فایل را دسترسی کنید تا اثرش را بر این سه ویژگی در فایلها ببینید.
نکتهای که وجود دارد این است که شما احتمالا قادر نخواهید بود کاری کنید که فقط بخش Acess بدون تغییر در Modify یا Change تغییر کند. منظورم این است که نباید انتظار داشته باشید با باز کردن این فایل در ویرایشگر متنی یا حتی دستور cat بخش مربوط به Access به شما زمان جدیدی تحویل بدهد. چرا؟
اول اینکه این ویژگی از فایل در واقع ویژگی محبوبی نیست! چون زمان کار کردن با فایلها را افزایش میدهد و بر روی دیسک ترافیک ایجاد میکند. تصور کنید هر بار که شما فایلی را باز کنید، یک مقدار جدید روی دیسک نوشته شود! با در نظر گرفتن تعداد فایلهایی که روی لینوکس شما اون هم با این حجمهای بزرگ هارد دیسکها تقریبا مفهومی به اسم سرعت لاک پشتی واقعیت پیدا میکند.
البته این مسئله در فایل سیستمهای مختلف به طرق مختلفی بررسی شده:
کاربردی که من برای Access time مطرح کردم در واقع به زمان ext2 برمیگرده که البته الان هم دیگه به این شکل استفاده نمیشه. خب من یکم همین مطلب رو برای فایل سیستم ext2 توضیح میدم و بعدش میگم که بقیهی فایل سیستمها چه خاکی به سرشون میریزن!
در ext2 و ext3 ، دستوری وجود داشت به اسم chattr این دستور یک دو قلو هم به اسم lsattr داشته که با همدیگه زوج مرتب تشکیل میدادند. اگه کمی شانس داشته باشین، هنوز هم توی bash شما اثری از این دو بزرگوار پیدا میشه.
اما مشکلی که من در مورد کاهش زمان کارایی دیسک در بحث تعیین Acess time مطرح کردم در واقع راهکاری در دل chattr داشته. به این ترتیب که اگه شما دوست نمیداشتین که فایلتون اصولا ویژگی acess time داشته باشه، با کمک دستور زیر این ویژگی رو غیر فعال میکردین
- کد: گزینش همه
chattr +A ./filetest
توجه دارید که این دستور در ext2 و به زور توی ext3 جواب میده پس از اجرا کردنش توی فایل سیستمهای دیگه مثل reiserfs خودداری کنین چون خطا میده!!
اگه هنوز کنجکاو هستین که یک جوری بالاخره این Acess time لعنتی رو عوض کنین، می تونین از این دستور استفاده کنین:
- کد: گزینش همه
chattr -A ./filetest
همین تغییر باعث میشه Change Time عوض بشه. ولی Access time روی آخرین زمانی که دسترسی شده ثابت میمونه. حالا اگه یک بار فایلتون رو با یک ویرایشگر یا حتی cat باز کنین، و بعدش دوباره stat بگیرین میبینین که Access time جدید میشه
ولی از این به بعد هر چه قدر فایل رو دوباره باز کنین یا cat (یا حتی DOG بگیرین) باز این زمان تغییر پیدا نمی کنه.
پس من نتیجه گرفتم که :
Aceess time در واقع اولین زمانی است که فایل پس از تغییر در متادیتا (Change time) یا محتوا (Modify time) مورد دسترسی قرار می گیرد.
در مورد سایر فایل سیستمها این وضعیت به این شکل بهینه شده که بلافاصله بعد از تغییر محتوای فایل یا یک متادیتا (مثلا یک chmod)، زمان مربوط به Access time هم جدید میشود و سیستم دیگر منتظر اجرای cat یا ویرایشگر شما نمیماند تا این ویژگی را تغییر دهد.
خدایی حال کردین؟
نمیگم بری توی ویکی دستورات اوبونتو.آی ار نگاه کنین، چون نه فقط اونجا stat و chattr رو پیدا نمیکنین بلکه حتی lsattr رو هم اونجا نمیبینین!
حالا اینا هیچی! بگردین خدایی گوگل کنین ببینین کجا مستنداتی پیدا میکنین که غیر از چیزایی شبیه این:
file atime name ?time?
Returns a decimal string giving the time at which file name was last accessed. If time is specified, it is an access time to set for the file. The time is measured in the standard POSIX fashion as seconds from a fixed starting time (often January 1, 1970). If the file doesn't exist or its access time cannot be queried or set then an error is generated. On Windows, FAT file systems do not support access time.
چیز دیگه ای گفته باشه؟! بعد بگین لاگ خوزستان بده، باید تعطیلش کنیم، خسته شدیم و ... .
تا یادم نرفته در مسیر جستجوم این سایتها کمک کردن:
http://linux.die.net/man/1/lsattr
http://www.unix.com/shell-programming-s ... atime.html
http://www.linuxquestions.org/questions ... gs-729983/
