TMPFILES.D(5) tmpfiles.d 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
#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

فایل‌های پیکربندی 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 باید برای فایل‌هایی استفاده شود که طول عمر آن‌ها مستقل از هر سرویسی است یا به پیکربندی پیچیده‌تری نیاز دارند.

هر فایل پیکربندی باید به سبک 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/ با همان نام فایل است.

قالب پیکربندی به صورت یک خط به ازای هر مسیر است که شامل فیلدهای نوع (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").

نوع از یک حرف منفرد و در صورت تمایل یک یا چند نویسه تغییردهنده تشکیل شده است: علامت مثبت ("+")، علامت تعجب ("!")، علامت منفی ("-")، علامت مساوی ("=")، نویسه مدک ("~") و/یا کلاهک ("^").

انواع خطوط زیر شناخته‌شده هستند:

f, f+

f در صورتی که فایل هنوز وجود نداشته باشد، آن را ایجاد می‌کند. اگر پارامتر آرگومان داده شده باشد و فایل وجود نداشته باشد، آن آرگومان در فایل نوشته خواهد شد. f+ فایل را ایجاد کرده یا محتوای آن را خالی (truncate) می‌کند. اگر پارامتر آرگومان داده شده باشد، در فایل نوشته خواهد شد. از پیوندهای نمادین پیروی نمی‌کند.

w, w+

پارامتر آرگومان را در صورت وجود فایل، در آن می‌نویسد. اگر با + همراه باشد، خط به انتهای فایل اضافه (append) می‌شود. اگر پیکربندی شما چندین خط را در یک فایل می‌نویسد، از w+ استفاده کنید. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. پارامتر آرگومان بدون خط جدید انتهایی نوشته خواهد شد. گریزهای بک‌اسلش سبک C تفسیر می‌شوند. از پیوندهای نمادین پیروی می‌کند.

d

یک دایرکتوری ایجاد می‌کند. در صورت مشخص شدن، حالت دسترسی و مالکیت تنظیم خواهند شد. در صورتی که آرگومان age مشخص شده باشد، محتوای این دایرکتوری مشمول پاک‌سازی مبتنی بر زمان خواهد بود.

D

مشابه d است، اما علاوه بر آن هنگامی که از گزینه --remove استفاده شود، محتوای دایرکتوری حذف خواهد شد.

e

حالت دسترسی و مالکیت دایرکتوری‌های موجود را تنظیم کرده و محتوای آن‌ها را بر اساس سن (age) حذف می‌کند. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. در صورتی که آرگومان age مشخص شده باشد، محتوای دایرکتوری‌ها مشمول پاک‌سازی مبتنی بر زمان خواهد بود. اگر آرگومان age برابر با "0" باشد، هر بار که دستور systemd-tmpfiles(8) با گزینه --clean اجرا شود، محتوا بدون قید و شرط حذف خواهد شد.

برای این‌که این ورودی مفید باشد، باید حداقل یکی از آرگومان‌های mode، user، group یا age مشخص شده باشد، زیرا در غیر این صورت این ورودی هیچ اثری ندارد. به عنوان یک استثنا، یک ورودی بدون اثر ممکن است در صورت ترکیب با ! مفید باشد، به مثال‌ها مراجعه کنید.

افزوده‌شده در نسخه 230.

v

اگر مسیر هنوز وجود نداشته باشد، فایل‌سیستم از زیرحجم‌ها (subvolumes) پشتیبانی کند (btrfs) و خود سیستم در یک زیرحجم نصب شده باشد (به طور خاص: دایرکتوری ریشه / خودش یک زیرحجم باشد)، یک زیرحجم ایجاد می‌کند. در غیر این صورت، یک دایرکتوری معمولی به همان روش d ایجاد می‌کند.

زیرحجمی که با این نوع خط ایجاد می‌شود به هیچ گروه سهمیه‌بندی (quota group) سطح بالاتری اختصاص داده نمی‌شود. برای این منظور از q یا Q استفاده کنید که امکان ایجاد سلسله‌مراتب ساده گروه‌های سهمیه‌بندی را فراهم می‌کنند، به ادامه مراجعه کنید.

افزوده‌شده در نسخه 219.

q

یک زیرحجم یا دایرکتوری مشابه v ایجاد می‌کند، اما زیرحجم را به همان گروه‌های سهمیه‌بندی سطح بالای والد اختصاص می‌دهد. این کار تضمین می‌کند که محدودیت‌ها و حساب‌رسی‌های سطح بالاتری که برای زیرحجم والد اعمال می‌شوند، شامل زیرحجم مشخص‌شده نیز بشوند. در فایل‌سیستم‌های غیر btrfs، این نوع خط معادل d است.

اگر زیرحجم از قبل وجود داشته باشد، صرف‌نظر از اینکه زیرحجم قبلاً به یک گروه سهمیه‌بندی متصل بوده است یا خیر، هیچ تغییری در سلسله‌مراتب سهمیه‌بندی ایجاد نمی‌شود. همچنین به Q در ادامه مراجعه کنید. برای جزئیات در مورد مفهوم گروه سهمیه‌بندی btrfs به btrfs-qgroup(8) مراجعه کنید.

افزوده‌شده در نسخه 228.

Q

زیرحجم یا دایرکتوری را مشابه v ایجاد می‌کند، اما زیرحجم جدید را به یک گروه سهمیه‌بندی برگ (leaf) جدید اختصاص می‌دهد. به جای کپی کردن تخصیص‌های گروه سهمیه‌بندی سطح بالاتر از والد مانند کاری که در q انجام می‌شود، پایین‌ترین گروه سهمیه‌بندی زیرحجم والد که گروه سهمیه‌بندی برگ نیست، مشخص می‌شود. سپس، یک گروه سهمیه‌بندی "واسطه" (intermediary) درج می‌شود که یک سطح پایین‌تر از این سطح است و بخش شناسه (ID) یکسانی با زیرحجم مشخص‌شده دارد. اگر هیچ گروه سهمیه‌بندی سطح بالاتری برای زیرحجم والد وجود نداشته باشد، به جای آن یک گروه سهمیه‌بندی جدید در سطح 255 با همان شناسه زیرحجم مشخص‌شده درج می‌شود. این گروه سهمیه‌بندی واسطه جدید سپس به گروه‌های سهمیه‌بندی سطح بالاتر زیرحجم والد اختصاص داده می‌شود و گروه سهمیه‌بندی برگ زیرحجم مشخص‌شده به آن اختصاص می‌یابد.

در عمل، این اثر مشابهی با q دارد، اما یک گروه سهمیه‌بندی سطح بالاتر جدید برای زیرحجم مشخص‌شده معرفی می‌کند که می‌تواند برای اعمال محدودیت‌ها و حساب‌رسی به زیرحجم مشخص‌شده و زیرحجم‌های فرزند ایجادشده در آن استفاده شود. بدین ترتیب، با ایجاد زیرحجم‌ها صرفاً از طریق q و Q، مفهوم "سهمیه‌بندی زیردرخت" (subtree quotas) پیاده‌سازی می‌شود. هر زیرحجمی که برای آن Q تنظیم شده باشد، یک گروه سهمیه‌بندی "زیردرخت" دریافت خواهد کرد و تمام زیرحجم‌های فرزند ایجادشده درون آن به آن اختصاص داده می‌شوند. هر زیرحجمی که برای آن q تنظیم شده باشد چنین گروه سهمیه‌بندی زیردرختی دریافت نمی‌کند، اما اطمینان حاصل می‌شود که آن‌ها به همان گروه سهمیه‌بندی زیردرخت والدین مستقیم خود اضافه شوند.

توصیه می‌شود از Q برای زیرحجم‌هایی استفاده شود که معمولاً شامل زیرحجم‌های بیشتری هستند و در مواردی که داشتن حساب‌رسی و محدودیت‌های سهمیه‌بندی روی همه زیرحجم‌های فرزند با هم مطلوب است. نمونه‌های معمول برای Q شامل /home/ یا /var/lib/machines/ هستند. در مقابل، q باید برای زیرحجم‌هایی استفاده شود که معمولاً شامل زیرحجم‌های بیشتری نیستند یا به حساب‌رسی و محدودیت‌های سهمیه‌بندی مشترک برای همه زیرحجم‌های فرزند نیازی ندارند. نمونه‌های معمول برای q شامل /var/ یا /var/tmp/ هستند.

همانند q، اگر زیرحجم از قبل وجود داشته باشد، Q هیچ اثری بر سلسله‌مراتب گروه سهمیه‌بندی ندارد، صرف‌نظر از این‌که زیرحجم قبلاً متعلق به یک گروه سهمیه‌بندی باشد یا خیر.

افزوده‌شده در نسخه 228.

p, p+

یک لوله نام‌گذاری‌شده (FIFO) را در صورتی که هنوز وجود نداشته باشد ایجاد می‌کند. اگر با + همراه باشد و فایلی از قبل در محل ایجاد لوله وجود داشته باشد، آن فایل حذف شده و لوله جایگزین آن خواهد شد.

L, L+, L?

یک پیوند نمادین (symlink) را در صورتی که هنوز وجود نداشته باشد ایجاد می‌کند. اگر با + همراه باشد و یک فایل یا دایرکتوری از قبل در محل ایجاد پیوند نمادین وجود داشته باشد، حذف شده و پیوند نمادین جایگزین آن خواهد شد. اگر با ? همراه باشد و مسیر مبدأ وجود نداشته باشد، پیوند نمادین ایجاد نمی‌شود. اگر آرگومان حذف شود، پیوندهای نمادینی به فایل‌های هم‌نام موجود در دایرکتوری /usr/share/factory/ ایجاد می‌شوند. توجه داشته باشید که مجوزهای روی پیوندهای نمادین نادیده گرفته می‌شوند.

c, c+

یک گره دستگاه نویسه‌ای (character device) را در صورتی که هنوز وجود نداشته باشد ایجاد می‌کند. اگر با + همراه باشد و فایلی از قبل در محل ایجاد گره دستگاه وجود داشته باشد، حذف شده و گره دستگاه جایگزین آن خواهد شد. توصیه می‌شود این ورودی را با یک علامت تعجب همراه کنید تا گره‌های دستگاه ایستا فقط در هنگام بوت ایجاد شوند، زیرا udev گره‌های دستگاه ایستایی را که در زمان اجرا ایجاد می‌شوند مدیریت نخواهد کرد.

b, b+

یک گره دستگاه بلوکی (block device) را در صورتی که هنوز وجود نداشته باشد ایجاد می‌کند. اگر با + همراه باشد و فایلی از قبل در محل ایجاد گره دستگاه وجود داشته باشد، حذف شده و گره دستگاه جایگزین آن خواهد شد. توصیه می‌شود این ورودی را با یک علامت تعجب همراه کنید تا گره‌های دستگاه ایستا فقط در هنگام بوت ایجاد شوند، زیرا udev گره‌های دستگاه ایستایی را که در زمان اجرا ایجاد می‌شوند مدیریت نخواهد کرد.

C, C+

یک فایل یا دایرکتوری را به صورت بازگشتی کپی می‌کند، در صورتی که فایل‌ها یا دایرکتوری‌های مقصد هنوز وجود نداشته باشند یا دایرکتوری مقصد خالی باشد. توجه داشته باشید که این دستور به زیردایرکتوری‌ها وارد نمی‌شود اگر دایرکتوری مقصد از قبل وجود داشته باشد و خالی نباشد، مگر اینکه عمل با + همراه شده باشد. در غیر این صورت، کل عملیات کپی نادیده گرفته می‌شود. اگر آرگومان حذف شود، فایل‌هایی با همان نام از دایرکتوری مبدأ /usr/share/factory/ کپی می‌شوند. از پیوندهای نمادین پیروی نمی‌کند. در صورتی که آرگومان age مشخص شده باشد، محتوای دایرکتوری‌ها مشمول پاک‌سازی مبتنی بر زمان خواهد بود.

افزوده‌شده در نسخه 214.

x

یک مسیر را در طول پاک‌سازی نادیده می‌گیرد. از این نوع برای مستثنی کردن مسیرها از پاک‌سازیِ تحت کنترل پارامتر Age استفاده کنید. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند.

X

یک مسیر را در طول پاک‌سازی نادیده می‌گیرد. از این نوع برای مستثنی کردن مسیرها از پاک‌سازیِ تحت کنترل پارامتر Age استفاده کنید. برخلاف x، اگر مسیر یک دایرکتوری باشد این پارامتر محتوای آن را مستثنی نمی‌کند، بلکه فقط خود دایرکتوری را مستثنی می‌سازد. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند.

افزوده‌شده در نسخه 198.

r

یک فایل یا دایرکتوری را در صورت وجود حذف می‌کند. این گزینه برای حذف دایرکتوری‌های غیرخالی قابل استفاده نیست؛ برای آن منظور از R استفاده کنید. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. از پیوندهای نمادین پیروی نمی‌کند.

R

یک مسیر و تمام زیردایرکتوری‌های آن را (اگر یک دایرکتوری باشد) به صورت بازگشتی حذف می‌کند. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. از پیوندهای نمادین پیروی نمی‌کند.

z

حالت دسترسی، مالکیت کاربر و گروه را تنظیم کرده و بافت امنیتی SELinux یک فایل یا دایرکتوری را در صورت وجود بازیابی می‌کند. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. از پیوندهای نمادین پیروی نمی‌کند.

Z

حالت دسترسی، مالکیت کاربر و گروه را به صورت بازگشتی تنظیم کرده و بافت امنیتی SELinux یک فایل یا دایرکتوری را در صورت وجود، و همچنین زیردایرکتوری‌ها و فایل‌های درون آن را بازیابی می‌کند. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. از پیوندهای نمادین پیروی نمی‌کند.

t

ویژگی‌های توسعه‌یافته (extended attributes) را تنظیم می‌کند، برای جزئیات به attr(5) مراجعه کنید. فیلد آرگومان باید یک یا چند عبارت انتساب به شکل namespace.attribute=value را دریافت کند، برای مثال‌ها به ادامه مراجعه کنید. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. این می‌تواند برای تنظیم برچسب‌های SMACK مفید باشد. از پیوندهای نمادین پیروی نمی‌کند.

لطفاً توجه داشته باشید که ویژگی‌های توسعه‌یافته قابل تنظیم با این نوع خط، مفهومی متفاوت از ویژگی‌های فایل لینوکس قابل تنظیم با h/H هستند، به ادامه مراجعه کنید.

افزوده‌شده در نسخه 218.

T

مشابه t است، اما به صورت بازگشتی عمل می‌کند.

افزوده‌شده در نسخه 219.

h

ویژگی‌های فایل/دایرکتوری لینوکس را تنظیم می‌کند. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند.

قالب فیلد آرگومان [+-=][aAcCdDeijPsStTu] است. پیشوند + (پیشوند پیش‌فرض) باعث افزودن ویژگی‌ها می‌شود؛ - باعث حذف ویژگی‌ها می‌شود؛ = باعث می‌شود ویژگی‌ها دقیقاً مطابق با حروف بعدی تنظیم شوند. حروف "aAcCdDeijPsStTu" ویژگی‌های جدید را برای فایل‌ها انتخاب می‌کنند، برای اطلاعات بیشتر به chattr(1) مراجعه کنید.

ارسال صرفاً = به عنوان آرگومان، تمام ویژگی‌های فایل فهرست‌شده در بالا را بازنشانی می‌کند. باید اشاره شود که پیشوند = خود را به ویژگی‌های متناظر با حروف ذکرشده در اینجا محدود می‌کند. تمام ویژگی‌های دیگر دست‌نخورده باقی خواهند ماند. از پیوندهای نمادین پیروی نمی‌کند.

لطفاً توجه داشته باشید که ویژگی‌های فایل لینوکس قابل تنظیم با این نوع خط، مفهومی متفاوت از ویژگی‌های توسعه‌یافته قابل تنظیم با t/T هستند، به بالا مراجعه کنید.

H

مشابه h است، اما به صورت بازگشتی عمل می‌کند.

افزوده‌شده در نسخه 220.

a, a+

فهرست‌های کنترل دسترسی پازیکس (POSIX ACLs) را تنظیم می‌کند، به acl(5) مراجعه کنید. علاوه بر این، اگر از 'X' استفاده شود، بیت اجرا تنها در صورتی تنظیم می‌شود که فایل یک دایرکتوری باشد یا از قبل مجوز اجرا برای کاربری داشته باشد، همان‌طور که در setfacl(1) ذکر شده است. اگر با + همراه باشد، ورودی‌های مشخص‌شده به مجموعه موجود اضافه خواهند شد. systemd-tmpfiles(8) به طور خودکار ورودی‌های پایه مورد نیاز برای کاربر و گروه را بر اساس حالت دسترسی فایل اضافه می‌کند، مگر اینکه ورودی‌های پایه از قبل وجود داشته باشند یا به صراحت مشخص شده باشند. اگر ماسک به صراحت مشخص نشده باشد یا از قبل وجود نداشته باشد، اضافه خواهد شد. خطوطی از این نوع، الگوهای گلوب شبیه به پوسته را به جای نام‌های مسیر معمولی می‌پذیرند. این می‌تواند برای مجاز کردن دسترسی اضافی به برخی فایل‌ها مفید باشد. از پیوندهای نمادین پیروی نمی‌کند.

افزوده‌شده در نسخه 219.

A, A+

مشابه a و a+ است، اما به صورت بازگشتی عمل می‌کند. از پیوندهای نمادین پیروی نمی‌کند.

افزوده‌شده در نسخه 219.

اگر از علامت تعجب ("!") استفاده شود، این خط فقط در هنگام بوت برای اجرا ایمن است و می‌تواند یک سیستم در حال اجرا را با اختلال مواجه کند. خطوط بدون علامت تعجب در هر زمانی ایمن فرض می‌شوند، مثلاً هنگام ارتقای بسته‌ها. 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 مناسب را اضافه کنید.

مشخصات مسیر فایل‌سیستم از بسط مشخص‌کننده ساده پشتیبانی می‌کند، به ادامه مراجعه کنید. مسیر (پس از بسط) باید مطلق باشد.

حالت دسترسی فایل که هنگام ایجاد این فایل یا دایرکتوری استفاده می‌شود. در صورت حذف یا تنظیم روی "-"، از مقدار پیش‌فرض استفاده می‌شود: 0755 برای دایرکتوری‌ها، 0644 برای سایر اشیاء فایلی. برای خطوط z و Z، در صورت حذف یا تنظیم روی "-"، حالت دسترسی فایل تغییر نخواهد کرد. این پارامتر برای خطوط x، r، R، L، t و a نادیده گرفته می‌شود.

در صورت تمایل، اگر با "~" پیشوند شود، حالت دسترسی بر اساس بیت‌های دسترسی از قبل تنظیم‌شده برای فایل یا دایرکتوری‌های موجود ماسک می‌شود: اگر بیت‌های اجرایی فایل موجود همگی غیرفعال باشند، تمام بیت‌های اجرایی از حالت دسترسی جدید نیز حذف می‌شوند. به همین ترتیب، اگر تمام بیت‌های خواندن از حالت دسترسی قدیمی حذف شده باشند، از حالت دسترسی جدید نیز حذف خواهند شد، و اگر تمام بیت‌های نوشتن حذف شده باشند، از حالت دسترسی جدید نیز حذف می‌شوند. علاوه بر این، بیت sticky/SUID/SGID حذف می‌شود مگر اینکه روی یک دایرکتوری اعمال شود. این عملکرد به ویژه در همراهی با Z بسیار مفید است.

به طور پیش‌فرض، حالت دسترسی اینودهای فهرست‌شده صرف‌نظر از این‌که از نو ایجاد شده باشند یا از قبل وجود داشته باشند، روی حالت مشخص‌شده تنظیم می‌شود. در صورت تمایل، اگر با ":" پیشوند شود، حالت دسترسی پیکربندی‌شده تنها هنگام ایجاد اینودهای جدید اعمال می‌شود و اگر اینودی که خط به آن اشاره دارد از قبل وجود داشته باشد، حالت دسترسی آن بدون تغییر باقی می‌ماند.

کاربر و گروهی که برای این فایل یا دایرکتوری استفاده می‌شود. این مقدار می‌تواند یک شناسه عددی یا یک نام کاربر/گروه باشد. در صورت حذف یا تنظیم روی "-"، از کاربر و گروه کاربری که systemd-tmpfiles(8) را فراخوانی می‌کند استفاده می‌شود. برای خطوط z و Z، در صورت حذف یا تنظیم روی "-"، مالکیت فایل تغییر نخواهد کرد. این پارامترها برای خطوط x، r، R، t و a نادیده گرفته می‌شوند.

این فیلد عموماً فقط باید به کاربران/گروه‌های سیستمی اشاره کند، یعنی کاربران/گروه‌هایی که تضمین می‌شود در مراحل اولیه بوت قابل‌تفکیک (resolvable) هستند. اگر این فیلد به کاربران/گروه‌هایی اشاره کند که فقط در مراحل بعدی بوت قابل‌تفکیک می‌شوند (یعنی پس از اینکه NIS، LDAP یا یک سرویس دایرکتوری شبکه‌ای مشابه در دسترس قرار گیرد)، اجرای عملیات اعلام‌شده توسط خط احتمالاً با شکست مواجه خواهد شد. همچنین برای اطلاعات بیشتر در مورد الزامات تعاریف کاربر/گروه سیستمی به نکاتی در مورد قابلیت تفکیک نام‌های کاربر و گروه[3] مراجعه کنید.

به طور پیش‌فرض، مالکیت اینودهای فهرست‌شده صرف‌نظر از این‌که از نو ایجاد شده باشند یا از قبل وجود داشته باشند، روی کاربر/گروه مشخص‌شده تنظیم می‌شود. در صورت تمایل، اگر با ":" پیشوند شود، اطلاعات کاربر/گروه پیکربندی‌شده تنها هنگام ایجاد اینودهای جدید اعمال می‌شود و اگر اینودی که خط به آن اشاره دارد از قبل وجود داشته باشد، کاربر/گروه آن بدون تغییر باقی می‌ماند.

فیلد تاریخ، هنگامی که تنظیم شود، برای تصمیم‌گیری در مورد اینکه چه فایل‌هایی در هنگام پاک‌سازی حذف شوند استفاده می‌شود. اگر یک فایل یا دایرکتوری قدیمی‌تر از زمان جاری منهای فیلد سن باشد، حذف می‌شود. قالب این فیلد مجموعه‌ای از اعداد صحیح است که هر کدام با یکی از پسوندهای زیر برای واحدهای زمانی مربوطه همراه هستند: 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 پاک‌سازی خواهند شد.

برای خطوط L مسیر مقصد پیوند نمادین را تعیین می‌کند. برای c و b، مقادیر major/minor گره دستگاه را مشخص می‌سازد، به طوری که major و minor به صورت اعداد صحیح فرمت شده و با ":" جدا می‌شوند، مانند "1:3". برای f و w، آرگومان می‌تواند برای مشخص کردن یک رشته کوتاه که در فایل نوشته می‌شود و به یک خط جدید ختم می‌گردد، استفاده شود. برای C، فایل یا دایرکتوری مبدأ را مشخص می‌کند. برای t و T، ویژگی‌های توسعه‌یافته‌ای را که باید تنظیم شوند تعیین می‌کند. برای a و A، ویژگی‌های ACL را برای تنظیم مشخص می‌سازد. برای h و H، ویژگی‌های فایل را برای تنظیم تعیین می‌کند. برای سایر خطوط نادیده گرفته می‌شود.

این فیلد می‌تواند حاوی مشخص‌کننده‌ها باشد، به ادامه مراجعه کنید.

مشخص‌کننده‌ها را می‌توان در فیلدهای "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) مراجعه کنید.
"%%" علامت تک‌درصد از "%%" به جای "%" برای مشخص کردن یک علامت تک‌درصد استفاده کنید.

مثال 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 دریافت خواهد شد.

/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 decoded
2.
System and Service Credentials
3.
Notes on Resolvability of User and Group Names
systemd 257.13