一次程序运行引发的思考-Linux的/usr/local/bin与/usr/bin的区别
一、故障现象
zabbix在执行告警脚本时,导入requests模块出错,无法找到该模块。具体的内容如下截图:

二、分析
1.在系统安装的python版本中分别导入requests模块,无异常。在系统层面能够直接运行该脚本,无报错。

2.开始怀疑脚本指定的python3解释器没有生效,系统使用默认的python2解释器,导致无法加载requests模块,修改系统的python默认版本为python3,调用脚本还是异常。
3.查找requests的安装位置,发现有点异常。正常的用户可执行程序都安装在/usr/local目录,而requests的安装目录为:/root/.local/lib/python3.6/site-packages/requests,导致系统在导入requests模块出错。
三、解决
使用pip3 uninstall requests卸载此模块,重新安装requests到/usr/local/python3的目录:/usr/local/python3/lib/python3.6/site-packages/requests。系统调用python脚本的requests正常。
四、总结
1./usr/sbin与/usr/bin区别:
1) /usr/sbin:root权限下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统;
2) /usr/bin普通用户权限,存放一些普通的基本命令,如ls,chmod等;
2./usr/bin与/usr/local/bin:
1) /usr/bin:系统预装的可执行程序,会随着系统升级而改变;
2) /usr/local/bin:用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。

浙公网安备 33010602011771号