我怎么知道在Linux的什么地方放东西?


58

在Windows中安装某些东西只需单击一个按钮。但是每次我尝试在Linux中安装某些在APT中找不到的东西时,我都会感到困惑。

您下载了一个压缩文件夹,然后呢?如果您很幸运,可以找到自述文件,请参考一些文档,如果您很幸运,这可能会对您有所帮助。

当“安装” APT中没有的扩展程序和应用程序时,魔术是什么?

我爱linux,但是这个问题每天困扰着我。



8
无关。但是,简单的技巧是永远不要在软件包管理系统之外安装任何东西。
Let_Me_Be 2011年

1
如果不是APT提供的,则可能不是您可以直接安装的东西-您需要自己编译并安装。然后,它将开始与基于APT的软件包混淆。尽可能地根据需要找到APT / .debs是最简单的。
Rup

2
@Rup Plus如果某个软件没有deb软件包,则您可能不应该安装它,因为它已被弃用,功能不完善或与基于apt的发行版不兼容。
Let_Me_Be 2011年

3
获得足够的构建/安装软件经验后,就可以创建自己的软件包。请确保向上游提供商提供反馈!
jsbillings 2011年

Answers:


32

如果它是服从一个软件系统层次标准比你应该把它/usr/local和相应的子目录(如binlibshare,...)。

其他软件应放在自己的目录下/opt。然后,将PATH变量设置为包括bin目录或包含可执行文件的目录,或者创建指向的符号链接/usr/local/bin


1
的确是个好答案,但不必每天都这样做。
phunehehe 2011年

1
@phunehehe-您每天都必须这样做吗?
罗布

3
不,我指的是OP的“这个问题每天困扰着我”。
phunehehe 2011年

1
除了FHS的Wikipedia链接外,还请阅读以下内容:pathname.com/fhs/pub/fhs-2.3.html。阅读“目的”部分。
yasouser 2011年

27

这个问题没有简单的答案,但是我可以概述一下它的工作原理:

作者(“上游”)以源代码形式提供了大多数Linux软件。这使拥有适用于其特定平台和系统配置的编译器的每个人都可以下载源代码并自己进行编译。不幸的是,许多程序依赖于其他程序和软件库提供的功能(依赖项)。

Windows软件通常以预编译形式提供。这意味着所有Windows计算机都有一个通用的可执行文件,并且依赖关系通常随安装包一起提供。

Linux发行版采用源代码,为您进行预编译,然后将其作为软件包提供给您。软件包不包括依赖项,但它引用了依赖项,并迫使软件包系统也安装了依赖项(有时可能会导致混乱,您可能已经体验过)。

如果没有预编译的软件包,则您始终可以下载源代码并自己进行编译。大多数情况下,以下方法会起作用:

./configure
make
(sudo) make install (or sudo checkinstall)

./configure行设置了编译过程的阶段(如果不满足依赖关系,则会吐出错误)。make行将执行Makefile,这是一个编译程序所有部分的脚本。

传统上,您将使用make install来安装软件。这通常会将可执行文件放在/ usr / local / bin中。

由于您使用的是apt,因此我非常建议您使用checkinstall。您可以使用它代替make install,它将为您生成一个.deb软件包。这使以后轻松删除软件变得容易得多。

注意,还有其他一些编译系统,例如cmake。某些软件已经预编译但未打包(在这种情况下,您可以从解压缩的文件夹中直接启动它);某些软件作为脚本的集合提供,您必须自己运行。SVN中的新鲜代码有时没有配置脚本,因此您必须首先运行autoconf工具链...等等,等等...您会看到该规则有很多例外,但是只要有一点经验,您就可以告诉该如何处理大多数这些神秘的下载内容。Configure-Make-Checkinstall是一个不错的开始。

PS。花一两个周末来学习如何编程,事情就会变得很明显:-)

PPS。您可能想知道为什么Linux软件作者不仅仅提供预编译的软件包,还没有提供源代码。好吧,他们有时这样做。但是不同的平台和Linux发行版都有各自的软件包格式和文件系统规则,因此,作为开发人员,您必须为每种可能的配置提供软件包-这很痛苦。Ubuntu软件包通常是最容易找到的-您应该了解PPA是什么以及它是如何工作的!


1
“ PS。花一两个周末来学习如何编程,然后事情就会变得很明显:-)”。错误的建议,否则将是一个很好的答案。要求人们进行编程以了解Linux,就像航空公司的乘客修理飞机一样。
apoorv020 2011年

无需编程,只需更改它即可编译自己的linux,例如LFS(从头开始的linux)linuxfromscratch.org
jsolarski 2011年

@apoorv,要点。:)
sebastian_k

4

您应该签出checkinstall。代替

./configure
make
sudo make install

你做

./configure
make
sudo make checkinstall

并且您将能够像通过apt安装该软件包一样来管理该软件包。


糟糕,只是注意到@sebastian_k已经提到过checkinstall ...哦!
mgalgs 2011年

1

有一个合理的,合理的原因,这是如此令人困惑(还有令人讨厌的工件原因)...

Unix具有多用户的历史,大多数用户无权在他们被授予特定访问权限的区域之外安装应用程序。

因此理论上是,您将在主目录中构建一些内容,然后将其复制到您可以控制的区域(您自己的项目区域或共享区域)中。

Windows PC通常是单用户系统,没有此约束,无论如何,一切都存储在Program Files中。

然后是一个愚蠢的烦人的事实,即每次发行新版本的Unix时,创建者都认为有必要更改位置,但是旧版本必须仍然存在自动脚本。这为您提供了一堆用于相同目的的链接目录。

初始化系统甚至更糟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.