特定文件类型的最佳默认位置是什么?

特定文件类型的最佳默认位置是什么?

对于我创建的应用程序,我正在尝试找到最佳文件夹位置。我按照文档的建议安装了该应用程序,将文件/usr/share/company_name/product_name保存config.ini在用户主目录中的隐藏文件夹中,并将用户创建的文档保存在用户主目录中。

该应用程序需要其他资源:

资源数据库(其内容可以通过代码修改,但建议用户不要进行外部访问)

资源数据库必须是公用的,并且可供所有用户访问,因此它不能位于用户主目录中。它也不能位于隐藏目录中,因为程序可以使用浏览器窗口来定位它并更改其位置。

我本来想把它放在一个“众所周知”的文件夹中,比如/var/opt- 但是当我尝试通过代码打开它时出现错误,命令如下

FILE *resource = fopen(path, "r+");

什么是资源的最佳位置,预先安装,非只读,所有用户可访问并可通过代码修改,不隐藏(应该能够浏览它)?

更新:我能够/srv/MyCompany/MyProduct通过下面答案中提供的链接放置我的资源。

我希望这是一个好位置?

答案1

配置文件的处理在XDG 基础目录规范

它定义了一组相关的路径环境变量,如XDG_CONFIG_HOMEXDG_CONFIG_DIRS,例如,定义.config目录的默认位置,以及如何以其他各种受控方式处理它。

显然,这种形式非常常见~/.config/product_name,当它只涉及公司的一种产品时,~/.config/company_name实际上并没有什么不同。
但假设有多种产品——我认为这种结构
~/.config/company_name/product1…… 很有意义;~/.config/company_name/product2

我不知道这些或相关标准中是否有描述。但 XDG 标准可能会将其视为普通的产品目录,只不过它将公司的整个软件集视为一个产品。


文件系统层次结构的一般标准用法在Linux 文件系统层次结构

作为应用程序本身的位置,请查看目录;您可以在etc 或etc/opt中安装该应用程序,根据标准,这两种方式都是正确的。 /opt/company_name/product1/opt/product1

您自己发现/srv目录可能是一个不错的选择。
我同意这是正确的解决方案 - 所以我在这里描述如何将其作为答案:

该目录/srv类似于/opt- 标准没有过多说明子目录结构,您可以使用与上述相同的分隔方式。
虽然/opt明确用于只读应用程序代码,如可执行文件、静态数据文件和文档,但/srv对数据的可变性没有太多限制;它甚至允许混合具有不同访问权限和可变性的文件。
例如,可以在那里部署可以由系统用户就地更改的文件。

Linux 文件系统层次结构:1.19

  This main purpose of specifying this is so that users may find
  the location of the data files for particular service, and so that
  services which require a single tree for readonly data, writable data
  and scripts (such as cgi scripts) can be reasonably placed. Data that
  is only of interest to a specific user should go in that users'
  home directory.

  The methodology used to name subdirectories of /srv is unspecified as there
  is currently no consensus on how this should be done.

要管理需要所有软件用户写入的数据的访问权限,您应该使用分配给包含所有用户的组的权限。
即使“该计算机的所有用户”都属于该组,情况也是如此 - 有许多系统用户不应该能够写入数据;攻击者可能会访问其中一个系统用户帐户。

相关内容