عملگرهای بررسی فایل

فصل 7- بررسی‌ها

7.2- عملگرهای بررسی فایل

صحیح را برگشت می‌دهد اگر...

‎-e‎

فایل موجود باشد

‎-a‎

فایل موجود باشد

این در عمل مانند ‎-e‎ است. این عملگر ناپسند ‎(Deprecate)‎ ‏[1]‎‎ تلقی گردیده است، و استفاده از آن تشویق نمی‌شود.

‎-f‎

یک فایل معمولی باشد (نه یک دایرکتوری یا فایل دستگاه)

‎-s‎

اندازه فایل صفر نباشد

‎-d‎

فایل یک دایرکتوری باشد

‎-b‎

فایل یک دستگاه بلوکی باشد

‎-c‎

فایل یک دستگاه کاراکتری باشد

device0="/dev/sda2"    # 
if [ -b "$device0" ]
then
  echo "$device0 is a block device."
fi

# /dev/sda2 is a block device.



device1="/dev/ttyS1"   # 
if [ -c "$device1" ]
then
  echo "$device1 is a character device."
fi

# 

‎-p‎

فایل یک لوله باشد

function show_input_type()
{
   [ -p /dev/fd/0 ] && echo PIPE || echo STDIN
}

show_input_type "Input"                           # 
echo "Input" | show_input_type                    # 

# 

‎-h‎

فایل یک پیوند نمادین باشد

‎-L‎

فایل یک پیوند نمادین باشد

‎-S‎

فایل یک socket باشد

‎-t‎

(توصیف‌گر) فایل با یک دستگاه ترمینال ارتباط داده می‌شود

این گزینه بررسی، می‌تواند برای کنترل این به کار برود که آیا ‎stdin [ -t 0 ]‎ یا ‎stdout [ -t 1 ]‎ در یک اسکریپت مفروض یک ترمینال است.

‎-r‎

فایل دارای مجوز خواندن باشد (برای کاربر اجرا کننده تست)

‎-w‎

فایل دارای مجوز نوشتن باشد (برای کاربر اجرا کننده بررسی)

‎-x‎

فایل دارای مجوز اجرا باشد (برای کاربر اجرا کننده بررسی)

‎-g‎

نشانه ‎set-group-id (sgid)‎ روی فایل یا دایرکتوری برقرار باشد

اگر یک دایرکتوری دارای نشانه sgid تنظیم شده باشد، آنوقت فایل ایجاد شده در آن دایرکتوری به گروهی که مالک آن دایرکتوری است تعلق دارد، نه لزوماً متعلق به گروه کاربری که فایل را ایجاد نموده است. این مورد می‌تواند برای دایرکتوری‌های به اشتراک گذاشته شده توسط یک گروه کاری سودمند باشد.

‎-u‎

نشانه ‎set-user-id (suid)‎ روی فایل تنظیم شده باشد

یک فایل باینری متعلق به root که نشانه ‎set-user-id‎ آن تنظیم شده، حتی موقعی که یک کاربر عادی آنرا فراخوانی می‌کند با مزایای root اجرا می‌گردد. [2] این مطلب برای فایل‌های اجرایی (از قبیل pppd و cdrecord) که نیازمند دسترسی به سخت‌افزار سیستم هستند سودمند است. با فقدان نشانهsuid، این فایلهای باینری نمی‌توانند توسط یک کاربر غیر از root فراخوانی بشوند.

-rwsr-xr-t    1 root       178236 Oct  2  2000 /usr/sbin/pppd

فایلی با نشانه suid تنظیم شده، یک s در مجوزهایش نشان می‌دهد.

‎-k‎

تنظیم sticky bit

نشانه save-text-mode که به طور رایج sticky bit نامیده می‌شود، یک نوع خاصی از مجوز فایل است. اگر یک فایل دارای این نشانه تنظیم شده باشد، برای دسترسی سریعتر آن فایل در حافظه میانجی نگهداری خواهد شده. [3] اگر بر روی یک دایرکتوری تنظیم شود، مجوز نوشتن را محدود می‌کند. برقراری بیت sticky یک t در لیست کردن فایل یا دایرکتوری اضافه می کند. این مجوز، حذف یا اصلاح فایلهای خاص در آن دایرکتوری را در انحصار مالک آن فایلها قرار می‌دهد.


drwxrwxrwt    7 root         1024 May 19 21:26 tmp/

اگر کاربری مالک دایرکتوری که بیت sticky آن تنظیم است نباشد، اما دارای مجوز نوشتن در آن دایرکتوری باشد،فقط فایلهایی را که بر آنها مالکیت دارد می‌تواند حذف نماید. این مطلب کاربران را از حذف و رونویسی سهوی فایلهای دیگران در یک دایرکتوری قابل دسترس عمومی، مانند ‎/tmp‎ باز می‌دارد. (البته مالک دایرکتوری یا root می‌توانند فایلهای آنجا را تغییر نام بدهند یا حذف کنند.)

‎-O‎

شما مالک فایل باشید

‎-G‎

شماره شناسایی گروه فایل مانند شماره گروه شما باشد

‎-N‎

فایل بعد از آخرین باری که خوانده شده ویرایش شده باشد

‎f1 -nt f2‎

فایل f1 جدیدتر از f2 باشد

‎f1 -ot f2‎

فایل f1 قدیمی‌تر از f2 باشد

‎f1 -ef f2‎

فایلهای f1 و f2 پیوندهای سخت به فایل یکسان باشند

!

«نفی« -- معنی بررسی‌های فوق را وارونه می‌کند (اگر شرط برقرار نباشد، صحیح برگشت می‌دهد).

مثال ‎7-4‎. بررسی پیوندهای معیوب

#!/bin/bash
# 
# 
#           

# 
#+ 
#+            
#
#     
#
# 
# 
# 
# 
# 
# 
# 
# 


# 
#+ 
#+ 
#

[ $# -eq 0 ] && directorys=`pwd` || directorys=$@


# 
#+
# 
#+ 
#

linkchk () {
    for element in $1/*; do
      [ -h "$element" -a ! -e "$element" ] && echo \"$element\"
      [ -d "$element" ] && linkchk $element
# 
    done
}

#
#+  
#+                             
#

for directory in $directorys; do
    if [ -d $directory ]
	then linkchk $directory
	else 
	    echo "$directory is not a directory"
	    echo "Usage: $0 dir1 dir2 ..."
    fi
done

exit $?

مثال ‎31-1‎‏، مثال ‎11-8‎‏، مثال ‎11-3‎‏، مثال ‎31-3‎‏، و مثال ‎A-1‎ نیز موارد استفاده عملگرهای بررسی فایل را روشن می‌سازند.

یادداشت‌ها

[1]

به قرار ویرایش 1913 واژه‌نامه Webster:

Deprecate
...

To pray against, as an evil;
to seek to avert by prayer;
to desire the removal of;
to seek deliverance from;
to express deep regret for;
to disapprove of strongly.

[2]

آگاه باشید که باینری‌های suid ممکن است حفره‌های امنیتی ایجاد کنند. نشانه suid تاثیری در اسکریپت‌های پوسته ندارند.

[3]

در سیستم‌های لینوکس، بیت sticky دیگر برای فایلها استفاده نمی‌شود، فقط برای دایرکتوری‌ها به کار می‌رود.