你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux环境变量配置

[复制链接]
gaosmile 发布时间:2020-12-3 22:10
Linux环境变量配置
在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。
下面所有例子的环境说明如下:
  • 系统:Ubuntu 14.0
  • 用户名:uusama
  • 需要配置MySQL环境变量路径:/home/uusama/mysql/bin5 M& m& _$ o9 @# I
Linux读取环境变量
读取环境变量的方法:
  • export命令显示当前系统定义的所有环境变量
  • echo $PATH命令输出当前的PATH环境变量的值
    ) z0 q6 v7 s' K6 l. b
这两个命令执行的效果如下
uusama@ubuntu:~$ export4 W5 T2 y5 y  F, Q0 K2 V
declare -x HOME="/home/uusama"9 S7 [  G8 O; c5 l. _
declare -x LANG="en_US.UTF-8"
9 {: Z- ~. ]7 M6 u6 `) l3 @declare -x LANGUAGE="en_US:"
4 m8 d6 @2 t: \: pdeclare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
7 f3 b1 }# a% ndeclare -x LESSOPEN="| /usr/bin/lesspipe %s"
+ ?; ?5 M' F9 ^: ?( Adeclare -x LOGNAME="uusama"+ ?# r/ {+ u" O  n. J
declare -x MAIL="/var/mail/uusama"& @7 }. B" `" c/ ~  E" ]
declare -x PATH="/home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# F) K+ X$ X) ^1 Q3 [$ H3 W; X% `
declare -x SSH_TTY="/dev/pts/0"5 ~" U# h- K% p6 c* }
declare -x TERM="xterm"
) K6 o  M# A; k# Y1 Ldeclare -x USER="uusama") ~+ a) _% y- z0 f

: v4 I2 F2 a( quusama@ubuntu:~$ echo $PATH
- }) Z7 @$ I5 j/home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
* s9 Y6 N) v5 X+ l+ r+ Z
其中PATH变量定义了运行命令的查找路径,以冒号:分割不同的路径,使用export定义的时候可加双引号也可不加。
Linux环境变量配置方法一:export PATH
使用export命令直接修改PATH的值,配置MySQL进入环境变量的方法:
export PATH=/home/uusama/mysql/binPATH
2 v5 A# \' g7 w, d  X#或者把PATH放在前面% l6 _, x# r/ p9 _/ l
export PATH=$PATH:/home/uusama/mysql/bin
: V! [' S2 _2 M+ z5 K; ^( [' c
注意事项:
  • 生效时间:立即生效
  • 生效期限:当前终端有效,窗口关闭后无效
  • 生效范围:仅对当前用户有效
  • 配置的环境变量中不要忘了加上原来的配置,即$PATH部分,避免覆盖原来配置9 m9 E$ S" ~7 R4 m0 t* T7 v
Linux环境变量配置方法二:vim ~/.bashrc
通过修改用户目录下的~/.bashrc文件进行配置:
vim ~/.bashrc
; B" N4 m1 u$ D1 f, B, d7 a# 在最后一行加上4 g" h# t4 r) c2 M2 J6 d
export PATH=$PATH:/home/uusama/mysql/bin9 m: K8 [4 R5 u+ D6 a! F
注意事项:
  • 生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc生效
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效
  • 如果有后续的环境变量加载文件覆盖了PATH定义,则可能不生效0 b5 y, {  I$ p/ V4 C3 y9 y
Linux环境变量配置方法三:vim ~/.bash_profile
和修改~/.bashrc文件类似,也是要在文件最后加上新的路径即可:
vim ~/.bash_profile
  @: v6 z- j, H# A% l# 在最后一行加上
4 Y1 O- J2 g5 f+ [1 E3 [export PATH=$PATH:/home/uusama/mysql/bin
( ^$ U7 w- p, B
注意事项:
  • 生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile生效
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效
  • 如果没有~/.bash_profile文件,则可以编辑~/.profile文件或者新建一个
    $ H* _' k% v' K8 O4 p6 |/ ]: H
Linux环境变量配置方法四:vim /etc/bashrc
该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限:
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑: L1 y0 ^; H6 R) ], D
chmod -v u+w /etc/bashrc
* T) }* S6 H* X6 Y$ U
! c. p+ D5 {: A! zvim /etc/bashrc
, E+ a0 g# G! g$ c# d( F# 在最后一行加上
5 D3 Z: b! C9 H8 z6 z1 Zexport PATH=$PATH:/home/uusama/mysql/bin- v. ^5 r% |9 a( ^+ b
注意事项:
  • 生效时间:新开终端生效,或者手动source /etc/bashrc生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效
    / N5 L2 G) Y4 k8 u  @% n
Linux环境变量配置方法五:vim /etc/profile
该方法修改系统配置,需要管理员权限或者对该文件的写入权限,和vim /etc/bashrc类似:
# 如果/etc/profile文件不可编辑,需要修改为可编辑: d( _8 S; B' F
chmod -v u+w /etc/profile
2 C8 y0 g7 z5 j& `: K  a' N- Y
1 a7 M4 M- \5 z# Avim /etc/profile$ X  B( z2 h/ @; b2 R+ A
) v. V9 B/ r0 h; e  y; d
# 在最后一行加上5 H/ @" V, B$ P7 ]$ b
export PATH=$PATH:/home/uusama/mysql/bin" |' A0 k- |% S, R* d' ^
注意事项:
  • 生效时间:新开终端生效,或者手动source /etc/profile生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效
    / {. }- p/ {7 D  @3 P) R- P
Linux环境变量配置方法六:vim /etc/environment
该方法是修改系统环境配置文件,需要管理员权限或者对该文件的写入权限:
# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
# c, t" ?% q! o2 Y  l1 ^5 g4 Tchmod -v u+w /etc/environment3 C0 s, r; {6 r- n/ R4 @" T6 B
( }2 f7 f- h4 f, Z4 a6 d
vim /etc/profile% ?9 j* _, H0 B  e# S7 l4 {0 J% W
# 在最后一行加上
4 U/ {" p/ B# Z6 w! k$ Nexport PATH=$PATH:/home/uusama/mysql/bin
" D6 ?2 _, `. Q. j
注意事项:
  • 生效时间:新开终端生效,或者手动source /etc/environment生效
  • 生效期限:永久有效
  • 生效范围:对所有用户有效4 I+ O- r- E$ N9 b+ S
Linux环境变量加载原理解析
上面列出了环境变量的各种配置方法,那么Linux是如何加载这些配置的呢?是以什么样的顺序加载的呢?
特定的加载顺序会导致相同名称的环境变量定义被覆盖或者不生效。
环境变量的分类
环境变量可以简单的分成用户自定义的环境变量以及系统级别的环境变量。
  • 用户级别环境变量定义文件:~/.bashrc、~/.profile(部分系统为:~/.bash_profile)
  • 系统级别环境变量定义文件:/etc/bashrc、/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment
    $ l# ]0 U2 h& N" m  ?$ H  U
另外在用户环境变量中,系统会首先读取~/.bash_profile(或者~/.profile)文件,如果没有该文件则读取~/.bash_login,根据这些文件中内容再去读取~/.bashrc。
测试Linux环境变量加载顺序的方法
为了测试各个不同文件的环境变量加载顺序,我们在每个环境变量定义文件中的第一行都定义相同的环境变量UU_ORDER,该变量的值为本身的值连接上当前文件名称。
需要修改的文件如下:
/etc/environment; p! ]$ N$ o6 i" I/ r! c% y  w. [
/etc/profile$ s) b. G4 @5 R* s  j7 H" ?- i
/etc/profile.d/test.sh,新建文件,没有文件夹可略过
# t- w. P3 a$ A* {+ j3 C/etc/bashrc,或者/etc/bash.bashrc5 V# Q/ s5 |2 D6 r6 q
~/.bash_profile,或者~/.profile
; o; u$ u9 h/ r$ s5 _4 ~~/.bashrc" F9 y* s4 B6 `7 z2 O
在每个文件中的第一行都加上下面这句代码,并相应的把冒号后的内容修改为当前文件的绝对文件名。
export UU_ORDER="$UU_ORDER:~/.bash_profile"
; e! ^$ a. m; I) T2 A
修改完之后保存,新开一个窗口,然后echo $UU_ORDER观察变量的值:
uusama@ubuntu:~$ echo $UU_ORDER
  N: F8 y  I0 Y  s8 U- L$UU_ORDER:/etc/environment:/etc/profile:/etc/bash.bashrc:/etc/profile.d/test.sh:~/.profile:~/.bashrc+ B% i; i5 N6 ^3 U; Y
可以推测出Linux加载环境变量的顺序如下:
/etc/environment
/ I: l5 V) j* ?4 \3 h/etc/profile
  z3 [3 I" U- E* R/etc/bash.bashrc
9 N" Y# X6 q" `; [. ?* ?/etc/profile.d/test.sh
# d. ~* _& @& Q0 h) l~/.profile+ m* B- x3 }: s1 r- u& a: C. R& g7 ?
~/.bashrc
; g. `, D2 F3 }- C% I! G- Q% ^
Linux环境变量文件加载详解
由上面的测试可容易得出Linux加载环境变量的顺序如下,:
系统环境变量 -> 用户自定义环境变量 /etc/environment -> /etc/profile -> ~/.profile
打开/etc/profile文件你会发现,该文件的代码中会加载/etc/bash.bashrc文件,然后检查/etc/profile.d/目录下的.sh文件并加载。
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+ ~+ v9 ^) j( }1 Y+ R; V# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).  v# o7 P* i) W2 U+ b/ z0 O
/ D3 _& G4 j6 L# ?" ~5 W- _/ i) \
if [ "$PS1" ]; then
" A% U/ i: E$ x4 p. Y  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then8 d2 i0 H% `4 b. j: k
    # The file bash.bashrc already sets the default PS1.
% ~( J- W% v& r9 `6 @  \    # PS1='\h:\w\$ '
$ S& b; W) t: i$ c- b    if [ -f /etc/bash.bashrc ]; then
- n: L) w4 b, q/ j0 y: q2 g1 Z2 t      . /etc/bash.bashrc
* c# W. D+ @# O" F+ E2 E$ Y    fi" C8 P6 r' d) x. O; b- Q2 R
  else
$ |4 }: p$ z+ ^5 {0 E0 [    if [ "`id -u`" -eq 0 ]; then
$ B9 O6 E% g+ P7 Q      PS1='# '& E0 `, w, R* b' N
    else8 y- u' J8 j+ D$ D, c
      PS1='$ ', ^- e6 K# P, D$ p# D6 h/ ^2 {9 h
    fi
! y! x  j+ }5 p* r  fi% V2 i2 L; x+ _: j' C2 Z  |
fi
9 u6 Q- f" T0 J" F
0 r+ U8 \2 R* W7 iif [ -d /etc/profile.d ]; then0 k; B4 F2 M% P, b# y: p
  for i in /etc/profile.d/*.sh; do
7 {  B6 T+ `* F) `6 u    if [ -r $i ]; then
# v, l/ |( W. R+ a* p( E8 S      . $i' M" h- D# a' ^4 P* }/ b
    fi9 Y# z. H4 R* L- u; ^
  done
* V  ~* L; k& e+ {" S9 P1 @  unset i- }6 f. Y$ x  F1 w! Z
fi+ \9 N% j' h& |' |  L: Y9 o. @
其次再打开~/.profile文件,会发现该文件中加载了~/.bashrc文件。
# if running bash. F6 m& U# t0 K' W
if [ -n "$BASH_VERSION" ]; then, _( a. U) P9 Z% v
    # include .bashrc if it exists" N8 H1 P. _4 W# J: q
    if [ -f "$HOME/.bashrc" ]; then
8 h8 |  t2 P6 i  C$ e# e. y . "$HOME/.bashrc"
% y* @' i( M4 [) `; J- o4 e    fi& v8 \9 t8 R9 u
fi
3 R& f. R+ x! H% g) |
- t4 u* k% f5 p# set PATH so it includes user's private bin directories* x3 g5 d/ b$ }3 `- u; ?! Y; `6 }
PATH="$HOME/binHOME/.local/binPATH"0 O; l/ g! H+ u4 o( F
从~/.profile文件中代码不难发现,/.profile文件只在用户登录的时候读取一次,而/.bashrc会在每次运行Shell脚本的时候读取一次。
一些小技巧
可以自定义一个环境变量文件,比如在某个项目下定义uusama.profile,在这个文件中使用export定义一系列变量,然后在~/.profile文件后面加上:sourc uusama.profile,这样你每次登陆都可以在Shell脚本中使用自己定义的一系列变量。
也可以使用alias命令定义一些命令的别名,比如alias rm="rm -i"(双引号必须),并把这个代码加入到~/.profile中,这样你每次使用rm命令的时候,都相当于使用rm -i命令,非常方便。
7 Q5 I7 J, s* n. v/ M
赞 收藏 评论0 发布时间:2020-12-3 22:10

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版