Answers:
“基于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。
gem
工具在该目录中安装了gem 。但是,可能不太适合在运行时在gem所下载的应用程序所在的目录中创建文件。另一方面,如果您以用户身份运行应用程序,则需要一个对用户可读写的目录,这意味着可以更改权限(这需要在安装时进行更多的系统集成工作,例如创建组)等等),或使用全局读写目录,例如/ tmp。
/usr
,/lib
或者/bin
从您的应用程序。
/tmp
文件夹。您的问题的答案将是(下载,不,不,不,不,不,不)。对于大多数人来说,似乎很正常的结论是,/tmp
但是我对UNIX系统是陌生的,而基于ubuntu os的约定对我来说并不陌生。这为gem提供了一个有趣的想法,以允许使用不可知的磁盘缓存(用户不可知)。谢谢,我+1。