可能会有人问,用户运行ls,系统如何知道运行/bin目录下面的ls呢?运行vi,系统如何知道运行/usr/bin目录下面的vi呢?执行whichecho,系统如何知道应该列出/bin/echo呢?这是由Linux的搜索路径决定的,查看内置环境变量PATH即可知道当前的搜索路径:
PATH中的目录以冒号间隔开,可见/bin和/usr/bin都在搜索路径之中。运行某条命令时,系统按照PATH中目录的先后顺序,依次在这些目录中搜索该命令,搜索不到的话,系统将提示:command not found(命令未发现);一旦搜索到,将执行该命令,并停止对后面路径的搜索。假设有两个名字相同、处在不同目录的命令,那么处在搜索路径前面的将得到执行机会。
PATH是可以改变的,例如,将目录/tmp/bin添加到搜索路径的后面:
查看一下,添加成功了:
也可以重新定义PATH,甚至PATH中的目录可以是不存在的目录:(www.xing528.com)
现在PATH被定义为两个不存在的目录,这时,执行ls,看看会发生什么结果:
系统已经找不到ls命令了,因为PATH被定义为两个不存在的目录。看来搜索路径PATH的定义与修改不可随意。如果已经将PATH改坏了怎么办?可以参考其他账户的PATH值,把自己的改回为原来的值。如果忘记原来的值,最简单的解决办法是重新打开一个命令窗口,关闭原来的窗口。实际上,如果不小心将任何一个环境变量改坏了,重新打开一个shellterminal是最简单最有效的解决方法。
防止环境变量被改坏的稳妥方法,就是每次修改之前先备份。例如,修改PATH之前,先运行MY_OLD_PATH=$PATH,然后修改PATH的值。需要将PATH的值还原时,运行PATH=$MY_OLD_PATH即可。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。