红联Linux门户
Linux帮助

Linux关于执行档路径的变数∶ $PATH

发布时间:2007-12-22 10:15:09来源:红联作者:basiozwq
  在提过了绝对路径、相对路径与指令的下达方式之后,您应该会稍微注意到一件事情,那就是∶『 为什么我可以在任何地方执行 /bin/ls 这个指令呢? 』对呀! 为什么我可以直接执行 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变数 PATH 的帮助所致呀!当我们在执行一个指令的时候, 系统会依照 PATH 的设定去每个 PATH 定义的路径下搜寻执行档,先搜寻到的指令先被执行之!现在,请下达 echo $PATH , echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变数,所以即会显示出目前的 PATH 了!

  [root@linux ~]# echo $PATH
  /sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

  注意到了吗?对啦! /bin 在 PATH 的设定之中,所以自然就可以找的到 ls 啦! PATH 对于执行档来说,是个很重要的『变数』,他主要是用来规范指令搜寻的目录。 而每个目录是有顺序的,每个目录中间以冒号『:』来分隔,就如同上面范例中提到的棉! 那么 PATH 这个变数还有什么地方重要呢?

  如果你将 ls 移动到 /root 底下的话 (mv /bin/ls /root) ,然后你自己本身也在 /root 底下 (cd /root) ,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 这个变数没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行档了,因此就会告诉你, command not found !那么该怎么克服这种问题呢?有两个方法,其一∶直接将 /root 的路径加入 PATH 当中!如何增加?可以使用∶

  [root@linux ~]# PATH="$PATH":/root

  这种方式来增加 PATH 搜寻目录即可!另一种方式则是使用完整档名来下达指令, 亦即直接使用相对或绝对路径来执行,例如∶

  [root@linux ~]# /root/ls
  [root@linux ~]# ./ls

  因为在同一个目录中,而我们又知道在同一个目录中的目录符号为『 . 』,因此,就以上面的 ./ls 来执行也可以!这种执行方式以后您应该会很常见到才对!

  如果我有两个 ls 档案在不同的目录中,例如 /usr/local/bin/ls 底下与 /bin/ls 那么当我下达 ls 的时候,哪个 ls 会被执行?那还用说,就找出 PATH 里面哪个目录先被查询,则那个目录下的档案就会被先执行了!

  咦!既然如此的话,那么为何不要在 PATH 里面加入 . 这个目录,如此一来的话, 不就可以直接在所在目录执行档案了吗?因为 . 代表所在目录嘛!是这样没错!但是有没有想过,如果某天, 某个怪怪的使用者在 /tmp 里面写了一个 ls 的档案,偏偏他是有害的档案,那么当你在 /tmp 底下执行 ls 时,怎么办?没错,可能会『中标』,所以棉,为了安全起见,不建议将『 . 』加入 PATH 的搜寻当中!

  关于更多的 PATH 与相关的『变数』及『环境变数』概念,我们会在第三篇 bash shell 时, 再更深入的介绍棉,而经过上面的说明,您应该也能够比较了解的是∶『 为什么绝对路径下达指令的方法比相对路径要正确的多 』这句话的意义棉,因为是直接找到该指令来执行,而不是透过 PATH 这个变数的内容去搜寻的啊!
文章评论

共有 0 条评论