当您从 shell 上打入一个命令,它必须在运行这个命令之前在您的硬盘上找到这个程序。如果 shell 不得不搜索整个硬盘,将会非常得慢。所以,它去搜索一下包含在 PATH 环境变量中的目录列表。这个目录列表构成了 shell 的搜索路径;当您键入一个命令时,它按顺序检查遍每个目录来寻找您要求运行的这个程序。
如果您自己在一个非标准位置安装了某个程序,您也许需要修改 PATH 变量。PATH 变量的值是用冒号分开的一系列目录的列表。Debian 系统上缺省的值是:
这个值在 /etc/profile 中定义,并适用于所有的用户。只要您有权力修改环境变量,您可以很方便地改变这个值。如果您键入 ls 这个命令,shell 首选会在 /usr/local/bin 这个目录中搜索; ls 不在那儿,所以它将再检查 /usr/bin 目录;当再次没找到时,它将检查 /bin。在那里它将发现 /bin/ls,这时它将停止搜索,并且运行 /bin/ls 这个程序。如果还有 /usr/bin/X11/ls(实际上现在没有,但假设有),它将被忽略。
您可以用 type 命令来查看 shell 将运行哪个 ls。type ls
返回的答案将是 /bin/ls。请亲自试一下。
请试着查一下 type 这个命令自己存放在哪里:
type is a shell builtin
type 实际上不是一个程序;它是 shell 提供的一个函数。然而,您可像使用一个外部程序一样使用它。
类似这样的命令有很多;可以通过键入 man builtins
来看一下关于内部命令的帮助页。一般来说,您不需要知道一个命令是内部命令还是一个真实的程序。然而,内部命令将不会在 ps 或 top 命令的输出中显示出来,因为它们不是独立的进程。它们只是 shell 的一部分。