.TH "MAGIC" "5" "مه ۲۰۲۵" "file" "فایلهای پیکربندی" .SH "نام (NAME)" magic \- فایل الگوی جادویی دستور file .SH "توضیحات (DESCRIPTION)" این صفحه راهنما قالب فایلهای الگوهای جادویی (magic files) مورد استفاده توسط دستور \fBfile\fR را شرح میدهد. دستور .BR file (1) نوع یک فایل را با استفاده از آزمون‌های گوناگون، از جمله بررسی اینکه آیا فایل حاوی «الگوهای جادویی» (\fImagic patterns\fR) خاصی است، شناسایی می‌کند. پایگاه‌داده این «الگوهای جادویی» معمولاً در یک فایل باینری در مسیر .I /usr/share/misc/magic.mgc یا دایرکتوری حاوی قطعه‌فایل‌های متنی منبع الگو در مسیر .I /usr/share/misc/magic قرار دارد. این پایگاه‌داده مشخص می‌کند چه الگوهایی باید بررسی شوند، در صورت یافتن یک الگوی خاص چه پیام یا نوع MIME چاپ شود، و چه اطلاعات تکمیلی دیگری از فایل استخراج گردد. .PP قالب قطعه‌فایل‌های منبع که برای ساخت این پایگاه‌داده به کار می‌روند به شرح زیر است: هر خط از یک قطعه‌فایل، آزمونی را که باید انجام شود مشخص می‌کند. یک آزمون، داده‌های شروع‌شده از یک آفست مشخص در فایل را با یک مقدار بایت، یک رشته یا یک مقدار عددی مقایسه می‌کند. در صورت موفقیت‌آمیز بودن آزمون، یک پیام چاپ می‌شود. هر خط از فیلدهای زیر تشکیل شده است: .TP .B offset عددی که آفست (بر حسب بایت) داده‌های مورد بررسی در فایل را مشخص می‌کند. این آفست در شرایط زیر می‌تواند یک عدد منفی باشد: .RS .IP \(bu 2 نخستین آفست مستقیم ورودی جادویی (در سطح تداوم ۰)؛ که در این حالت به عنوان آفست از انتهای فایل به سمت عقب تفسیر می‌شود. این ویژگی تنها زمانی کار می‌کند که توصیف‌گر فایل (file descriptor) در دسترس بوده و فایل از نوع معمولی (regular file) باشد. .IP \(bu 2 یک آفست تداوم نسبی نسبت به انتهای آخرین فیلد سطح بالاتر (\c .BR & \fR). .RE .TP .B type نوع داده‌ای که باید آزموده شود. مقادیر مجاز عبارتند از: .RS .TP .B byte یک مقدار تک‌بایتی. .TP .B short یک مقدار دو بایتی با ترتیب بایت بومی دستگاه (native byte order). .TP .B long یک مقدار چهار بایتی با ترتیب بایت بومی دستگاه. .TP .B quad یک مقدار هشت بایتی با ترتیب بایت بومی دستگاه. .TP .B float یک عدد ممیز شناور ۳۲ بیتی با دقت یگانه بر اساس استاندارد IEEE با ترتیب بایت بومی دستگاه. .TP .B double یک عدد ممیز شناور ۶۴ بیتی با دقت مضاعف بر اساس استاندارد IEEE با ترتیب بایت بومی دستگاه. .TP .B string رشته‌ای از بایت‌ها. مشخصه نوع string می‌تواند به صورت اختیاری با یک گزینه .BI / width و به دنبال آن مجموعه‌ای از پرچم‌ها به صورت .B /[bCcftTtWw]* همراه شود. گزینه عرض (width) تعداد نویسه‌هایی را که باید کپی شوند محدود می‌کند. مقدار صفر به معنی تمام نویسه‌ها است. پرچم‌های زیر پشتیبانی می‌شوند: .RS .TP .B b اجبار به بررسی فایل به عنوان فایل باینری (دودویی). .TP .B C استفاده از تطبیق غیرحساس به حروف بزرگ: نویسه‌های بزرگ در الگوی جادویی با هر دو حالت کوچک و بزرگ در هدف تطبیق داده می‌شوند، در حالی که نویسه‌های کوچک الگو تنها با نویسه‌های بزرگ در هدف مطابقت می‌یابند. .TP .B c استفاده از تطبیق غیرحساس به حروف کوچک: نویسه‌های کوچک در الگوی جادویی با هر دو حالت کوچک و بزرگ در هدف تطبیق داده می‌شوند، در حالی که نویسه‌های بزرگ الگو تنها با نویسه‌های بزرگ در هدف مطابقت می‌یابند. برای انجام یک تطبیق کاملاً غیرحساس به بزرگی و کوچکی، هر دو پرچم .B c و .B C را مشخص کنید. .TP .B f الزام به اینکه رشته تطبیق‌یافته یک کلمه کامل باشد، نه یک بخش جزئی از کلمه. .TP .B T حذف فاصله‌های سفید اضافی (Trim)؛ یعنی فاصله‌های سفید ابتدا و انتهای رشته پیش از چاپ حذف می‌شوند. .TP .B t اجبار به بررسی فایل به عنوان فایل متنی. .TP .B W فشرده‌سازی فاصله‌های سفید در هدف، که باید حداقل شامل یک نویسه فاصله سفید باشد. اگر در الگوی جادویی .I n فاصله متوالی وجود داشته باشد، هدف برای تطبیق نیازمند حداقل .I n فاصله متوالی خواهد بود. .TP .B w در نظر گرفتن هر فاصله خالی در الگوی جادویی به عنوان یک فاصله اختیاری. .RE .TP .B pstring رشته به سبک پاسکال (Pascal-style string) که در آن نخستین بایت/short/int به عنوان طول بدون علامت تفسیر می‌شود. طول به طور پیش‌فرض یک بایت است و می‌تواند به عنوان یک اصلاح‌کننده مشخص شود. اصلاح‌کننده‌های زیر پشتیبانی می‌شوند: .RS .TP .B B طول یک بایتی (پیش‌فرض). .TP .B H طول ۲ بایتی با ترتیب بایت بزرگ (big-endian). .TP .B h طول ۲ بایتی با ترتیب بایت کوچک (little-endian). .TP .B L طول ۴ بایتی با ترتیب بایت بزرگ (big-endian). .TP .B l طول ۴ بایتی با ترتیب بایت کوچک (little-endian). .TP .B J طول شامل خود بایت‌های طول نیز در شمارش می‌شود. .RE .IP این رشته به NUL ختم نمی‌شود. از .B J به جای نویسه ارزشمندتر .B I استفاده شده است، زیرا این سبک از طول از ویژگی‌های قالب JPEG می‌باشد. .TP .B date یک مقدار چهار بایتی که به عنوان تاریخ یونیکس (UNIX date) تفسیر می‌شود. .TP .B qdate یک مقدار هشت بایتی که به عنوان تاریخ یونیکس تفسیر می‌شود. .TP .B ldate یک مقدار چهار بایتی که به عنوان تاریخ به سبک یونیکس اما بر اساس زمان محلی به جای UTC تفسیر می‌شود. .TP .B qldate یک مقدار هشت بایتی که به عنوان تاریخ به سبک یونیکس اما بر اساس زمان محلی به جای UTC تفسیر می‌شود. .TP .B qwdate یک مقدار هشت بایتی که به عنوان تاریخ به سبک ویندوز (Windows-style date) تفسیر می‌شود. .TP .B beid3 طول ۳۲ بیتی شناسه ID3 با ترتیب بایت بزرگ (big-endian). .TP .B beshort یک مقدار دو بایتی با ترتیب بایت بزرگ (big-endian). .TP .B belong یک مقدار چهار بایتی با ترتیب بایت بزرگ (big-endian). .TP .B bequad یک مقدار هشت بایتی با ترتیب بایت بزرگ (big-endian). .TP .B befloat یک عدد ممیز شناور ۳۲ بیتی با دقت یگانه بر اساس IEEE با ترتیب بایت بزرگ. .TP .B bedouble یک عدد ممیز شناور ۶۴ بیتی با دقت مضاعف بر اساس IEEE با ترتیب بایت بزرگ. .TP .B bedate یک مقدار چهار بایتی با ترتیب بایت بزرگ، تفسیرشده به عنوان تاریخ یونیکس. .TP .B beqdate یک مقدار هشت بایتی با ترتیب بایت بزرگ، تفسیرشده به عنوان تاریخ یونیکس. .TP .B beldate یک مقدار چهار بایتی با ترتیب بایت بزرگ، تفسیرشده به عنوان تاریخ یونیکس به زمان محلی به جای UTC. .TP .B beqldate یک مقدار هشت بایتی با ترتیب بایت بزرگ، تفسیرشده به عنوان تاریخ یونیکس به زمان محلی به جای UTC. .TP .B beqwdate یک مقدار هشت بایتی با ترتیب بایت بزرگ، تفسیرشده به عنوان تاریخ به سبک ویندوز. .TP .B bestring16 یک رشته یونیکد دو بایتی (UCS16) با ترتیب بایت بزرگ. .TP .B leid3 طول ۳۲ بیتی شناسه ID3 با ترتیب بایت کوچک (little-endian). .TP .B leshort یک مقدار دو بایتی با ترتیب بایت کوچک (little-endian). .TP .B lelong یک مقدار چهار بایتی با ترتیب بایت کوچک (little-endian). .TP .B lequad یک مقدار هشت بایتی با ترتیب بایت کوچک (little-endian). .TP .B lefloat یک عدد ممیز شناور ۳۲ بیتی با دقت یگانه بر اساس IEEE با ترتیب بایت کوچک. .TP .B ledouble یک عدد ممیز شناور ۶۴ بیتی با دقت مضاعف بر اساس IEEE با ترتیب بایت کوچک. .TP .B ledate یک مقدار چهار بایتی با ترتیب بایت کوچک، تفسیرشده به عنوان تاریخ یونیکس. .TP .B leqdate یک مقدار هشت بایتی با ترتیب بایت کوچک، تفسیرشده به عنوان تاریخ یونیکس. .TP .B leldate یک مقدار چهار بایتی با ترتیب بایت کوچک، تفسیرشده به عنوان تاریخ یونیکس به زمان محلی به جای UTC. .TP .B leqldate یک مقدار هشت بایتی با ترتیب بایت کوچک، تفسیرشده به عنوان تاریخ یونیکس به زمان محلی به جای UTC. .TP .B leqwdate یک مقدار هشت بایتی با ترتیب بایت کوچک، تفسیرشده به عنوان تاریخ به سبک ویندوز. .TP .B lestring16 یک رشته یونیکد دو بایتی (UCS16) با ترتیب بایت کوچک. .TP .B melong یک مقدار چهار بایتی با ترتیب بایت میانی (middle-endian یا PDP-11). .TP .B medate یک مقدار چهار بایتی با ترتیب بایت میانی (PDP-11)، تفسیرشده به عنوان تاریخ یونیکس. .TP .B meldate یک مقدار چهار بایتی با ترتیب بایت میانی (PDP-11)، تفسیرشده به عنوان تاریخ یونیکس به زمان محلی به جای UTC. .TP .B indirect از آفست داده‌شده، مجدداً پایگاه‌داده جادویی را بررسی می‌کند. آفست الگوی .B indirect به طور پیش‌فرض در فایل مطلق است، اما می‌توان با تعیین .B /r مشخص کرد که آفست نسبت به شروع ورودی باشد. .TP .B name تعریف یک نمونه جادویی «نام‌گذاری‌شده» (named magic) که مانند یک زیرروال (subroutine) می‌تواند از یک ورودی جادویی .B use دیگر فراخوانی شود. آفست‌های مستقیم نمونه نام‌گذاری‌شده نسبت به آفست ورودی تطبیق‌یافته قبلی سنجیده می‌شوند، اما آفست‌های غیرمستقیم طبق معمول نسبت به ابتدای فایل هستند. ورودی‌های جادویی نام‌گذاری‌شده همواره تطبیق می‌یابند. .TP .B use فراخوانی بازگشتی الگوی نام‌گذاری‌شده از آفست فعلی. اگر نام ورودی ارجاع‌شده با .B ^ آغاز شود، ترتیب بایت (endianness) الگو معکوس می‌شود؛ برای مثال اگر در الگو .B leshort آمده باشد، مانند .B beshort تفسیر می‌گردد و برعکس. این ویژگی برای جلوگیری از تکرار قواعد برای ترتیب بایت‌های گوناگون مفید است. .TP .B regex تطبیق عبارت باقاعده در نحو عبارات باقاعده گسترش‌یافته POSIX (مشابه egrep). پردازش عبارات باقاعده می‌تواند زمان نمایی مصرف کند و پیش‌بینی کارایی آن‌ها دشوار است، بنابراین استفاده از آن‌ها توصیه نمی‌شود. در محیط‌های عملیاتی باید کارایی آن‌ها به دقت سنجیده شود. اندازه رشته مورد جستجو نیز باید با مشخص کردن .BI / length محدود گردد تا از مشکلات کارایی هنگام پویش فایل‌های طولانی جلوگیری شود. مشخصه نوع می‌تواند به طور اختیاری با پرچم‌های .B /[c][s][l] دنبال شود. پرچم .B c تطبیق را نسبت به بزرگی و کوچکی حروف غیرحساس می‌کند، در حالی که پرچم .B s آفست را به جای انتهای تطبیق، به آفست شروع تطبیق به‌روزرسانی می‌کند. اصلاح‌کننده .B l محدودیت طول را به جای تعداد بایت به تعداد خطوط تغییر می‌دهد. خطوط با جداکننده خط بومی سیستم معین می‌شوند. هنگامی که تعداد خط تعیین شود، یک حد بایتی ضمنی نیز با فرض ۸۰ نویسه در هر خط محاسبه می‌گردد. اگر هیچ تعداد بایت یا خطی تعیین نشود، جستجو به صورت خودکار به 8KiB محدود می‌شود. نویسه‌های .B ^ و .B $ به ترتیب با ابتدا و انتهای هر خط مجزا مطابقت می‌یابند، نه ابتدا و انتهای فایل. .TP .B search جستجوی رشته متنی دقیق که از آفست داده‌شده شروع می‌شود. همان پرچم‌های اصلاح‌کننده الگوهای رشته‌ای را می‌توان به کار برد. عبارت جستجو باید شامل محدوده به شکل .BI / number باشد که بیانگر تعداد موقعیت‌هایی است که تطبیق از آفست اولیه در آن‌ها آزموده خواهد شد. این گزینه برای جستجوی عبارات باینری بزرگ‌تر با آفست‌های متغیر مناسب است و از گریزهای .B \e برای نویسه‌های خاص استفاده می‌کند. ترتیب اصلاح‌کننده و عدد اهمیتی ندارد. .TP .B default این مورد برای استفاده با آزمون .I x (که همیشه درست است) طراحی شده و نوعی ندارد. زمانی تطبیق می‌یابد که هیچ آزمون دیگری در آن سطح تداوم قبلاً تطبیق نیافته باشد. پاک کردن آزمون‌های تطبیق‌یافته برای یک سطح تداوم، با آزمون .B clear امکان‌پذیر است. .TP .B clear این آزمون همیشه درست است و پرچم تطبیق را برای آن سطح تداوم پاک می‌کند. این مورد برای استفاده به همراه آزمون .B default طراحی شده است. .TP .B der تجزیه فایل به عنوان فایل گواهی‌نامه DER. فیلد آزمون به عنوان نوع der که باید تطبیق یابد استفاده می‌شود. انواع DER عبارتند از: .BR eoc ، .BR bool ، .BR int ، .BR bit_str ، .BR octet_str ، .BR null ، .BR obj_id ، .BR obj_desc ، .BR ext ، .BR real ، .BR enum ، .BR embed ، .BR utf8_str ، .BR rel_oid ، .BR time ، .BR res2 ، .BR seq ، .BR set ، .BR num_str ، .BR prt_str ، .BR t61_str ، .BR vid_str ، .BR ia5_str ، .BR utc_time ، .BR gen_time ، .BR gr_str ، .BR vis_str ، .BR gen_str ، .BR univ_str ، .BR char_str ، .BR bmp_str ، .BR date ، .BR tod ، .BR datetime ، .BR duration ، .B oid-iri و .BR rel-oid-iri . این نوع‌ها می‌توانند با یک اندازه عددی اختیاری همراه شوند که عرض فیلد را بر حسب بایت مشخص می‌کند. .TP .B guid یک شناسه یکتای سراسری (Globally Unique Identifier) که به صورت .B XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX تجزیه و چاپ می‌شود. قالب آن یک رشته است. .TP .B offset این یک مقدار quad (هشت بایتی) است که آفست فعلی فایل را نشان می‌دهد. می‌توان از آن برای تعیین اندازه فایل یا بافر جادویی استفاده کرد. برای مثال ورودی‌های جادویی زیر: .PP .nf -0 offset x this file is %lld bytes -0 offset <=100 must be more than 100 \e bytes and is only %lld .fi .TP .B octal رشته‌ای که یک عدد در مبنای هشت (octal) را نشان می‌دهد. .RE .PP برای سازگاری با استاندارد Single UNIX Standard، مشخصه‌کننده‌های نوع .B dC و .B d1 معادل .BR byte ، مشخصه‌کننده‌های نوع .B uC و .B u1 معادل .BR ubyte ، مشخصه‌کننده‌های نوع .B dS و .B d2 معادل .BR short ، مشخصه‌کننده‌های نوع .B uS و .B u2 معادل .BR ushort ، مشخصه‌کننده‌های نوع .BR dI ، .B dL و .B d4 معادل .BR long ، مشخصه‌کننده‌های نوع .BR uI ، .B uL و .B u4 معادل .BR ulong ، مشخصه‌کننده نوع .B d8 معادل .BR quad ، مشخصه‌کننده نوع .B u8 معادل .BR uquad ، و مشخصه‌کننده نوع .B s معادل .B string هستند. علاوه بر این، مشخصه‌کننده نوع .B dQ معادل .B quad و مشخصه‌کننده نوع .B uQ معادل .B uquad می‌باشد. .PP هر الگوی جادویی سطح بالا (برای توضیح سطوح به ادامه متن مراجعه کنید) بر اساس نوع‌های به‌کاررفته، به عنوان متنی یا باینری (دودویی) طبقه‌بندی می‌شود. نوع‌های .B regex و .B search به عنوان آزمون‌های متنی طبقه‌بندی می‌شوند، مگر اینکه از نویسه‌های غیرقابل‌چاپ در الگو استفاده شده باشد. تمام آزمون‌های دیگر به عنوان باینری طبقه‌بندی می‌گردند. یک الگوی سطح بالا زمانی متنی در نظر گرفته می‌شود که تمامی الگوهای آن متنی باشند؛ در غیر این صورت، یک الگوی باینری محسوب خواهد شد. هنگام بررسی و تطبیق یک فایل، ابتدا الگوهای باینری آزموده می‌شوند؛ اگر تطبیقی یافت نشد و فایل شبیه متن بود، کدگذاری آن تعیین شده و الگوهای متنی آزموده می‌شوند. .PP نوع‌های عددی می‌توانند به صورت اختیاری با .B & و یک مقدار عددی همراه شوند تا مشخص گردد که پیش از انجام هرگونه مقایسه، مقدار مورد نظر با آن مقدار عددی AND بیتی شود. قرار دادن پیشوند .B u پیش از نوع داده نشان می‌دهد که مقایسه‌های ترتیبی باید به صورت بدون علامت (unsigned) انجام گیرند. .TP .B test مقداری که باید با مقدار خوانده‌شده از فایل مقایسه شود. اگر نوع داده عددی باشد، این مقدار در فرم C مشخص می‌شود؛ اگر رشته باشد، به عنوان یک رشته C با مجاز بودن گریزهای متداول (مانند \en برای خط جدید) تعیین می‌گردد. .PP مقادیر عددی می‌توانند با نویسه‌ای آغاز شوند که عملگر مورد نظر را مشخص می‌کند: .RS .TP .B = مشخص می‌کند که مقدار خوانده‌شده از فایل باید برابر با مقدار تعیین‌شده باشد. .TP .B < مشخص می‌کند که مقدار خوانده‌شده از فایل باید کمتر از مقدار تعیین‌شده باشد. .TP .B > مشخص می‌کند که مقدار خوانده‌شده از فایل باید بیشتر از مقدار تعیین‌شده باشد. .TP .B & مشخص می‌کند که در مقدار خوانده‌شده از فایل، تمام بیت‌هایی که در مقدار تعیین‌شده ۱ هستند باید ۱ (تنظیم) باشند. .TP .B ^ مشخص می‌کند که در مقدار خوانده‌شده از فایل، هر بیتی که در مقدار تعیین‌شده ۱ است باید ۰ (پاک) باشد. .TP .B ~ مقداری که پس از آن می‌آید پیش از انجام آزمون نقیض (معکوس بیتی) می‌شود. .TP .B x هر مقداری تطبیق می‌یابد. .RE .IP اگر نویسه عملگر حذف شود، به صورت پیش‌فرض .B = فرض می‌شود. عملگرهای .BR & ، .B ^ و .B ~ روی اعداد ممیز شناور (float و double) کار نمی‌کنند. عملگر .B ! مشخص می‌کند که خط در صورتی تطبیق می‌یابد که آزمون موفقیت‌آمیز .I نباشد\c . .PP مقادیر عددی در فرم C مشخص می‌شوند؛ برای مثال .B 13 ده‌دهی (decimal)، .B 013 هشت‌هشتی (octal)، و .B 0x13 شانزده‌شانزدهی (hexadecimal) است. .PP عملیات عددی روی نوع‌های تاریخ انجام نمی‌شود؛ در عوض مقدار عددی به عنوان یک آفست تفسیر می‌گردد. .PP برای مقادیر رشته‌ای، رشته درون فایل باید دقیقاً با رشته تعیین‌شده مطابقت داشته باشد. عملگرهای .BR = ، .B < و .B > (اما نه .BR & ) می‌توانند روی رشته‌ها اعمال شوند. طولی که برای تطبیق استفاده می‌شود برابر با طول آرگومان رشته در فایل الگوی جادویی است. این بدان معناست که یک خط می‌تواند با هر رشته غیرخالی تطبیق یابد (که معمولاً برای چاپ آن رشته به کار می‌رود)، با استفاده از .B >\e0 (زیرا تمام رشته‌های غیرخالی بزرگتر از رشته خالی هستند). .PP تاریخ‌ها به عنوان مقادیر عددی در قالب نمایش داخلی متناظرشان پردازش می‌شوند. .PP آزمون ویژه .B x همیشه به عنوان درست (true) ارزیابی می‌شود. .TP .B message پیامی که در صورت موفقیت‌آمیز بودن مقایسه چاپ می‌شود. اگر رشته حاوی مشخصه فرمت .BR printf (3) باشد، مقدار خوانده‌شده از فایل (پس از اعمال هرگونه ماسک بیتی مشخص‌شده) با استفاده از این پیام به عنوان رشته فرمت چاپ می‌شود. اگر رشته با .B \eb آغاز شود، پیام چاپ‌شده باقیمانده رشته بدون افزودن هیچ‌گونه فاصله سفید قبل از آن خواهد بود: به طور معمول تطبیق‌های چندگانه با یک فاصله تکی از یکدیگر جدا می‌شوند. .PP مشخصه ۴+۴ نویسه‌ای سازنده و نوع اپل (APPLE creator and type) را می‌توان به صورت زیر مشخص کرد: .PP .nf !:apple CREATYPE .fi .PP نوع MIME در یک خط جداگانه ارائه می‌شود که باید نخستین خط غیرخالی یا غیرتوضیحی پس از خط magic مشخص‌کننده نوع فایل باشد، و دارای قالب زیر است: .PP .nf !:mime MIMETYPE .fi .PP یعنی رشته دقیق .B !:mime که به دنبال آن نوع MIME می‌آید. .PP می‌توان یک قدرت (strength) اختیاری را در خطی جداگانه تعیین کرد که به توصیف جادویی فعلی اشاره دارد و از قالب زیر پیروی می‌کند: .PP .nf !:strength OP VALUE .fi .PP عملوند .B OP می‌تواند یکی از موارد .BR + ، .BR - ، .B * یا .B / باشد و .B VALUE یک ثابت عددی بین 0 تا 255 است. این مقدار ثابت با استفاده از عملوند مشخص‌شده روی قدرت پیش‌فرض محاسبه‌شده فعلی اعمال می‌گردد. .PP برخی از قالب‌های فایل شامل اطلاعات بیشتری هستند که باید همراه با نوع فایل چاپ شوند، یا برای تعیین نوع واقعی فایل نیازمند آزمون‌های تکمیلی هستند. این آزمون‌های تکمیلی با قرار دادن یک یا چند نویسه .B > پیش از آفست معرفی می‌شوند. تعداد نویسه‌های .B > در خط، سطح آزمون را نشان می‌دهد؛ خطی که در ابتدا هیچ .B > ندارد در سطح ۰ قرار دارد. آزمون‌ها در یک سلسله‌مراتب درختی مرتب شده‌اند: اگر آزمون یک خط در سطح .I n موفقیت‌آمیز باشد، تمامی آزمون‌های بعدی در سطح .I n+1 اجرا می‌شوند و در صورت موفقیت آزمون‌ها پیام‌هایشان چاپ می‌گردد، تا زمانی که خطی با سطح .I n (یا کمتر) پدیدار شود. برای فایل‌های پیچیده‌تر، می‌توان از پیام‌های خالی برای ایجاد اثر شرطی «اگر/آنگاه» به صورت زیر استفاده کرد: .PP .nf 0 string MZ >0x18 leshort <0x40 MS-DOS executable >0x18 leshort >0x3f extended PC executable (e.g., MS Windows) .fi .PP آفست‌ها نیازی نیست همواره ثابت باشند، بلکه می‌توان آن‌ها را از خود فایلی که بررسی می‌شود خواند. اگر نخستین نویسه پس از آخرین علامت .B > یک پرانتز باز .B ( باشد، رشته پس از پرانتز به عنوان یک آفست غیرمستقیم تفسیر می‌شود. این بدان معناست که عدد پس از پرانتز به عنوان یک آفست در فایل به کار می‌رود. مقدار موجود در آن آفست خوانده شده و دوباره به عنوان یک آفست در فایل استفاده می‌شود. آفست‌های غیرمستقیم به شکل زیر هستند: .PP .nf (( x [[.,][bBcCeEfFgGhHiIlmsSqQ]][+\-][ y ]) .fi .PP مقدار .I x به عنوان یک آفست در فایل استفاده می‌شود. با توجه به مشخصه‌کننده نوع .BR [bBcCeEfFgGhHiIlmsSqQ] ، یک بایت، طول id3، مقدار short یا long در آن آفست خوانده می‌شود. اگر .B , مشخص شود مقدار به عنوان علامت‌دار (signed) و اگر .B . مشخص شود به عنوان بدون علامت (unsigned) در نظر گرفته می‌شود. انواع دارای حروف بزرگ، عدد را به عنوان مقداری با ترتیب بایت بزرگ (big-endian) تفسیر می‌کنند، در حالی که نسخه‌های با حروف کوچک، عدد را با ترتیب بایت کوچک (little-endian) می‌خوانند؛ نوع .B m عدد را با ترتیب بایت میانی (middle-endian یا PDP-11) تفسیر می‌کند. مقدار .I y به آن عدد افزوده شده و نتیجه به عنوان آفست نهایی در فایل به کار می‌رود. نوع پیش‌فرض در صورتی که مشخص نشود، long است. انواع زیر شناخته می‌شوند: .PP .nf نوع (Type) عنوان (Mnemonic) ترتیب بایت (Endian) اندازه (Size) bcBc Byte/Char N/A 1 efg Double Little 8 EFG Double Big 8 hs Half/Short Little 2 HS Half/Short Big 2 i ID3 Little 4 I ID3 Big 4 m Middle Middle 4 o Octal Textual متغیر q Quad Little 8 Q Quad Big 8 .fi .PP به این ترتیب می‌توان ساختارهایی با طول متغیر را بررسی کرد: .PP .nf # فایلهای اجرایی ویندوز همچنین فایلهای اجرایی معتبر داس هستند 0 string MZ >0x18 leshort <0x40 MZ executable (MS-DOS) # اگر فایل یک اجرایی توسعهیافته نیست، کل بلوک زیر را نادیده بگیر >0x18 leshort >0x3f >>(0x3c.l) string PE\e0\e0 PE executable (MS-Windows) >>(0x3c.l) string LX\e0\e0 LX executable (OS/2) .fi .PP این راهبرد بررسی یک عیب دارد: باید مطمئن شوید که در نهایت چیزی چاپ می‌شود، در غیر این صورت ممکن است کاربران با خروجی خالی مواجه شوند (مانند زمانی که در مثال بالا نه PE\e0\e0 و نه LE\e0\e0 وجود داشته باشد). .PP اگر این آفست غیرمستقیم را نتوان مستقیماً استفاده کرد، محاسبات ساده امکان‌پذیر است: افزودن .BR [+-*/%&|^]number درون پرانتز اجازه می‌دهد مقداری که از فایل خوانده شده است پیش از استفاده به عنوان آفست، اصلاح شود: .PP .nf # فایلهای اجرایی ویندوز همچنین فایلهای اجرایی معتبر داس هستند 0 string MZ # گاهی مقدار در 0x18 کمتر از 0x40 است اما همچنان یک فایل # اجرایی توسعهیافته وجود دارد که به انتهای فایل پیوست شده است >0x18 leshort <0x40 >>(4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP) >>(4.s*512) leshort !0x014c MZ executable (MS-DOS) .fi .PP گاهی اوقات آفست دقیق را نمی‌دانید زیرا به طول یا موقعیت فیلدهای قبلی (هنگامی که قبلاً از حالت غیرمستقیم استفاده شده) بستگی دارد. می‌توانید با استفاده از .B & به عنوان پیشوند آفست، یک آفست نسبی نسبت به انتهای آخرین فیلد سطح بالاتر تعیین کنید: .PP .nf 0 string MZ >0x18 leshort >0x3f >>(0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # بلافاصه پس از امضای PE، نوع پردازنده قرار دارد >>>&0 leshort 0x14c for Intel 80386 >>>&0 leshort 0x184 for DEC Alpha .fi .PP می‌توان آفست‌های غیرمستقیم و نسبی را با یکدیگر ترکیب کرد: .PP .nf 0 string MZ >0x18 leshort <0x40 >>(4.s*512) leshort !0x014c MZ executable (MS-DOS) # اگر COFF نبود، ۵۱۲ بایت به عقب برگرد و آفست خواندهشده # از بایت ۲ و ۳ را اضافه کن، که روش دیگری برای یافتن شروع # فایل اجرایی توسعهیافته است >>>&(2.s-514) string LE LE executable (MS Windows VxD driver) .fi .PP یا برعکس: .PP .nf 0 string MZ >0x18 leshort >0x3f >>(0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # در آفست 0x80 (منهای ۴، زیرا آفستهای نسبی از انتهای تطبیق # سطح بالاتر شروع میشوند) درون هدر LE، آفست مطلق به ناحیه کد # را مییابیم، جایی که به دنبال یک امضای خاص میگردیم >>>(&0x7c.l+0x26) string UPX \eb, UPX compressed .fi .PP یا حتی هر دو! .PP .nf 0 string MZ >0x18 leshort >0x3f >>(0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # در آفست 0x58 درون هدر LE، آفست نسبی به ناحیه داده را # مییابیم که در آنجا به دنبال یک امضای مشخص میگردیم >>>&(&0x54.l-3) string UNACE \eb, ACE self-extracting archive .fi .PP اگر با جفت‌های آفست/طول در فایل سروکار دارید، حتی مقدار دوم در یک عبارت درون پرانتز را نیز می‌توان با استفاده از یک جفت پرانتز دیگر از خود فایل دریافت کرد. توجه داشته باشید که این آفست غیرمستقیم اضافی همواره نسبت به شروع آفست غیرمستقیم اصلی سنجیده می‌شود. .PP .nf 0 string MZ >0x18 leshort >0x3f >>(0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # جستجو برای بخش PE به نام ".idata"... >>>&0xf4 search/0x140 .idata # ...و رفتن به انتهای آن، محاسبهشده از شروع + طول؛ # این مقادیر ۱۴ و ۱۰ بایت پس از نام بخش قرار دارند >>>>(&0xe.l+(-4)) string PK\e3\e4 \eb, ZIP self-extracting archive .fi .PP اگر فهرستی از مقادیر مشخص در یک سطح تداوم خاص دارید و می‌خواهید یک حالت پیش‌فرض شبیه switch فراهم کنید: .PP .nf # پاک کردن تطبیق آن سطح تداوم >18 clear >18 lelong 1 one >18 lelong 2 two >18 default x # چاپ تطبیق پیشفرض >>18 lelong x unmatched 0x%x .fi .SH "همچنین ببینید (SEE ALSO)" .BR file (1) \- دستوری که این فایل را می‌خواند. .SH "اشکالات (BUGS)" قالب‌های .BR long ، .BR belong ، .BR lelong ، .BR melong ، .BR short ، .B beshort و .B leshort به طول انواع داده C یعنی .B short و .B long در پلتفرم وابسته نیستند، اگرچه استاندارد Single UNIX Specification چنین القا می‌کند. با این حال، از آنجا که سیستم‌عامل OS X Mountain Lion آزمون‌های اعتبارسنجی مجموعه Single UNIX Specification را با موفقیت گذرانده و نسخه‌ای از دستور .BR file (1) را ارائه می‌دهد که در آن این انواع به اندازه‌های انواع داده C وابسته نیستند و برای یک محیط ۶۴ بیتی ساخته شده که در آن .B long به جای ۴ بایت، ۸ بایت است، احتمالاً مجموعه اعتبارسنجی بررسی نمی‌کند که آیا به عنوان مثال .B long به عنصری با اندازه مشابه نوع داده C یعنی .B long اشاره دارد یا خیر. احتمالاً بهتر بود نام‌های نوع به صورت .BR int8 ، .BR uint8 ، .BR int16 ، .BR uint16 ، .BR int32 ، .BR uint32 ، .B int64 و .B uint64 و انواع دارای ترتیب بایت مشخص برای آن‌ها می‌بودند تا کاملاً مشخص باشد که این انواع داده دارای عرض‌های ثابتی هستند.