以下有什么区别
./executable
和executable
。为什么有时某些可执行文件(非 Linux 命令)不需要./
?
如果我通过 makefile(物理代码)安装了可执行文件,如何删除它并安装更新版本?删除rm
代码就足够了吗?在这种情况下,可执行文件的执行无需./
答案1
在 UNIX 环境中(甚至在 DOS、Windows 等其他系统中),shell 会在某些目录中查找可执行文件。在 Unix 环境中,它在PATH
变量中定义。PATH
执行以下命令可以看到变量中的目录:
$ echo $PATH
结果将类似于:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
正如您所看到的,该变量是由冒号分隔的目录列表。当您运行命令时,例如ls
,系统将在列表的第一个目录中搜索可执行文件(在示例中为/usr/local/sbin
)。如果找不到ls
此处指定的文件,它将尝试下一个目录,直到找到为止。因此,如果您的ls
命令位于/usr/bin
,它将执行。或者,如果 shell 在任何地方都找不到命令,您将收到命令未找到错误。
但是,还有其他方法来调用可执行文件。假设您有两个程序,分别命名ls
为 中的两个目录PATH
,并且您想要运行第二个程序。执行此操作的方式可能是 running /usr/bin/ls
,因此您可以指定所需的方式。
这.
是当前目录的快捷方式。因此,如果您位于/home/user
,./configure
是 的快捷方式/home/user/configure
。
PATH
您可以通过查找文件所在位置并将其删除来从中删除文件。但是,您可能更喜欢通过包管理器管理安装到系统中的二进制文件,包管理器在大多数现代发行版(如 rpm、dpkg、pacman 等)中都可用。如果 Makefile 创建了多个可执行文件,则通过这种方式删除它们会更容易(另外,makefile 可能会创建一些库文件和其他一些东西,这就是为什么使用包管理工具更容易)。有时Makefile可能会带来卸载例程(即make uninstall),但我不确定它发生的频率。如果您通过新的 makefile 更新程序,新的 makefilemake install
可能会替换旧的二进制文件,但不能保证这一点。
您始终可以通过运行来找出某个命令的可执行文件是什么which
。例如,如果您想知道ls
在哪里:
$ which ls
/usr/bin/ls