Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法。 下面所有例子的环境说明如下:
读取环境变量的方法:
这两个命令执行的效果如下 uusama@ubuntu:~$ exportdeclare -x HOME="/home/uusama"9 G+ J; h- ^) g5 _! ?# f$ C7 S declare -x LANG="en_US.UTF-8" declare -x LANGUAGE="en_US:"' n" D! O' w7 {4 d declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"1 o) m. X# L2 P/ s. s% S declare -x LESSOPEN="| /usr/bin/lesspipe %s"" {6 N1 B, K% p3 ?5 H! v4 S0 t declare -x LOGNAME="uusama" declare -x MAIL="/var/mail/uusama"9 \' B j& `: ~- H3 O2 T declare -x PATH="/home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"5 \0 |, p/ y3 @: ]4 `# Q declare -x SSH_TTY="/dev/pts/0" declare -x TERM="xterm"% O1 n- ^7 D5 ]$ a/ s declare -x USER="uusama" uusama@ubuntu:~$ echo $PATH /home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 其中PATH变量定义了运行命令的查找路径,以冒号:分割不同的路径,使用export定义的时候可加双引号也可不加。 Linux环境变量配置方法一:export PATH使用export命令直接修改PATH的值,配置MySQL进入环境变量的方法: export PATH=/home/uusama/mysql/binPATH9 b. B; i) K5 s6 S$ m#或者把PATH放在前面 export PATH=$PATH:/home/uusama/mysql/bin- U) V2 l$ ~8 L! W0 W1 G* r4 A 注意事项:
通过修改用户目录下的~/.bashrc文件进行配置: vim ~/.bashrc# 在最后一行加上5 E1 X8 }' g3 H/ e& r export PATH=$PATH:/home/uusama/mysql/bin. \- k4 O ?0 Z; D" } 注意事项:
和修改~/.bashrc文件类似,也是要在文件最后加上新的路径即可: vim ~/.bash_profile, I- B( v1 p1 d) y# E# 在最后一行加上 export PATH=$PATH:/home/uusama/mysql/bin 注意事项:
该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限: # 如果/etc/bashrc文件不可编辑,需要修改为可编辑chmod -v u+w /etc/bashrc vim /etc/bashrc8 h6 A F" B& i7 x1 R3 [ # 在最后一行加上 export PATH=$PATH:/home/uusama/mysql/bin 注意事项:
该方法修改系统配置,需要管理员权限或者对该文件的写入权限,和vim /etc/bashrc类似: # 如果/etc/profile文件不可编辑,需要修改为可编辑- c3 b* a5 Y( l1 S3 @chmod -v u+w /etc/profile vim /etc/profile # 在最后一行加上 export PATH=$PATH:/home/uusama/mysql/bin 注意事项:
该方法是修改系统环境配置文件,需要管理员权限或者对该文件的写入权限: # 如果/etc/bashrc文件不可编辑,需要修改为可编辑. z, Z9 j" Q; u6 ~chmod -v u+w /etc/environment ) U% e* A, }$ F! x+ L vim /etc/profile # 在最后一行加上 export PATH=$PATH:/home/uusama/mysql/bin9 p$ I0 r1 `& {; a% M5 ~ 注意事项:
上面列出了环境变量的各种配置方法,那么Linux是如何加载这些配置的呢?是以什么样的顺序加载的呢? 特定的加载顺序会导致相同名称的环境变量定义被覆盖或者不生效。 环境变量的分类 环境变量可以简单的分成用户自定义的环境变量以及系统级别的环境变量。
另外在用户环境变量中,系统会首先读取~/.bash_profile(或者~/.profile)文件,如果没有该文件则读取~/.bash_login,根据这些文件中内容再去读取~/.bashrc。 测试Linux环境变量加载顺序的方法为了测试各个不同文件的环境变量加载顺序,我们在每个环境变量定义文件中的第一行都定义相同的环境变量UU_ORDER,该变量的值为本身的值连接上当前文件名称。 需要修改的文件如下: /etc/environment/etc/profile /etc/profile.d/test.sh,新建文件,没有文件夹可略过: Y5 _, t# ^! L. Z; _ /etc/bashrc,或者/etc/bash.bashrc w1 |2 P# |$ A8 n ~/.bash_profile,或者~/.profile ~/.bashrc 在每个文件中的第一行都加上下面这句代码,并相应的把冒号后的内容修改为当前文件的绝对文件名。 export UU_ORDER="$UU_ORDER:~/.bash_profile"修改完之后保存,新开一个窗口,然后echo $UU_ORDER观察变量的值: uusama@ubuntu:~$ echo $UU_ORDER% K- m) A! k- x" V8 i& l6 E2 M' m$UU_ORDER:/etc/environment:/etc/profile:/etc/bash.bashrc:/etc/profile.d/test.sh:~/.profile:~/.bashrc 可以推测出Linux加载环境变量的顺序如下: /etc/environment# ~5 ]3 g1 X/ w6 f' f" t" m/etc/profile) `$ R( g5 A& m: q5 R /etc/bash.bashrc" _( n! b* h; ]# ?! Z. y4 K /etc/profile.d/test.sh ~/.profile ~/.bashrc 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))# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...)." b# q3 C" F6 J% e. U% D/ D4 R7 m " x. Q" {3 F4 C L5 d, G- V4 n if [ "$PS1" ]; then if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1.0 @! p1 Q: f# H! ?3 B; M! s. ^/ Q # PS1='\h:\w\$ '! P$ r" L \) b, C/ y if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else6 V/ D+ ?, y* u4 g/ \- l if [ "`id -u`" -eq 0 ]; then PS1='# '1 q0 y/ E) f* Q: @ else9 W6 h6 h4 M0 N- }& r" i4 v# Q% d2 u PS1='$ ' fi fi fi1 @! c; H9 D7 o4 @' z- v1 ? 1 d2 g5 B o8 ? if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do- y4 E4 \' K1 r; T' Y' F" L! d if [ -r $i ]; then . $i fi done unset i9 m& q w+ y1 j fi 其次再打开~/.profile文件,会发现该文件中加载了~/.bashrc文件。 # if running bash3 ]9 a7 ^& W' I# lif [ -n "$BASH_VERSION" ]; then# E, s1 I4 ~" @, r$ ~ # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then2 g1 U% A3 z: x, @2 d( i! u, w( N . "$HOME/.bashrc"& A% o3 _+ p) l* I% b1 r p4 J fi: w- E9 f: w3 a3 R; q fi( T' y- r% m2 J" B$ v) O0 p$ P A' k. T; w/ E" H; O8 | # set PATH so it includes user's private bin directories. f" w! f' P, q' K" s; a; I! p PATH="$HOME/binHOME/.local/binPATH"3 G# R7 N# B p e" V% ^ 从~/.profile文件中代码不难发现,/.profile文件只在用户登录的时候读取一次,而/.bashrc会在每次运行Shell脚本的时候读取一次。 一些小技巧可以自定义一个环境变量文件,比如在某个项目下定义uusama.profile,在这个文件中使用export定义一系列变量,然后在~/.profile文件后面加上:sourc uusama.profile,这样你每次登陆都可以在Shell脚本中使用自己定义的一系列变量。 也可以使用alias命令定义一些命令的别名,比如alias rm="rm -i"(双引号必须),并把这个代码加入到~/.profile中,这样你每次使用rm命令的时候,都相当于使用rm -i命令,非常方便。 ; i+ I; V' r" b |