Вопрос: Есть ли в Linux эквивалент каталога / dev / null?


При настройке приложения часто можно использовать /dev/null в качестве файла конфигурации, если вы хотите, чтобы приложение прочитало пустой файл. Но, если приложение читает список файлов из каталога, вы не можете использовать этот трюк. Вам нужно будет дать ему пустой каталог для чтения.

Мне было интересно: имеет ли Linux пустую директорию по умолчанию, которая может использоваться для таких целей? Я знаю, что OpenSSH используется / var / empty на некоторое время, и я могу, конечно, создать пустой каталог, но, возможно, FHS указал для него стандартный каталог?


71
2017-12-07 09:04


Источник


В моей системе, /var/empty не является пустым, но содержит папку, называемую sshd, поэтому вы, вероятно, не хотите его использовать. - knub
Просто пункт: особый аспект /dev/null не столько для чтение что касается письмо.  Данные, записанные в /dev/null просто исчезает. Таким образом, эквивалент каталога будет местом, где mv yourfile /dev/empty приведет к удалению файла. - Wildcard
@Wildcard Я предполагаю, что вы имеете в виду mv yourfile /dev/empty/, Если вы это сделаете mv yourfile /dev/empty, вы пытаетесь заменить специальный каталог. - Rhymoid
@Jules Нет, это не так. Вы не можете инициализировать что-либо с помощью /dev/null а также dd потому как dd получит EOF, прежде чем он даже напишет один байт. Я думаю, вы думаете о /dev/zero, который часто используется для заполнения чего-либо или создания определенного количества нулей. - Micheal Johnson
@MichealJohnson, ты прав, моя ошибка, я смутился /dev/nullс /dev/zero, - Jules


Ответы:


FHS не предоставляет стандартную пустую директорию.

Для Linux-систем обычно предоставляется каталог /var/empty, но этот каталог не определен в FHS и фактически не может быть пустым. Вместо этого некоторые демоны создадут здесь свои собственные пустые каталоги. Например, openssh использует пустую директорию /var/empty/sshd для разделения привилегий.

Если ваша потребность в пустом каталоге преходящна, вы можете создать пустой каталог самостоятельно, как подкаталог /run или /tmp, Если вы делаете это за пределами программы, вы можете использовать mktemp -d для этого, или используйте mkdtemp(3) C внутри вашей программы. Хотя, если вы всегда нужно, чтобы пустая директория присутствовала, подумайте о создании /var/empty как это делает openssh.

Для этого варианта использования, создавая каталог в /tmp вероятно, лучше всего подходит, хотя на практике это не имеет большого значения, где вы его положили.


62
2017-12-07 09:11



Я бы не рекомендовал создавать подкаталоги в /var/empty, так как любые программы, которые его используют (например, OpenSSH в своем стандартная конфигурация) может ожидать, что он будет фактически пустым. (The /var/empty/sshd вещь кажется странным RedHat-ism; Debian использует /var/run/sshd вместо.) - Ilmari Karonen
@IlmariKaronen Бит кода, который вы связали, не поддерживает ваше утверждение о том, что OpenSSH ожидает /var/empty быть пустым. Есть ли где-нибудь еще это? - Michael Hampton♦
@IlmariKaronen Хм, этот документ устарел. Это относится к /var/empty но код действительно использует /var/empty/sshd, Попробуй еще раз. :) - Michael Hampton♦
@IlmariKaronen Хм. Теперь я думаю, что вы правы, действительно глядя на источник, который вызывает вызов chroot (). Я нахожу удивительным, что в opensh будет такой явно глупый недостаток, что Red Hat придется поддерживать коррекцию нисходящего потока. - Michael Hampton♦
Я не вижу, как это «глупая ошибка» - наличие гарантированного пустого корневого каталога в стандартном месте, для использования в качестве chroot-тюрьмы, кажется мне совершенно хорошей идеей. Конечно, RedHat должен был пойти и разорить его для всех, создав подкаталоги под ним. В результате моя рекомендация о переносном коде не будет использоваться /var/empty для чего угодно, поскольку вы не можете быть уверены в своей семантике в любой системе. Создание собственного пустого каталога, например. под /var/run, как и Debian, кажется более разумным. - Ilmari Karonen


Вы можете использовать mktemp -d для создания нового пустого временного каталога с безопасными разрешениями, по умолчанию в /tmp/, Утилита выведет путь нового каталога на STDOUT, поэтому он полезен в оболочке.

В любом случае, это более портативный, чем системный файл.


37
2017-12-07 11:04



Да, вы могли бы, но это нецелесообразно, если этот каталог должен быть указан в файле конфигурации. Для этого вам нужен постоянный дир. - roelvanmeer


Этот вопрос Unix имеет некоторые предложения по созданию каталога «черной дыры», включая Файловая система nullfs FUSE,


18
2017-12-07 21:37



Я не знаю, почему ответ mktemp / mkdtemp так сильно поддерживается, когда это идеальный ответ. nullfs является эквивалентом / dev / null. - chx


Для служб systemd предоставляется опция PrivateTmp создавать частные /tmp а также /var/tmp каталоги, которые не разделяются процессами за пределами пространства имен для этой службы и которые должны быть пустыми (изначально).

[Service]
ExecStart=...
PrivateTmp=yes 

11
2017-12-07 10:20



Программа может создавать другие временные файлы, поэтому вы не можете предположить /tmp будет пустым только потому, что он был заменен именами. - Michael Hampton♦