/dev/null
作为配置文件。但是,如果应用程序从目录中读取文件列表,则无法使用此技巧。您需要给它一个空目录才能读取。我想知道:Linux是否有一个默认的空目录可用于此类目的?我知道OpenSSH使用/ var / empty已有一段时间,我当然可以自己创建一个空目录,但是也许FHS为此指定了一个标准目录?
#1 楼
FHS没有提供“标准”空目录。Linux系统通常提供一个目录
/var/empty
,但是该目录未在FHS中定义,实际上可能不是空的。相反,某些守护程序将在此处创建自己的空目录。例如,openssh使用空目录/var/empty/sshd
进行权限分离。如果您对空目录的需求是短暂的,则可以自己创建一个空目录作为
/run
或/tmp
的子目录。如果在程序外部执行此操作,则可以为此使用mktemp -d
,也可以在程序内部使用mkdtemp(3)
C函数。虽然如果始终需要空目录,请考虑像在opensh一样在/var/empty
下创建一个目录。放在哪里都没关系。评论
我不建议在/ var / empty下创建子目录,因为任何使用它的程序(例如其默认配置中的OpenSSH)可能期望它实际上为空。 (/ var / empty / sshd似乎是一种奇怪的RedHat主义; Debian使用/ var / run / sshd代替。)
–伊尔马里·卡洛宁(Ilmari Karonen)
16 Dec 8'在12:35
@IlmariKaronen您所链接的部分代码不支持您断言OpenSSH期望/ var / empty为空。还有其他地方可以找这个吗?
–迈克尔·汉普顿
16 Dec 8'在15:56
@IlmariKaronen嗯,该文件已过时。它引用/ var / empty,但是代码实际上使用/ var / empty / sshd。再试一次。 :)
–迈克尔·汉普顿
16 Dec 8'在17:58
我看不出它是什么“愚蠢的缺陷”,在我的标准位置上,保证在标准位置有一个空的root拥有的目录,用作chroot监狱,对我来说似乎是个好主意。当然,RedHat必须通过在其下创建子目录去破坏每个人。结果,我对可移植代码的建议是不要对任何东西使用/ var / empty,因为您不能确定其在任何给定系统上的语义。创建自己的空目录,例如在/ var / run下,就像Debian一样,似乎更明智。
–伊尔马里·卡洛宁(Ilmari Karonen)
16年9月9日在16:43
如果它是root拥有且不可写,则不是这样,例如* BSD上的/ var / empty是。
–伊尔马里·卡洛宁(Ilmari Karonen)
16 Dec 9'在16:46
#2 楼
您可以使用mktemp -d
创建一个具有安全权限的新的空临时目录,默认情况下在/tmp/
中。该实用程序将在STDOUT
上输出新目录的路径,因此在外壳程序中很有用。评论
是的,可以,但是如果必须在配置文件中指定该目录,则不切实际。您可能需要一个永久目录。
–roelvanmeer
16 Dec 8'在20:12
#3 楼
这个Unix问题对创建“黑洞”目录(包括nullfs FUSE文件系统)提出了一些建议。评论
我不知道为什么当这是完美的答案时,为什么对mktemp / mkdtemp的答案如此之大。 nullfs等效于/ dev / null。
–chx
16 Dec 10'在5:49
#4 楼
对于服务,systemd提供了选项PrivateTmp
来创建私有/tmp
和/var/tmp
目录,该目录不会被该服务的名称空间之外的进程共享,并且应为空(最初)。 [Service]
ExecStart=...
PrivateTmp=yes
评论
该程序可能会创建其他临时文件,因此您不能仅仅因为/ tmp已对其命名空间而假定它为空。
–迈克尔·汉普顿
16年7月7日在16:18
评论
在我的系统上,/ var / empty不为空,但包含一个名为sshd的文件夹,因此您可能不想使用它。只是一点:/ dev / null的特殊方面不是阅读而是编写。写入/ dev / null的数据将消失。因此,等效目录将是mv yourfile / dev / empty导致删除文件的地方。
@Wildcard我认为您的意思是mv yourfile / dev / empty /。如果执行mv yourfile / dev / empty,则尝试替换特殊目录。
@Jules不,不是。您无法使用/ dev / null和dd初始化任何东西,因为dd甚至会在写入单个字节之前获得EOF。我认为您正在考虑/ dev / zero,它通常用于填充某些东西或生成特定数量的零。
@MichealJohnson,您是对的,我的错,我将/ dev / null与/ dev / zero混淆了。