| TMPFILES.D(5) | tmpfiles.d | TMPFILES.D(5) |
نام (NAME)
tmpfiles.d - تعاریف و الگوهای پیکربندی فایلها و دایرکتوریهای موقت
خلاصه دستور (SYNOPSIS)
#Type Path Mode User Group Age Argument 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
توضیحات (DESCRIPTION)
فایلهای پیکربندی tmpfiles.d سازوکاری عمومی برای تعریف ایجاد فایلهای عادی، دایرکتوریها، لولهها (pipes) و گرههای دستگاه، تنظیم حالت دسترسی، مالکیت، ویژگیها، سهمیهبندیها (quota) و محتوای آنها، و در نهایت حذف مبتنی بر زمان آنها فراهم میکنند. این سازوکار عمدتاً برای فایلها و دایرکتوریهای فرار و موقت استفاده میشود (مانند موارد واقع در /run/، /tmp/، /var/tmp/، فایلسیستمهای API مانند /sys/ یا /proc/، و همچنین برخی دایرکتوریهای دیگر زیر /var/).
systemd-tmpfiles(8) از این پیکربندی برای ایجاد فایلها و دایرکتوریهای فرار در هنگام بوت و انجام پاکسازیهای دورهای پس از آن استفاده میکند. برای توضیحات مربوط به systemd-tmpfiles-setup.service، systemd-tmpfiles-clean.service و واحدهای مرتبط، به systemd-tmpfiles(8) مراجعه کنید.
دیمنهای سیستمی اغلب به دایرکتوریهای زمان اجرای خصوصی در زیر /run/ نیاز دارند تا سوکتهای ارتباطی و موارد مشابه را ذخیره کنند. برای این موارد، اگر به انعطافپذیری ارائهشده توسط tmpfiles.d نیازی نباشد، بهتر است از RuntimeDirectory= در فایلهای واحد آنها استفاده شود (برای جزئیات به systemd.exec(5) مراجعه کنید). مزیت این روش این است که پیکربندی مورد نیاز واحد در یک مکان متمرکز میشود و طول عمر دایرکتوری به طول عمر خود سرویس گره میخورد. به همین ترتیب، باید از StateDirectory=، CacheDirectory=، LogsDirectory= و ConfigurationDirectory= برای ایجاد دایرکتوریها در زیر /var/lib/، /var/cache/، /var/log/ و /etc/ استفاده شود. tmpfiles.d باید برای فایلهایی استفاده شود که طول عمر آنها مستقل از هر سرویسی است یا به پیکربندی پیچیدهتری نیاز دارند.
دایرکتوریهای پیکربندی و اولویت (CONFIGURATION DIRECTORIES AND PRECEDENCE)
هر فایل پیکربندی باید به سبک package.conf یا package-part.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 برای مدیر محلی سیستم رزرو شدهاند، که میتواند از این منطق برای بازنویسی فایلهای پیکربندی نصبشده توسط بستههای ارائهدهنده استفاده کند. تمام فایلهای پیکربندی صرفنظر از اینکه در کدامیک از دایرکتوریها قرار دارند، بر اساس نام فایل به ترتیب واژهنگاری (حروف الفبا) مرتب میشوند. اگر چند فایل یک مسیر یکسان را مشخص کنند، ورودی موجود در فایلی که نام آن از نظر واژهنگاری زودتر میآید اعمال خواهد شد (توجه داشته باشید که خطوط حذفشده به دلیل "!" پیش از اعمال فیلتر میشوند، به این معنی که اگر یک خط ابتدایی علامت تعجب داشته باشد و به همین دلیل نادیده گرفته شود، خط بعدیِ منطبق بر آن مسیر اعمال خواهد شد). تمام ورودیهای متناقض دیگر به عنوان خطا در لاگ ثبت میشوند. هنگامی که دو خط پیشوند و پسوند مسیر یکدیگر باشند، خط پیشوند همیشه اول ایجاد میشود و پسوند بعد از آن (و اگر حذف برای خط اعمال شود، ترتیب معکوس است: پسوند اول حذف میشود و پیشوند بعد از آن). خطوطی که از الگوهای گلوب (globs) استفاده میکنند پس از خطوطی که گلوب نمیپذیرند اعمال میشوند. اگر قرار باشد چندین عملیات روی یک فایل یکسان اعمال شود (مانند تنظیمات ACL، xattr، ویژگیهای فایل)، این کارها همیشه با ترتیبی ثابت و مشخص انجام میشوند. به جز این موارد، فایلها/دایرکتوریها به همان ترتیبی که فهرست شدهاند پردازش میشوند.
اگر مدیر سیستم بخواهد فایل پیکربندی ارائهشده توسط توزیعکننده را غیرفعال کند، روش توصیهشده قرار دادن یک پیوند نمادین (symlink) به /dev/null در /etc/tmpfiles.d/ با همان نام فایل است.
قالب پیکربندی (CONFIGURATION FORMAT)
قالب پیکربندی به صورت یک خط به ازای هر مسیر است که شامل فیلدهای نوع (type)، مسیر (path)، حالت دسترسی (mode)، مالکیت (ownership)، طول عمر (age) و آرگومان (argument) میباشد. خطوط با خط جدید و فیلدها با نویسههای فاصله از یکدیگر جدا میشوند:
#Type Path Mode User Group Age Argument... d /run/user 0755 root root 10d - L /tmp/foobar - - - - /dev/null
فیلدها میتوانند شامل گریزهای سبک C (C-style escapes) باشند. به استثنای فیلد هفتم ("argument")، تمام فیلدها را میتوان درون گیومه قرار داد. توجه داشته باشید که هرگونه نویسه فاصله پس از شروع فیلد آرگومان، بخشی از فیلد آرگومان در نظر گرفته میشود. برای شروع فیلد آرگومان با یک نویسه فاصله، از گریزهای سبک C استفاده کنید (برای مثال "\x20").
نوع (Type)
نوع از یک حرف منفرد و در صورت تمایل یک یا چند نویسه تغییردهنده تشکیل شده است: علامت مثبت ("+")، علامت تعجب ("!")، علامت منفی ("-")، علامت مساوی ("=")، نویسه مدک ("~") و/یا کلاهک ("^").
انواع خطوط زیر شناختهشده هستند:
f, f+
w, w+
d
D
e
برای اینکه این ورودی مفید باشد، باید حداقل یکی از آرگومانهای mode، user، group یا age مشخص شده باشد، زیرا در غیر این صورت این ورودی هیچ اثری ندارد. به عنوان یک استثنا، یک ورودی بدون اثر ممکن است در صورت ترکیب با ! مفید باشد، به مثالها مراجعه کنید.
افزودهشده در نسخه 230.
v
زیرحجمی که با این نوع خط ایجاد میشود به هیچ گروه سهمیهبندی (quota group) سطح بالاتری اختصاص داده نمیشود. برای این منظور از q یا Q استفاده کنید که امکان ایجاد سلسلهمراتب ساده گروههای سهمیهبندی را فراهم میکنند، به ادامه مراجعه کنید.
افزودهشده در نسخه 219.
q
اگر زیرحجم از قبل وجود داشته باشد، صرفنظر از اینکه زیرحجم قبلاً به یک گروه سهمیهبندی متصل بوده است یا خیر، هیچ تغییری در سلسلهمراتب سهمیهبندی ایجاد نمیشود. همچنین به Q در ادامه مراجعه کنید. برای جزئیات در مورد مفهوم گروه سهمیهبندی btrfs به btrfs-qgroup(8) مراجعه کنید.
افزودهشده در نسخه 228.
Q
در عمل، این اثر مشابهی با q دارد، اما یک گروه سهمیهبندی سطح بالاتر جدید برای زیرحجم مشخصشده معرفی میکند که میتواند برای اعمال محدودیتها و حسابرسی به زیرحجم مشخصشده و زیرحجمهای فرزند ایجادشده در آن استفاده شود. بدین ترتیب، با ایجاد زیرحجمها صرفاً از طریق q و Q، مفهوم "سهمیهبندی زیردرخت" (subtree quotas) پیادهسازی میشود. هر زیرحجمی که برای آن Q تنظیم شده باشد، یک گروه سهمیهبندی "زیردرخت" دریافت خواهد کرد و تمام زیرحجمهای فرزند ایجادشده درون آن به آن اختصاص داده میشوند. هر زیرحجمی که برای آن q تنظیم شده باشد چنین گروه سهمیهبندی زیردرختی دریافت نمیکند، اما اطمینان حاصل میشود که آنها به همان گروه سهمیهبندی زیردرخت والدین مستقیم خود اضافه شوند.
توصیه میشود از Q برای زیرحجمهایی استفاده شود که معمولاً شامل زیرحجمهای بیشتری هستند و در مواردی که داشتن حسابرسی و محدودیتهای سهمیهبندی روی همه زیرحجمهای فرزند با هم مطلوب است. نمونههای معمول برای Q شامل /home/ یا /var/lib/machines/ هستند. در مقابل، q باید برای زیرحجمهایی استفاده شود که معمولاً شامل زیرحجمهای بیشتری نیستند یا به حسابرسی و محدودیتهای سهمیهبندی مشترک برای همه زیرحجمهای فرزند نیازی ندارند. نمونههای معمول برای q شامل /var/ یا /var/tmp/ هستند.
همانند q، اگر زیرحجم از قبل وجود داشته باشد، Q هیچ اثری بر سلسلهمراتب گروه سهمیهبندی ندارد، صرفنظر از اینکه زیرحجم قبلاً متعلق به یک گروه سهمیهبندی باشد یا خیر.
افزودهشده در نسخه 228.
p, p+
L, L+, L?
c, c+
b, b+
C, C+
افزودهشده در نسخه 214.
x
X
افزودهشده در نسخه 198.
r
R
z
Z
t
لطفاً توجه داشته باشید که ویژگیهای توسعهیافته قابل تنظیم با این نوع خط، مفهومی متفاوت از ویژگیهای فایل لینوکس قابل تنظیم با h/H هستند، به ادامه مراجعه کنید.
افزودهشده در نسخه 218.
T
افزودهشده در نسخه 219.
h
قالب فیلد آرگومان [+-=][aAcCdDeijPsStTu] است. پیشوند + (پیشوند پیشفرض) باعث افزودن ویژگیها میشود؛ - باعث حذف ویژگیها میشود؛ = باعث میشود ویژگیها دقیقاً مطابق با حروف بعدی تنظیم شوند. حروف "aAcCdDeijPsStTu" ویژگیهای جدید را برای فایلها انتخاب میکنند، برای اطلاعات بیشتر به chattr(1) مراجعه کنید.
ارسال صرفاً = به عنوان آرگومان، تمام ویژگیهای فایل فهرستشده در بالا را بازنشانی میکند. باید اشاره شود که پیشوند = خود را به ویژگیهای متناظر با حروف ذکرشده در اینجا محدود میکند. تمام ویژگیهای دیگر دستنخورده باقی خواهند ماند. از پیوندهای نمادین پیروی نمیکند.
لطفاً توجه داشته باشید که ویژگیهای فایل لینوکس قابل تنظیم با این نوع خط، مفهومی متفاوت از ویژگیهای توسعهیافته قابل تنظیم با t/T هستند، به بالا مراجعه کنید.
H
افزودهشده در نسخه 220.
a, a+
افزودهشده در نسخه 219.
A, A+
افزودهشده در نسخه 219.
تغییردهندههای نوع (Type Modifiers)
اگر از علامت تعجب ("!") استفاده شود، این خط فقط در هنگام بوت برای اجرا ایمن است و میتواند یک سیستم در حال اجرا را با اختلال مواجه کند. خطوط بدون علامت تعجب در هر زمانی ایمن فرض میشوند، مثلاً هنگام ارتقای بستهها. 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 مشمول بسط مشخصکننده قرار نمیگیرد.
اگر از نویسه کلاهک ("^") استفاده شود، ستون آرگومان (یعنی ستون ششم) نام یک اعتبارنامه سرویس (service credential) را برای خواندن دادههای آرگومان از آن دریافت میکند. برای جزئیات در مورد مفهوم اعتبارنامهها به اعتبارنامههای سیستم و سرویس[2] مراجعه کنید. این تغییردهنده فقط در انواع خطوطی پشتیبانی میشود که میتوانند محتوای فایل را بنویسند، یعنی f، f+، w، w+. این ویژگی برای نوشتن فایلهای دلخواه با محتوای تهیهشده از جاهای دیگر، از جمله از مدیران ماشین مجازی یا کانتینر در سطوح بالاتر، مفید است. اگر اعتبارنامه مشخصشده برای سرویس systemd-tmpfiles تنظیم نشده باشد، خط بدون سر و صدا نادیده گرفته میشود. اگر "^" و "~" ترکیب شوند، رمزگشایی Base64 روی محتوای اعتبارنامه اعمال میشود.
اگر از علامت دلار ("$") استفاده شود، هنگامی که systemd-tmpfiles با سوئیچ --purge فراخوانی شود، فایل مشمول حذف میگردد. خطوط فاقد این نویسه تحت تأثیر این سوئیچ قرار نمیگیرند.
توجه داشته باشید که برای تمام انواع خطوطی که منجر به ایجاد هر نوع گره فایلی میشوند (یعنی f، d/D/v/q/Q، p، L، c/b و C)، دایرکتوریهای پیشرو در صورت نیاز به طور ضمنی با مالکیت root و حالت دسترسی 0755 ایجاد میشوند. به منظور ایجاد آنها با حالتها یا مالکیتهای متفاوت، حتماً خطوط d مناسب را اضافه کنید.
مسیر (Path)
مشخصات مسیر فایلسیستم از بسط مشخصکننده ساده پشتیبانی میکند، به ادامه مراجعه کنید. مسیر (پس از بسط) باید مطلق باشد.
حالت دسترسی (Mode)
حالت دسترسی فایل که هنگام ایجاد این فایل یا دایرکتوری استفاده میشود. در صورت حذف یا تنظیم روی "-"، از مقدار پیشفرض استفاده میشود: 0755 برای دایرکتوریها، 0644 برای سایر اشیاء فایلی. برای خطوط z و Z، در صورت حذف یا تنظیم روی "-"، حالت دسترسی فایل تغییر نخواهد کرد. این پارامتر برای خطوط x، r، R، L، t و a نادیده گرفته میشود.
در صورت تمایل، اگر با "~" پیشوند شود، حالت دسترسی بر اساس بیتهای دسترسی از قبل تنظیمشده برای فایل یا دایرکتوریهای موجود ماسک میشود: اگر بیتهای اجرایی فایل موجود همگی غیرفعال باشند، تمام بیتهای اجرایی از حالت دسترسی جدید نیز حذف میشوند. به همین ترتیب، اگر تمام بیتهای خواندن از حالت دسترسی قدیمی حذف شده باشند، از حالت دسترسی جدید نیز حذف خواهند شد، و اگر تمام بیتهای نوشتن حذف شده باشند، از حالت دسترسی جدید نیز حذف میشوند. علاوه بر این، بیت sticky/SUID/SGID حذف میشود مگر اینکه روی یک دایرکتوری اعمال شود. این عملکرد به ویژه در همراهی با Z بسیار مفید است.
به طور پیشفرض، حالت دسترسی اینودهای فهرستشده صرفنظر از اینکه از نو ایجاد شده باشند یا از قبل وجود داشته باشند، روی حالت مشخصشده تنظیم میشود. در صورت تمایل، اگر با ":" پیشوند شود، حالت دسترسی پیکربندیشده تنها هنگام ایجاد اینودهای جدید اعمال میشود و اگر اینودی که خط به آن اشاره دارد از قبل وجود داشته باشد، حالت دسترسی آن بدون تغییر باقی میماند.
کاربر، گروه (User, Group)
کاربر و گروهی که برای این فایل یا دایرکتوری استفاده میشود. این مقدار میتواند یک شناسه عددی یا یک نام کاربر/گروه باشد. در صورت حذف یا تنظیم روی "-"، از کاربر و گروه کاربری که systemd-tmpfiles(8) را فراخوانی میکند استفاده میشود. برای خطوط z و Z، در صورت حذف یا تنظیم روی "-"، مالکیت فایل تغییر نخواهد کرد. این پارامترها برای خطوط x، r، R، t و a نادیده گرفته میشوند.
این فیلد عموماً فقط باید به کاربران/گروههای سیستمی اشاره کند، یعنی کاربران/گروههایی که تضمین میشود در مراحل اولیه بوت قابلتفکیک (resolvable) هستند. اگر این فیلد به کاربران/گروههایی اشاره کند که فقط در مراحل بعدی بوت قابلتفکیک میشوند (یعنی پس از اینکه NIS، LDAP یا یک سرویس دایرکتوری شبکهای مشابه در دسترس قرار گیرد)، اجرای عملیات اعلامشده توسط خط احتمالاً با شکست مواجه خواهد شد. همچنین برای اطلاعات بیشتر در مورد الزامات تعاریف کاربر/گروه سیستمی به نکاتی در مورد قابلیت تفکیک نامهای کاربر و گروه[3] مراجعه کنید.
به طور پیشفرض، مالکیت اینودهای فهرستشده صرفنظر از اینکه از نو ایجاد شده باشند یا از قبل وجود داشته باشند، روی کاربر/گروه مشخصشده تنظیم میشود. در صورت تمایل، اگر با ":" پیشوند شود، اطلاعات کاربر/گروه پیکربندیشده تنها هنگام ایجاد اینودهای جدید اعمال میشود و اگر اینودی که خط به آن اشاره دارد از قبل وجود داشته باشد، کاربر/گروه آن بدون تغییر باقی میماند.
طول عمر (Age)
فیلد تاریخ، هنگامی که تنظیم شود، برای تصمیمگیری در مورد اینکه چه فایلهایی در هنگام پاکسازی حذف شوند استفاده میشود. اگر یک فایل یا دایرکتوری قدیمیتر از زمان جاری منهای فیلد سن باشد، حذف میشود. قالب این فیلد مجموعهای از اعداد صحیح است که هر کدام با یکی از پسوندهای زیر برای واحدهای زمانی مربوطه همراه هستند: s، m یا min، h، d، w، ms و us، به ترتیب به معنای ثانیه، دقیقه، ساعت، روز، هفته، میلیثانیه و میکروثانیه. نام کامل واحدهای زمانی نیز قابل استفاده است.
اگر چندین عدد صحیح و واحد مشخص شده باشند، مقادیر زمانی جمع میشوند. اگر یک عدد صحیح بدون واحد داده شود، s فرض میشود.
هنگامی که سن روی صفر تنظیم شود، فایلها بدون قید و شرط پاکسازی میشوند.
فیلد age فقط برای خطوطی اعمال میشود که با d، D، e، v، q، Q، C، x و X شروع میشوند. در صورت حذف یا تنظیم روی "-"، هیچ پاکسازی خودکاری انجام نمیشود.
اگر فیلد سن با نویسه مدک "~" شروع شود، پاکسازی فقط برای فایلها و دایرکتوریهایی اعمال میشود که یک سطح درون دایرکتوری مشخصشده قرار دارند، اما شامل فایلها و دایرکتوریهای بلافاصله درون آن نمیشود.
سن یک ورودی فایلسیستم بر اساس آخرین برچسب زمانی تغییر (mtime)، آخرین برچسب زمانی دسترسی (atime)، و (به جز برای دایرکتوریها) آخرین برچسب زمانی تغییر وضعیت (ctime) آن تعیین میشود. به طور پیشفرض، هر یک از این سه (یا دو) مقدار در صورتی که جدیدتر از زمان جاری منهای فیلد age باشند، از پاکسازی جلوگیری میکنند. برای محدود کردن حذف بر اساس نوع خاصی از برچسبهای زمانی فایل، میتوان از آرگومان age-by استفاده کرد.
آرگومان age-by انواع برچسبهای زمانی مورد استفاده برای بررسی سن را بازنویسی میکند. این آرگومان را میتوان با اضافه کردن یک پیشوند شامل دنبالهای از نویسهها برای مشخص کردن انواع برچسبهای زمانی و یک دونقطه (":") به آرگومان age مشخص کرد: "age-by...:cleanup-age". این آرگومان میتواند شامل a (A برای دایرکتوریها)، b (B برای دایرکتوریها)، c (C برای دایرکتوریها)، یا m (M برای دایرکتوریها) باشد. این موارد به ترتیب نشاندهنده زمان دسترسی، ایجاد، آخرین تغییر وضعیت و آخرین تغییر یک ورودی فایلسیستم هستند. حرف کوچک نشان میدهد که نوع برچسب زمانی دادهشده باید برای فایلها در نظر گرفته شود، در حالی که حرف بزرگ نشان میدهد که نوع برچسب زمانی دادهشده باید برای دایرکتوریها در نظر گرفته شود. برای جزئیات بیشتر در مورد انواع برچسبهای زمانی به فیلدهای برچسب زمانی فایل در statx(2) مراجعه کنید.
در صورت عدم تعیین، فیلد age-by به طور پیشفرض روی abcmABM تنظیم میشود، یعنی به طور پیشفرض تمام برچسبهای زمانی فایل در نظر گرفته میشوند، به استثنای برچسب زمانی آخرین تغییر وضعیت (ctime) برای دایرکتوریها. دلیل این امر این است که خود منطق افزایش سن هر بار که فایلی را درون دایرکتوری حذف میکند، ctime آن را تغییر میدهد. برای اطمینان از اینکه اجرای منطق افزایش سن به تکرار بعدی خود بازخورد ندهد، ctime برای دایرکتوریها به طور پیشفرض نادیده گرفته میشود.
برای مثال:
# Files created and modified, and directories accessed more than # an hour ago in "/tmp/foo/bar", are subject to time-based cleanup. d /tmp/foo/bar - - - bmA:1h -
توجه داشته باشید که هنگام اجرای الگوریتم افزایش سن، یک قفل فایل انحصاری BSD (به flock(2) مراجعه کنید) روی هر دایرکتوری/فایلی که الگوریتم تصمیم به حذف آن میگیرد، گرفته میشود. اگر الگوریتم افزایش سن متوجه شود که از قبل یک قفل (اشتراکی یا انحصاری) روی یک دایرکتوری/فایل گرفته شده است، از آن (و هر چیزی در زیر آن) صرفنظر میکند. برنامهها میتوانند از این ویژگی برای مستثنی کردن موقت برخی زیردرختهای دایرکتوری از الگوریتم افزایش سن استفاده کنند: برنامهها میتوانند خودشان یک قفل فایل BSD بگیرند و تا زمانی که آن را نگه دارند، افزایش سن دایرکتوری/فایل و تمام محتویات زیر آن غیرفعال میشود.
این رفتار میتواند برای تضمین پاکسازی قطعی فایلها یا دایرکتوریهایی استفاده شود که طول عمر آنها باید با فرآیندی که آنها را ایجاد کرده همتراز باشد؛ بدین صورت که آن فرآیند آنها را در مکانی که توسط systemd-tmpfiles با سن "0" پایش میشود ایجاد کند و فرآیند بلافاصله قبل از استفاده، دایرکتوری یا فایل را قفل نماید. از آنجا که قفل BSD مخصوص فرآیند است، تضمین میشود که به محض خروج فرآیند، قفل فایل باز میشود، به این معنی که حتی اگر فرآیند کرش کند، آن فایلها و دایرکتوریها باز شده و توسط systemd-tmpfiles پاکسازی خواهند شد.
آرگومان (Argument)
برای خطوط L مسیر مقصد پیوند نمادین را تعیین میکند. برای c و b، مقادیر major/minor گره دستگاه را مشخص میسازد، به طوری که major و minor به صورت اعداد صحیح فرمت شده و با ":" جدا میشوند، مانند "1:3". برای f و w، آرگومان میتواند برای مشخص کردن یک رشته کوتاه که در فایل نوشته میشود و به یک خط جدید ختم میگردد، استفاده شود. برای C، فایل یا دایرکتوری مبدأ را مشخص میکند. برای t و T، ویژگیهای توسعهیافتهای را که باید تنظیم شوند تعیین میکند. برای a و A، ویژگیهای ACL را برای تنظیم مشخص میسازد. برای h و H، ویژگیهای فایل را برای تنظیم تعیین میکند. برای سایر خطوط نادیده گرفته میشود.
این فیلد میتواند حاوی مشخصکنندهها باشد، به ادامه مراجعه کنید.
مشخصکنندهها (SPECIFIERS)
مشخصکنندهها را میتوان در فیلدهای "path" و "argument" استفاده کرد. یک مشخصکننده ناشناخته یا غیرقابلتفکیک به عنوان پیکربندی نامعتبر تلقی میشود. بسطهای زیر شناختهشده هستند:
جدول 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) سیستم در حال اجرا، همانطور که از فیلد 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) مراجعه کنید. |
| "%%" | علامت تکدرصد | از "%%" به جای "%" برای مشخص کردن یک علامت تکدرصد استفاده کنید. |
مثالها (EXAMPLES)
مثال 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 به ترتیب پس از ۱۰ و ۱۰½ روز پاکسازی خواهند شد.
مثال 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/ پس از اینکه به مدت ۳۰ روز مورد دسترسی قرار نگرفته باشند، حذف خواهند شد.
مثال 5. خالی کردن محتوای یک دایرکتوری کش در هنگام بوت
# /usr/lib/tmpfiles.d/krb5rcache.conf e! /var/cache/krb5rcache - - - 0
تمام فایلها و زیردایرکتوریهای موجود در /var/cache/krb5rcache/ در هنگام بوت حذف خواهند شد. دایرکتوری ایجاد نخواهد شد.
مثال 6. تهیه دسترسی کلید عمومی SSH برای کاربر root از طریق اعتبارنامهها در 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/ و /VAR/RUN/ (/RUN/ AND /VAR/RUN/)
/var/run/ یک پیوند نمادین منسوخشده به /run/ است و برنامهها باید از دومی استفاده کنند. systemd-tmpfiles در صورت استفاده از /var/run/ هشدار خواهد داد.
همچنین ببینید (SEE ALSO)
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)
نکات (NOTES)
- 1.
- Base64 decoded
- 2.
- System and Service Credentials
- 3.
- Notes on Resolvability of User and Group Names
| systemd 257.13 |