it-swarm.cn

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

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

79
aneuryzm

如果您只输入export PATH=$PATH:</path/to/file>在命令行中只会持续整个会话时间。

如果要永久更改,请添加export PATH=$PATH:</path/to/file>到您的〜/ .bashrc文件(只需在末尾就可以了)。

55
oadams

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

此程序是您从源代码编译的下载程序吗?

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

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

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

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

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

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

24
Michael Shaw

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

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

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

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

17
Shawn J. Goff

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

  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的恶意软件二进制文件。

6
Riccardo Murri

PATH的困扰使您可以错误地运行恶意程序。标准是在/usr/local下安装“本地”内容(请参阅 [〜#〜] fhs [〜#〜] ),这将Unix用法编纂为:有点过时了,但它给出了基本原理。),/usr/local/bin通常在所有用户的PATH中。

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

1
vonbrand