linux的环境变量设置
Ubuntu下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户:一:用于当前终端:在当前终端中输入:export PATH=$PATH:<你的要加入的路径>不过上面的方法只适用于当前终端,一旦当前终端关闭或在另一个终端中,则无效。export NDK_ROOT=/home/jiang/soft/Android-ndk-r8e #只能在当前终端使用。二:用于当前用户:在用
linux下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户:
一:用于当前终端:
在当前终端中输入:export PATH=$PATH:<你的要加入的路径>
不过上面的方法只适用于当前终端,一旦当前终端关闭或在另一个终端中,则无效。
export NDK_ROOT=/home/jiang/soft/Android-ndk-r8e #只能在当前终端使用。
二:用于当前用户:
在用户主目录下有一个 .bashrc 隐藏文件,可以在此文件中加入 PATH 的设置如下:
$ gedit ~/.bashrc
加入:
export PATH=<你的要加入的路径>:$PATH
如果要加入多个路径,只要:
export PATH=<你要加入的路径1>:<你要加入的路径2>: … :$PATH
当中每个路径要以冒号分隔。
这样每次登录都会生效
添加PYTHONPATH的方法也是这样,在.bashrc中添加
export PYTHONPATH=/home/zhao/setup/caffe-master/python:/home/zhao/setup/mypy:$PYTHONPATH
保存后在终端输入 $ source ~/.bashrc 使环境变量立即生效
三:用于所有用户:
$ sudo gedit /etc/profile
加入:
export PATH=<你要加入的路径>:$PATH
就可以了。
终端输入:echo $PATH 可以查看环境变量
注意,修改环境变量后,除了第一种方法立即生效外,第二第三种方法要立即生效,可以source ~/.bashrc或者注销再次登录后就可以了!
环境变量里有什么?
可以直接用无参数的 printenv 命令来输出当前 session 的环境变量以及环境变量的值。若加上参数,则是输出某个变量的值。若想更方便地查看,可以将 printenv 的输出传给 less来查看环境变量(1):
printenv | less
可以看到,平时常接触到的PWD,HOME,USER等都在其中。
如果要在命令的参数中使用某个变量的值,可以输入 “$变量名” (2)。比如:
ls $HOME/bin
用户自定义变量
除了系统自带的变量,用户还可以自定义变量:
rit@rit-X405UA:~$ foo=FOO
rit@rit-X405UA:~$ hello='Hello World'
rit@rit-X405UA:~$ echo $foo
FOO
rit@rit-X405UA:~$ echo $hello
Hello World
注意到等号左右两边不留空格,因为空格在 shell 命令里面被视为分隔符,并不是无意义的符号。
注意到如果出现特殊字符,如空格,$,\等等,要用引号扩起来(3)。
如果要让接下来在该 shell 运行的程序能够访问到该变量,则要使用 export 命令:
rit@rit-X405UA:~$ export foo hello
像这样在当前的 session 中定义的变量只在当前 session 有效,即退出再登录这个变量就不存在了。若要在每次登录到 shell 的时候都能使用到该变量,需将该变量定义到环境变量的配置文件中。
- 什么是shell?
答:在计算机科学中,Shell俗称壳(用来区别于核,核是指“内核”),Shell是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
在很多并不正式的场合,这两个名词表达的意思相同,即命令解释器。但从严格的意义上讲,命令行是指供用户输入命令的界面,其本身只是接受输入,然后把命令传递给命令解释器,后者就是Shell,从本质上讲,Shell是一个程序,它在用户和操作系统之间提供了一个面向行的可交互接口,用户在命令行中输入命令,运行在后台的Shell把命令转换成指令代码发送给操作系统。Shell并非只有命令行这一种形式,例如GNOME、KDE等图形界面也是Shell,不过它们是GUI Shell,都是为了解决人机交互的问题。
目前在Linux环境下有几种不同类型的Shell,常用的有Bourne Again Shell(BASH)、TCSH Shell、Z-Shell。不同的Shell提供不同的语法和特性。
例如在Ubuntu中,可以在etc/passwd文件中查看到自己的默认shell程序,如下所示:
biotest@ubuntu:~$ cat /etc/passwd |grep biotest
biotest:x:1000:1000:UBUNTU,,,:/home/biotest:/bin/bash
由上述结果可知,biotest用户所用到shell是bash。bash shell程序位于/bin目录内,从长列表中可以看出/bin/bash是一个可执行程序:
biotest@ubuntu:~$ ls -lF /bin/bash
-rwxr-xr-x 1 root root 1037528 May 16 2017 /bin/bash*
注:在Linux系统中,当使用ls,添加了-F参数时,会在每个输出项后追加文件的类型标识符,具体含义为:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-
什么是bash?
答:bash相当于shell中的某个,shell的范围更广。bash的全称是Bourne again / born again。 -
什么是环境变量?
答:shell 在 shell 会话中保存着大量信息。这些信息被称为 (shell 的) 环境。 程序获取环境中的数据(即环境变量)来了解本机的配置。虽然大多数程序用配置文件来存储程序设置, 一些程序会根据环境变量来调整他们的行为。Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。 通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。 环境变量是全局的,设置好的环境变量可以被所有当前用户所运行的程序所使用。 用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。在bash shell中,环境变量分为两类,分别为全局变量,局部变量。
shell 在环境中存储了两种基本类型的数据,虽然 bash 几乎无法分辨这些数据的类型。 它们是环境变量和 shell 变量。Shell 变量是 bash 存放的少量数据。剩下的都是 环境变量。除了变量,shell 也存储了一些可编程的数据,即别名和 shell 函数。
- 如何查看环境变量?
答:printenv可以显示全局变量
通过echo来查看变量的值,如下所示:
biotest@ubuntu:~$ echo $HOME
/home/biotest
biotest@ubuntu:~/miniconda2/opt$ echo $PWD # PWD是显示当前目录
/home/biotest/miniconda2/opt
$的作用
在echo命令中,在变量名前加上$就能显示当前变量的值,它也能让变量作为命令行参数,如下所示:
biotest@ubuntu:~/miniconda2/opt$ ls $HOME
biosoft Downloads Miniconda2-latest-Linux-x86_64.sh Public Videos
Desktop examples.desktop Music Templates
Documents miniconda2 Pictures test
设置局部用户定义变量
一旦启动了bash shell(或者执行一个shell脚本),就能创建在这个shell进程内可见的局部变量了。可以通过等号给环境变量赋值,值可以是数值或字符串,需要注意的是,在shell中,变量名,等号和值之间没有空格,否则会出错,如下所示:
biotest@ubuntu:~/miniconda2/opt$ echo $mywords
biotest@ubuntu:~/miniconda2/opt$ mywords=hello
biotest@ubuntu:~/miniconda2/opt$ echo $mywords
hello
如果要给变量赋值一个含有空格的字符串,必须要加上单绰号来界定字符串的首和尾,如下所示:
biotest@ubuntu:~/miniconda2/opt$ mywords=Hello linux
linux: command not found
biotest@ubuntu:~/miniconda2/opt$ mywords="Hello linux"
biotest@ubuntu:~/miniconda2/opt$ echo $mywords
Hello linux
设置了局部变量后,就能在shell进程的任何地方使用它了,但是,如果生成了另外一个shell,在它的子shell中就无法使用。类似地,如果在子进程中设置了一个局部变量,一旦退出了子进程,那个局部环境变量就无法使用。
在设定全局环境变量的进程所创建的子进程中,该变量都是可见的。创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。,这个过程是通过export命令实现的,变量名前面不加$,如下所示:
biotest@ubuntu:~$ my_words="I love Linux"
biotest@ubuntu:~$ export my_words
biotest@ubuntu:~$ echo $mywords
Hello linux
biotest@ubuntu:~$ bash
bbiotest@ubuntu:~$ echo $my_words
I love Linux
删除环境变量
删除环境变量使用unset命令,前面不加$符号,如下所示:
biotest@ubuntu:~$ echo $my_words
I love Linux
biotest@ubuntu:~$ unset my_words
biotest@ubuntu:~$ echo $my_words
biotest@ubuntu:~$
在涉及变量名时,什么时候使用‘,什么时候不使用‘,只需要这样记忆:要具体地查看变量的值时,就需要‘符号,如果不需要查看变量的值,只针对变量本身操作,就不使用‘符号。
-
setprintenv都可以查看系统变量,它们有什么区别?
答:(1)通过set可以设置shell选项,如果只输入set而不加任何参数,它就会显示shell 变量,环境变量,和定义的 shell 函数,此时与printenv命令类似,与 printenv 命令不同的是,set 命令的输出很友好地按照首字母顺序排列
(2)set命令显示当前shell的变量,包括当前用户的变量;printenv(输入env也可以)命令只显示当前用户的变量。每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的。 -
环境变量存放在哪个地方?
答:当你进入系统的时候,linux 就会为你读入系统的环境变量,这些环境变量存放在什么地方,那就是环境变量的文件中。Linux 中有很多记载环境变量的文件,它们被系统读入是按照一定的顺序的,这些文件包括以下部分:
6.1 /etc/profile:
此文件是bash shell默认的主启动文件,只要登录了Linux,bash就会执行/etc/profile启动文件中的命令,该文件存储的是整个系统的环境变量,它为每个用户设置环境信息,这个文件只有root才能修改。当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell 的设置。这个文件,是任何用户登陆操作系统以后都会读取的文件(如果用户的shell 是csh 、tcsh 、zsh ,则不会读取此文件),用于获取系统的环境变量,只在登陆的时候读取一次。
6.2/etc/bashrc:
在执行完/etc/profile 内容之后,如果用户的Shell运行的是bash ,那么接着就会执行此文件。另外,当每次一个新的bash shell 被打开时, 该文件被读取。每个使用bash的用户在登陆以后执行完/etc/profile 中内容以后都会执行此文件,在新开一个bash 的时候也会执行此文件。因此,如果你想让每个使用bash 的用户每新开一个bash 和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。
注:/etc/profile,/etc/bashrc 是系统全局环境变量设定
6.3 $HOME/.bashrc:
该文件包含专用于单个人的bash shell 的bash 信息,当登录时以及每次打开一个新的shell 时, 该该文件被读取。 单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个bash 。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash ,都会去获取相应的特殊的环境变量和特殊操作。
6.4$HOME/.bash_profile:
每个用户都可使用该文件输入专用于自己使用的shell 信息。当用户登录时,该文件仅仅执行一次,默认情况下,它设置一些环境变量,执行用户的.bashrc 文件。单个用户此文件的修改只会影响到他以后的每一次登陆系统。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么它在每次登陆的时候都会去获取这些新的环境变量或者做某些特殊的操作,但是仅仅在登陆时。
/.bashrc和/.bash_profile都只对当前的用户永久生效,也就是说假如用户A设置了些类环境变量,这个环境变量只有A才能使用,而对于其他的B,C,D等用户来说,这个变量是不存在的。在根目录下,通过ls -a可以查看这两个文件,正常情况下,这两个文件是隐藏的。
6.5$HOME/.bash_logout:
当每次退出系统( 退出bash shell) 时, 执行该文件。
- /.bashrc和/.bash_profile的区别是什么?
答:原则上来说,设置自己的环境变量时,在这两个文件中任意选一个即可,它们的区别在于:~/.bash_profile是交互式login方式进入bash shell运行而~/ .bashrc是交互式non-login方式进入bash shell运行。二者设置大致相同。通俗点说,就是.bash_profile文件只会在用户登录的时候读取一次,而.bashrc在每次打开终端进行一次新的会话时都会读取。
- 如何查看地自定义的别名?
答:通过set或printenv无法查看通过alias命名的别名,此时需要通过alias来查看,如下所示:
alias egrep=’egrep —color=auto’
alias fgrep=’fgrep —color=auto’
alias grep=’grep —color=auto’
alias l=’ls -CF’
alias la=’ls -A’
alias ll=’ls -alF’
alias ls=’ls —color=auto’
-
Shell中的一些大写字母是什么意思?
答:这些大写字母表示一些特殊的环境变量,如下所示:
-
设置环境变量常用的指令有哪些?
答:常用的命令有echo,export,env,set,unset,readonly等,如下所示:
(1)echo
查看某个环境变量.
(2)env
查看所有环境变量
(3)set
查看本地定义的所有shell变量.
(4)unset
删除一个环境变量,例如:
biotest@ubuntu:~exportWords=”Hello,world!”biotest@ubuntu: echo WordsHello,world!biotest@ubuntu: unset Words
biotest@ubuntu:~echoWords
biotest@ubuntu:~$
(5)readonly
设置只读环境变量.
更多推荐
所有评论(0)