在Windows(尤其是旧版本)下,程序在其C:\Program Files目录中存储配置文件和非恒定数据是很常见的。这是从通常在单用户,非网络,非文件权限的DOS下安装和运行程序的方式得出的。
从安全角度来看,这是一个坏主意。可执行代码所在的位置应与可修改的数据分开。这样,更容易应用适当的文件权限来防止未经授权的用户修改已安装的二进制文件。同样,可能与主要可执行文件分开更新的库目录也应该位于单独的目录中。
随着Vista和UAC烦恼的到来,这一传统终于开始严重失去吸引力。
UNIX和Linux早已是多用户系统,因此倾向于更早地将可执行目录与其他目录分开,因为有必要防止除root以外的用户修改已安装的二进制文件。这也是有时/usr甚至/sbin有时是单独的分区的原因-一个特别注重安全性的管理员可以以只读方式挂载这些分区,并在需要进行安装/卸载时以读/写方式重新挂载它们。
软件包通常是从软件包管理器安装的。有各种软件包管理器,例如aptitude(Debian和派生发行版),yum(Redhat和派生发行版),pacman(忘了这是哪个发行版...)等等。
程序包管理器使您可以浏览存储库,下载,安装,查询和删除软件,就像一个复杂的(免费的)“应用程序商店”。它负责确保照顾到依赖项并跟踪当前安装的内容。
通常,程序包管理器还将允许对您从任何存储库外部手动下载的程序包执行相同的操作。如果要使用自己制作或编译的软件来创建自己的工具,也可以使用工具。
由于包本身不是可执行文件,因此您不必运行不真正知道其作用的不受信任的可执行文件。(Windows最终通过分发.msu而不是s来进行更新.exe-但.msi已经存在了一段时间...)
rpm,则可以使用rpm -q --whatprovides来查找特定文件的软件包名称,然后rpm -q -a找出软件包安装了哪些文件。