Linux 中已安装的软件存储在哪里?

Linux 中已安装的软件存储在哪里?

可能重复:
典型的 Linux 程序安装在哪里

我是 Linux 新手,想多问一些有关软件包的问题。

在 Windows 中,我会下载一个.exe文件并进行安装。安装时,我会定义应用程序的存储路径。在该文件夹中,我拥有应用程序所需的所有文件。

yum但是,当我使用或在 Linux 中安装软件包时apt-get,我不知道软件包安装到哪里以及该应用程序所需的文件存储在哪里。我看到大多数配置都在目录中/etc。但是为什么 Linux 将应用程序所需的文件存储在不同的目录中?

有人能告诉我软件包是如何安装的,以及它们存储在哪里以及如何存储吗?如果我对软件包管理的理解有误,请纠正我。

答案1

正如您已经注意到的,许多程序(二进制文件/脚本)最终都位于/bin/usr/bin与其他部分一起位于各种配置目录中(通常在/下)。etc

对于任何特定命令,您可以检查哪里

whereis prog_name

它会告诉你这个命令在哪里。你也可以尝试哪个

which prog_name

此外,图表和解释/例子可能会有帮助。

答案2

yum您可以通过执行以下操作获取给定包安装的文件列表:

yum install yum-utils

然后你可以像这样运行它:

repoquery --list yum-utils

(显然,将第二个中的“yum-utils”替换为您想要查看其文件列表的包的名称。)

对于apt-get,您可以使用:

dpkg -L package-name

答案3

在 Windows 中,尤其是旧版本中,程序通常会将配置文件和非恒定数据存储在其C:\Program Files目录中。这源于程序通常在单用户、非网络、非文件权限 DOS 下安装和运行的方式。

从安全角度来看,这不是一个好主意。可执行代码所在的位置应与可修改数据分开。这样更容易应用适当的文件权限,以防止未经授权的用户修改已安装的二进制文件。同样,可能与主可执行文件分开更新的库目录也应位于单独的目录中。

随着 Vista 和 UAC 烦恼的出现,这一传统终于开始严重失去吸引力。

UNIX 和 Linux 从很早以前就是多用户系统,它们倾向于将可执行文件目录与其他目录分开,因为需要防止 root 以外的用户修改已安装的二进制文件。这也是为什么有时甚至会使用/usr单独/sbin的分区 - 特别注重安全的管理员可以以只读方式挂载这些分区,并在需要进行安装/卸载时以读/写方式重新挂载它们。

软件包通常通过软件包管理器安装。有各种软件包管理器,例如aptitude(Debian 及其派生发行版)、yum(Redhat 及其派生发行版)、pacman(忘记是哪个发行版了...)等等。

软件包管理器可让您浏览存储库、下载、安装、查询和删除软件,就像一个复杂的(免费的)“应用商店”。它负责确保依赖关系得到处理并跟踪当前安装的内容。

通常,包管理器还允许对您在任何存储库之外手动下载的包进行相同的操作。如果您想使用自己制作或编译的软件创建自己的包,也可以使用工具。

由于软件包本身不是可执行文件,因此您不必运行不受信任的可执行文件(因为您并不知道它到底起什么作用)。(Windows 最终通过分发.msu而不是来进行更新.exe- 但.msi已经存在一段时间了...)

答案4

在 Linux/Unix 中,大多数程序通常不会放在一个目录中,而是将其不同部分(可执行文件、配置文件、日志文件、文档、其他资源)分散在文件系统中 — — 通常通过符号链接。维基百科文章更详细地描述了正常文件系统层次结构下的标准目录结构,展示了不同的目录以及您可以在每个目录中找到的内容。

相关内容