فایل ها و ویژگی‌های زمانیشان

این بخش مربوط به مطالب و دست نوشته های کوچک آموزشی اعضا میباشد

فایل ها و ویژگی‌های زمانیشان

نوشتهاز Ali_Gh » پنج شنبه 7 بهمن 1388, 2:52 am

راستش این ویژگی‌های زمانی فایل‌ها یک خورده داستانش مفصله!
:roll:
ولی من سعی می‌کنم واستون یک چیز ساده و بدرد بخور بگذارم و به قول معروف سخنی نرانم که گویند شرم باد آن پیر را :ugeek:

قبل از هر چیز لازمه توضیح بدم که اصولا ویژگی‌های زمانی فایل چیه؟
در مورد هر فایل یا پوشه‌ای توی لینوکس چند موضوع زمانی وجود داره که اینجا من به سه تایی که به نظرم به هم مربوط ترند می‌پردازم. مابقیش رو یا خودتون می‌دونین یا خواهید دانست.

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

همونطور که انتظار نداشتین! اطلاعات خوبی علاوه بر این سه گزینه در اختیار شما قرار گذاشته شد (من از تاکس خواستم شما رو غافلگیر کنه! 8-) )
در خروجی می‌بینم که هر سه پارامتر یک تاریخ و حتی یک ساعت رو نشون می‌دن! این نشون می‌ده که برای ساخته شدن یک فایل، باید به اون دسترسی داشت، مجوز‌های لازم رو براش در نظر گرفت و بعدش اون رو ذخیره کرد!!! :mrgreen: ما چرخ رو دوباره اختراع کردیم! :lol:
به عنوان تمرین می‌توانید این فایل را با ویرایشگر محبوبتان باز کرده، تغییراتی در آن ایجاد کنید و فایل را ذخیره کنید و دوباره با کمک همین دستور تغییرات را رصد کنید. علاوه بر این بد نیست با دستور 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 یا ویرایشگر شما نمی‌ماند تا این ویژگی را تغییر دهد.

خدایی حال کردین؟ :roll:
نمی‌گم بری توی ویکی دستورات اوبونتو.آی ار نگاه کنین، چون نه فقط اونجا 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.

چیز دیگه ای گفته باشه؟! بعد بگین لاگ خوزستان بده، باید تعطیلش کنیم،‌ خسته شدیم و ... . :evil:

تا یادم نرفته در مسیر جستجوم این سایت‌ها کمک کردن: 8-)
http://linux.die.net/man/1/lsattr
http://www.unix.com/shell-programming-s ... atime.html
http://www.linuxquestions.org/questions ... gs-729983/
دست ها می سایم تا دری بگشایم،
به عبث می پایم تا به در کس آید،
در و دیوار به هم ریخته شان بر سرم می شکند
(نیما)
عکس کاربر
Ali_Gh
مسئول جلسات
 
نوشته: 432
پیوستن: شنبه 7 دی 1387, 11:00 am
شهر: اهواز
Given: 52 thanks
Received: 189 thanks

The following 2 users would like to thank Ali_Gh for his or her post:
moslem.b, NabiKAZ

Re: فایل ها و ویژگی‌های زمانیشان

نوشتهاز NabiKAZ » پنج شنبه 8 بهمن 1388, 10:38 am

توضیحات مفیدی بود متشکرم.
فکر کنم همه اینها رو گفتی که به همون BOLD شده برسی...

راستی گفتی stat ، یاد یه چیز بی ربط افتادم.
توی IRC بودم گفتم چطور میشه chmod فایل رو به صورت عددی دید. طوری که فقط همون به خروجی ارسال بشه.
یه نفر بعد از کلی بالا پایین کردن دستورات و نمونه های مختلف این کد رو داد:
کد: گزینش همه
stat public_html/ | grep ^Access | head -1 | cut -b10-13

بعد همه کیف کردند که چه ترفند جالبی سوار کرده و ازش تشکر کردند.
یه هو یه نفر در اومد گفت بابا دارید چیکار میکنید!!! خود stat سوئیچ داره! اینجوری میشه:
کد: گزینش همه
stat --printf='%a\n' public_html/

بعد اینجوری بود که همه به اون یارو خندیدند که اینهمه خودشون رو کشته و طرف کلی خجالت کشید.
بزارید پای حساب پیام های بازرگانی.... دینگ!
عکس کاربر
NabiKAZ
مسئول وب‌سایت
 
نوشته: 142
پیوستن: شنبه 7 دی 1387, 8:26 am
شهر: اهواز
Given: 102 thanks
Received: 70 thanks

Re: فایل ها و ویژگی‌های زمانیشان

نوشتهاز Ali_Gh » پنج شنبه 8 بهمن 1388, 11:32 pm

مرسی نبی جان، لطف دارین. هر دوتا کد ظاهرا مجوز دسترسی رو برمی‌گردونن.

راستی من یکجا خواندم یک تابعی هست به اسم touch که ظاهرا باید بتونه Acess time رو تغییر بده
کد: گزینش همه
Syntax
      touch [options]... File...

Options

-a
--time=atime
--time=access
--time=use
     Change the access time only.


من به عنوان مثل وارد کردم:
کد: گزینش همه
touch -a ./filetest.txt
touch --time=use ./filetest.txt
touch --time=atime ./filetest.txt
touch --time=access ./filetest.txt

ولی در همه‌ی حالات هر دو ویژگی change و access با هم تغییر کردند! البته من روی فایل سیستم reiserfs و ext4 امتحان کردم. اگه شما فرصت کردین روی ext2 یا فایل سیستم‌های دیگه امتحان کنید و نتیجه رو بگذارین. ببینیم بالاخره تکلیف این access time چیه؟ اگه قرار باشه با یک صدم ثانیه اختلاف با ویژگی change time به ویژگی Access time برسیم. این که معنی نمی‌ده!
دست ها می سایم تا دری بگشایم،
به عبث می پایم تا به در کس آید،
در و دیوار به هم ریخته شان بر سرم می شکند
(نیما)
عکس کاربر
Ali_Gh
مسئول جلسات
 
نوشته: 432
پیوستن: شنبه 7 دی 1387, 11:00 am
شهر: اهواز
Given: 52 thanks
Received: 189 thanks

The following user would like to thank Ali_Gh for his or her post:
NabiKAZ


برگشت به دست نوشته های اعضا

اکنون هست

;کسانی که اکنون در این تالار هستند: کاربری نام ننوشته است کاربر و 0 میهمان

cron