或者:我可以将属于某个组的文件放在哪里?
假设Unix系统上有两个用户:乔和莎拉。他们都是该组织的成员电影爱好者团体。我应该把他们的电影文件放在哪里?
/home/{joe,sarah}/movies
不合适,因为这些目录属于乔/莎拉,而不是他们的团体;/home/movies-enthusiast
也不合适,因为电影爱好者是一个组,而不是一个用户;/var/movies-enthusiast
可能是一个选择,但我不确定 FHS 是否允许这样做;/srv/movies-enthusiast
也可能是一个选项,但是电影不是系统服务所需的文件。
答案1
不要使用
/usr
用于共享只读数据。这里的数据只能因管理原因而更改(例如安装新软件包。)/opt
通常适用于独立的程序或由于某种原因需要与系统的其余部分隔离的程序(例如,低和中等交互的蜜罐程序)。/var
是为了“在系统正常操作期间内容预计会不断更改的文件,例如日志、假脱机文件和临时电子邮件文件。”我喜欢这样考虑:如果您的数据在列表中看起来不正确,那么它通常不属于列表/var
(尽管也有例外。)
使用
/home
用于用户主目录。有些人也将此目录视为组文件的区域。 FHS 实际上指出,“在大型系统上(特别是当 /home 目录在使用 NFS 的许多主机之间共享时),细分用户主目录很有用。细分可以通过使用子目录来完成,例如 /home/staff、/home/guests、/home/学生等”/srv
是组文件可接受且通常首选的位置。我通常将此目录用于组共享文件,原因在 Chris Down 的文章中提到回答;我将组文件共享视为服务器提供的一项服务。
man hier
有关 FHS 描述的每个目录的用途的更多信息,请参阅 hier(7) 手册页 ( )。
答案2
在我看来,正确的地方是/srv/movies-enthusiast
。 “服务”不一定是守护程序或程序,它只需是系统提供的服务(例如能够在那里获取电影)。这是来自FHS:
/srv 包含由该系统提供服务的站点特定数据。
我绝对认为您的使用属于该定义,并提供服务。
答案3
这文件系统层次结构标准(FHS) 为“Unix 发行版开发人员、软件包开发人员和系统实现人员”指定了要遵守的布局,以免造成混乱你的命名空间。
因为它是你的命名空间,您应该选择任何您认为合适的名称。如果你发现/groups/movies-enthusiast
有道理,你应该把它放在那里。如果您喜欢短路径名,因为它们更容易键入,/g/movies-enthusiast
(或者也许/g/m-e
)会合适。
由于您选择的路径未在 FHS 中定义,因此发行版或第三方包不得触及它们。因此,您应该阅读 FHS 以了解兼容软件可以使用哪些路径(目录将告诉您大部分需要了解的内容)。
例如,我个人用于/av
存储视听内容、/src
源代码和/data
未定义数据(例如虚拟机映像、CD 映像、chroot、保存的包等)。
答案4
重要的是要记住,FHS解决需要在多方(例如本地站点、发行版、应用程序、文档等)之间协调文件放置的问题; FHS 不会尝试为您可能遇到的每种情况制定规则:本地文件的本地放置是本地问题(FHS 3.0,第 1.1 节)。
因此,从技术上讲,您可以将movies
目录放在任何地方,只要不违反 FHS 惯例。不过,你的问题是关于最合适的地方,所以让我们考虑一些常见的答案(根据您的具体用例,从最喜欢到不太喜欢排序):
/<someprefix>/<groupname>
或者/media/<volumename>/<groupname>
:老实说,我不知道为什么这个选项在 Linux 世界中名声不好,但让我们澄清一下:这确实是你的系统,并且 FHS 表示,只要不与任何已建立的语义相冲突,您就可以在根级别创建新目录。例如,您可以创建一个目录/groups
或/shared
根据您认为合适的方式在其中组织文件。我知道一些管理员更喜欢将它们与文件系统的其余部分隔离,因此他们安装一个不同的卷(即在 下/media/<volumename>/<groupname>
)。两者都很好,而且都符合 FHS,真的。/srv/<groupname>
或/srv/<someprefix>/<groupname>
:根据 FHS,/srv
包含由该系统提供的特定于站点的数据。 FHS 然后继续解释说用于命名 /srv 子目录的方法未指定。根据我个人的经验,大多数利用该/srv
目录的管理员都会使用每个客户端、每个站点或每个项目的子目录,然后将数据目录放在该级别。无论您如何构建它,/srv
如果您可以合理地认为共享这些文件本身就构成了一项服务,那么存储要在多个用户之间共享的文件是完全可以接受的。问问自己:“最终通过 SMB/NFS/AFS/GIT/... 共享这些文件有意义吗?”如果是这样,那么您可以合理地认为您的目录是本地文件共享服务,从而将它们存储在 的子目录中/srv
,即使没有守护程序实际将这些文件提供给其他系统。/home/<groupname>
或/home/<some-prefix>/<groupname>
:FHS 说:/home
是一个相当标准的概念,但它显然是一个特定于站点的文件系统。绝对不要求下面的每个目录/home
都是实际用户的名称,并且可以接受组的子目录,但需要采取预防措施以避免组和用户之间最终发生冲突。尽管如此,我还是看到这种策略在几个大型机构(特别是大学)中使用,并采用了一些划分策略来避免冲突的可能性;例如,真实用户的主目录将放在/home/students/<studentid>
、/home/teachers/<username>
或中/home/staff/<username>
,而共享内容将放在 中/home/workgroup/<workgroupname>
。有时它们也可能是一个部门的分支;不过,你明白了。老实说,我个人不喜欢这种策略,但是当/home
分布在多个服务器之间(例如通过 NFS)时,它会让事情变得更容易,这就是为什么它在非常大的组织中往往是首选的。