Gue*_*OCs 2 command-line bash environment-variables software-installation
我知道我应该 apt-get 东西,但我问的是不存在的二进制文件,或者我需要最新版本的二进制文件。每次我搜索如何在 Ubuntu 上安装这些二进制文件时,都会得到不同的答案。当然,我可以将 bin 粘贴到 /bin 或我的 PATH 中已经存在的目录中,但是许多应用程序都充满了其他文件,因此这不是最好的方法。我经常看到说明告诉我在 PATH 中添加应用程序的文件夹,但是如果我使用这种技术安装 100 个应用程序会发生什么?我的 PATH 变量不会变得又大又乱吗?此外,我会将这个 PATH 传递给我打开的每个应用程序,我不认为这是在 Linux 中安装东西的更好方法。
那么,哪种方法是正确的呢?另外,如果这与PATH有关,那么将路径添加到PATH的正确方法是什么?我总是看到很多方法,我很困惑。
我想一劳永逸地结束这一切,因为我厌倦了以不同的方式安装东西,我想以正确和最优雅的方式来完成。
PATH用于您的 shell - 它告诉 shell 您输入的命令应该存在的位置。我曾经拥有的 OpenSUSE 盒子就是一个很好的例子。在 Ubuntu 上,您可以输入iconfig命令,bash 将显示“哦,我知道那在哪里 - 我将运行/sbin/ifconfig”。好吧,在 OpenSUSE default 上PATH,没有/sbin添加到它,所以bash会说“对不起,我不知道在哪里ifconfig,我没有此类文件的记录。” 因此,您必须运行/sbin/ifconfig(即完整路径)或以智能方式执行 - 添加/sbin到PATH.
您为什么想要这样做的一个很好的例子是当您安装自定义脚本或二进制文件时。假设您在/opt/my_stufffolder 中保存了一些内容,并且只想my_command按名称调用。好吧,您将不得不添加/opt/my_stuff到PATH.
基本思想是您希望将原始$PATH目录附加或加入新目录。您可能知道也可能不知道,PATH变量中的项目以:. 您还需要export变量,以便其他程序(您的 shell 的子程序)知道在哪里查找内容。所有的东西必须发生在年底~/.bashrc,所以,当你打开外壳,并已经阅读您的~/.bashrc配置,它知道这里的一切所在。
这是我的示例~/.bashrc:
export PATH=$PATH:"/opt/microchip/xc16/v1.25/bin"
Run Code Online (Sandbox Code Playgroud)
在这种情况下, original$PATH将扩展为一串目录。我们只需向其中添加一个,然后将其保存回来。没什么复杂的。
如果您从.deb存档或.run脚本安装文件,则不必担心这PATH部分。简化安装过程是软件作者的责任。通常,他们会配置他们的安装以将内容保存到已经属于的公共目录之一PATH:安装脚本会说,“嘿,将此软件安装到 /usr/bin` 中,您将能够毫不费力地使用它.
如果软件作者安装它的地方,这不是典型的PATH,他们将必须配置您的PATH变量或者你必须自己做。在上面的示例中,该目录/opt/microchip是在我安装 Microchip 的 IDE 和编译器时创建的。他们的安装程序会自动将该行放入我的~/.bashrc. 我经常编写进入 的脚本/opt,所以我通常在说明中提到用户必须自己配置PATH。
您经常看到人们建议将脚本和其他类型的软件保存到~/bin. 这个文件夹属于你 - 你的用户,所以如果你不想与你机器上的其他人共享应用程序 - 这就是你放置它的地方。不同的/opt是,正如我在一些地方已经提到的,/opt是中立地。因此,如果我作为系统管理员希望我的家人也可以使用他们的帐户访问应用程序 - 这就是我放置它的地方。
就bashshell 而言,它已经为您处理~/bin添加PATH。其他 shell,比如/bin/sh, or tcshor kshwon't do it,所以如果你在不同的系统上工作或者想在你的 Ubuntu 中使用不同的 shell,请记住这一点。
我经常看到说明告诉我在 PATH 中添加应用程序的文件夹,但是如果我使用这种技术安装 100 个应用程序会发生什么?我的 PATH 变量不会变得又大又乱吗?
不是真的 - 应该进入路径的是目录。如果您通常在单个目录(例如~/bin或/opt)中安装软件,则只需要添加/opt. 如果每个软件都有生活在自己的文件夹下/opt,然后是-你不得不增加每单之一PATH。但是,您可以做的是编写一个脚本,将所有目录添加到PATH. 所以,让我们说:
$ for item in /opt/* ; do
if [ -d "$item" ]; then
PATH="$PATH:$item"
echo "$VAR"
fi
done
Run Code Online (Sandbox Code Playgroud)
这可以作为 . 末尾的函数完美地运行~/.bashrc,这样每次打开 shell 时,都会/opt自动添加下面的所有目录。
在我的例子中,我写了很多脚本。它们都存在,~/bin因为它们都只是单个文件,并且不需要它们存在于单独的目录中。
此外,我会将这个 PATH 传递给我打开的每个应用程序,我不认为这是在 Linux 中安装东西的更好方法。
这就是export变量的用途。它将东西传递给 shell 的子进程。您作为用户无需执行任何操作。此外,正如我所提到的,它通常不会完成 - 软件作者创建的包进入已经在PATHlike /usr/bin.
不在其中的目录/opt只是一个中立的基础,也是开发人员说“嘿,我们的应用程序是第 3 方的一种方式,所以它不是默认的。”
此处未涉及的内容是.desktop文件。简而言之,这些是 Linux 版本的 Windows 快捷方式,但功能强大。假设我已经在 python 中构建了一个 GUI 应用程序,我希望它存在于/opt文件夹中,但我不希望用户从命令行调用它 - 我希望他们使用一个漂亮而整洁的桌面快捷方式。那么,这就是.desktop文件发挥作用的地方。下面是一个例子:
$ cat /home/xieerqi/.local/share/applications/vivaldi.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=?? mv - YouTube
Icon=vivaldi
Path=/home/xieerqi
Exec=/opt/vivaldi/vivaldi-bin --ppapi-flash-path --ppapi-flash-version --always-authorize-plugins --enable-npapi --no-first-run
StartupNotify=false
StartupWMClass=Vivaldi
OnlyShowIn=Unity;
X-UnityGenerated=true
Run Code Online (Sandbox Code Playgroud)
虽然vivaldi应用程序可以愉快地使用/opt而无需在 中引用PATH,但我可以使用.desktop快捷方式来启动它。同样,您需要为每个应用程序手动创建一个,但您可以猜到 Linux 甚至可以通过脚本编写方法来实现自动化。
那么在 Linux 上安装软件的真正正确方法是什么?没有,就像在 Windows 或 Mac OS X 上没有办法一样。您的 Windows 应用程序可以是单个.exe或一个文件夹,.exe并在C:\文件夹中完美地运行。同样在这里-在Linux上你可以有一个脚本或软件住在全套房/opt,或~/bin或任何你选择。当然,这些选择在某种程度上必须是合理的。您希望该应用程序root仅供您使用only还是共享?您希望仅通过其名称访问它,还是希望输入应用程序的完整路径?
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |