Dol*_*hin 12 linux file-management cache temporary-files
我正在构建一个命令行应用程序,我需要将一些临时数据保存到文件中。我不知道应用程序在基于 Unix 的系统(在我的情况下是 Ubuntu 12.0.4)上存储缓存的约定在哪里。
all*_*tic 13
“基于 Unix 的系统”过于笼统,无法做出任何适用于所有基于 Unix 的系统的普遍适用的决定。问题是文件系统结构(以及放置东西的“正确”/“传统”位置)在不同风格的“Unix”(如果你甚至可以称之为)之间有很大不同,你几乎必须处理它视具体情况而定。
几个例子:
答案是关于在任何操作系统上存储任何内容(无论是 Linux、BSD、Solaris、HP-UX 等的发行版)的规范的、社会可接受的、良好集成的约定取决于具体情况。具体来说:
apt-get
或yum
直接安装它,而无需从网站上下载安装程序?如果不考虑所有因素,就没有直接的答案。但是,特别是对于Ubuntu 12.04,如果您要将包构建到一个.deb
文件中以在 PPA 中分发或提交到 Ubuntu 自己的包存储库(main
或universe
),我建议缓存应存储在/var/cache
. 但这仅适用于 Ubuntu,您当然不应该假设每个发行版或基于 Unix 的操作系统都认为这是可以接受的。
此外,如果跨系统启动保存缓存数据没有任何优势,我认为它也可能属于 /tmp。
请注意,对于程序使用的每种类型的文件,您都会遇到这些路径约定问题:共享数据、可执行文件、库、帮助文件、图像、声音、网页等等。所以我想知道,如果您询问缓存文件,您打算如何处理其他文件类型。你只是在做一些幼稚的假设并希望没有人不同意你的看法吗?如果您没有阅读任何 Ubuntu 文档或标准建议将它们放在哪里,那么假设一件事或另一件事是个坏主意。例如,总是将库放在 /usr/lib 中可能是一个错误,因为根据情况它们可能属于其他地方。
此外,作为软件开发人员,我认为最负责任的做法是让最终用户决定将文件放在哪里。您可以设置默认值,但用户(和分销商)可以并且将会自定义构建以适合他们的发行版。
最简单的方法是使用GNU Autoconf构建您的程序。Autoconf 是一个构建系统,用户可以在其中将命令行参数传递给构建脚本,以更改各种“目录类型”的路径,使其远离默认值。几乎每个发行版都有一个用于每个 Autoconf 包的构建脚本,用于为每种类型设置适合发行版的常规目录。他们甚至有专门的缓存目录类型:sharedstatedir。