环境变量入门——PATH到底是什么
刚开始用 Linux 时,很多人都会遇到一个奇怪的现象:在终端里输入 ls、python3 就能直接运行,可自己刚编译好的程序却提示 command not found。差别不在程序本身,而在 PATH 这个环境变量里。
一、PATH 就是一张“寻人启事”
PATH 保存了一串目录,目录之间用冒号隔开。输入命令后,Shell 会按顺序去这些目录里找同名的可执行文件,找到第一个就运行,找遍了都没有,才报错 command not found。
用 echo $PATH 就能看到它,例如 /usr/local/bin:/usr/bin:/bin。排在前面的目录优先级更高:如果两个目录里有同名程序,排在前面的先生效。
二、动手看一看
输入 which ls,会显示 /usr/bin/ls,这就是 Shell 找到的 ls 的位置。再试 which python3,同样能看到它的完整路径。反过来,输入一个不存在的命令,比如 hello123,Shell 会老实告诉你找不到。
三、让自己的程序也能直接运行
假设你在 ~/tools 里放了一个自己写的脚本 hello,直接输入 hello 会失败,因为 ~/tools 不在 PATH 里。有两种办法:
- 临时生效:export PATH=$PATH:~/tools,只对当前终端有效,关掉就失效,适合临时测试。
- 长期生效:把同一行写进 ~/.bashrc,再执行 source ~/.bashrc,以后每次打开终端都有效。
注意两点:第一,一定要写 $PATH: 在前面,意思是“保留原来的 PATH,再追加新目录”,直接写 PATH=~/tools 会把原来的路径全部覆盖,连 ls 都会找不到;第二,export 不能少,它负责把变量交给子进程,否则只在当前 Shell 里可见。
四、新手最容易踩的三个坑
- 坑一:把当前目录 . 加进 PATH。看起来方便,但如果有人在共享目录里放了一个叫 ls 的恶意脚本,你一进目录就会中招。需要运行当前目录的程序时,写 ./hello 才是安全做法。
- 坑二:改完 ~/.bashrc 不 source,新开终端才生效,在旧终端里反复试都看不到效果。
- 坑三:PATH 里出现重复或不存在的目录,找命令时会白白多走几步,虽然不致命,但时间久了会让启动变慢,定期清理更清爽。
小结
PATH 不是什么神秘配置,它就是 Shell 找命令时按顺序翻的一叠目录清单。记住三句话就够了:用 echo 查看 PATH,用 which 定位命令,用 export 追加新目录。理解了它,command not found 就从报错变成了一条可以顺藤摸瓜的线索。
- 点赞
- 收藏
- 关注作者
评论(0)