Linux learning note
1、环境变量
环境变量(environment variables)即系统运行的一些环境参数。主要的环境变量有以下这些:
- PATH:决定了系统查找可执行文件的目录范围。
- HOME:指定当前用户的主目录路径,其实就是~目录。
- USER:当前用户的用户名。
- SHELL:指定当前用户默认使用的shell。
- LANG:指定系统的默认语言。
- LD_LIBRARY_PATH:指定系统在哪些目录中查找共享库文件。
- TERM:指定当前终端的类型。
而以上这些环境变量大致可以做以下区分:
-
按生命周期分为:
- 永久的:在脚本文件中配置,永远生效。
- 临时的:在终端里配置,仅在该终端有效。
-
按作用域分为:
-
系统环境变量:对所有用户都生效。
-
用户环境变量:仅对某一用户生效。
-
2、关于环境变量的配置文件
用户开启Linux的时候,会调用许多配置文件,其中包括一些包含环境变量的文件。所以如果想要配置环境变量,就需要去修改这些文件。
- 对所有用户都生效的配置文件:/etc/profile 和 /etc/profile.d 文件夹
- 对当前用户生效的配置文件:~/.bashrc 和 ~/.bash_profile
通过查看这些文件的内容可以知道,/etc/profile这个文件会去执行/etc/profile.d这个文件夹下面的所有.sh文件(脚本文件)。之后bash会按顺序的读 ~/.bash_profile , ~/.bash_login, ~/.profile 这三个文件中的一个,即如果 ~/.bash_profile 存在就不读其它两个了,以此类推,如果没有 ~/.bash_profile 文件就读 ~/.bash_login。并且 ~/.bash_profile , ~/.bash_login, ~/.profile 这三个文件,如果存在,我们一定其脚本中开到这样一个判断语句:
这个意味着,无论执行这三个文件中的哪一个,最后都会去执行.bashrc文件。
总结一下,对于所有用户来说,/etc/profile.d下的脚本文件是一定会被执行的。而对于当前用户来说 ~/.bashrc文件也一定会被执行。因此如果想要修改环境变量,建议修改这两个。看看以下的流程图:
2.1、修好PATH环境变量(用户级别)
接下来我以最常用的
P
A
T
H
PATH
PATH环境变量来玩排列组合,举例如何在配置文件中修改环境变量。
先假设我的可执行文件放到
/
h
o
m
e
/
y
u
q
u
a
n
/home/yuquan
/home/yuquan这个目录下,故接下来的任务就是把这个目录放进
P
A
T
H
PATH
PATH的环境变量中。
1、永久的修改所有用户的环境变量
进入 /etc/profile.d文件夹。
cd /etc/profile.d
再新建一个自己的脚本文件,比如我这里取名为add_path.sh。
在脚本文件中添加我们想要添加环境变量,我这里添加的是我自己的用户目录,即$HOME。
export PATH=$PATH:$HOME/
最后重启Linux,这个环境变量就能生效了。这是因为/etc/profile这个文件是启动Linux的时候才会调用,而不是你每打开一个终端就调用一次。
2、永久的修改用户环境变量
vi ~/.bashrc
进入.bashrc文件,然后在文件尾部添加以下代码。
export PATH=$PATH:/home/yuquan
为使修改即可生效,可输入:
source ~/.bashrc
或
. ~/.bashrc
如果不输入以上语句,那么只有等你打开另一个终端的时候,该用户环境变量才会生效。因为.bashrc文件是每打开一个终端就会调用一次。
3、临时的修改所有用户环境变量
应该没这个东西。
4、临时的修改用户环境变量
直接在终端输入以下代码,即可立刻生效:
export PATH=$PATH:/home/yuquan
当然我们也可以通过以下命令查看所有关于
P
A
T
H
PATH
PATH的环境变量:
echo $PATH
2.2、修改系统的环境变量(系统级别)
在2.1小节中,我仅介绍了针对用户而言的环境变量。但在Linux中只有通过login shell开启的shell进程会执行profile和.bashrc这些文件。那么如果我们想以non-login模式打开shell进程,又希望该shell进程有一些我们自己定制的环境变量。我们就可以修改environment文件:
vim /etc/environment
然后用以下指令或重启一个终端就可以激活该环境变量了。每次打开一个终端都会调用一次environment文件。
source /etc/environment
当然即便你用的是login shell模式开启shell进程,终端还是会调用environment文件的,因此修改environment同时适用于两种模式。