Answers:
在Linux,UNIX和相关的操作系统中,.
表示当前目录。由于您想在当前目录中运行文件,而该目录不在您的目录中$PATH
,因此需要./
告诉外壳可执行文件在哪里。因此,./foo
意味着运行foo
此目录中名为的可执行文件。
alias
可能会阻碍您发展的因素,而不仅仅是$PATH
。
.
那么它将是一个安全问题,ls
例如,您或其他人可以替换(一个简单的病毒/木马:制作一个zip文件,其中包含可执行文件ls
,因为有人正在搜索,他们运行此可执行文件,即…)。如果.
最后搜索,那么您可能会花很长时间疯狂,不知道为什么程序无法运行(例如,您创建了一个名为test的程序,而不是运行程序,而是运行了系统测试程序。该程序不产生任何输出)。
export PATH="$PATH:."
如果未在PATH的其他位置找到,则可以执行当前目录中的命令,可以将其添加到.bashrc文件中
字面上的答案就像其他人一样:因为当前目录不在您的目录中$PATH
。
但是为什么呢?简而言之,这是为了安全。如果您正在查找其他人的主目录(或/ tmp),然后键入just gcc
或ls
,则想知道您正在运行的是真实目录,而不是恶作剧朋友编写的会删除您所有文件的恶意版本。另一个示例是test
or [
,如果您的外壳没有内置命令,它们可能会覆盖外壳脚本中的命令。
其.
作为最后一个在你的路径条目是比较安全,但也有其他的攻击,这使得利用这一点。一种简单的方法就是利用常见的拼写错误,例如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中执行命令?”