Linux中环境变量所导致的问题分析及解决
2016-07-07陈金莲
陈金莲
(黄冈职业技术学院 电子信息学院,湖北 黄冈 438002)
Linux中环境变量所导致的问题分析及解决
陈金莲
(黄冈职业技术学院 电子信息学院,湖北 黄冈 438002)
摘要:Linux操作系统在当前的网络服务平台中占有相当重要的地位,但由于版本过于繁杂,在使用的过程中经常会出现这样或者那样意想不到的问题,以普通帐号登录,经过su命令提权后仍然无法运行管理类命令便是其中一种。本文分析了导致这种问题的原因,提出了解决这个问题的方法。
关键词:普通帐号;root帐号;提权;环境变量;/sbin
Linux操作系统因其开源在当今IT行业中举足轻重的地位,人所共知,它在智能安防、嵌入式开发、服务器运维,包括现在大行其道的物联网、大数据、云计算中都是基石,因此学习linux成为现在IT人的必修课了。但任何事物都是有两面性的,linux不同于windows的直观的图形操作界面,它艰涩的字符界面就象上世纪90年代以前的dos系统一样,让很多人望而生畏。还有,开源的内核使得linux发行版如百花齐放,虽然大同小异,但总有不同。这些都便使得学习者在学习进程中头痛不已。
1问题提出——命令找不到
Redhat enterprise Linux 5初始安装后,以普通帐号登录,用su命令提升权限后,仍无法运行管理类的命令,系统提示“command not found”,如图1所示。
图1 命令找不到
而以root帐号登录则所有的命令都可运行。
原因会是什么?如果是执行权限的问题,系统的提示应该会是“权限不够”;如果是命令程序本身的问题,则用root帐号登录后相应的命令也会不能正常运行。那么就真是如提示所说,在当前登录用户下的环境下无法找到相应的命令文件?
2问题分析——命令找不到的原因
命令文件真实存在,只是执行用户找不到,那么应该是执行用户的查找路径的问题了。管理类命令文件位于/sbin之下,既然提示命令找不到,应该是当前帐号默认未在该路径下搜索命令。执行用户会到除了当前登录目录之外的哪些路径下查找命令文件呢?这个由当前用户的环境变量中的$PATH变量决定。
环境变量是给系统或用户应用程序设置的一些参数,具体的作用与具体的环境变量相关。比如path,是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找。
于是,在执行命令的前面尝试添加/sbin路径,如/sbin/ifconfig,则命令可成功运行,如图2所示。
图2 命令成功执行
这说明确实是环境变量导致的问题。同时用echo命令显示当前帐号的环境变量$PATH,得到的结果如图3所示,用户的环境变量中确实没有包含系统管理类命令的路径/sbin。
图3显示path环境变更
找到了问题的症结,解决起来就有的放矢了。
3解决方案——修改环境变量
根据用户需求不同,解决方法有以下几种
(1)如果只想在本次开机过程中临时性地修改系统变量,下次开机就无效的话,可以输入export PATH=$PATH:/sbin,即在当前登录帐号的bash环境中临时增加一个搜索路径。
(2)如果只给当前登录用户永久修改环境变量,则通过修改用户的bash配置文件来解决。
用vi编辑器打开当前登录用户主目录下的隐藏文件.bash_profile,内容如图4中所示。
图4 修改环境变量的配置文件
在PATH=$PATH:$HOME/bin行后添加:/sbin,就变成PATH=$PATH:$HOME/bin:/sbin,文件修改并保存完以后,运行source ~/.bash_profile命令即可使修改操作对当前bash立即生效。
(3)如果给系统中所有的用户都永久修改搜索路径的环境变量,则通过修改/etc/profile文件来实现。
末尾添加export PATH=$PATH:/sbin
文件修改并保持完以后,运行source etc/profile命令即可使修改操作立即生效。
(4)还有一种简单而直接解决的办法,即直接在被执行的命令前带上管理命令所在的路径,如:[root@cjl]# /sbin/ifconfig的形式。或者用vi编辑器来修改 /etc/profile 文件。配置文件的原相关内容如下:
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
把其中的if 语句注释掉,修改为:
# Path manipulation
#if["$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
#fi
保存文件,重新启动系统即可。
4小结
其实,不管是哪种解决方案,其核心内容只有一个,就是在登录用户的环境变量PATH中增加/sbin的搜索路径,让用户能在/sbin路径下找到相应的管理命令去执行。不同的是,不同修改方法的作用范围不同而已。
参考文献:
[1]Bovet.深入理解Linux内核[M].北京:中国电力出版社,2008.
[2]刘晓辉.网管天下[M].北京:电子工业出版社,2011.
[3]Matt Welsh & Lar Kaufman.Linux权威指南[M].北京:中国电力出版社,2000.
[4]余柏山.Linux系统管理与网络管理[M].北京:清华大学出版社,2010.
[5]赵炯.Linux内核完全剖析[M].北京:机械工业出版社,2006.
[责任编辑:罗幼平]
* 收稿日期:2016-05-17
作者简介:陈金莲,女,湖北红安人,计算机科学专业硕士,高级工程师。研究方向:网络工程、网络安全。
中图分类号:TP391
文献标识码:A
文章编号:1672-1047(2016)03-0097-02
DOI:10.3969/j.issn.1672-1047.2016.03.26