当处理需要由多个用户访问的源代码(例如,Python 项目)时,是否有一个标准的位置来保存这些项目?
我发现这个答案这建议/usr/local/
安装应用程序,但我不确定这是否是保存正在进行的编程项目源代码的合适位置。
答案1
FHS 中没有为此目的分配标准目录,但您可以在/opt
.只需为其分配模式 770 并将用户放入适当的组中即可。
但是,我高度建议您为此类活动安装版本控制系统,例如git
.通过这种方式,git 将处理源存储库,每个开发人员将在其 homedir 中的私有存储库中工作。
答案2
您提到的答案讨论的是程序的安装,而不是用户之间的数据共享。无论这些数据最终是 Excel 文件、大量电影还是本地开发的源代码,都不应该将其放在/usr
.也同样如此/opt
。
目录/usr
以及所有目录/opt
都/var
具有非常明确定义的使用语义,在名为文件系统层次结构标准(或简称 FHS)的文档中定义。最新版本托管在那里:http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html。尊重这种语义很重要,因为您的操作系统(或者更具体地说,您的 Linux 发行版中包含的几个程序,以及您可能自己安装的其他程序)对于这些目录的使用有特定的行为。例如,如果您在下面创建一个子目录,/usr/share
并且发现该目录的名称与您稍后尝试安装的程序的名称冲突,则安装程序可能会覆盖、更改、重命名或删除该子目录。该目录的内容。如果这样更容易理解,请考虑将团队的数据文件放在基于 Windows 的计算机下/usr
或/opt
相当于将它们存储在基于 Windows 的计算机下C:\Windows\
或之上。C:\Program Files
需要注意的一件事是 FHS解决需要在多方(例如本地站点、发行版、应用程序、文档等)之间协调文件放置的问题。 FHS 不会尝试为您可能遇到的每种情况制定规则:本地文件的本地放置是本地问题(FHS,第 1.1 节)。
回到你原来的问题,让我们考虑一些可接受的选项:
/home/<projectname>
或/home/<someprefix>/<projectname>
— FHS 表示:/home
是一个相当标准的概念,但它显然是一个特定于站点的文件系统。绝对不要求下面的每个目录/home
都是实际用户的名称;因此,为组或项目创建子目录是可以接受的,尽管这样做需要一些手动预防措施,以避免最终的冲突(如果创建的新用户的名称与现有项目的名称相匹配)。/srv/<projectname>
或/srv/<someprefix>/<projectname>
— 根据 FHS,/srv
包含由该系统提供的特定于站点的数据。 FHS 然后继续解释说用于命名 /srv 子目录的方法未指定,并给出了一个示例,包括/srv/compsci/cvs
(这很可能是 CVS 存储库本身计算机科学工作小组)。根据我个人的经验,大多数利用该/srv
目录的管理员都会使用每个客户端、每个站点或每个项目的子目录(或者有时,每个客户端然后每个项目的子目录),然后将数据目录放在该子目录中等级。/<someprefix>/<projectname>
或者/media/<volumename>/<someprefix><projectname>
— 老实说,我不知道为什么这个选项在 Linux 世界中很少被提及,但让我们澄清一下:这确实是你的系统,并且 FHS 表示您可以自由地在根级别创建新目录,只要不与任何已确定语义的内容发生冲突即可。例如,您可以创建一个目录/projects
或/team
根据您认为合适的方式在其中组织文件。我知道一些管理员更喜欢将它们与文件系统的其余部分隔离,因此安装一个不同的卷(在 下/media/volumename
)。回到 Windows 的类比,这类似于直接在下面创建一个新目录C:\
或设置一个不同的卷,例如D:\
;两种策略都应该听起来不错可以接受对于大多数管理员(尽管对其中一个或另一个选项的偏好不同)。
就我自己而言,我更喜欢在/srv/<client>/<project>/
所有业务服务器上建立一个结构,因为它可以轻松地配置给定项目的所有服务。在这些目录之一中,我通常会同时拥有面向服务和面向功能的子目录;例如,我可能有etc
, htdocs
, logs
, git
...git
目录本身是根据 git 存储库的名称进行细分的(也就是说,我可能有一个项目的多个 git 存储库)。