ubuntu-设置系统环境变量

环境变量简介

bash shell用一个叫做环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息.环境变量的使用大大方便了程序或者shell中运行的脚本查找和访问内存中存储的数据和系统信息.

环境变量分为全局环境变量局部环境变量,标准的命名方式是:全局变量名用大写字母命名,局部变量用小写字母命名.

这里主要介绍全局环境变量.

bash shell中操作环境变量

声明:在bash shell中对环境变量所做的所有操作只对当前shell有效,退出后再打开,之前的所有设置全部消失.

这里介绍如何在bash shell中查看/添加/删除环境变量

查看所有全局环境变量有两个命令:envprintenv.

yan@yanubuntu:~$ env
XDG_VTNR=7
XDG_SESSION_ID=c2
...
LESSCLOSE=/usr/bin/lesspipe %s %s
XAUTHORITY=/home/yan/.Xauthority
_=/usr/bin/env
yan@yanubuntu:~$ 

或者

yan@yanubuntu:~$ printenv
XDG_VTNR=7
XDG_SESSION_ID=c2
...
LESSCLOSE=/usr/bin/lesspipe %s %s
XAUTHORITY=/home/yan/.Xauthority
_=/usr/bin/printenv
yan@yanubuntu:~$ 

全局变量有很多,上面用了...表示省略.

查看某个环境变量,常用两种方式:printenv 环境变量名或者echo $环境变量名.比如查看环境变量HOME的值:

yan@yanubuntu:~$ printenv HOME
/home/yan

或者

yan@yanubuntu:~$ echo $HOME
/home/yan

添加全局环境变量使用export命令:

假设我想添加一个环境变量DOWNLOAD,用它来表示默认的下载文件夹/home/yan/download.

检验一下,原来环境变量中不包含DOWNLOAD变量:

yan@yanubuntu:~$ printenv DOWNLOAD
yan@yanubuntu:~$ 

现在添加DOWNLOAD环境变量:

yan@yanubuntu:~$ DOWNLOAD=/home/yan/download
yan@yanubuntu:~$ export DOWNLOAD
yan@yanubuntu:~$ printenv DOWNLOAD
/home/yan/download
yan@yanubuntu:~$ 

DOWNLOAD环境变量添加成功.可以看出,添加过程包含两步:首先使用DOWNLOAD=/home/yan/download创建一个局部变量;再用export DOWNLOAD将其导出成为全局环境变量.

当然,这两步可以用下面一条命令代替:

export DOWNLOAD=/home/yan/download

以上是创建一个之前没有的环境变量.如果某个环境变量已经存在,我们要为这个环境变量添加值怎么处理?

比如最经常用到的PATH环境变量,先查看PATH变量的值:

yan@yanubuntu:~$ echo $PATH
/usr/local/cuda-8.0/bin:/home/yan/anaconda2/bin:/home/yan/bin:/home/yan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yan@yanubuntu:~$ 

可以看到,PATH变量包含了多个值/路径,每个值之间用冒号:隔开(注意windows下面用的是分号;隔开).

现在我们想新添加一条路径/home/yan/anaconda2到PATH变量,采用以下命令:

export PATH=/home/yan/anaconda2:$PATH

或者

export PATH=$PATH:/home/yan/anaconda2

实际演示:

yan@yanubuntu:~$ echo $PATH
/usr/local/cuda-8.0/bin:/home/yan/anaconda2/bin:/home/yan/bin:/home/yan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yan@yanubuntu:~$ export PATH=/home/yan/anaconda2:$PATH
yan@yanubuntu:~$ echo $PATH
/home/yan/anaconda2:/usr/local/cuda-8.0/bin:/home/yan/anaconda2/bin:/home/yan/bin:/home/yan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
yan@yanubuntu:~$ 

可以看到,新路径已经被添加进去了.

在某个环境变量添加新的值和添加一个新的环境变量相比(以PATH为例),多了一个$PATH:.

网上有人说的不错,这个有点类似于i=i+1的味道.

删除全局变量名使用unset命令,比如想要删除掉刚才添加的DOWNLOAD变量:

yan@yanubuntu:~$ printenv DOWNLOAD
/home/yan/download
yan@yanubuntu:~$ unset DOWNLOAD
yan@yanubuntu:~$ printenv DOWNLOAD
yan@yanubuntu:~$

如果想要删除PATH变量中的某个路径怎么办?直接把当前shell关掉重开一个吧.

永久设置环境变量的几种方法

前面提到了,在bash shell中对环境变量的所有操作都是暂时性的,退出当前shell就无效了.如何使得对环境变量的设置永久有效?首先得认识以下几个文件:

  • /etc/profile

  • /etc/environment

  • ~/.profile

  • ~/.bashrc

设置/etc/profile

实际上,当我们登录Linux系统时,bash作为默认的shell,它会在几个文件中查找命令.这些文件称为启动文件或者环境文件.其中,/etc/profile文件就是系统默认的bash shell的第一启动文件.其中就涉及到了系统环境变量的读取文件.所以,可以直接打开/etc/profile文件,使用export命令在文件中添加系统环境变量.

这个文件的特点是:系统中所有用户登录时都会执行这个启动文件.所以,里面添加的所有环境变量都系统中的所有用户有效.

举个例子,我要将新安装的anaconda2中的python解释器作为系统默认的python解释器,为此,我需要将路径/home/yan/anaconda2/bin添加到PATH环境变量中.可以使用以下命令打开/etc/profile文件:

yan@yanubuntu:~$ sudo gedit /etc/profile

打开后在文件最后面添加以下语句:

export PATH=/home/yan/anaconda2/bin:$PATH

保存退出,然后在bash中执行source /etc/profile命令使其生效:

yan@yanubuntu:~$ source /etc/profile

或者重启系统使其生效.

设置/etc/environment

参考Ubuntu环境变量——添加与删除,/etc/environment文件是登录Linux系统时的第二启动文件.

使用以下命令打开/etc/environment文件:

yan@yanubuntu:~$ sudo gedit /etc/environment

发现里面只有一行内容:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

也就是只定义了PATH环境变量的值,同样的例子,我们可以将/etc/environment文件内容改为:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/yan/anaconda2/bin"

也就同样添加了anaconda2路径到PATH环境变量.同样需执行source命令或者重启系统使其生效.

同样,修改/etc/environment文件也是对所有登录用户有效.

设置~/.profile

设置~/.profile文件同样可以达到永久设置环境变量的目的,但是它只是对当前用户有效.

我们知道,Linux中的~就代表了当前用户的主目录,比如此时,~/.profile就相当于/home/yan/.profile.

其中yan是我的登录用户名.因此,当前Linux系统中创建了几个用户,就有几个~/.profile文件.当然,对于个人笔记本而言,一般只有一个登录用户.

既然搞清楚了,同样的例子,使用以下命令打开~/.profile文件:

yan@yanubuntu:~$ sudo gedit ~/.profile

同样在/.profile文件最后添加export命令,下面是/.profile文件内容,很短:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
​
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
​
# if running bash
if [ -n "$BASH_VERSION" ]; then
 # include .bashrc if it exists
 if [ -f "$HOME/.bashrc" ]; then
 . "$HOME/.bashrc"
 fi
fi
​
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH=/home/yan/anaconda2/bin:$PATH

同样保存后执行source命令或者重启系统使其生效.

设置~/.bashrc文件

最后还有一个/.bashrc文件,修改这个文件同样可以达到永久设置环境变量的目的,实际上,这个文件是被上面的/.profile文件执行的,以上~/.profile文件中有这两句:

if [ -f "$HOME/.bashrc" ]; then
 . "$HOME/.bashrc"

好了,同样的,使用gedit编辑器打开~/.bashrc文件并在文件末尾加入export命令,保存后执行source命令或者重启系统使其生效.

同样,设置~/.bashrc文件修改的环境变量也只对当前用户有效.

永久设置ubuntu(我用的ubuntu16.04),修改以上任意一个文件都可以(其实还没总结完,好像还可以修改/etc/bash.bashrc,/root/bashrc等目录等可以,没去试,就试了以上几个,够用就行).当为了不影响系统上的其他用户,最好还是修改自己的~/.profile文件或者~/.bashrc文件吧.

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

推荐阅读更多精彩内容