TMPFILES.D(5)

الاسم
tmpfiles.d - إعدادات إنشاء وحذف وتنظيف الملفات والدلائل

موجز

    /etc/tmpfiles.d/*.conf
    /run/tmpfiles.d/*.conf
    /usr/local/lib/tmpfiles.d/*.conf
    /usr/lib/tmpfiles.d/*.conf

    ~/.config/user-tmpfiles.d/*.conf
    $XDG_RUNTIME_DIR/user-tmpfiles.d/*.conf
    ~/.local/share/user-tmpfiles.d/*.conf
    ...
    /usr/local/share/user-tmpfiles.d/*.conf
    /usr/share/user-tmpfiles.d/*.conf

#النوع المسار                                     الوضع المستخدم المجموعة العمر         المعطى
f     /file/to/create                          mode user group -           content
f+    /file/to/create-or-truncate              mode user group -           content
w     /file/to/write-to                        -    -    -     -           content
w+    /file/to/append-to                       -    -    -     -           content
d     /directory/to/create-and-clean-up        mode user group cleanup-age -
D     /directory/to/create-and-remove          mode user group cleanup-age -
e     /directory/to/clean-up                   mode user group cleanup-age -
v     /subvolume-or-directory/to/create        mode user group cleanup-age -
q     /subvolume-or-directory/to/create        mode user group cleanup-age -
Q     /subvolume-or-directory/to/create        mode user group cleanup-age -
p     /fifo/to/create                          mode user group -           -
p+    /fifo/to/[re]create                      mode user group -           -
L     /symlink/to/create                       -    -    -     -           symlink/target/path
L+    /symlink/to/[re]create                   -    -    -     -           symlink/target/path
c     /dev/char-device-to-create               mode user group -           major:minor
c+    /dev/char-device-to-[re]create           mode user group -           major:minor
b     /dev/block-device-to-create              mode user group -           major:minor
b+    /dev/block-device-to-[re]create          mode user group -           major:minor
C     /target/to/create                        -    -    -     cleanup-age /source/to/copy
C+    /target/to/create                        -    -    -     cleanup-age /source/to/copy
x     /path-or-glob/to/ignore/recursively      -    -    -     cleanup-age -
X     /path-or-glob/to/ignore                  -    -    -     cleanup-age -
r     /path-or-glob/to/remove                  -    -    -     -           -
R     /path-or-glob/to/remove/recursively      -    -    -     -           -
z     /path-or-glob/to/adjust/mode             mode user group -           -
Z     /path-or-glob/to/adjust/mode/recursively mode user group -           -
t     /path-or-glob/to/set/xattrs              -    -    -     -           xattrs
T     /path-or-glob/to/set/xattrs/recursively  -    -    -     -           xattrs
h     /path-or-glob/to/set/attrs               -    -    -     -           file attrs
H     /path-or-glob/to/set/attrs/recursively   -    -    -     -           file attrs
a     /path-or-glob/to/set/acls                -    -    -     -           POSIX ACLs
a+    /path-or-glob/to/append/acls             -    -    -     -           POSIX ACLs
A     /path-or-glob/to/set/acls/recursively    -    -    -     -           POSIX ACLs
A+    /path-or-glob/to/append/acls/recursively -    -    -     -           POSIX ACLs
k     /path-or-glob/to/set/caps                -    -    -     -           file capabilities
k+    /path-or-glob/to/adjust/caps             -    -    -     -           file capabilities
K     /path-or-glob/to/set/caps/recursively    -    -    -     -           file capabilities
K+    /path-or-glob/to/adjust/caps/recursively -    -    -     -           file capabilities

الوصف

ملفات إعدادات tmpfiles.d توفر آلية عامة لتعريف إنشاء الملفات العادية والدلائل والأنابيب وعُقد الأجهزة، وتعديلات وضع الوصول والملكية والسمات وتعيينات الحصة والمحتويات، وأخيرًا إزالتها المستندة إلى الوقت. تُستخدم بشكل شائع للملفات والدلائل المؤقتة والمتطايرة (مثل تلك الموجودة تحت /run/ و/tmp/ و/var/tmp/ وأنظمة ملفات API مثل /sys/ أو /proc/، بالإضافة إلى بعض الدلائل الأخرى تحت /var/).

systemd-tmpfiles(8) يستخدم هذا الإعداد لإنشاء ملفات ودلائل متطايرة أثناء الإقلاع وللقيام بالتنظيف الدوري بعد ذلك. انظر systemd-tmpfiles(8) لوصف systemd-tmpfiles-setup.service وsystemd-tmpfiles-clean.service والوحدات المرتبطة.

الخدمات النظامية تتطلب غالبًا دلائل تشغيل خاصة تحت /run/ لتخزين مآخذ الاتصال وما شابه. لهذه، من الأفضل استخدام RuntimeDirectory= في ملفات وحداتها (انظر systemd.exec(5) للتفاصيل)، إذا لم تكن المرونة التي يوفرها tmpfiles.d مطلوبة. المزايا هي أن الإعداد المطلوب من قبل الوحدة يتركز في مكان واحد، وأن عمر الدليل مرتبط بعمر الخدمة نفسها. بالمثل، يجب استخدام StateDirectory= وCacheDirectory= وLogsDirectory= وConfigurationDirectory= لإنشاء دلائل تحت /var/lib/ و/var/cache/ و/var/log/ و/etc/. يجب استخدام tmpfiles.d للملفات التي يكون عمرها مستقلاً عن أي خدمة أو تتطلب إعدادًا أكثر تعقيدًا.

أدلة الضبط والأسبقية

يجب تسمية كل ملف ضبط بأسلوب الحزمة.conf أو الحزمة-الجزء.conf. ينبغي استخدام الصيغة الثانية عندما يكون من المرغوب فيه تسهيل تجاوز هذا الجزء فقط من الضبط.

الملفات في /etc/tmpfiles.d تتجاوز الملفات التي تحمل نفس الاسم في /usr/lib/tmpfiles.d و/run/tmpfiles.d. الملفات في /run/tmpfiles.d تتجاوز الملفات التي تحمل نفس الاسم في /usr/lib/tmpfiles.d. يجب على الحزم تثبيت ملفات إعداداتها في /usr/lib/tmpfiles.d. الملفات في /etc/tmpfiles.d محجوزة للمسؤول المحلي، الذي قد يستخدم هذا المنطق لتجاوز ملفات الإعدادات المثبتة من قبل حزم البائعين. جميع ملفات الإعدادات تُرتب حسب اسم ملفها بترتيب معجمي، بغض النظر عن أي من الدلائل توجد. إذا حددت ملفات متعددة نفس المسار، يُطبق الإدخال في الملف ذي الاسم الأقدم معجميًا (لاحظ أن الأسطر المكبوتة بسبب "!" تُصفى قبل التطبيق، مما يعني أنه إذا حمل سطر مبكر علامة التعجب وكُبت بسبب ذلك، يُطبق سطر لاحق يطابق المسار). جميع الإدخالات المتعارضة الأخرى تُسجل كأخطاء. عندما يكون سطران بادئة مسار ولاحقة مسار لبعضهما البعض، يُنشأ سطر البادئة أولاً دائمًا، واللاحقة لاحقًا (وإذا انطبق الإزالة على السطر، يُعكس الترتيب: تُزال اللاحقة أولاً، والبادئة لاحقًا). الأسطر التي تأخذ أنماطًا عالمية تُطبق بعد تلك التي لا تقبل أنماطًا عالمية. إذا طُبقت عمليات متعددة على نفس الملف (مثل تعديلات ACL وxattr وسمات الملف)، تُجرى هذه دائمًا بنفس الترتيب الثابت. باستثناء هذه الحالات، تُعالج الملفات/الدلائل بالترتيب الذي تُدرج به.

إذا أراد المسؤول تعطيل ملف إعدادات مقدم من البائع، الطريقة الموصى بها هي وضع رابط رمزي إلى /dev/null في /etc/tmpfiles.d/ يحمل نفس اسم الملف.

تنسيق ملف الضبط

تنسيق الإعداد هو سطر واحد لكل مسار، يحتوي على حقول النوع والمسار والوضع والملكية والعمر والوسيطة. الأسطر مفصولة بأسطر جديدة، والحقول بمسافات بيضاء:

    #Type Path        Mode User Group Age Argument...
    d     /run/user   0755 root root  10d -
    L     /tmp/foobar -    -    -     -   /dev/null

قد تحتوي الحقول على محارف هروب بنمط C. باستثناء الحقل السابع ("المعطى")، يمكن إحاطة جميع الحقول بعلامات اقتباس. لاحظ أن أي مسافة بيضاء تُوجَد في السطر بعد بداية حقل المعطى ستُعدُّ جزءًا من حقل المعطى. لبدء حقل المعطى بمحرف مسافة بيضاء، استخدم محارف الهروب بنمط C (مثل "\x20").

  Type

النوع يتكون من حرف واحد واختياريًا حرف تعديل واحد أو أكثر: علامة زائد ("+")، علامة تعجب ("!")، علامة ناقص ("-")، علامة يساوي ("=")، حرف التلدة ("~") و/أو علامة الإقحام ("^").

أنواع الأسطر التالية مفهومة:

f, f+
    f ينشئ ملفًا إذا لم يكن موجودًا بعد. إذا أُعطيت معلمة الوسيطة والملف لم يكن موجودًا بعد، تُكتب إلى الملف. f+ ينشئ أو يقطع الملف. إذا أُعطيت معلمة الوسيطة، تُكتب إلى الملف. لا يتبع الروابط الرمزية.

w, w+
    اكتب معطى الوسيط إلى ملف، إذا كان الملف موجودًا. إذا أُلحق بالعلامة +، فسيُضاف السطر إلى الملف. إذا كان ضبطك يكتب سطورًا متعددة إلى الملف نفسه، فاستخدم w+. تقبل السطور من هذا النوع أنماط الإجمال (globs) بنمط الصدفة بدلاً من أسماء المسارات العادية. سيُكتب معطى الوسيط بدون سطر جديد في آخره. تُفسَّر محارف الهروب المائلة بنمط C. يتبع الوصلات الرمزية.

d
    أنشئ دليلًا. سيُعدَّل الوضع والملكية إذا حُدِّدا. تخضع محتويات هذا الدليل للتنظيف المستند إلى الوقت إذا حُدِّد معطى العمر.

D
    مشابه لـ d، ولكن بالإضافة إلى ذلك ستُزال محتويات الدليل عند استخدام --remove.

e
    اضبط الوضع والملكية للأدلة الموجودة وأزل محتوياتها بناءً على العمر. تقبل السطور من هذا النوع أنماط الإجمال بنمط الصدفة بدلاً من أسماء المسارات العادية. تخضع محتويات الأدلة للتنظيف المستند إلى الوقت إذا حُدِّد معطى العمر. إذا كان معطى العمر هو "0"، فستُحذف المحتويات دون شروط في كل مرة يُشغَّل فيها systemd-tmpfiles(8) --clean.

    لكي يكون هذا المدخل مفيدًا، يجب تحديد معطى واحد على الأقل من الوضع أو المستخدم أو المجموعة أو العمر، وإلا فلن يكون لهذا المدخل أي تأثير. و كاستثناء، قد يكون المدخل الذي ليس له تأثير مفيدًا عندما يقترن بـ !، انظر الأمثلة.

    أُضيف في الإصدارة 230.

v
    أنشئ جزءًا فرعيًا إذا لم يكن المسار موجودًا بعد، وكان نظام الملفات يدعم الأجزاء الفرعية (btrfs)، وكان النظام نفسه مثبتًا داخل جزء فرعي (تحديدًا: الدليل الرئيس / هو نفسه جزء فرعي). خلاف ذلك، أنشئ دليلًا عاديًا، بالطريقة نفسها مثل d.

    لا يُخصَّص الجزء الفرعي المنشأ بنوع السطر هذا لأي مجموعة حصص نسبية ذات مستوى أعلى. لذلك، استخدم q أو Q، اللذين يسمحان بإنشاء هرميات مجموعات حصص نسبية بسيطة، انظر أدناه.

    أُضيف في الإصدارة 219.

q
    أنشئ جزءًا فرعيًا أو دليلًا مثل v تمامًا، ولكن خصِّص الجزء الفرعي لمجموعات الحصص النسبية ذات المستوى الأعلى نفسها كالأصل. يضمن هذا أن الحدود والمحاسبة ذات المستوى الأعلى المطبقة على الجزء الفرعي الأصل تشمل أيضًا الجزء الفرعي المحدد. في أنظمة الملفات غير btrfs، يكون نوع السطر هذا مطابقتًا لـ d.

    إذا كان الحجم الفرعي موجودًا بالفعل، فلا يُجرى أي تغيير على التسلسل الهرمي للحصة، بغض النظر عما إذا كان الحجم الفرعي مرتبطًا بالفعل بمجموعة حصة أم لا. انظر أيضًا Q أدناه. انظر btrfs-qgroup(8) للحصول على تفاصيل حول مفهوم مجموعة حصة btrfs.

    أُضيف في الإصدارة 228.

Q
    أنشئ الحجم الفرعي أو الدليل كما في v، لكن عيّن الحجم الفرعي الجديد إلى مجموعة حصة ورقية جديدة. بدلاً من نسخ تعيينات مجموعة الحصة عالية المستوى من الأصل كما يُفعل مع q، تُحدد أدنى مجموعة حصة للحجم الفرعي الأصل التي ليست مجموعة الحصة الورقية. ثم تُدرج مجموعة حصة "وسيطة" تكون بمستوى واحد أسفل هذا المستوى، وتشارك نفس جزء المعرف مثل الحجم الفرعي المحدد. إذا لم توجد مجموعة حصة عالية المستوى للحجم الفرعي الأصل، تُدرج مجموعة حصة جديدة عند المستوى 255 تشارك نفس المعرف مثل الحجم الفرعي المحدد بدلاً من ذلك. تُعين مجموعة الحصة الوسيطة الجديدة هذه بعد ذلك إلى مجموعات الحصة عالية المستوى للحجم الفرعي الأصل، وتُعين مجموعة الحصة الورقية للحجم الفرعي المحدد إليها.

    عمليًا، لهذا تأثير مشابه لـ q، لكنه يُقدم مجموعة حصة جديدة عالية المستوى للحجم الفرعي المحدد قد تُستخدم لفرض حدود ومحاسبة على الحجم الفرعي المحدد والأحجام الفرعية التابعة المنشأة داخله. وهكذا، بإنشاء الأحجام الفرعية فقط عبر q و Q، يُطبق مفهوم "حصص الشجرة الفرعية". كل حجم فرعي يُعين له Q سيحصل على مجموعة حصة "شجرة فرعية" منشأة، وستُعين إليه جميع الأحجام الفرعية التابعة المنشأة داخله. كل حجم فرعي يُعين له q لن يحصل على مجموعة حصة "شجرة فرعية" كهذه، لكن يُضمن إضافتها إلى نفس مجموعة حصة "الشجرة الفرعية" مثل آبائها المباشرين.

    يُوصى باستخدام Q للأحجام الفرعية التي تحتوي عادةً على أحجام فرعية أخرى، وحيث يكون من المرغوب فيه وجود محاسبة وحدود حصة على جميع الأحجام الفرعية التابعة معًا. أمثلة على Q هي عادةً /home/ أو /var/lib/machines/. في المقابل، يجب استخدام q للأحجام الفرعية التي إما لا تتضمن عادةً أحجامًا فرعية أخرى أو حيث لا حاجة لمحاسبة وحدود حصة تنطبق على جميع الأحجام الفرعية التابعة معًا. أمثلة على q هي عادةً /var/ أو /var/tmp/.

    كما هو الحال مع q، ليس لـ Q أي تأثير على التسلسل الهرمي لمجموعة الحصة إذا كان الحجم الفرعي موجودًا بالفعل، بغض النظر عما إذا كان الحجم الفرعي ينتمي بالفعل إلى مجموعة حصة أم لا.

    أُضيف في الإصدارة 228.

p, p+
    أنشئ أنبوبًا مسمى (FIFO) إذا لم يكن موجودًا بعد. إذا أُلحق بـ + وكان ملف موجود بالفعل حيث سيُنشأ الأنبوب، فسيُزال ويُستبدل بالأنبوب.

L, L+, L?
    أنشئ رابطًا رمزيًا إذا لم يكن موجودًا بعد. إذا أُلحق بـ + وكان ملف أو دليل موجود بالفعل حيث سيُنشأ الرابط الرمزي، فسيُزال ويُستبدل بالرابط الرمزي. إذا أُلحق بـ ? ولم يكن مسار المصدر موجودًا، فلا يُنشأ الرابط الرمزي. إذا حُذفت الوسيطة، تُنشأ روابط رمزية لملفات بنفس الاسم موجودة في الدليل /usr/share/factory/. لاحظ أن الأذونات على الروابط الرمزية تُتجاهل.

c, c+
    أنشئ عقدة جهاز حرفي إذا لم تكن موجودة بعد. إذا أُلحق بـ + وكان ملف موجود بالفعل حيث ستُنشأ عقدة الجهاز، فسيُزال ويُستبدل بعقدة الجهاز. يُوصى بإلحاق هذا الإدخال بعلامة تعجب لإنشاء عقد أجهزة ثابتة فقط عند الإقلاع، لأن udev لن يدير عقد الأجهزة الثابتة المنشأة في وقت التشغيل.

b, b+
    أنشئ عقدة جهاز كتلي إذا لم تكن موجودة بعد. إذا أُلحق بـ + وكان ملف موجود بالفعل حيث ستُنشأ عقدة الجهاز، فسيُزال ويُستبدل بعقدة الجهاز. يُوصى بإلحاق هذا الإدخال بعلامة تعجب لإنشاء عقد أجهزة ثابتة فقط عند الإقلاع، لأن udev لن يدير عقد الأجهزة الثابتة المنشأة في وقت التشغيل.

C, C+
    انسخ ملفًا أو دليلًا بشكل متكرر، إذا كانت الملفات أو الدلائل الوجهة غير موجودة بعد أو كان الدليل الوجهة فارغًا. لاحظ أن هذا الأمر لن ينزل إلى الدلائل الفرعية إذا كان الدليل الوجهة موجودًا بالفعل وغير فارغ، ما لم يُلحق الإجراء بـ +. بدلاً من ذلك، تُتجاوز عملية النسخ بأكملها. إذا حُذفت الوسيطة، تُنسخ الملفات من الدليل المصدر /usr/share/factory/ بنفس الاسم. لا يتبع الروابط الرمزية. تخضع محتويات الدلائل للتنظيف المستند إلى الوقت إذا حُددت وسيطة العمر.

    أُضيف في الإصدارة 214.

x
    تجاهل مسارًا أثناء التنظيف. استخدم هذا النوع لاستبعاد المسارات من التنظيف كما يُتحكم فيه باستخدام معامل العمر. تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية.

X
    تجاهل مسارًا أثناء التنظيف. استخدم هذا النوع لاستبعاد المسارات من التنظيف كما يُتحكم فيه باستخدام معامل العمر. على عكس x، لن يستبعد هذا المعامل المحتوى إذا كان المسار دليلًا، بل الدليل نفسه فقط. تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية.

    أُضيف في الإصدارة 198.

r
    أزل ملفًا أو دليلًا إذا كان موجودًا. لا يجوز استخدام هذا لإزالة الدلائل غير الفارغة، استخدم R لذلك. تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية. لا يتبع الروابط الرمزية.

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

z
    اضبط وضع الوصول، وملكية المستخدم والمجموعة، واستعد سياق أمان SELinux لملف أو دليل، إذا كان موجودًا. تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية. لا يتبع الروابط الرمزية.

Z
    اضبط وضع الوصول، وملكية المستخدم والمجموعة، واستعد سياق أمان SELinux لملف أو دليل إذا كان موجودًا، بالإضافة إلى دلائله الفرعية والملفات الموجودة فيها (إن أمكن). تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية. لا يتبع الروابط الرمزية.

t
    اضبط السمات الموسعة، انظر attr(5) للتفاصيل. يجب أن يأخذ حقل الوسيطة تعبير إسناد واحدًا أو أكثر بالصيغة namespace.attribute=value، للأمثلة انظر أدناه. تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية. قد يكون هذا مفيدًا لتعيين تسميات SMACK. لا يتبع الروابط الرمزية.

    يرجى ملاحظة أن السمات الموسعة القابلة للتعيين بنوع السطر هذا هي مفهوم مختلف عن سمات ملف Linux القابلة للتعيين بـ h/H، انظر أدناه.

    أُضيف في الإصدارة 218.

T
    نفس t، لكن يعمل بشكل متكرر.

    أُضيف في الإصدارة 219.

h
    اضبط سمات ملف/دليل Linux. تقبل سطور هذا النوع أنماط glob بنمط الصدفة بدلاً من أسماء المسارات العادية.

    تنسيق حقل الوسيطة هو [+-=][aAcCdDeijPsStTu]. البادئة + (المبدئية) تتسبب في إضافة السمات؛ - تتسبب في إزالة السمات؛ = تتسبب في تعيين السمات تمامًا كما في الحروف التالية. الحروف "aAcCdDeijPsStTu" تحدد السمات الجديدة للملفات، انظر chattr(1) لمزيد من المعلومات.

    تمرير = فقط كوسيطة يعيد تعيين جميع سمات الملف المذكورة أعلاه. يجب الإشارة إلى أن البادئة = تقتصر على السمات المقابلة للحروف المدرجة هنا. جميع السمات الأخرى تُترك دون تغيير. لا يتبع الروابط الرمزية.

    يرجى ملاحظة أن سمات ملف لينكس القابلة للتعيين مع هذا النوع من الأسطر هي مفهوم مختلف عن السمات الموسعة القابلة للتعيين مع t/T، انظر أعلاه.

H
    مثل h، لكن يعمل بشكل تكراري.

    أُضيف في الإصدارة 220.

a, a+
    تعيين قوائم التحكم في الوصول POSIX، انظر acl(5). بالإضافة إلى ذلك، إذا اُستخدم 'X'، يُعين بت التنفيذ فقط إذا كان الملف دليلاً أو لديه بالفعل إذن تنفيذ لمستخدم ما، كما هو مذكور في setfacl(1). إذا أُلصقت بـ +، ستُضاف الإدخالات المحددة إلى المجموعة الموجودة. systemd-tmpfiles(8) سيضيف آليًا الإدخالات الأساسية المطلوبة للمستخدم والمجموعة بناءً على وضع الوصول للملف، ما لم تكن الإدخالات الأساسية موجودة بالفعل أو محددة صراحة. سيُضاف القناع إذا لم يُحدد صراحة أو كان موجودًا بالفعل. أسطر من هذا النوع تقبل أنماط glob على غرار الصدفة بدلاً من أسماء المسارات العادية. يمكن أن يكون هذا مفيدًا للسماح بالوصول الإضافي لملفات معينة. لا يتبع الروابط الرمزية.

    أُضيف في الإصدارة 219.

A, A+
    مثل a و a+، لكن بشكل تكراري. لا يتبع الروابط الرمزية.

    أُضيف في الإصدارة 219.

k, k+
    لتعيين إمكانيات الملف، انظر capabilities(7). تقبل الأسطر من هذا النوعأنماطًا عامة على غرار الصدفة بدلاً من أسماء المسارات العادية. لا تتبعالروابط الرمزية.

    يتبع بناء الجملة cap_text_formats(7). كما يدعم أيضًا "rootuid=INT" لمعرف مستخدم مساحة اسم المستخدم الجذر .

    إذا أُلحقت به اللاحقة +، فسيُحتفظ بالصلاحيات الحالية على الملف التي لم يمسها التعبير . على سبيل المثال، إذا كانت هناك حاجة لإزالة جميع صلاحيات "cap_setuid" مع الاحتفاظ بصلاحيات أخرى، فيمكن استخدام k+ مع "cap_setuid=" أو "cap_setuid-eip".

    أُضيف في الإصدار 261.

K, K+
    مثل k و k+، لكن بشكل تكراري. لا يتبع الروابط الرمزية.

    أُضيف في الإصدار 261.

  معدلات النوع

إذا اُستخدمت علامة التعجب ("!")، فإن هذا السطر آمن للتنفيذ فقط أثناء الإقلاع، ويمكن أن يعطل نظامًا قيد التشغيل. الأسطر بدون علامة التعجب يُفترض أنها آمنة للتنفيذ في أي وقت، على سبيل المثال أثناء ترقيات الحزم. systemd-tmpfiles(8) سيأخذ الأسطر التي تحتوي على علامة تعجب في الاعتبار فقط، إذا اُعطي الخيار --boot.

على سبيل المثال:

    # Make sure these are created by default so that nobody else can
    d /tmp/.X11-unix 1777 root root 10d

    # Unlink the X11 lock files
    r! /tmp/.X[0-9]*-lock

السطر الثاني على عكس الأول سيعطل نظامًا قيد التشغيل، وسيُنفذ فقط مع --boot.

إذا اُستخدمت علامة الطرح ("-")، فإن فشل هذا السطر في التشغيل بنجاح أثناء الإنشاء (والإنشاء فقط) لن يتسبب في إرجاع تنفيذ systemd-tmpfiles(8) لخطأ.

على سبيل المثال:

    # Modify sysfs but do not fail if we are in a container with a read-only /proc
    w- /proc/sys/vm/swappiness - - - - 10

إذا اُستخدمت علامة المساواة ("=")، يُتحقق من أنواع الملفات للكائنات الموجودة في المسار المحدد، وإزالتها إذا لم تتطابق. يشمل ذلك أي أدلة أصل أُنشئت ضمنيًا (والتي يمكن أن تكون إما أدلة أو روابط رمزية للأدلة). على سبيل المثال، إذا كان هناك FIFO بدلاً من أحد مكونات المسار الأصلي، فسيُستبدل بدليل.

إذا اُستخدمت حرف التلدة ("~")، فإن عمود الوسيطة (أي السادس) يُفك ترميز Base64[1] قبل الاستخدام. هذا المعدل مدعوم فقط على أنواع الأسطر التي يمكنها كتابة محتويات الملف، أي f، f+، w، +. هذا مفيد لكتابة بيانات ثنائية عشوائية (بما في ذلك الأسطر الجديدة وبتات NUL) إلى الملفات. لاحظ أنه إذا اُستخدم هذا المفتاح، فإن الوسيطة لا تخضع لتوسيع المحدد، لا قبل ولا بعد فك ترميز Base64.

إذا اُستخدمت حرف الإقحام ("^")، فإن عمود الوسيطة (أي السادس) يأخذ اسم شهادة خدمة لقراءة بيانات الوسيطة منه. انظر شهادات النظام والخدمة[2] للحصول على تفاصيل حول مفهوم الشهادات. هذا المعدل مدعوم فقط على أنواع الأسطر التي يمكنها كتابة محتويات الملف، أي f، f+، w، w+. هذا مفيد لكتابة ملفات عشوائية بمحتويات مستمدة من مكان آخر، بما في ذلك من مديري VM أو الحاوية الأعلى. إذا لم تُعين الشهادة المحددة لخدمة systemd-tmpfiles، يُتخطى السطر بصمت. إذا جُمع "^" و "~" يُطبق فك ترميز Base64 على محتويات الشهادة.

إذا اُستخدمت علامة الدولار ("$")، يصبح الملف خاضعًا للإزالة عند استدعاء systemd-tmpfiles مع المفتاح --purge. الأسطر بدون هذا الحرف لا تتأثر بهذا المفتاح.

لاحظ أنه بالنسبة لجميع أنواع الأسطر التي تؤدي إلى إنشاء أي نوع من عقد الملفات (أي f، d/D/v/q/Q، p، L، c/b و C) تُنشئ الأدلة الرائدة ضمنيًا إذا لزم الأمر، مملوكة لـ root مع وضع وصول 0755. لإنشائها بأوضاع أو ملكية مختلفة تأكد من إضافة أسطر d المناسبة.

  المسار

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

  الوضع

وضع الوصول للملف لاستخدامه عند إنشاء هذا الملف أو الدليل. إذا حُذف أو عُين على "-"، يُستخدم المبدئي: 0755 للأدلة، 0644 لجميع كائنات الملف الأخرى. بالنسبة لأسطر z، Z، إذا حُذف أو عُين على "-"، فلن يُعدل وضع الوصول للملف. يُتجاهل هذه المُعطى للخطوط x، r، R، L، t، a، و k.

اختياريًا، إذا بُدأ بـ "~"، يُخفى وضع الوصول بناءً على بتات الوصول المحددة بالفعل للملف أو الدليل الموجود: إذا كان الملف الموجود يحتوي على جميع بتات التنفيذ غير محددة، تُزال جميع بتات التنفيذ من وضع الوصول الجديد أيضًا. وبالمثل، إذا أزيلت جميع بتات القراءة من وضع الوصول القديم، فستُزال من وضع الوصول الجديد أيضًا، وإذا أُزيلت جميع بتات الكتابة، فستُزال من وضع الوصول الجديد أيضًا. بالإضافة إلى ذلك، سيُزال بت الملصق/SUID/SGID ما لم يُطبق على دليل. هذه الوظيفة مفيدة بشكل خاص بالتزامن مع Z.

مبدئيًا، يُضبط نمط الوصول لعُقد الفهرس المدرجة على النمط المحدد بغض النظر عن إنشائها حديثًا أو وجودها مسبقًا. اختياريًا، إذا سُبقت بـ ":"، يُطبق نمط الوصول المُهيأ فقط عند إنشاء عُقد فهرس جديدة، وإذا كانت عقدة الفهرس التي يشير إليها السطر موجودة مسبقًا، يُترك نمط وصولها دون تعديل.

  المستخدم، المجموعة

المستخدم والمجموعة لاستخدامهما لهذا الملف أو الدليل. قد يكون هذا إما معرفًا رقميًا أو اسم مستخدم/مجموعة. إذا حُذف أو عُيّن على "-"، يُستخدم المستخدم والمجموعة للمستخدم الذي يستدعي systemd-tmpfiles(8). بالنسبة لسطور z و Z، عند حذفهما أو تعيينهما على "-"، لن يُعدل ملكية الملف. تُتجاهل هذه المعاملات لسطور x و r و R و t و a.

يجب أن يشير هذا الحقل عمومًا فقط إلى مستخدمين/مجموعات النظام، أي المستخدمين/المجموعات المضمون حلها أثناء الإقلاع المبكر. إذا أشار هذا الحقل إلى مستخدمين/مجموعات لا تصبح قابلة للحل إلا أثناء الإقلاع المتأخر (أي بعد توفر NIS أو LDAP أو خدمة دليل شبكي مماثلة)، فمن المحتمل أن يفشل تنفيذ العمليات المُعلنة في السطر. انظر أيضًا ملاحظات حول قابلية حل أسماء المستخدمين والمجموعات[3] لمزيد من المعلومات حول متطلبات تعريفات المستخدمين/المجموعات في النظام.

مبدئيًا، تُضبط ملكية عُقد الفهرس المدرجة على المستخدم/المجموعة المحددين بغض النظر عن إنشائها حديثًا أو وجودها مسبقًا. اختياريًا، إذا سُبقت بـ ":"، تُطبق معلومات المستخدم/المجموعة المُهيأة فقط عند إنشاء عُقد فهرس جديدة، وإذا كانت عقدة الفهرس التي يشير إليها السطر موجودة مسبقًا، يُترك مستخدمها/مجموعتها دون تعديل.

  العمر

حقل التاريخ، عند تعيينه، يُستخدم لتحديد الملفات التي سيُحذفها عند التنظيف. إذا كان ملف أو دليل أقدم من الوقت الحالي ناقص حقل العمر، يُحذف. تنسيق الحقل هو سلسلة من الأعداد الصحيحة يتبع كل منها إحدى اللواحق التالية لوحدات الزمن المعنية: s و m أو min و h و d و w و ms و us، وتعني الثواني والدقائق والساعات والأيام والأسابيع والميلي ثانية والميكروثانية على التوالي. يمكن استخدام الأسماء الكاملة لوحدات الزمن أيضًا.

إذا حُددت أعداد صحيحة ووحدات متعددة، تُجمع قيم الزمن. إذا أُعطي عدد صحيح بدون وحدة، يُفترض s.

عند ضبط العمر على صفر، تُنظف الملفات دون قيد أو شرط.

حقل العمر ينطبق فقط على السطور التي تبدأ بـ d و D و e و v و q و Q و C و x و X. إذا حُذف أو عُيّن على "-"، لا يُجرى أي تنظيف آلي.

إذا بدأ حقل العمر بحرف التلدة "~"، يُطبق التنظيف فقط على الملفات والدلائل على مستوى واحد داخل الدليل المحدد، وليس على الملفات والدلائل الموجودة داخله مباشرة.

يُحدد عمر إدخال نظام الملفات من طابع زمن التعديل الأخير (mtime) وطابع زمن الوصول الأخير (atime) و(باستثناء الدلائل) طابع زمن تغيير الحالة الأخير (ctime). مبدئيًا، أي من هذه القيم الثلاث (أو اثنتين) سيمنع التنظيف إذا كان أحدث من الوقت الحالي ناقص حقل العمر. لتقييد الحذف بناءً على نوع معين من أطوابع زمن الملفات، يمكن استخدام وسيطة العمر حسب.

وسيطة العمر حسب تتجاوز أنواع الأطوابع الزمنية المستخدمة لفحص العمر. يمكن تحديدها ببادئة وسيطة العمر بسلسلة من الأحرف لتحديد أنواع الأطوابع الزمنية ونقطتين رأسيتين (":"): "العمر حسب...:عمر التنظيف". يمكن أن تتكون الوسيطة من a (A للدلائل) و b (B للدلائل) و c (C للدلائل) أو m (M للدلائل). تشير هذه على التوالي إلى وقت الوصول والإنشاء وتغيير الحالة الأخير والتعديل الأخير لإدخال نظام الملفات. يشير الحرف الصغير إلى أن نوع الطابع الزمني المعطى يجب مراعاته للملفات، بينما يشير الحرف الكبير إلى أن نوع الطابع الزمني المعطى يجب مراعاته للدلائل. انظر statx(2) حقول أطوابع زمن الملفات لمزيد من التفاصيل حول أنواع الأطوابع الزمنية.

إذا لم يُحدد، فإن حقل العمر حسب يَعدل مبدئيًا إلى abcmABM، أي مبدئيًا تُؤخذ جميع أطوابع زمن الملفات في الاعتبار، باستثناء طابع زمن تغيير الحالة الأخير (ctime) للدلائل. هذا لأن منطق التقادم نفسه سيغير ctime كلما حذف ملفًا داخله. لضمان أن تشغيل منطق التقادم لا يغذي التكرار التالي لنفسه، يُتجاهل ctime للدلائل مبدئيًا.

على سبيل المثال:

    # الملفات المنشأة والمعدلة، والأدلة التي وُصل إليها منذ أكثر من
    # ساعة في "/tmp/foo/bar"، تخضع لتنظيف مستند إلى الوقت.
    d /tmp/foo/bar - - - bmA:1h -

لاحظ أنه أثناء تشغيل خوارزمية التقادم، يُؤخذ قفل ملف BSD حصري (انظر flock(2)) على كل دليل/ملف تقرر الخوارزمية إزالته. إذا وجدت خوارزمية التقادم أن قفلًا (مشتركًا أو حصريًا) قد أُخذ بالفعل على دليل/ملف ما، يُتجاوز (وكل ما تحته). يمكن للتطبيقات استخدام هذا لاستبعاد أشجار فرعية معينة من الدلائل مؤقتًا من خوارزمية التقادم: يمكن للتطبيقات أخذ قفل ملف BSD بنفسها، وطالما أبقته، يُعطل تقادم الدليل/الملف وكل ما تحته.

يمكن استخدام هذا السلوك لضمان تنظيف مضمون للملفات أو الدلائل التي يجب أن يتوافق عمرها مع العملية التي أنشأتها، وذلك بجعل تلك العملية تنشئها في موقع يراقبه systemd-tmpfiles بعمر "0"، وجعل العملية تقفل الدليل أو الملف فورًا قبل استخدامه. لأن قفل BSD خاص بالعملية، يُضمن فتح قفل الملف بمجرد خروج العملية، مما يعني أنه حتى إذا تعطلت العملية، ستُفتح أقفال تلك الملفات والدلائل وتُنظف بواسطة systemd-tmpfiles.

  المُعطى

بالنسبة لسطور L، يُحدد مسار وجهة الرابط الرمزي. بالنسبة لـ c و b، يُحدد الرقم الرئيسي/الفرعي لعقدة الجهاز، مع تنسيق الرقم الرئيسي والفرعي كأعداد صحيحة، مفصولة بـ ":"، مثل "1:3". بالنسبة لـ f و w، يمكن استخدام الوسيطة لتحديد سلسلة قصيرة تُكتب إلى الملف، متبوعة بسطر جديد. بالنسبة لـ C، تُحدد ملف أو دليل المصدر. بالنسبة لـ t و T، تُحدد السمات الموسعة التي ستُضبط. بالنسبة لـ a و A، تُحدد سمات ACL التي ستُضبط. بالنسبة لـ h و H، تُحدد سمات الملف التي ستُضبط. في حالة k و K، تحدد قدرات الملف المراد تعيينها. وتُتجاهل في جميع الأسطر الأخرى.

يمكن أن يحتوي هذا الحقل على محددات، انظر أدناه.

المحددات

يمكن استخدام المحددات في حقلي "المسار" و"الوسيطة". يُعتبر المحدد غير المعروف أو غير القابل للحل تكوينًا غير صالح. يُفهم التوسعات التالية:

الجدول 1. المحددات المتاحة
المحدد | المعنى | التفاصيل
"%a" | المعمارية | سلسلة نصية قصيرة تحدد معمارية النظام المحلي. سلسلة مثل x86 أو x86-64 أو arm64. انظر المعماريات المحددة لـ ConditionArchitecture= في systemd.unit(5) للحصول على قائمة كاملة.
"%A" | إصدار صورة نظام التشغيل | معرف إصدار صورة نظام التشغيل للنظام المشغل، كما يُقرأ من حقل IMAGE_VERSION= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%b" | معرف الإقلاع | معرف الإقلاع للنظام المشغل، منسق كسلسلة نصية. انظر random(4) لمزيد من المعلومات.
"%B" | معرف بناء نظام التشغيل | معرف بناء نظام التشغيل للنظام المشغل، كما يُقرأ من حقل BUILD_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%C" | دليل الخبيئة للنظام أو المستخدم | في وضع --user، يكون هذا مماثلاً لـ $XDG_CACHE_HOME، و/var/cache خلاف ذلك.
"%g" | مجموعة المستخدم | هذا هو اسم المجموعة التي تشغل الأمر. في حالة مثيل النظام، يُحل هذا إلى "root".
"%G" | معرف المجموعة (GID) للمستخدم | هذا هو المعرف الرقمي GID للمجموعة التي تشغل الأمر. في حالة مثيل النظام، يُحل هذا إلى 0.
"%h" | دليل منزل المستخدم | هذا هو الدليل الرئيسي للمستخدم الذي يشغل الأمر. في حالة مثيل النظام، يُحل هذا إلى "/root".
"%H" | اسم المضيف | اسم مضيف النظام المشغل.
"%l" | اسم المضيف القصير | اسم مضيف النظام المشغل، مقتطعًا عند النقطة الأولى لإزالة أي مكون نطاق.
"%L" | دليل السجل للنظام أو المستخدم | في وضع --user، يكون هذا مماثلاً لـ $XDG_STATE_HOME مع إلحاق /log، و/var/log خلاف ذلك.
"%m" | معرف الآلة | معرف الجهاز للنظام المشغل، منسق كسلسلة نصية. انظر machine-id(5) لمزيد من المعلومات.
"%M" | معرف صورة نظام التشغيل | معرف صورة نظام التشغيل للنظام المشغل، كما يُقرأ من حقل IMAGE_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%o" | معرف نظام التشغيل | معرف نظام التشغيل للنظام المشغل، كما يُقرأ من حقل ID= في /etc/os-release. انظر os-release(5) لمزيد من المعلومات.
"%q" | اسم المضيف الجميل | اسم المضيف الجميل للنظام المشغل، كما يُقرأ من حقل PRETTY_HOSTNAME= في /etc/machine-info. إذا لم يُضبط، يُحل إلى اسم المضيف القصير. انظر machine-info(5) لمزيد من المعلومات.
"%S" | دليل الحالة للنظام أو المستخدم | في وضع --user، يكون هذا مماثلاً لـ $XDG_STATE_HOME، و/var/lib خلاف ذلك.
"%t" | دليل وقت التشغيل للنظام أو المستخدم | في وضع --user، يكون هذا مماثلاً لـ $XDG_RUNTIME_DIR، و/run/ خلاف ذلك.
"%T" | مجلد للملفات المؤقتة | هذا إما /tmp أو المسار الذي ضُبطت إليه "$TMPDIR" أو "$TEMP" أو "$TMP". (لاحظ أن الدليل قد يُحدد بدون شرطة مائلة لاحقة.)
"%u" | اسم المستخدم | هذا هو اسم المستخدم الذي يشغل الأمر. في حالة مثيل النظام، يُحل هذا إلى "root".
"%U" | معرف المستخدم (UID) | هذا هو المعرف الرقمي UID للمستخدم الذي يشغل الأمر. في حالة مثيل النظام، يُحل هذا إلى 0.
"%v" | إصدار النواة | مطابق لمخرجات uname -r.
"%V" | مجلد للملفات المؤقتة الأكبر حجمًا والمستمرة | هذا إما /var/tmp أو المسار الذي ضُبطت إليه "$TMPDIR" أو "$TEMP" أو "$TMP". (لاحظ أن الدليل قد يُحدد بدون شرطة مائلة لاحقة.)
"%w" | معرف إصدار نظام التشغيل | معرف إصدار نظام التشغيل للنظام المشغل، كما يُقرأ من حقل VERSION_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%W" | معرف نوع نظام التشغيل | معرف تنويعة نظام التشغيل للنظام المشغل، كما يُقرأ من حقل VARIANT_ID= في /etc/os-release. إذا لم يُضبط، يُحل إلى سلسلة فارغة. انظر os-release(5) لمزيد من المعلومات.
"%%" | علامة مئوية مفردة | استخدم "%%" بدلاً من "%" لتحديد علامة مئوية مفردة.

أمثلة

مثال 1. إنشاء أدلة بوضع وملكية محددين

يحتاج screen(1) إلى دليلين يُنشأن عند الإقلاع بوضع وملكية محددين:

    # /usr/lib/tmpfiles.d/screen.conf
    d /run/screens  1777 root screen 10d
    d /run/uscreens 0755 root screen 10d12h

ستُنظف محتويات /run/screens و/run/uscreens بعد 10 و10½ يومًا، على التوالي.

مثال 2. إنشاء دليل بسمة SMACK

    D /run/cups - - - -
    t /run/cups - - - - security.SMACK64=printing user.attr-with-spaces="foo bar"

سيكون الدليل مملوكًا لـ root وله وضع مبدئي. لا تخضع محتوياته للتنظيف المستند إلى الوقت، ولكن ستُمحى عند تشغيل systemd-tmpfiles --remove.

مثال 3. إنشاء دليل ومنع تنظيف محتوياته

يحتاج abrt(1) إلى دليل يُنشأ عند الإقلاع بصلاحيات وملكية محددة، ويجب الحفاظ على محتواه من التنظيف الآلي المطبق على محتويات /var/tmp:

    # /usr/lib/tmpfiles.d/tmp.conf
    d /var/tmp 1777 root root 30d

    # /usr/lib/tmpfiles.d/abrt.conf
    d /var/tmp/abrt 0755 abrt abrt -

مثال 4. تطبيق التنظيف أثناء الإقلاع وبناءً على الوقت

    # /usr/lib/tmpfiles.d/dnf.conf
    r! /var/cache/dnf/*/*/download_lock.pid
    r! /var/cache/dnf/*/*/metadata_lock.pid
    r! /var/lib/dnf/rpmdb_lock.pid
    e  /var/cache/dnf/ - - - 30d

ستُحذف ملفات القفل أثناء الإقلاع. ستُحذف أي ملفات وأدلة في /var/cache/dnf/ بعد عدم الوصول إليها لمدة 30 يومًا.

مثال 5. إفراغ محتويات دليل خبيئة عند الإقلاع

    # /usr/lib/tmpfiles.d/krb5rcache.conf
    e! /var/cache/krb5rcache - - - 0

ستُحذف أي ملفات وأدلة فرعية في /var/cache/krb5rcache/ عند الإقلاع. لن يُنشأ الدليل.

مثال 6. توفير الوصول بالمفتاح العام SSH للمستخدم الجذر عبر بيانات الاعتماد في QEMU

    -smbios type=11,value=io.systemd.credential.binary:tmpfiles.extra=$(echo -e "d /root/.ssh 0750 root root -\nf~ /root/.ssh/authorized_keys 0600 root root - $(ssh-add -L | base64 -w 0)" | base64 -w 0)

بتمرير هذا السطر إلى QEMU، سيُرمّز المفتاح العام للمستخدم الحالي بـ base64، ويُضاف إلى سطر tmpfiles.d يخبر systemd-tmpfiles(8) بفك ترميزه إلى /root/.ssh/authorized_keys، وترميز ذلك السطر نفسه بـ base64 وتمريره كبيانات اعتماد ستلتقطها systemd من SMBIOS عند الإقلاع.

/RUN/ AND /VAR/RUN/

/var/run/ رابط رمزي مهمل إلى /run/، ويجب على التطبيقات استخدام الأخير. سيُصدر systemd-tmpfiles تحذيرًا إذا استُخدم /var/run/.

انظر أيضًا

systemd(1), systemd-tmpfiles(8), systemd-delta(1), systemd.exec(5), attr(5), getfattr(1), setfattr(1), setfacl(1), getfacl(1), chattr(1), btrfs-subvolume(8), btrfs-qgroup(8)

ملاحظات

1.  مفكوك الترميز بـ Base64
    https://www.rfc-editor.org/rfc/rfc4648.html

2.  بيانات اعتماد النظام والخدمة
    https://systemd.io/CREDENTIALS

3.  ملاحظات حول قابلية حل أسماء المستخدمين والمجموعات
    https://systemd.io/UIDS-GIDS/#notes-on-resolvability-of-user-and-group-names

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

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

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