码迷,mamicode.com
首页 > 其他好文 > 详细

hash和环境变量PATH

时间:2016-07-31 22:45:06      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:linux   hash   path   

hash命令和$PATH


bash命令补全:

   在linux中用户键入命令时敲TAB键的时候,它会去查找以用户所给定的起始字符串或开头字符串在PATH的环境变量所指明的各路径下,自左而右,逐一去搜索是否有一个应用程序的名称被用户给定的字符串打头的字符串唯一进行标示,如果有则把后面剩余的字符进行补全,如果无法唯一被标示,两次TAB列出所有的以此打头的的内容。
而hash命令就是为了缓存此前命令的查找结果!

hash

简介:记录或显示程序位置;

  • shell通过环境变量PATH来定义应用程序文件查找路径,shell搜寻到的外部命令的路径结果会缓存至kv(key-value)存储中;

  • 系统在执行外部命令时,会先查看shell的命令hash缓存表,如果存在,就直接使用路径引用;否则,则需要遍历PATH环境变量所指向的目录来查找;

注意:仅对当前shell用户有效

选 项:

  • -d:删除缓存中的执行的某条命令

  • -r:删除缓存中的之前执行的命令

用法:当$PATH或命令位置发生改变时,更新hash

root@localhost ~]# mv /usr/bin/ls ~qzx/
[root@localhost ~]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@localhost ~]# hash -d ls
[root@localhost ~]# ls
bash: ls: 未找到命令...
相似命令是: ‘lz‘
[root@localhost ~]# mv ~qzx/ls /usr/bin
[root@localhost ~]# ls
12345678         anaconda-ks.cfg       issue~  图片
1234567890       asd                   qzx     文档

这时候就需要通过删除之前寻找的ls命令的路径来更新寻找

环境变量PATH用法

  PATH决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当需要运行一个程序时,则就在这些目录下进行搜寻编译链接。

通过echo $PATH可以看出

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

  路径通常使用冒号分隔,且查找次序为从左至右;
  您也可以自己加上指定的路径,中间用冒号隔开。

追加路径的方法export PATH=路径:$PATH

    [root@localhost ~]# mv /usr/bin/ls ~qzx/
    [root@localhost ~]# ls
    -bash: /usr/bin/ls: 没有那个文件或目录
    [root@localhost ~]# export PATH=~qzx/:$PATH
    [root@localhost ~]# ls
    12345678         anaconda-ks.cfg       issue~  图片
    1234567890       asd                   qzx     文档

上述方法的PATH 在终端关闭后就会消失。

所以还是建议通过编辑/etc/profile来改PATH,也可以改家目录下的.bashrc(即:~/.bashrc)。
环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:$source .bash_profile


hash和环境变量PATH

标签:linux   hash   path   

原文地址:http://11741220.blog.51cto.com/11731220/1832409

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!