Linux 中的文件名和 ./filename 有什么区别

jus*_*ime 10 linux shell path filenames

filename和 和有./filename什么区别?在什么情况下一个比另一个更受欢迎?

Dev*_*lar 18

对于数据文件,它没有区别 - 两个语句都将引用当前目录中的数据文件。(例如,cat filenamecat ./filename在语义上是相同的。)

如果有问题的文件名指的是可执行文件,即是您在命令行上键入的第一个(甚至唯一的)内容,则情况不同。./filename将在您的当前目录中查找可执行文件,而不会在其他任何地方。filename,另一方面,将评估环境变量PATH,并filename在其中存储的每个目录中查找(可能包括也可能不包括您的当前目录)。

./filename/path/to/filename因此,当您想要执行特定的可执行文件而不是在 PATH 中找到的第一个可执行文件时,首选(或任何其他)。


Den*_*son 6

如果您正在运行一个程序,则filename表示运行在您$PATH的目录中找到的第一个程序,第二个表示运行当前目录中的程序。

如果您将该文件名用作程序的参数,如 indo_something filename或 ,do_something ./filename则它们的含义相同。


Iva*_*hev 5

你指的是命令执行,对吧?

有一个环境变量PATH包含一些系统目录,以分号分隔。当您键入时command,系统会按照指定的顺序在这些目录中查找,以查找名为 <command> 的可执行文件,如果找到,则尝试执行它。您可以通过echo $PATH在 bash 中查看您的 PATH 。例如:

$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/ivanatora/bin:/usr/local /kde4/bin:/usr/local/kde4/bin

当您键入时,./filename您正在指定确切的路径:当前目录。您可以看到当前目录很少在您的 $PATH 中(出于安全原因)。因此,如果要从当前目录执行文件,请使用./filename.

要按路径执行文件(特别是如果它不在 $PATH 中),您还可以键入<path>/file,例如:

/sbin/ifconfig