我想创建一个系统范围的目录,其中包含应用程序特定的(读写)数据(如日志文件、配置和其他应用程序特定的元数据)。
在阅读了更多有关 Linux 文件系统的内容后,我考虑使用/var/app_name/
,但后来我发现,某些子目录是临时的(在重新启动期间不会持久,例如run
、log
、tmp
)。
这有多重要?我的意思是,我应该使用另一个目录(例如/home/app_name/
)还是使用/var/app_name/
就可以?
答案1
来自文件系统层次结构标准:
应用程序通常不得将目录添加到 /var 的顶层。仅当此类目录具有某些系统范围的含义时才应添加,并且应咨询 FHS 邮件列表。
您应该使用/etc/app_name/
它来存储程序的配置文件和其他内容,并/var/log/app_name/
存储其日志文件。
对于应用程序使用的数据,您可以存储:
- 在
/var/lib/app_name/
持久数据和元数据中 - 在
/var/cache/app_name/
任何可以安全删除的应用程序缓存中 /var/spool/app_name/
在等待处理的数据中
确实不使用 /home/app_name/
保留给用户的 homedir应用程序名称。如果您的程序需要创建一个特定的用户来运行,那么这就是它的位置。
关于评论中的问题:Linux 不会自动删除您放入的任何内容的旋转日志/var/log/
。事实上,系统管理员经常遇到相反的问题,即日志填满了所有空间......因此,由您决定删除或轮换日志文件;这是通过logrotate
自定义 cron 作业完成的。
答案2
它应该可以安全地用于/var/app_name
存储名为 的应用程序的持久数据app_name
。
例如,在我目前使用的系统上,PostgreSQL 和 MySQL (MariaDB) 的默认数据库目录是/var/postgresql
和。/var/mysql
/var/tmp
应该仅用于临时文件,但系统不太可能清除此目录(例如,在重新启动时,与 不同/tmp
)。 /var/run
最常用于存储 PID 文件和命名套接字。
我会避免最常与个人帐户目录相关的内容/home/app_name
。/home
也可以看看:https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
应用程序可以选择将其配置文件存储在 中/etc
,将其日志文件存储在 中/var/log
,将数据存储在 中/var/app_name
。在我上面用作示例的 PostgreSQL 和 MariaDB 中,它们将除系统启动挂钩之外的所有内容都存储在/var
.