如何使程序在任何地方都可执行


74

如果我希望能够运行给定程序而无论当前目录如何,该怎么办?我应该在/bin文件夹中创建一个指向程序的符号链接吗?


5
不,您应该使用外壳程序的PATH变量。
msw

7
我认为可以创建一个个人~/bin/文件夹,在您的路径中添加THAT,然后在该文件夹中创建符号链接,以指向要从任何位置执行的任何内容。
frabjous

1
您也可以使用要执行的二进制文件的完整路径设置别名。
datasmurf

Answers:


52

如果仅export PATH=$PATH:</path/to/file>在命令行中键入,它将仅持续整个会话时间。

如果要更改它,则将其永久添加export PATH=$PATH:</path/to/file>到〜/ .bashrc文件中(只需在末尾即可)。


11
谢谢工作。对于像我这样的新手,请记住省略尖括号<>。像这样:$ PATH:/ your / file / path
SAm 2015年

4
也不要在路径中包含程序文件名本身。
奥利·尼米塔洛

23

简短的答案是,要运行该程序,无论您使用什么目录,都需要在搜索路径中包含该程序的目录。可以通过将程序放入该路径中已经存在的文件夹中或将新文件夹添加到该路径中来解决该问题,无论哪种方法都可以。最佳答案取决于:

该程序是您从源代码编译而来的已下载程序吗?

它很可能已经具有安装机制。在以根用户身份编译程序的文件夹中,运行“ make install”

该程序是否为您要下载的程序,可以作为计算机上标准程序的一部分使用?

将此类应用程序放入标准文件夹中很有意义。对于此类程序,通常使用/ usr / local / bin等目录。您将需要root用户访问权限才能执行此操作。

这是您为自己编写的程序,并且/或者您在计算机上没有特殊特权。

在主目录中创建一个名为“ bin”的文件夹,并将程序放在该文件夹中。您可能需要编辑登录脚本以将完整路径添加到此文件夹(例如/ usr / home / jeremy / bin)

尽管您可以仅将其当前目录添加到搜索路径,但是您必须继续对每个新程序执行此操作-从长远来看,这将需要更多工作。


15

/bin出于多种原因,最好不要在目录中放置指向该文件的链接。

  • 如果实际的可执行文件位于某些用户看不到或无法执行的位置,则他们会将其视为错误的链接或功能失调的程序。
  • /bin目录是应该保留其所需的运行系统程序(之类的东西chmodmkdir等等)。

您实际上可以将可执行文件放置在/usr/bin/甚至/usr/local/bin/。当然,您已经在那时手动安装了该程序。您的发行版将不会像其他程序那样跟踪它-您必须在必要时手动升级它,并在需要时手动删除它。另外,您还必须知道它所依赖的程序包(听起来您已经在使用该程序了,所以已经解决了,但总的来说……)。

除非我设置一个我希望其他用户使用的程序,否则我通常不会这样做:我仅在主目录中为我创建一个bin目录,然后编辑shell配置文件以添加~/bin/到我的PATH环境变量中。我发现跟踪以这种方式安装的程序更加容易,因为它与系统的其余部分是分开的。


6

如果要foo在shell当前所在的目录中运行命令,则基本上有两个选择:

  1. 键入./foo在shell提示符。

  2. .目录(.是“当前目录”的名称)添加到PATH环境变量;如何执行此操作取决于您使用的shell:

    • 对于您编写的Bourne型shell(bash,zsh,ksh等)(有关更多信息,请参见此):

      export PATH=$PATH:.
      
    • 对于您编写的csh型shell(tcsh,csh)(有关更多信息,请参见此):

      set path = ( $path .)
      

请注意2.在多用户系统上存在安全风险:想象您cd要建立目录,/tmp并且恶意用户在其中创建了一个名为的恶意软件二进制文件ls


2
是的,我认为选项可以告诉您Unix让您执行操作,这被认为是不好的做法。添加。通向您的路径还会产生其他通常不好的副作用。
Unix管理员

1

混乱使PATH您可以错误地运行恶意程序。标准是在以下位置安装“本地”内容/usr/local(请参见FHS,该内容编纂了Unix的用法:虽然有些陈旧,但给出了基本原理)。/usr/local/bin通常PATH对于所有用户而言。

我的“本地安装”程序位于$HOME/bin,以标准方式设置,由./configure --prefix=$HOME ...加上一些(bash)别名来选择,例如在系统1上自建的git(PATH最后找到非冲突的git)。

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.