Answers:
您正确回答了自己的问题,这就是为什么点不在路径中的原因:
防止幼稚的病毒或诚实的错误。
当然,这是一个非常la脚且无用的防病毒措施,没有什么可以阻止您自己在路径中添加点。
-rf
目录中唯一文件的保护(rm *
很有趣);-)
-rf
?;)
抱歉,我想以对所选答案的评论形式提出这个问题,但是我还没有超级用户的代表。
安全答案很有意义,但是如果您输入“。” 在您的PATH中,最后,外壳程序在搜索可执行文件时不应该在当前目录中查找最后一个,从而降低安全风险吗?如果确实按顺序搜索$ PATH,它将在找到./ls之前找到/ bin / ls。
因此,我输入“”是多么不安全。在$ PATH环境变量的末尾?
正如我建议的那样。这是我的测试方式:
首先,添加“。” 到PATH环境变量的末尾。
然后,将以下文件放在某个目录中,例如〜/ dir1 / dir2 / test_which.rb:
#!/your/path/to/ruby
puts "this file is from the current directory"
并将此文件放在/usr/bin/test_which.rb
#!/your/path/to/ruby
puts "this file is at /usr/bin/test_which.rb"
确保chmod + x这些文件,以便它们是可执行的。
现在,如果将目录更改为〜/ dir1 / dir2并执行test_which.rb,您将获得输出
this file is at /usr/bin/test_which.rb
确实,如果您在任何地方运行“哪个test_which.rb”,它都应报告
/usr/bin/test_which.rb
您仍然可以通过键入以下命令在当前目录中执行文件:
./test_which.rb
dc
or或sl
or sduo
在外壳中),并且被“找不到命令”保存。曾经
ls
(颜色输出及其他)别名l
完全消除了错别字。
具有“。”不只是安全风险。在PATH中,几乎不可能确保确保任何命令的执行均符合预期。考虑在巨大的目录中运行像“ zip”之类的命令,其中包含成千上万个具有随机名称的文件。其中一个被实际命名为“ zip”的可能性不可忽略,并且会导致很难理解的错误(实际上该文件应该是可执行的,但是可能会发生)。
在编写保留用户的PATH变量的脚本时,尤其如此。一个好的书面脚本应该处理所有极端情况(例如,文件名中带有空格或以“-”开头)。但是要阻止执行当前目录中的文件而不是系统命令是不切实际的...
ls
将是/usr/bin/ls
或./ls
不是。还有一个障碍是,如果您知道如何添加.
到路径的尽头,您可能会知道自己在做什么。根应该永远不会有.
路径,许多系统甚至不让root身份登录了。