inode(7)

الاسم
inode - معلومات inode للملف

الوصف
لكل ملف inode يحتوي على بيانات وصفية حول الملف. يمكن للتطبيق استرداد هذه البيانات الوصفية باستخدام stat(2) (أو الاستدعاءات ذات الصلة)، والتي تعيد بنية stat، أو statx(2)، والتي تعيد بنية statx.

فيما يلي قائمة بالمعلومات التي توجد عادةً في inode للملف، أو ترتبط به، مع أسماء حقول البنية المقابلة التي تعيدها stat(2) و statx(2):

الجهاز الذي يقطنه الـ inode
    stat.st_dev؛ statx.stx_dev_minor و statx.stx_dev_major

    كل inode (بالإضافة إلى الملف المرتبط به) يقطن في نظام ملفات مُستضاف على جهاز. يُعرَّف هذا الجهاز من خلال الجمع بين معرّفه الرئيسي (الذي يحدد الفئة العامة للجهاز) والمعرّف الفرعي (الذي يحدد نسخة محددة في الفئة العامة).

رقم الـ inode
    stat.st_ino؛ statx.stx_ino

    كل ملف في نظام ملفات له رقم inode فريد. أرقام inode مضمونة لتكون فريدة فقط داخل نظام ملفات واحد (أي أن نفس أرقام inode قد تُستخدم بواسطة أنظمة ملفات مختلفة، وهذا هو السبب في أن الوصلات الصلبة لا يمكنها تجاوز حدود نظام الملفات). يحتوي هذا الحقل على رقم inode الخاص بالملف.

نوع الملف ووضعه
    stat.st_mode؛ statx.stx_mode

    انظر مناقشة نوع الملف ووضعه أدناه.

عدد الوصلات
    stat.st_nlink؛ statx.stx_nlink

    يحتوي هذا الحقل على عدد الوصلات الصلبة للملف. تُنشأ وصلات إضافية لملف موجود باستخدام link(2).

معرف المستخدم
    stat.st_uid؛ statx.stx_uid

    يسجل هذا الحقل معرّف المستخدم لمالك الملف. بالنسبة للملفات المنشأة حديثًا، يكون معرّف مستخدم الملف هو معرّف المستخدم الفعلي للعملية المنشئة. يمكن تغيير معرّف مستخدم ملف ما باستخدام chown(2).

معرف المجموعة
    stat.st_gid؛ statx.stx_gid

    يسجل الـ inode معرّف المجموعة المالكة للملف. بالنسبة للملفات المنشأة حديثًا، يكون معرّف مجموعة الملف إما معرّف مجموعة المجلد الأب أو معرّف المجموعة الفعلي للعملية المنشئة، اعتمادًا على ما إذا كانت بتّة set-group-ID مضبوطة على المجلد الأب أم لا (انظر أدناه). يمكن تغيير معرّف مجموعة ملف ما باستخدام chown(2).

الجهاز المُمثَّل بهذا الـ inode
    stat.st_rdev؛ statx.stx_rdev_minor و statx.stx_rdev_major

    إذا كان هذا الملف (inode) يمثل جهازًا، فإن الـ inode يسجل المعرّف الرئيسي والفرعي لذلك الجهاز.

حجم الملف
    stat.st_size؛ statx.stx_size

    يعطي هذا الحقل حجم الملف (إذا كان ملفًا عاديًا أو وصلة رمزية) بالبايت. حجم الوصلة الرمزية هو طول اسم المسار الذي تحتويه، بدون بايت العدم النهائي.

حجم الكتلة المفضل للإدخال/الإخراج
    stat.st_blksize؛ statx.stx_blksize

    يعطي هذا الحقل حجم الكتلة "المفضل" لعمليات إدخال/إخراج نظام الملفات الفعالة. (الكتابة إلى ملف في قطع أصغر قد تتسبب في عملية قراءة-تعديل-إعادة كتابة غير فعالة.)

عدد الكتل المخصصة للملف
    stat.st_blocks؛ statx.stx_blocks

    يشير هذا الحقل إلى عدد الكتل المخصصة للملف، بوحدات 512 بايت، (قد يكون هذا أصغر من st_size/512 عندما يحتوي الملف على فجوات).

    تشير معايير POSIX.1 إلى أن وحدة عضو st_blocks في بنية stat غير محددة بواسطة المعيار. في العديد من التطبيقات تكون 512 بايت؛ وفي أنظمة قليلة، تُستخدم وحدة مختلفة، مثل 1024. علاوة على ذلك، قد تختلف الوحدة على أساس كل نظام ملفات.

طابع وقت آخر وصول (atime)
    stat.st_atime؛ statx.stx_atime

    هذا هو طابع وقت آخر وصول للملف. يتغير عند الوصول إلى الملف، على سبيل المثال، بواسطة execve(2)، و mknod(2)، و pipe(2)، و utime(2)، و read(2) (لأكثر من صفر بايت). قد تقوم واجهات أخرى، مثل mmap(2)، بتحديث طابع وقت atime أو لا.

    تسمح بعض أنواع أنظمة الملفات بالوصل بطريقة لا تؤدي فيها عمليات الوصول إلى الملفات و/أو المجلدات إلى تحديث طابع وقت atime. (انظر noatime، و nodiratime، و relatime في mount(8)، والمعلومات ذات الصلة في mount(2).) بالإضافة إلى ذلك، لا يُحدَّث طابع وقت atime إذا فُتح الملف باستخدام علامة O_NOATIME؛ انظر open(2).

طابع وقت إنشاء (ميلاد) الملف (btime)
    (لا يعاد في بنية stat)؛ statx.stx_btime

    طابع وقت إنشاء الملف. يُضبط عند إنشاء الملف ولا يتغير بعد ذلك.

    تاريخيًا، لم يكن طابع وقت btime موجودًا في أنظمة UNIX وهو غير مدعوم حاليًا من قبل معظم أنظمة ملفات لينكس.

طابع وقت آخر تعديل (mtime)
    stat.st_mtime؛ statx.stx_mtime

    هذا هو طابع وقت آخر تعديل للملف. يتغير عند تعديل الملف، على سبيل المثال، بواسطة mknod(2)، و truncate(2)، و utime(2)، و write(2) (لأكثر من صفر بايت). علاوة على ذلك، يتغير طابع وقت mtime للمجلد عند إنشاء أو حذف ملفات في ذلك المجلد. لا يتغير طابع وقت mtime عند حدوث تغييرات في المالك أو المجموعة أو عدد الوصلات الصلبة أو الوضع.

طابع وقت آخر تغيير للحالة (ctime)
    stat.st_ctime؛ statx.stx_ctime

    هذا هو طابع وقت آخر تغيير لحالة الملف. يتغير عند الكتابة أو عند ضبط معلومات inode (أي المالك، المجموعة، عدد الوصلات، الوضع، إلخ).

تُبلغ حقول طابع الوقت عن الوقت المقاس بنقطة صفر عند Epoch، 1970-01-01 00:00:00 +0000، بتوقيت UTC (انظر time(7)).

طوابع الوقت بالنانو ثانية مدعومة في XFS و JFS و Btrfs و ext4 (منذ لينكس 2.6.23). طوابع الوقت بالنانو ثانية غير مدعومة في ext2 و ext3 و Reiserfs. من أجل إعادة طوابع الوقت بدقة النانو ثانية، عُرّفت حقول طابع الوقت في بنيتي stat و statx كبنى تتضمن مكون نانو ثانية. انظر stat(2) و statx(2) للتفاصيل. في أنظمة الملفات التي لا تدعم طوابع الوقت لأجزاء من الثانية، تُعاد حقول النانو ثانية في بنيتي stat و statx بالقيمة 0.

  نوع الملف ووضعه
يحتوي حقل stat.st_mode (وبالنسبة لـ statx(2)، حقل statx.stx_mode) على نوع الملف ووضعه.

تشير POSIX إلى بتّات stat.st_mode المقابلة للقناع S_IFMT (انظر أدناه) على أنها نوع الملف، والبتّات الـ 12 المقابلة للقناع 07777 على أنها بتّات وضع الملف والبتّات الـ 9 الأقل أهمية (0777) على أنها بتّات أذونات الملف.

قيم القناع التالية معرّفة لنوع الملف:
S_IFMT | 0170000 | قناع البت لحقل بت نوع الملف
S_IFSOCK | 0140000 | socket
S_IFLNK | 0120000 | وصلة رمزية
S_IFREG | 0100000 | ملف عادي
S_IFBLK | 0060000 | جهاز كتلي
S_IFDIR | 0040000 | مجلد
S_IFCHR | 0020000 | جهاز محرفي
S_IFIFO | 0010000 | FIFO

وبالتالي، لاختبار ما إذا كان الملف ملفًا عاديًا (على سبيل المثال)، يمكن للمرء أن يكتب:

    stat(pathname, &sb);
    if ((sb.st_mode & S_IFMT) == S_IFREG) {
        /* تعامل مع ملف عادي */
    }

نظرًا لأن الاختبارات بالشكل المذكور أعلاه شائعة، فقد عُرّفت وحدات ماكرو إضافية بواسطة POSIX للسماح بكتابة اختبار نوع الملف في st_mode بشكل أكثر إيجازًا:

    S_ISREG(m)
        هل هو ملف عادي؟

    S_ISDIR(m)
        مجلد؟

    S_ISCHR(m)
        جهاز محرفي؟

    S_ISBLK(m)
        جهاز كتلي؟

    S_ISFIFO(m)
        FIFO (أنبوب مسمى)؟

    S_ISLNK(m)
        وصلة رمزية؟ (ليست في POSIX.1-1996.)

    S_ISSOCK(m)
        مقبس؟ (ليس في POSIX.1-1996.)

وبالتالي يمكن إعادة كتابة قصاصة الكود السابقة لتكون:

    stat(pathname, &sb);
    if (S_ISREG(sb.st_mode)) {
        /* التعامل مع ملف عادي */
    }

تُوفّر تعريفات معظم وحدات ماكرو اختبار أنواع الملفات المذكورة أعلاه إذا عُرّف أي من وحدات ماكرو اختبار الميزات التالية: _BSD_SOURCE (في glibc 2.19 والإصدارات الأقدم)، أو _SVID_SOURCE (في glibc 2.19 والإصدارات الأقدم)، أو _DEFAULT_SOURCE (في glibc 2.20 والإصدارات الأحدث). بالإضافة إلى ذلك، تُوفّر تعريفات كافة وحدات الماكرو أعلاه باستثناء S_IFSOCK و S_ISSOCK() إذا عُرّفت _XOPEN_SOURCE.

يمكن أيضًا كشف تعريف S_IFSOCK إما بتعريف _XOPEN_SOURCE بقيمة 500 أو أكثر أو (منذ glibc 2.24) بتعريف كل من _XOPEN_SOURCE و _XOPEN_SOURCE_EXTENDED.

يُكشف تعريف S_ISSOCK() إذا عُرّف أي من وحدات ماكرو اختبار الميزات التالية: _BSD_SOURCE (في glibc 2.19 والإصدارات الأقدم)، أو _DEFAULT_SOURCE (في glibc 2.20 والإصدارات الأحدث)، أو _XOPEN_SOURCE بقيمة 500 أو أكثر، أو _POSIX_C_SOURCE بقيمة 200112L أو أكثر، أو (منذ glibc 2.24) بتعريف كل من _XOPEN_SOURCE و _XOPEN_SOURCE_EXTENDED.

قِيَم القناع التالية مُعرّفة لمكوّن وضع الملف في حقل st_mode:
S_ISUID | 04000 | بت تعيين معرف المستخدم (انظر execve(2))
S_ISGID | 02000 | بت تعيين معرف المجموعة (انظر أدناه)
S_ISVTX | 01000 | البت اللاصق (انظر أدناه)
S_IRWXU | 00700 | للمالك صلاحية القراءة، والكتابة، والتنفيذ
S_IRUSR | 00400 | للمالك صلاحية القراءة
S_IWUSR | 00200 | للمالك صلاحية الكتابة
S_IXUSR | 00100 | للمالك صلاحية التنفيذ
S_IRWXG | 00070 | للمجموعة صلاحية القراءة، والكتابة، والتنفيذ
S_IRGRP | 00040 | للمجموعة صلاحية القراءة
S_IWGRP | 00020 | للمجموعة صلاحية الكتابة
S_IXGRP | 00010 | للمجموعة صلاحية التنفيذ
S_IRWXO | 00007 | للآخرين (ليسوا في المجموعة) صلاحية القراءة، والكتابة، والتنفيذ
S_IROTH | 00004 | للآخرين صلاحية القراءة
S_IWOTH | 00002 | للآخرين صلاحية الكتابة
S_IXOTH | 00001 | للآخرين صلاحية التنفيذ

لبت تعيين معرف المجموعة (S_ISGID) استخدامات خاصة عديدة. بالنسبة إلى دليل، فإنه يشير إلى استخدام دلالات BSD لذلك الدليل: تَرث الملفات المنشأة هناك معرف المجموعة الخاص بها من الدليل، وليس من معرف المجموعة الفعال للعملية المنشئة، وستحصل الأدلة المنشأة هناك أيضًا على بت S_ISGID. بالنسبة لملف قابل للتنفيذ، يتسبب بت تعيين معرف المجموعة في تغيير معرف المجموعة الفعال للعملية التي تنفذ الملف كما هو موضح في execve(2). بالنسبة للملف الذي لا يحتوي على بت تنفيذ المجموعة (S_IXGRP)، فإن بت تعيين معرف المجموعة يشير إلى قفل إلزامي للملف/السجل.

البت اللاصق (S_ISVTX) على دليل يعني أن الملف الموجود في ذلك الدليل لا يمكن إعادة تسميته أو حذفه إلا بواسطة صاحب الملف، أو بواسطة صاحب الدليل، أو بواسطة عملية ذات امتيازات.

المعايير
POSIX.1-2008.

التاريخ
POSIX.1-2001.

لم يصف POSIX.1-1990 الثوابت S_IFMT و S_IFSOCK و S_IFLNK و S_IFREG و S_IFBLK و S_IFDIR و S_IFCHR و S_IFIFO و S_ISVTX، ولكنه حدد بدلاً من ذلك استخدام وحدات الماكرو S_ISDIR() وهكذا دواليك.

لم تكن وحدات الماكرو S_ISLNK() و S_ISSOCK() في POSIX.1-1996؛ الأولى من SVID 4، والثانية من SUSv2.

احتوى UNIX V7 (والأنظمة اللاحقة) على S_IREAD و S_IWRITE و S_IEXEC، وحيث تفرض POSIX المرادفات S_IRUSR و S_IWUSR و S_IXUSR.

ملاحظات
بالنسبة للملفات الوهمية التي تُولّد آليًا بواسطة النواة، فإن حجم الملف (stat.st_size؛ statx.stx_size) الذي تبلغ عنه النواة ليس دقيقًا. على سبيل المثال، تُعاد القيمة 0 للعديد من الملفات الموجودة تحت دليل /proc، بينما تبلغ ملفات مختلفة تحت /sys عن حجم قدره 4096 بايت، رغم أن محتوى الملف أصغر. لمثل هذه الملفات، ينبغي للمرء ببساطة محاولة قراءة أكبر عدد ممكن من البايتات (وإلحاق '\0' بالمنظم المُعاد إذا كان سيُفسّر كسلسلة نصية).

انظر أيضًا
stat(1), stat(2), statx(2), symlink(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.