1) ما هو أمر stat ولماذا نستخدمه؟
أمر stat يعرض معلومات تفصيلية جدًا عن ملف أو مجلد، مثل:
- الحجم (Size) والمساحة على القرص (Blocks)
- نوع الملف (ملف/مجلد/رابط…)
- الصلاحيات (Permissions)
- المالك والمجموعة (Owner/Group)
- أوقات الملف (Timestamps): Access / Modify / Change / Birth (إن وجدت)
- رقم الـ inode وعدد الروابط (Links)
متى يفيدك؟
- عندما تريد تعرف “لماذا هذا الملف لا ينفتح؟” (صلاحيات)
- عندما تريد تراقب أوقات التعديل (مفيد مع
touch) - عندما تريد تعرف هل ملفين هم نفس الـ inode (hard links)
- في السكربتات لاستخراج قيمة معينة بدقة (size، owner…)
2) الصيغة العامة (Syntax)
stat [OPTIONS] FILE_OR_DIRECTORYBashمثال:
stat ~/project/example.txtBash3) مثال عملي سريع (إنشاء ملف ثم قراءة بياناته)
cd ~/project
touch example.txt
stat example.txtBash4) شرح مخرجات stat (كيف تقرأها كمبتدئ)
شكل المخرجات يختلف قليلًا حسب النظام، لكن غالبًا يكون قريب من:
File: example.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 801h/2049d Inode: 131075 Links: 1
Access: (0644/-rw-r--r--) Uid: (1000/user) Gid: (1000/user)
Access: 2023-04-11 ...
Modify: 2023-04-11 ...
Change: 2023-04-11 ...
Birth: -Bashأهم سطور لازم تفهمها:
أ) File
يعرض اسم/مسار الملف.
ب) Size / Blocks / IO Block
- Size: حجم الملف بالبايت (logical size)
- Blocks: عدد البلوكات المستخدمة فعليًا على القرص (قد يختلف عن Size)
- IO Block: حجم البلوك في نظام الملفات (مثل 4096 غالبًا)
ج) Inode / Links
- Inode: رقم تعريف الملف داخل نظام الملفات
- Links: عدد الروابط الصلبة (hard links) لنفس inode
إذا كان 2 أو أكثر → غالبًا هناك hard link
د) Access (permissions) + Uid/Gid
0644رقم الصلاحيات-rw-r--r--شكل الصلاحيات النصيUid/Gidمالك الملف والمجموعة (إما أرقام أو أسماء)
هـ) الأوقات (Timestamps)
- Access: آخر مرة تم “الوصول/القراءة” للملف (atime)
- Modify: آخر مرة تغير محتوى الملف (mtime)
- Change: آخر مرة تغيرت بيانات الميتاداتا (مثل chmod/chown) (ctime)
- Birth: وقت إنشاء الملف (ليس متوفر دائمًا)
ملاحظة مهمة:
Changeليس “وقت تغيير المحتوى”، بل تغيير “الخصائص/الميتاداتا”.
5) استخراج معلومات محددة فقط (أهم ميزة): -c أو --format
بدل مخرجات طويلة، تقدر تطلب حقول معينة.
أ) حجم الملف فقط (bytes)
stat -c '%s' example.txtBashب) وقت آخر تعديل (mtime)
stat -c '%y' example.txtBashج) اسم الملف + الحجم + الصلاحيات
stat -c '%n size=%s perms=%A' example.txtBashد) المالك والمجموعة
stat -c 'owner=%U group=%G' example.txtBashهـ) رقم inode وعدد الروابط
stat -c 'inode=%i links=%h' example.txtBashهذه الأوامر ممتازة للسكربتات والتقارير.
6) stat مع الروابط الرمزية (Symlink): الفرق بين العادي و -L
إذا عندك symlink:
cd ~/project
echo "hello" > target.txt
ln -s target.txt link.txtBashأ) stat على الرابط نفسه (يعرض معلومات الرابط)
stat link.txtBashب) stat -L يتبع الرابط ويعرض معلومات الهدف
stat -L link.txtBashاستخدم
-Lعندما تريد بيانات الملف الحقيقي الذي يشير له الرابط.
7) stat مع المجلدات
mkdir -p ~/project/mydir
stat ~/project/mydirBashسترى أن نوعه directory، وأوقات وصلاحيات خاصة بالمجلد.
8) تحليل الصلاحيات والملكية بسرعة (كما في الدرس)
أ) الصلاحيات + اسم المالك + المجموعة
stat -c '%A %U %G' example.txtBashمثال ناتج:
-rw-r--r-- labex labexBashب) الصلاحيات + UID + GID (أرقام)
stat -c '%A %u %g' example.txtBash9) استخدامات عملية مهمة جدًا
أ) التأكد هل ملفين هم نفس الملف (Hard Link)؟
cd ~/project
echo "X" > a.txt
ln a.txt b.txt
stat -c '%n inode=%i' a.txt b.txtBashإذا الـ inode نفس الرقم → هذا hard link لنفس الملف.
ب) مراقبة وقت التعديل قبل/بعد touch
cd ~/project
touch time.txt
stat -c 'mtime=%y' time.txt
touch -m time.txt
stat -c 'mtime=%y' time.txt
Bash10) تدريب سريع (Practice)
نفّذ هذا التدريب:
cd ~/project
mkdir -p stat_practice
cd stat_practice
echo "hello" > file.txt
ln file.txt hard.txt
ln -s file.txt soft.txt
# 1) معلومات كاملة
stat file.txt
# 2) حقول محددة
stat -c '%n %s %A %U:%G mtime=%y' file.txt
# 3) تحقق من inode للـ hard link
stat -c '%n inode=%i links=%h' file.txt hard.txt
# 4) stat على symlink (الرابط نفسه)
stat soft.txt
# 5) stat على الهدف عبر -L
stat -L soft.txt
Bashهل الشرح الأصلي كافي؟
نعم جيد جدًا، لكن الإضافات المهمة للمبتدئ كانت:
- شرح الفرق بين Modify و Change (خطأ شائع)
- أمثلة واضحة على
-cلاستخراج حقول مفيدة - توضيح
-Lمع symlink - استخدام
statلإثبات hard links عبر inode