.\" -*- coding: UTF-8 -*- .\" $File: magic.man,v 1.115 2025/11/24 15:45:00 christos Exp $ .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .Dd 24 نوفمبر 2025 .Dt MAGIC 5 .Os .\" install as magic.4 on USG, magic.5 on V7, Berkeley and Linux systems. .Sh الاسم .Nm magic .Nd ملف الأنماط السحرية لأمر file .Sh الوصف توثق صفحة الدليل هذه صيغة الملفات السحرية كما هي مستخدمة في الأمر .Xr file 1 ، الإصدار 5.47. يحدد الأمر .Xr file 1 نوع الملف باستخدام اختبارات متعددة، من بينها اختبار ما إذا كان الملف يحتوي على .Dq "أنماط سحرية" معينة. تقع قاعدة بيانات هذه .Dq "الأنماط السحرية" عادةً في ملف ثنائي في .Pa /usr/share/file/misc/magic.mgc أو في دليل يحتوي على ملفات نصية مجزأة للمصادر في .Pa /usr/share/file/misc/magic . تحدد قاعدة البيانات الأنماط التي يجب اختبارها، والرسالة أو نوع MIME المراد طباعته في حال العثور على نمط معين، بالإضافة إلى معلومات إضافية يمكن استخراجها من الملف. .Pp تكون صيغة ملفات الأجزاء المصدرية المستخدمة لبناء قاعدة البيانات هذه كالتالي: يحدد كل سطر في ملف الأجزاء اختباراً يراد إجراؤه. يقارن الاختبار البيانات التي تبدأ عند إزاحة معينة في الملف بقيمة بايت، أو بسلسلة نصية، أو بقيمة رقمية. إذا نجح الاختبار، تُطبع رسالة. يتكون السطر من الحقول التالية: .Bl -tag -width ".Dv message" .It Dv offset رقم يحدد الإزاحة (بالبايت) داخل الملف للبيانات المراد اختبارها. يمكن أن تكون هذه الإزاحة رقماً سالباً إذا كانت: .Bl -bullet -compact .It الإزاحة المباشرة الأولى للمدخل السحري (عند مستوى المتابعة 0)، وفي هذه الحالة تُفسر على أنها إزاحة من نهاية الملف باتجاه الخلف. يعمل هذا فقط عندما يكون موصّف الملف متاحاً وعندما يكون ملفاً عادياً. .It إزاحة متابعة نسبية لنهاية الحقل الأخير في المستوى الأعلى .Dv (\*[Am] ) . .El إذا بدأت الإزاحة بالرمز .Dq + ، تُفسر جميع الإزاحات على أنها من بداية الملف (وهو الخيار المبدئي). .It Dv type نوع البيانات المراد اختبارها. القيم الممكنة هي: .Bl -tag -width ".Dv lestring16" .It Dv byte قيمة من بايت واحد. .It Dv short قيمة من بايتين بترتيب البايتات الأصلي لهذا الجهاز. .It Dv long قيمة من 4 بايتات بترتيب البايتات الأصلي لهذا الجهاز. .It Dv quad قيمة من 8 بايتات بترتيب البايتات الأصلي لهذا الجهاز. .It Dv float عدد ذو فاصلة عائمة أحادي الدقة 32-بت وحسب معيار IEEE بترتيب البايتات الأصلي لهذا الجهاز. .It Dv double عدد ذو فاصلة عائمة مزدوج الدقة 64-بت وحسب معيار IEEE بترتيب البايتات الأصلي لهذا الجهاز. .It Dv string سلسلة من البايتات. يمكن أن يُتبع تخصيص نوع السلسلة اختيارياً بخيار / واختيارياً بمجموعة من الأعلام [bCcftTtWw]*. يمكن استخدام الشُرط المائلة للفصل بين الخيارات لتحسين القراءة. يحدّ العرض (width) من عدد المحارف المراد نسخها. الصفر يعني كل المحارف. الأعلام التالية مدعومة: .Bl -tag -width B -compact -offset XXXX .It b فرض اختبار الملف الثنائي. .It C استخدام مطابقة غير حساسة لحالة الأحرف الكبيرة: تطابق الأحرف الكبيرة في النمط السحري كلاً من الأحرف الصغيرة والكبيرة في الهدف، بينما تطابق الأحرف الصغيرة في النمط السحري الأحرف الكبيرة فقط في الهدف. (غير صالحة للتعبيرات النمطية regex) .It c استخدام مطابقة غير حساسة لحالة الأحرف الصغيرة: تطابق الأحرف الصغيرة في النمط السحري كلاً من الأحرف الصغيرة والكبيرة في الهدف، بينما تطابق الأحرف الكبيرة في النمط السحري الأحرف الكبيرة فقط في الهدف. (غير صالحة للتعبيرات النمطية regex). لإجراء مطابقة غير حساسة لحالة الأحرف بالكامل، حدد كلاً من .Dq c و .Dq C . .It f اشتراط أن تكون السلسلة المطابقة كلمة كاملة، وليس مطابقة جزئية للكلمة. .It s عدم تضمين طول المطابقة في حساب الإزاحة. (صالح فقط للبحث والتعبيرات النمطية regex) .It T تهذيب السلسلة النصية، أي تُحذف الفراغات البادئة والختامية قبل طباعة السلسلة. .It t فرض اختبار الملف النصي. .It W ضغط الفراغات في الهدف، والذي يجب أن يحتوي على محرف فراغ واحد على الأقل. (غير صالح للتعبيرات النمطية regex). إذا كان النمط السحري يحتوي على .Dv n من الفراغات المتتالية، يحتاج الهدف إلى .Dv n من الفراغات المتتالية على الأقل للمطابقة. .It w معاملة كل فراغ في النمط السحري كفراغ اختياري. (غير صالح للتعبيرات النمطية regex) .El .It Dv pstring سلسلة نصية بأسلوب باسكال (Pascal-style) حيث يُفسر البايت/العدد القصير/العدد الصحيح الأول على أنه الطول غير الموقع. يكون الطول بايت مبدئياً ويمكن تحديده كمعدل. المعدلات التالية مدعومة: .Bl -tag -width B -compact -offset XXXX .It B طول بايت واحد (مبدئي). .It H طول من بايتين بترتيب البايتات الكبير (big endian). .It h طول من بايتين بترتيب البايتات الصغير (little endian). .It L طول من 4 بايتات بترتيب البايتات الكبير (big endian). .It l طول من 4 بايتات بترتيب البايتات الصغير (little endian). .It J يتضمن الطول نفسه في حسابه. .El السلسلة النصية لا تنتهي بمحرف NUL. يُستخدم الرمز .Dq J بدلاً من الرمز الأكثر قيمة .Dq I لأن هذا النوع من الطول يعد ميزة من ميزات صيغة JPEG. .It Dv date قيمة من 4 بايتات تُفسر كتاريخ يونكس. .It Dv qdate قيمة من 8 بايتات تُفسر كتاريخ يونكس. .It Dv ldate قيمة من 4 بايتات تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv qldate قيمة من 8 بايتات تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv qwdate قيمة من 8 بايتات تُفسر كتاريخ بأسلوب ويندوز. .It Dv msdosdate قيمة من بايتين تُفسر كتاريخ بأسلوب FAT/DOS. .It Dv msdostime قيمة من بايتين تُفسر كوقت بأسلوب FAT/DOS. .It Dv beid3 طول ID3 ‏32-بت بترتيب البايتات الكبير (big-endian). .It Dv beshort قيمة من بايتين بترتيب البايتات الكبير (big-endian). .It Dv belong قيمة من 4 بايتات بترتيب البايتات الكبير (big-endian). .It Dv bequad قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian). .It Dv befloat عدد ذو فاصلة عائمة أحادي الدقة 32-بت وحسب معيار IEEE بترتيب البايتات الكبير (big-endian). .It Dv bedouble عدد ذو فاصلة عائمة مزدوج الدقة 64-بت وحسب معيار IEEE بترتيب البايتات الكبير (big-endian). .It Dv bedate قيمة من 4 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ يونكس. .It Dv beqdate قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ يونكس. .It Dv beldate قيمة من 4 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv beqldate قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv beqwdate قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب ويندوز. .It Dv bemsdosdate قيمة من بايتين بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب FAT/DOS. .It Dv bemsdostime قيمة من بايتين بترتيب البايتات الكبير (big-endian)، تُفسر كوقت بأسلوب FAT/DOS. .It Dv bestring16 سلسلة نصية يونيكود (UCS16) من بايتين بترتيب البايتات الكبير (big-endian). .It Dv leid3 طول ID3 ‏32-بت بترتيب البايتات الصغير (little-endian). .It Dv leshort قيمة من بايتين بترتيب البايتات الصغير (little-endian). .It Dv lelong قيمة من 4 بايتات بترتيب البايتات الصغير (little-endian). .It Dv lequad قيمة من 8 بايتات بترتيب البايتات الصغير (little-endian). .It Dv lefloat عدد ذو فاصلة عائمة أحادي الدقة 32-بت وحسب معيار IEEE بترتيب البايتات الصغير (little-endian). .It Dv ledouble عدد بفاصلة عائمة بمعيار IEEE مزدوج الدقة وبسعة 64 بت بترتيب بايتات little-endian. .It Dv ledate قيمة من أربعة بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ UNIX. .It Dv leqdate قيمة من ثمانية بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ UNIX. .It Dv leldate قيمة من أربعة بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب UNIX، ولكن تُفسَّر كتوقيت محلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv leqldate قيمة من ثمانية بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب UNIX، ولكن تُفسَّر كتوقيت محلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv leqwdate قيمة من ثمانية بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب Windows. .It Dv lemsdosdate قيمة من بايتين بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب FAT/DOS. .It Dv lemsdostime قيمة من بايتين بترتيب بايتات little-endian، تُفسَّر كتوقيت بأسلوب FAT/DOS. .It Dv lestring16 سلسلة نصية يونيكود (UCS16) من بايتين بترتيب بايتات little-endian. .It Dv melong قيمة من أربعة بايتات بترتيب بايتات middle-endian (لـ PDP-11). .It Dv medate قيمة من أربعة بايتات بترتيب بايتات middle-endian (لـ PDP-11)، تُفسَّر كتاريخ UNIX. .It Dv meldate قيمة من أربعة بايتات بترتيب بايتات middle-endian (لـ PDP-11)، تُفسَّر كتاريخ بأسلوب UNIX، ولكن تُفسَّر كتوقيت محلي بدلاً من التوقيت العالمي المنسق (UTC). .It Dv indirect بدءًا من الإزاحة المعطاة، استشر قاعدة بيانات magic مجددًا. إزاحة magic من نوع .Dv indirect تكون مبدئيًا مطلقة في الملف، ولكن يمكن تحديد .Dv /r للإشارة إلى أن الإزاحة نسبية من بداية المدخلة. .It Dv name عرِّف مثيل magic .Dq named يمكن استدعاؤه من مدخلة magic أخرى من نوع .Dv use ، مثل استدعاء روتين فرعي. إزاحات magic المباشرة للمثيل المُسمَّى نسبية لإزاحة المدخلة السابقة المطابقة، لكن الإزاحات غير المباشرة نسبية لبداية الملف كالمعتاد. تُعيد مدخلات magic المُسمَّاة قيمة صحيحة إذا وجد تطابق في تقييم المدخلة، أو إذا وجد تطابق سابق. .It Dv use استدعِ magic المُسمَّى بشكل تكراري بدءًا من الإزاحة الحالية. إذا بدأ اسم المرجع بـ .Dv ^ فإن ترتيب البايتات (endianness) لـ magic يُبدَّل؛ فإذا ذكر magic على سبيل المثال .Dv leshort ، فإنه يُعامَل كـ .Dv beshort والعكس صحيح. هذا مفيد لتجنب تكرار القواعد لاختلاف ترتيب البايتات. .It Dv regex مطابقة تعبير نمطي ببناء التعبيرات النمطية الموسَّعة لـ POSIX (مثل egrep). التعبيرات النمطية قد تستغرق وقتًا أسيًا للمعالجة، وأداؤها يصعب التنبؤ به، لذا يُنصَح بعدم استخدامها. عند استخدامها في بيئات الإنتاج، يجب فحص أدائها بعناية. يجب أيضًا تحديد حجم السلسلة المطلوب البحث فيها عن طريق تحديد .Dv / ، لتجنب مشاكل الأداء عند فحص الملفات الطويلة. يمكن أيضًا أن يتبع تحديد النوع اختياريًا .Dv /[c][s][l] . يجعل العلم .Dq c المطابقة غير حساسة لحالة الأحرف، بينما يُحدِّث العلم .Dq s الإزاحة إلى إزاحة بداية المطابقة، بدلاً من نهايتها. يغيِّر المعدِّل .Dq l حد الطول ليعني عدد الأسطر بدلاً من عدد البايتات. تُفصَل الأسطر بواسطة فاصل الأسطر الأصلي للمنصة. عند تحديد عدد الأسطر، يُحسَب عدد بايتات ضمني بافتراض أن كل سطر طوله 80 محرفًا. إذا لم يُحدَّد عدد البايتات أو الأسطر، يُقيَّد البحث آليًا بـ 8 كيلوبايت. يطابق .Dv ^ و .Dv $ بداية ونهاية الأسطر الفردية، على التوالي، وليس بداية ونهاية الملف. .It Dv search بحث عن سلسلة نصية حرفية بدءًا من الإزاحة المعطاة. يمكن استخدام أعلام التعديل نفسها كما في أنماط السلاسل. يجب أن يحتوي تعبير البحث على النطاق بصيغة .Dv /number, وهو عدد المواضع التي ستُجرَى فيها محاولة المطابقة، بدءًا من إزاحة البداية. هذا مناسب للبحث عن تعبيرات ثنائية أكبر ذات إزاحات متغيرة، باستخدام رموز الهروب .Dv \e للمحارف الخاصة. ترتيب المعدِّل والرقم ليس مهمًا. .It Dv default هذا مخصص للاستخدام مع الاختبار .Em x (الذي هو صحيح دائمًا) وليس له نوع. يطابق عندما لا يكون أي اختبار آخر في مستوى التتابُع ذلك قد طابق من قبل. مسح الاختبارات المطابقة لمستوى تتابُع يمكن إجراؤه باستخدام الاختبار .Dv clear . .It Dv clear هذا الاختبار صحيح دائمًا ويمسح علم المطابقة لمستوى التتابُع ذلك. وهو مخصص للاستخدام مع الاختبار .Dv default . .It Dv der حلِّل الملف كملف شهادة DER. يُستخدم حقل الاختبار كنوع der يحتاج إلى مطابقة. أنواع DER هي: .Dv eoc ، .Dv bool ، .Dv int ، .Dv bit_str ، .Dv octet_str ، .Dv null ، .Dv obj_id ، .Dv obj_desc ، .Dv ext ، .Dv real ، .Dv enum ، .Dv embed ، .Dv utf8_str ، .Dv rel_oid ، .Dv time ، .Dv res2 ، .Dv seq ، .Dv set ، .Dv num_str ، .Dv prt_str ، .Dv t61_str ، .Dv vid_str ، .Dv ia5_str ، .Dv utc_time ، .Dv gen_time ، .Dv gr_str ، .Dv vis_str ، .Dv gen_str ، .Dv univ_str ، .Dv char_str ، .Dv bmp_str ، .Dv date ، .Dv tod ، .Dv datetime ، .Dv duration ، .Dv oid-iri ، .Dv rel-oid-iri . يمكن أن تتبع هذه الأنواع حجم عددي اختياري، والذي يشير إلى عرض الحقل بالبايتات. .It Dv guid مُعرِّف فريد عالميًا (GUID)، يُحلّل ويُطبع كـ XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. تنسيقه عبارة عن سلسلة نصية. .It Dv offset هذه قيمة رباعية تشير إلى الإزاحة الحالية للملف. يمكن استخدامها لتحديد حجم الملف أو ذاكرة السحر الوسيطة. على سبيل المثال، المُدخلات السحرية: .Bd -literal -offset indent -0 offset x this file is %lld bytes -0 offset <=100 must be more than 100 \e bytes and is only %lld .Ed .It Dv octal سلسلة نصية تُمثّل رقمًا ثمانيًا. .El .Pp للتوافق مع معيار .Ux الموحد، فإن محددي النوع .Dv dC و .Dv d1 يكافئان .Dv byte ، ومحددي النوع .Dv uC و .Dv u1 يكافئان .Dv ubyte ، ومحددي النوع .Dv dS و .Dv d2 يكافئان .Dv short ، ومحددي النوع .Dv uS و .Dv u2 يكافئان .Dv ushort ، ومحددات النوع .Dv dI ، و .Dv dL ، و .Dv d4 تكافئ .Dv long ، ومحددات النوع .Dv uI ، و .Dv uL ، و .Dv u4 تكافئ .Dv ulong ، ومحدد النوع .Dv d8 يكافئ .Dv quad ، ومحدد النوع .Dv u8 يكافئ .Dv uquad ، ومحدد النوع .Dv s يكافئ .Dv string . بالإضافة إلى ذلك، فإن محدد النوع .Dv dQ يكافئ .Dv quad ومحدد النوع .Dv uQ يكافئ .Dv uquad . .Pp يُصنّف كل نمط سحري في المستوى الرئيس (انظر أدناه للحصول على تفسير للمستويات) كنص أو ثنائي وفقًا للأنواع المستخدمة. تُصنّف الأنواع .Dq regex و .Dq search كاختبارات نصية، ما لم تُستخدم محارف غير قابلة للطباعة في النمط. تُصنّف جميع الاختبارات الأخرى كثنائية. يُعتبر النمط في المستوى الرئيس نصًا اختباريًا عندما تكون جميع أنماطه الفرعية أنماطًا نصية؛ وخلاف ذلك، يُعتبر نمطًا ثنائيًا. عند مطابقة ملف، تُجرّب الأنماط الثنائية أولاً؛ وإذا لم يُعثر على تطابق، وبدا الملف كأنه نص، فيُحدّد ترميزه وتُجرّب الأنماط النصية. .Pp يمكن اختياريًا إتباع الأنواع الرقمية بمعامل وقيمة رقمية، لتحديد أن القيمة ستُعدّل وفقًا للمعامل والقيمة الرقمية قبل إجراء أي مقارنات. المعاملات التالية مدعومة: .Dv \*[Am], \*[Ba], \*[ua], +, -, \&*, /, %. إلحاق الحرف .Dv u كبادئة للنوع يشير إلى أن المقارنات المرتبة يجب أن تكون غير موقعة. .It Dv test القيمة المراد مقارنتها بالقيمة المأخوذة من الملف. إذا كان النوع رقميًا، فتُحدّد هذه القيمة بصيغة لغة C؛ وإذا كانت سلسلة نصية، فتُحدّد كسلسلة نصية بلغة C مع السماح بمحارف الهروب المعتادة (مثل \en للسطر الجديد). .Pp قد تُسبق القيم الرقمية بمحرف يشير إلى العملية المراد تنفيذها. يمكن أن يكون .Dv = ، لتحديد أن القيمة من الملف يجب أن تساوي القيمة المحددة، أو .Dv \*[Lt] ، لتحديد أن القيمة من الملف يجب أن تكون أقل من القيمة المحددة، أو .Dv \*[Gt] ، لتحديد أن القيمة من الملف يجب أن تكون أكبر من القيمة المحددة، أو .Dv \*[Am] ، لتحديد أن القيمة من الملف يجب أن تحتوي على جميع البتات المعينة في القيمة المحددة، أو .Dv ^ ، لتحديد أن القيمة من الملف يجب أن تمسح أيًا من البتات المعينة في القيمة المحددة، أو .Dv ~ ، حيث تُنفي القيمة المحددة بعده قبل اختبارها. ويعني .Dv x أن أي قيمة ستتطابق. إذا حُذف المحرف، فيُفترض أنه .Dv = . العوامل .Dv \*[Am] و .Dv ^ و .Dv ~ لا تعمل مع الأعداد العشرية والمضاعفة. يحدد العامل .Dv !\& أن السطر يتطابق إذا لَم ينجح الاختبار. .Pp تُحدّد القيم الرقمية بصيغة لغة C؛ على سبيل المثال: .Dv 13 عشري، و .Dv 013 ثماني، و .Dv 0x13 ست عشري. .Pp لا تُجرى العمليات الرقمية على أنواع التاريخ، وبدلاً من ذلك تُفسّر القيمة الرقمية كإزاحة. .Pp بالنسبة لقيم السلاسل النصية، يجب أن تتطابق السلسلة النصية من الملف مع السلسلة المحددة. يمكن تطبيق العوامل .Dv = و .Dv \*[Lt] و .Dv \*[Gt] (وليس .Dv \*[Am] ) على السلاسل النصية. الطول المستخدم للمطابقة هو طول معامل السلسلة النصية في الملف السحري. هذا يعني أن السطر يمكنه مطابقة أي سلسلة نصية غير فارغة (تُستخدم عادةً لطباعة السلسلة النصية لاحقًا)، باستخدام .Em \*[Gt]\e0 (لأن جميع السلاسل النصية غير الفارغة أكبر من السلسلة النصية الفارغة). .Pp تُعامل التواريخ كقيم رقمية في التمثيل الداخلي المقابل لها. .Pp ينتج عن الاختبار الخاص .Em x دائمًا قيمة صحيحة (true). .It Dv message الرسالة المراد طباعتها في حال نجاح المقارنة. إذا كانت السلسلة النصية تحتوي على محدد تنسيق .Xr printf 3 ، فتُطبع القيمة من الملف (بعد تطبيق أي قناع محدد) باستخدام الرسالة كسلسلة تنسيق. إذا بدأت السلسلة بـ .Dq \eb ، فإن الرسالة المطبوعة هي بقية السلسلة النصية دون إضافة مسافة بيضاء قبلها: عادةً ما تُفصل التطابقات المتعددة بمسافة واحدة. .El .Pp يمكن تحديد منشئ ونوع APPLE المكون من 4+4 محارف كـ: .Bd -literal -offset indent !:apple CREATYPE .Ed .Pp يمكن تحديد قائمة بامتدادات الملفات الشائعة مفصولة بشرطة مائلة كـ: .Bd -literal -offset indent !:ext ext[/ext...] .Ed .Pp أي السلسلة النصية الحرفية .Dq !:ext متبوعة بقائمة مفصولة بشرطة مائلة من الامتدادات الشائعة؛ على سبيل المثال لصور JPEG: .Bd -literal -offset indent !:ext jpeg/jpg/jpe/jfif .Ed .Pp يُعطى نوع MIME في سطر منفصل، ويجب أن يكون السطر التالي غير الفارغ وغير التعليقي بعد السطر السحري الذي يحدد نوع الملف، وله التنسيق التالي: .Bd -literal -offset indent !:mime MIMETYPE .Ed .Pp أي السلسلة النصية الحرفية .Dq !:mime متبوعة بنوع MIME. .Pp يمكن تقديم قوة اختيارية في سطر منفصل يشير إلى الوصف السحري الحالي باستخدام التنسيق التالي: .Bd -literal -offset indent !:strength OP VALUE .Ed .Pp يمكن أن يكون المعامل .Dv OP : .Dv + أو .Dv - أو .Dv * أو .Dv / وتكون .Dv VALUE ثابتاً بين 0 و 255. يُطبّق هذا الثابت باستخدام المعامل المحدد على القوة السحرية المبدئية المحسوبة حاليًا. .Pp تحتوي بعض تنسيقات الملفات على معلومات إضافية تُطبع مع نوع الملف أو تحتاج إلى اختبارات إضافية لتحديد نوع الملف الحقيقي. تبدأ هذه الاختبارات الإضافية بمحرف واحد أو أكثر من محارف .Em \*[Gt] التي تسبق الإزاحة. يشير عدد محارف .Em \*[Gt] في السطر إلى مستوى الاختبار؛ ويُعتبر السطر الذي لا يحتوي على .Em \*[Gt] في بدايته في المستوى 0. تُرتّب الاختبارات في تسلسل هرمي يشبه الشجرة: إذا نجح الاختبار في سطر عند المستوى .Em n ، فتُنفّذ جميع الاختبارات التالية في المستوى .Em n+1 ، وتُطبع الرسائل إذا نجحت الاختبارات، حتى يظهر سطر بمستوى .Em n (أو أقل). بالنسبة للملفات الأكثر تعقيدًا، يمكن استخدام رسائل فارغة للحصول على تأثير "إذا/إذن" فقط، بالطريقة التالية: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Lt]0x40 MS-DOS executable \*[Gt]0x18 uleshort \*[Gt]0x3f extended PC executable (e.g., MS Windows) .Ed .Pp لا يلزم أن تكون الإزاحات ثابتة، بل يمكن أيضًا قراءتها من الملف الجاري فحصه. إذا كان المحرف الأول الذي يلي آخر .Em \*[Gt] هو .Em \&( ، فتُفسّر السلسلة النصية التي تلي القوس كإزاحة غير مباشرة. هذا يعني أن الرقم الذي يلي القوس يُستخدم كإزاحة في الملف. تُقرأ القيمة عند تلك الإزاحة، وتُستخدم مرة أخرى كإزاحة في الملف. الإزاحات غير المباشرة تكون على الشكل: .Em ( x [[.,][bBcCeEfFgGhHiIlmosSqQ]][+\-][ y ]) . تُستخدم قيمة .Em x كإزاحة في الملف. ويُقرأ بايت، أو طول id3، أو short أو long عند تلك الإزاحة اعتمادًا على محدد النوع .Em [bBcCeEfFgGhHiIlLmsSqQ] . تُعامل القيمة كموقعة إذا حُدّد .Dq \&, أو غير موقعة إذا حُدّد .Dq \&. . تُفسّر الأنواع المكتوبة بحروف كبيرة الرقم كقيمة طرفية كبيرة (big endian)، بينما تُفسّر إصدارات الحروف الصغيرة الرقم كقيمة طرفية صغيرة (little endian)؛ ويُفسّر النوع .Em m الرقم كقيمة طرفية وسيطة (PDP-11). تُضاف قيمة .Em y إلى هذا الرقم وتُستخدم النتيجة كإزاحة في الملف. النوع المبدئي إذا لم يُحدّد هو long. الأنواع التالية مستكشفة: .Bl -column -offset indent Type Half/Short Little Size .It Sy "Type Sy" "Mnemonic Sy" "Endian Sy" Size .It "bcBC Byte/Char N/A 1" .It "efg Double Little 8" .It "EFG Double Big 8" .It "hs Half/Short Little 2" .It "HS Half/Short Big 2" .It "i ID3 Little 4" .It "I ID3 Big 4" .It "l Long Little 4" .It "L Long Big 4" .It "m Middle Middle 4" .It "o Octal Textual Variable" .It "q Quad Little 8" .It "Q Quad Big 8" .El .Pp وبهذه الطريقة يمكن فحص البنى ذات الطول المتغير: .Bd -literal -offset indent # MS Windows executables are also valid MS-DOS executables 0 string MZ \*[Gt]0x18 uleshort \*[Lt]0x40 MZ executable (MS-DOS) # skip the whole block below if it is not an extended executable \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) \*[Gt]\*[Gt](0x3c.l) string LX\e0\e0 LX executable (OS/2) .Ed .Pp هذه الإستراتيجية في الفحص لها عيب: يجب عليك التأكد من طباعة شيء ما في النهاية، وإلا فقد يحصل المستخدمون على مخرجات فارغة (مثل عدم وجود PE\e0\e0 ولا LE\e0\e0 في المثال أعلاه). .Pp إذا تعذر استخدام هذه الإزاحة غير المباشرة مباشرة، فمن الممكن إجراء حسابات بسيطة: يتيح إلحاق .Em [+-*/%\*[Am]|^]number داخل الأقواس تعديل القيمة المقروءة من الملف قبل استخدامها كإزاحة: .Bd -literal -offset indent # MS Windows executables are also valid MS-DOS executables 0 string MZ # sometimes, the value at 0x18 is less that 0x40 but there's still an # extended executable, simply appended to the file \*[Gt]0x18 uleshort \*[Lt]0x40 \*[Gt]\*[Gt](4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP) \*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) .Ed .Pp في بعض الأحيان لا تعرف الإزاحة الدقيقة لأن هذا يعتمد على طول أو موضع (عند استخدام الإزاحة غير المباشرة سابقًا) الحقول السابقة. يمكنك تحديد إزاحة نسبية لنهاية الحقل الأخير في المستوى الأعلى باستخدام .Sq \*[Am] كبادئة للإزاحة: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # immediately following the PE signature is the CPU type \*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x14c for Intel 80386 \*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x8664 for x86-64 \*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x184 for DEC Alpha .Ed .Pp يمكن الجمع بين الإزاحات غير المباشرة والنسبية: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Lt]0x40 \*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) # if it's not COFF, go back 512 bytes and add the offset taken # from byte 2/3, which is yet another way of finding the start # of the extended executable \*[Gt]\*[Gt]\*[Gt]\*[Am](2.s-514) string LE LE executable (MS Windows VxD driver) .Ed .Pp أو العكس بالعكس: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # at offset 0x80 (-4, since relative offsets start at the end # of the up-level match) inside the LE header, we find the absolute # offset to the code area, where we look for a specific signature \*[Gt]\*[Gt]\*[Gt](\*[Am]0x7c.l+0x26) string UPX \eb, UPX compressed .Ed .Pp أو حتى كلاهما معًا! .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # at offset 0x58 inside the LE header, we find the relative offset # to a data area where we look for a specific signature \*[Gt]\*[Gt]\*[Gt]\*[Am](\*[Am]0x54.l-3) string UNACE \eb, ACE self-extracting archive .Ed .Pp إذا كان عليك التعامل مع أزواج الإزاحة/الطول في ملفك، فحتى القيمة الثانية في تعبير بين قوسين يمكن أخذها من الملف نفسه، باستخدام مجموعة أخرى من الأقواس. لاحظ أن هذه الإزاحة غير المباشرة الإضافية تكون دائمًا نسبية لبداية الإزاحة غير المباشرة الرئيسة. .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # search for the PE section called ".idata"... \*[Gt]\*[Gt]\*[Gt]\*[Am]0xf4 search/0x140 .idata # ...and go to the end of it, calculated from start+length; # these are located 14 and 10 bytes after the section name \*[Gt]\*[Gt]\*[Gt]\*[Gt](\*[Am]0xe.l+(-4)) string PK\e3\e4 \eb, ZIP self-extracting archive .Ed .Pp إذا كانت لديك قائمة بالقيم المعروفة عند مستوى متابعة معين، وتريد تقديم حالة مبدئية تشبه التبديل (switch-like default case): .Bd -literal -offset indent # clear that continuation level match \*[Gt]18 clear x \*[Gt]18 lelong 1 one \*[Gt]18 lelong 2 two \*[Gt]18 default x # print default match \*[Gt]\*[Gt]18 lelong x unmatched 0x%x .Ed .Sh انظر أيضًا .Xr file 1 \- الأمر الذي يقرأ هذا الملف. .Sh العلل التنسيقات .Dv long و .Dv belong و .Dv lelong و .Dv melong و .Dv short و .Dv beshort و .Dv leshort لا تعتمد على طول أنواع بيانات C لـ .Dv short و .Dv long على المنصة، على الرغم من أن مواصفات .Ux الموحدة تلمح إلى أنها تعتمد عليها. ومع ذلك، نظراً لأن نظام OS X Mountain Lion قد اجتاز مجموعة اختبارات التحقق من مواصفات .Ux الموحدة، ويقدم إصداراً من .Xr file 1 لا تعتمد فيه هذه التنسيقات على أحجام أنواع بيانات C وهو مبني لبيئة 64 بت حيث يكون النوع .Dv long بحجم 8 بايت بدلاً من 4 بايت، فمن المحتمل أن مجموعة اختبارات التحقق لا تختبر ما إذا كان .Dv long ، على سبيل المثال، يشير إلى عنصر بنفس حجم نوع بيانات C لـ .Dv long . ربما ينبغي أن تكون هناك أسماء .Dv type مثل .Dv int8 و .Dv uint8 و .Dv int16 و .Dv uint16 و .Dv int32 و .Dv uint32 و .Dv int64 و .Dv uint64 ، ومتغيرات ترتيب البايت المحددة لها، لجعله أكثر وضوحاً أن تلك الأنواع لها أعراض محددة. .\" .\" From: guy@sun.uucp (Guy Harris) .\" Newsgroups: net.bugs.usg .\" Subject: /etc/magic's format isn't well documented .\" Message-ID: <2752@sun.uucp> .\" Date: 3 Sep 85 08:19:07 GMT .\" Organization: Sun Microsystems, Inc. .\" Lines: 136 .\" .\" Here's a manual page for the format accepted by the "file" made by adding .\" the changes I posted to the S5R2 version. .\" .\" Modified for Ian Darwin's version of the file command. .\" .\" For emacs editor .\" Local Variables: .\" eval: (add-hook 'before-save-hook 'time-stamp) .\" time-stamp-start: ".Dd " .\" time-stamp-end: "$" .\" time-stamp-format: "%:B %02d, %:Y" .\" time-stamp-time-zone: "UTC0" .\" system-time-locale: "C" .\" eval:(setq compile-command (concat "groff -Tlatin1 -m man " (buffer-file-name)) ) .\" End: .\" .Pp .Sh ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .Pp هذه الترجمة هي وثيقة مجانية؛ راجع .Lk https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .Pp إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .Mt kde-l10n-ar@kde.org .Me .