Linux 中是否有等效于 /dev/null 的目录?

roe*_*eer 93 linux fhs

在配置应用程序时,/dev/null如果您希望应用程序读取空文件,通常可以将其用作配置文件。但是,如果应用程序从目录中读取文件列表,则不能使用此技巧。你需要给它一个空目录来阅读。

我想知道:Linux 是否有可用于此类目的的默认空目录?我知道 OpenSSH 使用 /var/empty 有一段时间了,我当然可以自己创建一个空目录,但也许 FHS 为此指定了一个标准目录?

Mic*_*ton 69

FHS不提供“标准”的空目录。

Linux 系统提供一个目录是很常见的/var/empty,但是这个目录在 FHS 中没有定义,实际上可能不是空的。相反,某些守护进程会在此处创建自己的空目录。例如,openssh 使用空目录/var/empty/sshd进行权限分离。

如果您暂时需要一个空目录,您可以自己创建一个空目录,作为/run或的子目录/tmp。如果您在程序外执行此操作,您可以使用mktemp -d它,或mkdtemp(3)在程序内使用C 函数。但是,如果您总是需要存在空目录,请考虑在/var/emptyopenssh下创建一个。

对于这个用例,在下面创建一个目录/tmp可能是最合适的,但实际上你把它放在哪里并不重要。

  • 我不建议在 `/var/empty` 下创建子目录,因为任何使用它的程序(如 [默认配置] 中的 OpenSSH(https://github.com/openssh/openssh-portable/blob/fdfbf4580de09d84a974211715e14f88a5704b8e/pathnames. h#L157)) 可能期望它实际上是空的。(`/var/empty/sshd` 似乎是一个奇怪的 RedHat 主义;Debian 使用 `/var/run/sshd` 代替。) (5认同)
  • @IlmariKaronen 您链接的那段代码不支持您的断言,即 OpenSSH 期望 `/var/empty` 为空。还有其他地方可以寻找这个吗? (3认同)
  • 我不明白这是一个“愚蠢的缺陷”——在标准位置有一个保证空的根目录,用作 chroot jail,对我来说似乎是一个完美的主意。当然,RedHat 必须通过在其下创建子目录来为每个人销毁它。因此,我对可移植代码的建议是不要对任何东西使用 `/var/empty`,因为你无法确定它在任何给定系统上的语义。创建您自己的空目录,例如在`/var/run` 下,就像Debian 所做的那样,似乎更明智。 (3认同)
  • @IlmariKaronen 嗯,那个文件已经过时了。它指的是`/var/empty`,但代码实际上使用了`/var/empty/sshd`。再试一次。:) (2认同)
  • 如果它由 root 拥有且不可写,则不会,例如 *BSD 上的 `/var/empty` 是。 (2认同)

oal*_*als 37

您可以使用mktemp -d来创建一个具有安全权限的新的空临时目录,默认情况下在/tmp/. 该实用程序将在 上输出新目录的路径STDOUT,因此它在 shell 中很有用。

无论如何,它比 systemd 单元文件更便携。


200*_*ess 29

这个 Unix question有一些创建“黑洞”目录的建议,包括一个nullfs FUSE 文件系统

  • 我不知道为什么 mktemp / mkdtemp 答案在这是完美答案时如此受欢迎。nullfs 相当于 /dev/null。 (2认同)

HBr*_*ijn 12

对于服务,systemd 提供了PrivateTmp创建私有/tmp/var/tmp目录的选项,这些目录不被该服务的命名空间之外的进程共享,并且应该是空的(最初)。

[Service]
ExecStart=...
PrivateTmp=yes 
Run Code Online (Sandbox Code Playgroud)

  • 该程序可能会创建其他临时文件,因此您不能假设 `/tmp` 将是空的,因为它已被命名空间。 (7认同)