一文理解环境变量

一文理解环境变量

对于Linux初学者来说,环境变量是个很陌生的名词,很多人不能理解它是到底是什么,可以用来干嘛。其实,环境变量,在windows中也有,只是我们平时不怎么直接接触它,所以我们下面也只针对Linux来讲环境变量。

什么是环境变量

首先,在百度百科中,环境变量的解释是这样的:

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

描述性文字理解起来还是太抽象了,我们还是用几个简单的例子,来学习一下环境变量吧

首先,我们登陆上服务器,然后输入ls命令:

vip18 10:06:09 ~
$ ls
readme.txt

可以看到,在当前用户vip18的家目录~下,有一个文件叫readme.txt,但是,当前目录下面并没有ls命令所对应的可执行文件。真正的ls命令的可执行文件,其实是在别处,我们用which ls可以查看到ls所在的位置:

vip18 10:06:13 ~
$ which ls
/bin/ls

可以看到,ls其实是保存在/bin/ls这个目录下的。而我们之所以可以随时随地的调用ls,是因为当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。接下来我们看看当前的环境变量PATH是什么,用echo $PATH可以查看到

vip18 10:11:28 ~
$ echo $PATH
/trainee/vip18/bin:/trainee/vip18/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

可以看到,PATH记录的是很多个目录,这些目录以冒号:作分割,为了让大家看的清楚,我们把冒号:替换成\n

vip18 10:27:59 ~
$ echo $PATH|tr ':' '\n'
/trainee/vip18/bin
/trainee/vip18/.local/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin

其实,PATH就是记录了很多以bin或者sbin为结尾的目录,这些目录下面就包涵了很多可执行文件,比如我们上面提到的ls命令所在的目录/bin就是倒数第4个。感兴趣的可以去看看其他命令对应的可执行文件都记录在哪个目录里面,这里不再展示。

如何修改环境变量

修改环境变量,其实就是对环境变量进行重新赋值,比如我们安装了一个软件叫aspera

# 下载
wget -c https://download.asperasoft.com/download/sw/connect/3.8.1/ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.tar.gz
# 解压
tar zxvf ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.tar.gz
# 安装
bash ibm-aspera-connect-3.8.1.161274-linux-g2.12-64.sh

这个软件安装好了之后,会在用户的家目录下的生成一个隐藏目录.aspera,需要用ls -a来查看

1561603894085.png

进一步查看这个目录的结构:

1561603993164.png

发现它的下下层目录也有一个叫bin的目录,包涵的可执行文件有

$ ls .aspera/connect/bin/
ascp  asperaconnect  asperaconnect.bin  asperacrypt  asunprotect

假如我们想像调用ls那样随时随地的调用这个软件的命令,即~/.aspera/connect/bin/目录中的可执行文件,那么就需要把这个路径添加到环境变量里面去,方法是:

export PATH="~/.aspera/connect/bin/:$PATH"
# 注意这里要用双引号,不能用单引号

运行上面这一行命令之后,就可以随时随地得调用了,如:

1561604559848.png

但是,这方法并不能一劳永逸,我们需要把它写进去.bashrc里面去

.bashrc文件

.bashrc是一个配置文件,也是一个隐藏文件,存在于用户的家目录~下,需要用ls -a才能查看到,当我们每次登陆服务器时,这个文件就会被执行一次,也就是说文件内的代码会被运行一遍。因此,当我们把export PATH="~/.aspera/connect/bin/:$PATH"这一行命令写入.bashrc后,以后每次登陆服务器,系统就会帮我们把这一行命令执行一次,我们就不能再自行运行了,方法如下:

echo export PATH="~/.aspera/connect/bin/:$PATH" >>.bashrc

这样我们就把这一行代码写入到.bashrc里面了,我们说过,.bashrc是在登录服务器的时候才会被执行,因此,我们修改好了之后,要重新登录服务器,或者重新运行一下.bashrc,方法如下:

source .bashrc

这里不建议新手采用vim来编辑.bashrc,除非你已经知道如何使用vim这个工具

一些其他软件,如conda,在安装的时候会有一句提示,问我们是否要把conda的环境添加到.bashrc如:

Do you wish the installer to prepend the Miniconda2 install location
to PATH in your /trainee/vip18/.bashrc ? [yes|no]
[no] >>> 

我们直接输入yes,这样conda的环境就自动添加到.bashrc里面了,不需要像上面那样自己添加。

1561605982702.png

补充一个错误的示例

有一些初学者,在修改环境变量的时候,不小心改成了这样:

echo export PATH="~/.aspera/connect/bin/:$ PATH" >>.bashrc

咋一看好像没什么问题,但其实这是个大问题,后面的$PATH之间按多了一个空格,重新激活.bashrc后,就会出现下面的现象:

image.png

上面的这些命令都用不了了,报错信息都写着:xxx is not included in the PATH environment variable
但是同时,报错信息也给出了非常重要的一点,如:Command 'ls' is available in '/bin/ls',也就是告诉你了ls命令的可执行文件所在的路径,那么,我们只需要采用全路径调用的方法即可使用这些命令了。

image.png

当然,我们最终的解决办法还是要把环境变量改回来,一个方法就是删掉最后一行,也就是我们前面追加的一行代码,如:

/bin/sed -i '$d' .bashrc

最后在重新登录服务器就ok了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容