如何安装可执行文件


13

有时我会遇到不提供.deb.rpm仅作为可执行文件提供的软件。
例如,Visual Studio CodeWebStormKerbal Space Programm

对于这个问题,我将以Visual Studio Code为参考。

该软件以压缩包的形式提供。
解压缩时,我剩下一个名为的文件夹VSCode-linux-x64,其中包含名为的可执行文件Code
我可以Code在终端上双击或指向它/home/user/Downloads/VSCode-linux-x64/Code来执行它。
但是,我想知道是否有安装此应用程序的正确方法。

我要实现的是:

  • 我可以放置以这种方式提供的所有应用程序/软件的地方(可执行文件)
  • 终端支持(例如:这意味着:我可以vscode从终端中的任何文件夹进行写入,它将自动执行Visual Studio Code。

附加信息:

  • 桌面环境:Gnome3
  • 操作系统:Debian

编辑:
我决定给@kba答案,因为他的方法与我的备份解决方案配合使用效果更好。让脚本执行二进制文件使您可以添加参数。
但公平地说,@ John WH Smith的方法与@kba一样好。

Answers:


12

要通过名称来调用程序,shell会在$PATH环境变量中搜索目录。在Debian中,$PATH您用户的默认值应包含/home/YOUR-USER-NAME/bin(即~/bin)。

首先,确保目录~/bin存在;如果不存在,则创建该目录:

mkdir -p ~/bin

您可以将二进制文件符号链接到该目录,以使其可用于外壳程序:

mkdir -p ~/bin
ln -s /home/user/Downloads/VSCode-linux-x64/Code ~/bin/vscode

这样,您就可以vscode在命令行上或从命令启动器中运行。

注意:您也可以将二进制文件复制到$PATH目录中,但是如果二进制文件依赖于相对路径,则可能导致问题。

但是,通常,通常最好使用OS提供的方法(apt-get,deb软件包)或软件项目的构建工具来正确安装软件。这将确保正确设置从属路径(如启动脚本,手册页,配置等)。

更新:也反映了托马斯·迪基的意见Faheem米撒的答案是什么,我通常为软件做其视为与顶级二进制和期望一个压缩包从那里运行:

将其放置在合理的位置(按照standard-compliance的顺序/opt/usr/local或放置在主目录中的文件夹,例如~/build),并在更改为该位置并执行二进制文件的$PATH位置(例如/usr/local/bin~/bin)中创建可执行脚本包装器:

#/bin/sh
cd "$HOME/build/directory"
exec ./top-level-binary "$@"

由于这可以模拟到该目录的更改并手动执行二进制文件,因此可以更轻松地调试问题,例如不存在相对路径。


1
我喜欢这种方法。就个人而言,我只是将一个别名放入bash配置文件中,尽管如果您使用了很多程序,它会很快变得混乱。
WorBlux

1
然后只能从外壳中使用它。在某些时候,您可能想安装一个.desktop从菜单开始的条目,或者添加配置,发现命令行标志等。别名非常不灵活。
kba与莫妮卡站在一起

8

TLDP称/opt可能是此类软件的好地方。我自己使用它来存储一些与打印机有关的工具,然后使用Skype的“动态”版本(如kba所说,可以通过相应地设置PATH变量来实现“终端支持” )。

更一般而言,我倾向于使用/opt“安装”打包为可执行文件的专有软件,但这可能只是我一个人。此外,我倾向于避免使用此类软件,因为通常我不确定运行该软件后会做什么。

我之所以选择的另一个原因/opt是,它通常用于第三方的独立代码,该代码不依赖于其/opt/'package'目录(以及其他opt目录,例如/etc/opt)之外的任何文件。

在任何情况下,除了必须位于文件系统树内特定位置才能正常运行的那些软件包文件之外,在/ opt,/ var / opt和/ etc / opt层次结构之外都不会存在其他软件包文件。[...]通常,支持系统上的软件包所需的所有数据都必须存在于/ opt /'package'中,包括打算复制到/ etc / opt /'package'和/ var / opt /'中的文件包”以及/ opt中的保留目录。

发布源代码的一个优势是,人们可以配置编译过程,并根据系统的具体情况提供自定义的库/标题路径。当开发人员决定将代码发布为可执行文件时,这种优势就会丧失。恕我直言,这时,不再允许开发人员假定他/她的程序的依赖项将可用(这就是为什么所有内容都应与可执行文件一起打包的原因)。

这里要安装的任何软件包都必须在单独的/ opt /'package'或/ opt /'provider'目录树中找到其静态文件(即,额外的字体,剪贴画,数据库文件)(类似于Windows的安装方式)新软件到其自己的目录树C:\ Windows \ Progam Files \“ Program Name”),其中“ package”是描述软件包的名称,“ provider”是提供商的LANANA注册名称。

欲了解更多信息,我还建议阅读本了其它的U&L的问题,这与悫差异的交易/opt/usr/local/usr/local在这种情况下,我个人会避免使用,特别是如果我不是构建要安装的程序的人时。


6

像您在Visual Studio Code的示例中那样,完全有可能并且实际上很容易从二进制zip存档或tarball创建分发二进制包。

是的,Linux发行二进制程序包(如debs和rpms)通常是从源代码生成的,但并非必须如此。并且经常(尽管并非总是)可能安排事情,使得最终的分发二进制软件包将事情安装在“正确的”位置以符合分发策略。

对于随机专有的tarball,如果有一种方法可以正确安装软件,例如在makefile中安装目标,则可以将其与分发包装机一起使用。否则,这可能涉及“手动”将文件映射到“正确”的位置,这可能需要很多工作。尽管创建这样的软件包看起来很奇怪,但它仍然具有软件包管理的主要优点之一,即干净安装和卸载。当然,这样的软件包永远不会被任何具有该名称的Linux发行版所接受,但这不是您的问题。


的确如此:当您只想在本地系统上可靠地运行某些非打包,非标准构建的软件时,创建Debian软件包可能会导致IMHO严重受损。
kba与Monica站在

宣言:在撰写本问题期间,没有牛被剃光。
Faheem Mitha

@FaheemMitha-您可以用轻松地剃牛fpm
鹿猎手

@DeerHunter我听说过那个。你用过吗?
Faheem Mitha

1
@DeerHunter的确,好一点,几年前我已经使用fpm为一个项目构建跨平台的二进制包,这确实很容易。
kba与莫妮卡站在一起

3

我很少见过以二进制可执行文件形式提供的软件,而别无其他,我会对此有些怀疑。如果没有其他要求,我至少会期望README(附带安装说明)和一个LICENSE陪同它。话虽如此...

不保存由发行版的程序包管理器管理的本地安装二进制文件的通常位置是/usr/local/bin。您可以将其放在此处,并且由于该目录已经存在(或应该存在),因此$PATH可以在命令行中键入其名称来运行该软件。

通常,该软件还应该有一个联机帮助页(未记录的软件不好,对吗?),/usr/local/man并且可能包含一些支持文件,例如翻译成其他语言的文件和可能在/usr/local/share或中出现的插件/usr/local/lib,等等。因此,并非以软件包形式提供的软件(例如通常没有附带的软件包.deb.rpm安装程序附带的软件包)会将所有内容放置在正确的位置。从源代码安装时,通常是make install


Visual Studio Code的情况下,它具有77个LICENSE文件,这些文件分散在目录树中。顶层Code只是起点。运行时(64位可执行文件并不手头的机器上运行它可能会显示许可证,但有人应验证之类的事情提供了很好的答案寻址OP的实际问题。
托马斯·迪基

感谢@ThomasDickey的澄清。我相信我误解了OP的确切情况。我以为他们收到的唯一东西是一个ELF可执行文件(用压缩文件包装)
Celada

否-我快速浏览了一下(不在我的待办事项上...),它有1500个文件。只需看一下OSX,就可以运行,并从Web浏览器的教程开始。@kba的答案部分有用,尽管通常,我会尝试将其解压缩,/usr/local而不是我的主目录。(并非所有程序都能正常工作- Eclipse例如)。
Thomas Dickey
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.