1) ما هو أمر file ولماذا نستخدمه؟
أمر file يحدد نوع الملف الحقيقي بناءً على محتواه (وليس فقط الامتداد).
يعني:
- قد يكون الملف اسمه
something.txtلكنه في الحقيقة برنامج أو ملف مضغوط fileيساعدك تفهم: هل هو نص؟ صورة؟ تنفيذ؟ أرشيف؟ …
متى يفيدك؟
- تستلم ملف “غريب” وما تعرف تفتحه
- امتداد الملف غير صحيح
- تريد تعرف نوع ملف قبل تشغيله/فك ضغطه
2) الصيغة العامة (Syntax)
file [OPTIONS] FILE...Bashيمكن تمرر أكثر من ملف مرة واحدة:
file README.md Dockerfile archive.zipBash3) أمثلة بسيطة (Exploring file)
أ) فحص ملفات معروفة
cd ~/project
file README.md
file DockerfileBashب) إنشاء ملف نصي وفحصه
echo "This is a text file" > example.txt
file example.txtBashعادةً يعطي شيء مثل:
example.txt: ASCII textBash4) أهم فكرة: file لا يعتمد على الامتداد
جرّب خداع الامتداد:
echo "hello" > real_text
cp real_text fake.jpg
file fake.jpgBashستلاحظ أنه سيقول إنه ملف نصي وليس صورة، لأن المحتوى نصي.
5) إنشاء أنواع ملفات مختلفة للتجربة (Identifying File Types)
أ) ملف نصي + ملف ثنائي (binary) + ملف مضغوط
cd ~/project
echo "This is a text file" > text_file.txt
# ملف ثنائي عشوائي
dd if=/dev/urandom of=binary_file.bin bs=1M count=1 >/dev/null 2>&1
# ضغط الملف النصي
gzip -c text_file.txt > text_file.txt.gzBashالآن افحص الأنواع:
file text_file.txt
file binary_file.bin
file text_file.txt.gzBash6) خيارات مهمة في file
أ) -b عرض “النوع فقط” بدون اسم الملف
مفيد للسكربتات:
file -b text_file.txtBashب) -i عرض نوع MIME (مفيد للويب/البرامج)
file -i text_file.txt
file -i text_file.txt.gzBashقد يعطي مثلًا:
text/plain; charset=us-ascii
application/gzip; charset=binaryBashج) -z فحص “داخل” الملفات المضغوطة
لو عندك ملف .gz وتريد تعرف الملف الأصلي داخله:
file -z text_file.txt.gzBashمهم:
-zيفيد خصوصًا مع بعض أنواع الضغط لفهم “ما بداخلها”.
7) التعامل مع الملفات المضغوطة (Handling Compressed Files)
أ) أرشيف tar.gz
أنشئ أرشيف:
cd ~/project
tar -czf archive.tar.gz text_file.txt binary_file.binBashافحص نوعه:
file archive.tar.gzBashفك الضغط/الاستخراج:
tar -xzf archive.tar.gz
ls -lBashب) gzip / gunzip
ضغط:
gzip text_file.txt
file text_file.txt.gzBashفك الضغط:
gunzip text_file.txt.gz
file text_file.txtBashج) ZIP
إذا عندك zip:
file example.zipBashولفكّه (إذا أداة unzip موجودة):
unzip example.zipBash8) استخدامات عملية قوية
أ) قبل تشغيل ملف — تأكد نوعه
file some_downloaded_fileBashإذا قال:
- “ELF 64-bit” → غالبًا برنامج لينكس
- “POSIX shell script” → سكربت شيل
- “PDF document” → ملف PDF
- “Zip archive data” → zip
ب) اكتشاف “ملف تنفيذي” vs “نصي”
file /bin/ls
file /etc/hostsBash9) أخطاء شائعة للمبتدئ
أ) الاعتماد على الامتداد فقط
الامتداد قد يكون مضلل. دائمًا إذا الملف مجهول:
file filenameBashب) file يقول “data”
هذا يعني: لا يستطيع تحديد النوع بدقة (غالبًا ملف ثنائي عشوائي أو غير معروف).
10) تدريب سريع (Practice)
نفّذ هذا:
cd ~/project
mkdir -p file_practice
cd file_practice
echo "hello" > a.txt
dd if=/dev/urandom of=b.bin bs=256 count=1 >/dev/null 2>&1
gzip -c a.txt > a.txt.gz
file a.txt b.bin a.txt.gz
file -i a.txt a.txt.gz
file -b a.txt
file -z a.txt.gzBashهل الشرح الأصلي كافي؟
نعم ممتاز، لكن الإضافات المهمة للمبتدئ كانت:
- فكرة أن
fileيعتمد على المحتوى وليس الامتداد (مع مثال “fake.jpg”) - خيارات مفيدة جدًا عمليًا:
-i(MIME) و-b(للإخراج المختصر) - ربط
fileمع أدوات فك الضغط (tar,gzip,unzip)