Answers:
在Linux,UNIX和相关的操作系统中,.表示当前目录。由于您想在当前目录中运行文件,而该目录不在您的目录中$PATH,因此需要./告诉外壳可执行文件在哪里。因此,./foo意味着运行foo此目录中名为的可执行文件。
alias可能会阻碍您发展的因素,而不仅仅是$PATH。
.那么它将是一个安全问题,ls例如,您或其他人可以替换(一个简单的病毒/木马:制作一个zip文件,其中包含可执行文件ls,因为有人正在搜索,他们运行此可执行文件,即…)。如果.最后搜索,那么您可能会花很长时间疯狂,不知道为什么程序无法运行(例如,您创建了一个名为test的程序,而不是运行程序,而是运行了系统测试程序。该程序不产生任何输出)。
export PATH="$PATH:."如果未在PATH的其他位置找到,则可以执行当前目录中的命令,可以将其添加到.bashrc文件中
字面上的答案就像其他人一样:因为当前目录不在您的目录中$PATH。
但是为什么呢?简而言之,这是为了安全。如果您正在查找其他人的主目录(或/ tmp),然后键入just gcc或ls,则想知道您正在运行的是真实目录,而不是恶作剧朋友编写的会删除您所有文件的恶意版本。另一个示例是testor [,如果您的外壳没有内置命令,它们可能会覆盖外壳脚本中的命令。
其.作为最后一个在你的路径条目是比较安全,但也有其他的攻击,这使得利用这一点。一种简单的方法就是利用常见的拼写错误,例如sl或ls-l。或者,找到一个恰巧未安装在该系统上的通用命令,vim例如,因为sysadmins键入该命令的可能性高于平均水平。
PATH环境变量中只包含绝对路径。
如果您是说,为什么一开始就需要./-这是因为(与Windows不同,)默认情况下,当前目录不是路径的一部分。如果您运行:
$ ls
您的Shell ls在PATH环境变量的目录中查找(echo $PATH以查看它),然后运行ls它找到的第一个可执行文件。如果输入:
$ a.out
Shell也会这样做-但可能找不到名为a.out的可执行文件。您需要告诉外壳程序a.out在哪里-它在当前目录(。)中,然后路径是./a.out。
如果您问为什么将其称为“ a.out”,那只是gcc的默认输出文件名。您可以使用-o命令行arg进行更改。例如:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA看一下。)
<dir>/<file>因此您基本上是说在当前目录中执行文件,这由./test
您可以尝试将其添加:.到$ PATH变量中。
尝试按ALT + F2并键入:gksudo gedit /etc/environment如果运行Linux / GTK(如果使用Ubuntu,则具有此功能)。
但是,我强烈建议您不要这样做。不好不好不好
您知道,自1970年以来,这种事情就一直这样。
. 是当前目录
.something将是一个隐藏文件(键入“ ALT +”以使它们出现在Nautilus中,或尝试“ ls -la”。
./someProgram.sh 是键入要在当前目录中运行可执行文件someProgram.sh的内容。
.somethingElse 这将意味着您在当前目录中有一个隐藏的可执行文件,这是个坏主意。
./command_name要在Linux中执行命令?”