需要 ```./``` 的可执行文件与不需要它的可执行文件之间有什么区别?

需要 ```./``` 的可执行文件与不需要它的可执行文件之间有什么区别?

以下有什么区别

./executableexecutable。为什么有时某些可执行文件(非 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

相关内容