分页: 1 / 1

[问题]为什么运行命令的时候要打路径名?

发表于 : 2007-04-05 17:44
drongh
为什么运行命令的时候要打路径名,比如:在我的家目录下有个执行文件qq,我运行的时候一定要打./qq,而不是qq,
然而拷贝文件的时候却不要,比如:在~/test/下有个文件是file,同时还有个目录是dir,当前目录为~/test/,把file拷贝到dir下时,就可下命令: cp file dir,或者cp file ./dir 这两个命令都可以,大家帮忙解释一下!!!

发表于 : 2007-04-05 18:03
applnk
这个。。。。。。可能是怕你把文件名起名像命令导致混乱

发表于 : 2007-04-05 18:57
gnix_oag
这是为了安全,
如果有个病毒伪装成 ls
则用 ls 不会执行当前目录的这个病毒
它会从 $PATH 中的目录找这个命令,
没找到则提示没有这个命令,
你如你用 ./ls 则会执行当前目录的 ls

也就是说执行非 $PATH 中的命令必须要输入路径

发表于 : 2007-04-05 18:59
BigSnake.NET
出于安全的考虑

发表于 : 2007-04-05 19:04
bones7456
如果需要的话,可以将~目录设置到$PATH里面去,这样就可以直接输入qq运行了。

Re: [问题]为什么运行命令的时候要打路径名?

发表于 : 2007-04-05 19:22
5451vs5451
举个例子,删除当前路径下的 abc 这个文件:

代码: 全选

rm abc
当 shell 看到 rm 这个命令名时,它是到 PATH 环境变量中列出的一系列路径中寻找名为 rm 的可执行文件;而当看到 abc 时,只是简单地将它作为参数传递个 rm 命令。shell 并不关心 abc 这个文件在哪儿。到哪儿去找文件完全由调用的命令来决定。绝大多数情况下,命令会在当前路径下寻找文件,但也有例外,例如 pon 和 poff 命令会到 /etc/ppp/peers 下寻找配置文件。

既然 shell 是到 PATH 环境变量中的路径下寻找命令,那么如果把 ./ 添加到 PATH 的末尾,则 shell 也可以找到当前路径下的命令而不必输入 ./ 。但这是不推荐的,因为无法限制用户对 ./ 的访问权限,从而增加了执行恶意代码的风险。