<< این مقاله در واقع ترجمهای از تعریف sticky bit در دانشنامه آزاد ویکی پدیا با تلخیص و کمی تصرف. (رج. مرجع پایین همین نوشتار) >>
و اما چیست این استکی بیت؟
sticky bit در واقع در پنجمین نسخه سیستم عامل یونیکس در سال ۱۹۷۴ برای استفاده در فایلهای اجرائی مطلق به وجود آمد. با تنظیم کردن آن، این بیت به سیستم عامل اعلام میکرد که سگمنت متنی برنامه را بعد از خارج شدن برنامه، در فضای swap نگه دارد. این فرآیند اجراهای بعدی برنامه را سریعتر میکرد چرا که کرنل با یک عمل برنامه را از فضای swap وارد حافظهی اصلی میکرد. بنابراین، برنامههای پراستفاده مثل ویرایشگرهای متنی بسیار سریعتر اجرا میشدند. یک مشکل قابل ذکر در رابطه با برنامه Stick شده این بود که برای جایگزینی فایل اجرایی (مثل patch کردن آن)؛ نیاز بود که sticky bit از فایل اجرایی حذف شود، برنامه اجرا و خارج شود تا فضای کش فلاش شود، سپس فایل باینری اجرایی جایگزین شود و Sticky bit به آن اضافه شود.
استکی بیت در کدام سکو ها یافت میشود؟
در حال حاضر استکی بیت با این رفتار فقط در HP-UX، NetBSD, UnixWare و Mac OS X وجود دارد. سولاریس این رفتار را از سال ۲۰۰۵ میلادی (معادل ۱۳۸۴) رها کرده است. در BSD نسخه 4.4Lite رفتار قدیمی استکی بیت باقی مانده است ولی در OpenBSD از نسخه 3.7 و FreeBSD نسخه 2.2.1 حذف شده است. در netBSD همچنان این ویژگی یافت میشود. هیچ نسخهای از لینوکس از این رفتار سنتی پشتیبانی نمیکند.
کاربرد امروزی استکی بیت چیست؟
امروزه متداولترین استفاده استکی بیت در دایرکتوریهاست. به این ترتیب که با ست شدن این بیت روی یک دایرکتوری، محتویاتش فقط میتوانند توسط صاحبشان، یا صاحب پوشه و یا کاربر ریشه حذف شده یا تغییر نام داده شوند. بدون فعال کردن استکی بیت روی دایرکتوی، هر کاربری که نسبت به دایرکتوری دسترسی execute و write داشته باشد، صرفنظر از اینکه چه کسی مالک فایل است، میتواند فایلها را حذف کرده یا تغییر نام دهد. عموما این بیت روی دایرکتوری tmp/ برای جلوگیری از حذف شدن یا جابهجا شدن فایلهای کاربران توسط کاربران عادی از سوی مدیر سیستم اعمال میشود. این ویژگی در BSD نسخه 4.3 در سال ۱۹۸۶ معرفی شد و امروزه در اکثر سیستمهای یونیکسی جدید یافت میشود.
علاوه بر این سولاریس (از نسخه 2.5) رفتار خاصی برای زمانی که استکی بیت روی فایلهای غیر اجرائی اعمال شده باشد، تعریف کرده است. با فعال شدن این بیت روی چنین فایلهایی، آنها توسط کرنل قابل کش شدن نیستند. این رفتار معمولا روی فایلهای swap اعمال میشود تا از دسترسی به محتویات فایل جلوگیری شود. در واقع با فعال شدن این بیت روی فایلهای غیر اجرایی از کش سیستم برای باز کردن یا نگهداشتن محتویات فایل استفاده نمیشود. همچنین از این فرآیند در تستهای ردهبندی کارآیی (Benchmark) نیز استفاده میشود.
استکی بیت همچنین توسط automounter نیز اعمال میشود. به کمک این بیت automounter متوجه میشود که کدام فایل هنوز ماونت نشده است. همچنین این رفتار به برنامههایی مثل ls اجازه میدهد که فایلهای شبکه که هنوز unmount نشدهاند، را نادیده بگیرد. (لینوکس برای دسترسی به فایلهای روی شبکه (مثل یک workgroup) آنها را ماونت میکند)
باشه.. باشه.. نمی خواد اسکرول کنین! رسیدیم به قسمت عملی کار!
استکی بیت میتواند بوسیله دستور chmod و با کد عددی 1000 اعمال شود یا با نماد خودش t (البته s قبلا برای اعمال دسترسیهای عادی یا همان setuid بیت استفاده میشود). به عنوان مثال، برای اضافه کردن بیت محترم به دایرکتوری
- کد: گزینش همه
/usr/local/tmp
میتوان تایپ کرد:
- کد: گزینش همه
chmod +t /usr/local/tmp
یا برای اطمینان از اینکه آن دایرکتوری مجوز استاندارد tmp را دارد، وارد میکنیم:
- کد: گزینش همه
chmod 1777 /usr/local/tmp
در نمادگذاری مجوز فایل سیستم یونیکس، استکی بیت با حرف t در محل آخرین کاراکتر نمایش داده میشود. برای مثال، در سولاریس ۸، در مورد دایرکتوری tmp/ که به طور پیش فرض استکی بیت دارد، چنین دیده میشود:
- کد: گزینش همه
$ ls -ld /tmp
drwxrwxrwt 4 root sys 485 Nov 10 06:01 /tmp
/( با تشکر از امید جان به خاطر دقت و تذکر مفیدش )
اگر استکی بیت روی یک فایل یا پوشهای بدون مجوز execute برای others اعمال شود (یعنی نه کاربر-مالک و نه گروه-مالک) این مسئله با T (حرف T بزرگ) نشان داده میشود:
- کد: گزینش همه
# ls -l test
-rw-r--r-- 1 root other 0 Nov 10 12:57 test
# chmod +t test; ls -l test
-rw-r--r-T 1 root other 0 Nov 10 12:57 test
خیلی خب! باشه.. منم کپی رایت بلدم! کریتیو کامنز هم سرم میشه :
http://en.wikipedia.org/wiki/Sticky_bit