| chmod(2) | System Calls Manual | chmod(2) |
الاسم¶
chmod, fchmod, fchmodat - تغيير أذونات ملف
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <sys/stat.h>
int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode);
#include <fcntl.h> /* تعريف ثوابت AT_* */ #include <sys/stat.h>
int fchmodat(int dirfd, const char *path, mode_t mode, int flags);
fchmod():
منذ glibc 2.24:
_POSIX_C_SOURCE >= 199309L
glibc 2.19 إلى glibc 2.23
_POSIX_C_SOURCE
glibc 2.16 إلى glibc 2.19:
_BSD_SOURCE || _POSIX_C_SOURCE
glibc 2.12 إلى glibc 2.16:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
|| _POSIX_C_SOURCE >= 200809L
glibc 2.11 وما قبله:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
fchmodat():
منذ glibc 2.10:
_POSIX_C_SOURCE >= 200809L
قبل glibc 2.10:
_ATFILE_SOURCE
الوصف¶
تغير استدعاءات النظام chmod() و fchmod() بتات وضع الملف. (يتكون وضع الملف من بتات أذونات الملف بالإضافة إلى بتات set-user-ID و set-group-ID و sticky.) تختلف استدعاءات النظام هذه فقط في كيفية تحديد الملف:
- •
- يغير chmod() وضع الملف المحدد الذي يُعطى اسم مساره في path، والذي يُفك مرجعه إذا كان رابطًا رمزيًا.
- •
- يغير fchmod() وضع الملف المشار إليه بواصف الملف المفتوح fd.
يُحدد وضع الملف الجديد في mode، وهو قناع بتات يُنشأ بجمع صفر أو أكثر مما يلي بعملية OR:
- S_ISUID (04000)
- set-user-ID (تعيين معرف المستخدم الفعّال للعملية عند execve(2))
- S_ISGID (02000)
- set-group-ID (تعيين معرف المجموعة الفعّال للعملية عند execve(2); القفل الإلزامي، كما هو موصوف في fcntl(2); أخذ مجموعة ملف جديد من الدليل الأب، كما هو موصوف في chown(2) و mkdir(2))
- S_ISVTX (01000)
- البت اللاصق (علم الحذف المقيد، كما هو موصوف في unlink(2))
- S_IRUSR (00400)
- قراءة من المالك
- S_IWUSR (00200)
- كتابة من المالك
- S_IXUSR (00100)
- تنفيذ/بحث من المالك (ينطبق "بحث" على الأدلة، ويعني أنه يمكن الوصول إلى الإدخالات داخل الدليل)
- S_IRGRP (00040)
- قراءة من المجموعة
- S_IWGRP (00020)
- كتابة من المجموعة
- S_IXGRP (00010)
- تنفيذ/بحث من المجموعة
- S_IROTH (00004)
- قراءة من قبل الآخرين
- S_IWOTH (00002)
- كتابة من قبل الآخرين
- S_IXOTH (00001)
- تنفيذ/بحث من قبل الآخرين
يجب أن يتطابق UID الفعال للعملية المستدعية مع مالك الملف، أو يجب أن تكون العملية مميزة (لينكس: يجب أن تمتلك القدرة CAP_FOWNER).
إذا لم تكن العملية المستدعية مميزة (لينكس: لا تمتلك القدرة CAP_FSETID)، ولم تتطابق مجموعة الملف مع معرف المجموعة الفعال للعملية أو أحد معرفات مجموعاتها الإضافية، فسيتم إيقاف بت S_ISGID، لكن هذا لن يتسبب في إرجاع خطأ.
كإجراء أمني، اعتمادًا على نظام الملفات، قد يتم إيقاف بتات تنفيذ set-user-ID و set-group-ID إذا تمت كتابة ملف. (في لينكس، يحدث هذا إذا لم تمتلك عملية الكتابة القدرة CAP_FSETID.) في بعض أنظمة الملفات، يمكن للمستخدم الفائق فقط تعيين البت اللاصق، والذي قد يكون له معنى خاص. بالنسبة للبت اللاصق، وبتات set-user-ID و set-group-ID على الدلائل، انظر inode(7).
في أنظمة ملفات NFS، سيؤثر تقييد الأذونات فورًا على الملفات المفتوحة بالفعل، لأن التحكم في الوصول يتم على الخادم، لكن الملفات المفتوحة تُحتفظ بها من قبل العميل. قد يتأخر توسيع الأذونات للعملاء الآخرين إذا تم تمكين التخزين المؤقت للسمات عليهم.
fchmodat()¶
تعمل استدعاء النظام fchmodat() بنفس طريقة chmod() تمامًا، باستثناء الاختلافات الموصوفة هنا.
إذا كان path نسبيًا، فسيتم تفسيره نسبة إلى الدليل المشار إليه بواسطة واصف الملف dirfd (بدلاً من نسبته إلى دليل العمل الحالي للعملية المستدعية، كما تفعل chmod() لمسار نسبي).
إذا كان path نسبيًا وكان dirfd هو القيمة الخاصة AT_FDCWD، فسيتم تفسير path نسبة إلى دليل العمل الحالي للعملية المستدعية (مثل chmod()).
إذا كان المسار path مطلقاً، فُيتجاهل dirfd.
يمكن أن يكون flags إما 0، أو يتضمن الأعلام التالية:
- AT_EMPTY_PATH (منذ لينكس 6.6)
- إذا كان path سلسلة فارغة، فسيُعمل على الملف الذي يشير إليه dirfd (والذي ربما تم الحصول عليه باستخدام الراية O_PATH في open(2)). في هذه الحالة، يمكن لـ dirfd أن يشير إلى أي نوع من الملفات، وليس فقط المجلدات. وإذا كان dirfd هو AT_FDCWD، فسيُنادى على مجلد العمل الحالي. هذه الراية خاصة بلينكس؛ عرّف _GNU_SOURCE للحصول على تعريفها.
- AT_SYMLINK_NOFOLLOW
- إذا كان path رابطًا رمزيًا، لا تقم بإلغاء الإشارة إليه: بدلاً من ذلك، تعامل مع الرابط نفسه.
انظر openat(2) لشرح الحاجة إلى fchmodat().
قيمة الإرجاع¶
عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
اعتماداً على نظام الملفات، قد تُرَد أخطاء أخرى غير تلك المذكورة أدناه.
الأخطاء الأكثر عمومية لـ chmod() مدرجة أدناه:
- EACCES
- أُذونات البحث مرفوضة في أحد مكونات بادئة المسار. (انظر أيضًا path_resolution(7).)
- EBADF
- (fchmod()) واصف الملف fd غير صالح.
- EBADF
- (fchmodat()) path نسبي لكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.
- EFAULT
- المسار path يشير إلى خارج مساحة العناوين التي يمكن الوصول إليها.
- EINVAL
- (fchmodat()) علم غير صالح محدد في flags.
- EIO
- حدث خطأ إدخال/إخراج.
- ELOOP
- وُجد عدد كبير جدًا من الوصلات الرمزية أثناء تحليل path.
- ENAMETOOLONG
- المسار path طويل جداً.
- ENOENT
- الملف غير موجود.
- ENOMEM
- ذاكرة النواة المتوفرة غير كافية.
- ENOTDIR
- أحد مكونات بادئة المسار ليس دليلاً.
- ENOTDIR
- (fchmodat()) path نسبي و dirfd هو واصف ملف يشير إلى ملف غير دليل.
- ENOTSUP
- (fchmodat()) flags حدد AT_SYMLINK_NOFOLLOW، وهو غير مدعوم.
- EPERM
- لا يتطابق UID الفعال مع مالك الملف، والعملية ليست مميزة (لينكس: لا تمتلك القدرة CAP_FOWNER).
- EPERM
- الملف معلم بأنه غير قابل للتغيير أو للإلحاق فقط. (انظر FS_IOC_SETFLAGS(2const).)
- EROFS
- الملف المسمى يقع في نظام ملفات للقراءة فقط.
الإصدارات¶
الاختلافات بين مكتبة C والنواة¶
تنفذ دالة الغلاف fchmodat() لمكتبة GNU C الواجهة المحددة بواسطة POSIX الموصوفة في هذه الصفحة. تختلف هذه الواجهة عن استدعاء النظام الأساسي للينكس، الذي لا يحتوي على وسيطة flags.
ملاحظات glibc¶
على النوى الأقدم حيث fchmodat() غير متوفرة، تتراجع دالة غلاف glibc إلى استخدام chmod(). عندما يكون path اسم مسار نسبي، تقوم glibc ببناء اسم مسار بناءً على الرابط الرمزي في /proc/self/fd الذي يتوافق مع وسيطة dirfd.
المعايير¶
POSIX.1-2024.
التاريخ¶
- chmod()
- SVr4, POSIX.1-1988, 4.4BSD.
- fchmod()
- SVr4, 4.4BSD, SUSv1, POSIX.1-1996.
- fchmodat()
- POSIX.1-2008. لينكس 2.6.16، glibc 2.4.
- AT_SYMLINK_NOFOLLOW
- POSIX.1-2008، glibc 2.32، لينكس 6.5.
انظر أيضًا¶
chmod(1)، chown(2)، execve(2)، open(2)، stat(2)، inode(7)، path_resolution(7)، symlink(7)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |