При настройке приложения вы часто можете использовать /dev/null
как файл конфигурации, если вы хотите, чтобы приложение читало пустой файл. Но если приложение читает список файлов из каталога, вы не можете использовать этот трюк. Вам нужно будет предоставить ему пустой каталог для чтения.
Мне было интересно: есть ли в Linux пустой каталог по умолчанию, который можно использовать для таких целей? Я знаю, что OpenSSH какое-то время использовал / var / empty, и я, конечно, могу сам создать пустой каталог, но, может быть, FHS указал для этого стандартный каталог?
В FHS не предоставляет "стандартный" пустой каталог.
Для систем Linux характерно предоставление каталога /var/empty
, но этот каталог не определен в FHS и может не быть пустым. Вместо этого некоторые демоны будут создавать здесь свои собственные пустые каталоги. Например, openssh использует пустой каталог /var/empty/sshd
для разделения привилегий.
Если вам необходим пустой каталог временно, вы можете создать пустой каталог самостоятельно в качестве подкаталога /run
или /tmp
. Если вы делаете это вне программы, вы можете использовать mktemp -d
для этого или используйте mkdtemp(3)
C внутри вашей программы. Хотя если ты всегда нужен пустой каталог, рассмотрите возможность создания его в /var/empty
как это делает openssh.
В этом случае создание каталога в /tmp
вероятно, лучше всего подходит, хотя на практике не имеет большого значения, куда вы его положите.
Ты можешь использовать mktemp -d
для создания нового пустого временного каталога с безопасными разрешениями по умолчанию в /tmp/
. Утилита выведет путь к новому каталогу на STDOUT
, поэтому он полезен в оболочке.
В любом случае, он более портативен, чем файл модуля systemd.
Этот вопрос о Unix есть несколько предложений по созданию каталога "черной дыры", включая Файловая система nullfs FUSE.
Для служб systemd предоставляет возможность PrivateTmp
создать частный /tmp
и /var/tmp
каталоги, которые не используются процессами за пределами пространства имен для этой службы и которые должны быть пустыми (изначально).
[Service]
ExecStart=...
PrivateTmp=yes