file - از این دستور برای تعیین نوع فایل ها استفاده میشود.
شکل کلی دستور:
$ file [options] [file]
این دستور باتوجه به فایل یا لیست فایلهایی که با آن داده میشود براساس آزمونهایی که روی آن انجام میدهد، نوع آنها را تشخیص داده و آنها را دستهبندی میکندو در انتها در خروجی استاندارد آنها را چاپ میکند. فایلها میتواند: فایل منظم، دایرکتوری، بلوک خاص، کاراکتر ویژه، لینک نمادین، FIFO و سوکتها باشد.
- اگر آن یک فایل منظم به طول صفر بود، آن به عنوان یک فایل خالی شناخته میشود.
- اگر آن یک لینک نمادین بود، نوع فایل، لینکی است که لینک نمادین به آن اشاره میکند.
- اگر فایل به صورت اسکی ظاهر شود، دستور فایل ۱۰۲۴ بایت اول را بررسی میکند و نوع فایل را مشخص میکند.
- اگر فایل به صورت اسکی ظاهر نشود، در این صورت دستور فایل تلاش بیشتری خواهد داشت به این صورت که برای تشخیص یک فایل، دادهای دودویی از یک فایل نوشتاری که شامل کاراکترهای طولانی است بهره خواهد گرفت.
- اگر پارامتر فایل (به شکل کلی دستور دقت کنید) یک فایل اجرایی باشد و شماره نسخهی آن بزرگتر از صفر باشد، دستور فایل شماره جنس آن را نمایش خواهد داد.
مثال:
$ file /home/name/Desktop/test /home/name/Desktop/test: empty
در مثال بالا یک فایل متنی ساده ایجاد کردیم که خالی از متن است. همینطور که مشاهده میکنید دستور فایل بدون نیاز به بازکردن فایل به ما خالی بودن فایل را نشان میدهد. حال در مثال بعدی، نوشته ای را وارد فایل خالی کرده و آنرا ذخیره میکنیم به مثال بعدی توجه کنید.
مثال:
$ file /home/name/Desktop/test /home/name/Desktop/test: ASCII text
همینطور که در خروجی مشاهده میکنید، خروجی ما را از وجود فایل نوشتاری آگاه میسازد.
همچین میتوان از علامت ستاره (*
) برای مشخص کردن محتویات یک پوشه یا دایرکتوری و همچنین برای تعیین نوع خاصی از فرمت استفاده کرد.
مثال:
$ cd /tmp /tmp$ file * at-spi2: sticky directory keyring-deL6gn: directory pulse-2L9K88eMlGn7: directory pulse-gkyBG6xgPWaw: directory pulse-PKdhtXMmr18n: directory qtsingleapp-flareg-bcdb-3e8: socket qtsingleapp-flareg-bcdb-3e8-lockfile: empty sni-qt_flareget_2574-9GG5Vu: directory ssh-VtapSWWs1597: directory unity_support_test.0: empty
در مثال زیر میخواهم از تمام فرمت هایی که در مسیر proc وجود دارد و با so. تمام می شود آگاه شوم پس:
مثال:
$ cd /lib /lib$ file *.so klibc-LZ1cv1NoEVO2ugnvqTw3e4qPc8Y.so: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped libproc-3.2.8.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xd27f9551a532c7702e71c209f3b47234259baebd, stripped
نکته: در بسیاری از پیادهسازیها، دستور فایل از یک پایگاه داده برای کاوش بایتهای پایهای استفاده میکند که پایگاه داده در یک فایلی به نام فایل جادویی که معمولاً در مکانهای /etc/magic, /usr/share/file/magic قرار دارد، اجرا میشود.
گزینههای اختیاری:
F-
: همینطور که در مثال های قبل مشاهده کردید، قسمت نام فایل و توضیحات با علامت :
جدا شده است برای تغییر آن میتوانید از گزینهی اختیاری زیر استفاده کنید:
$ cd /lib /lib$ file -F "#" *.so klibc-LZ1cv1NoEVO2ugnvqTw3e4qPc8Y.so# ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped libproc-3.2.8.so# ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xd27f9551a532c7702e71c209f3b47234259baebd, stripped
نکته: شاید از گزینهی اختیاری بالا سریع رد شوید! ولی نه! از این گزینه اختیاری در اسکریپتنویسیها بسیار استفاده خواهید کرد. برای مثال وقتی که شما از عبارات منظم بخواهید بهره بگیرید و بخواهید نقاط جدا کننده را در دستورات یکی در نظر بگیرید یا...
-
: از این گزینه زمانی بهره خواهید گرفته که بخواهید مقدار را از ورودی استاندارد بگیرید و دستور فایل نوع آن را مشخص کند.
$ file - www.30li.ir /dev/stdin: ASCII text
i-
: بهصورت پیش فرض خروجی به صورتی است که قابل خواندن توسط انسان باشد، این میتواند به نوع «Mime» تغییر کند:
/lib$ file -i *.so klibc-LZ1cv1NoEVO2ugnvqTw3e4qPc8Y.so: application/x-executable; charset=binary libproc-3.2.8.so: application/x-sharedlib; charset=binary
b-
: خروجی را به صورت خلاصه کرده و نام فایل ها را نشان نمیدهد:
/lib$ file -b *.so ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xd27f9551a532c7702e71c209f3b47234259baebd, stripped