Linux中环境变量所导致的问题分析及解决

2016-07-07 09:35陈金莲
黄冈职业技术学院学报 2016年3期
关键词:环境变量

陈金莲

(黄冈职业技术学院 电子信息学院,湖北 黄冈 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

猜你喜欢
环境变量
创新型产业集群集聚效应研究
外来入侵植物肿柄菊在云南的扩散风险研究
外来入侵植物肿柄菊在云南的扩散风险研究
高效玉米种植与生长环境变量
基于三阶段DEA模型的长江干线主要港口效率评价
建筑施工中深基坑支护的施工技术
从桌面右键菜单调用环境变量选项
彻底弄懂Windows 10环境变量
双船浮托安装环境影响对比研究
基于三阶段DEA—Malmquist模型的中国省域城镇化效率测度及其收敛分析