Linux环境变量及其配置

2023-06-13,,

为什么要说这个呢?

本人喜欢使用Linux开发(工作是个硬要求,有些时候不能使用Linux,比如我上一个工作。但是有些时候呢,工作环境比较开放,我可以选择我喜欢的系统进行工作:比如我现在的工作。红红火火~,下次给大家分享我的Ubuntu).我呢对日常工作对鼠标点点点并不敏感,还是喜欢快捷的命令行。这里举例子也是,也是基于Ubuntu系统哈,其实配置都是一样的。

1、环境变量 - profile和bashrc文件的区别

如果配置过Linux的环境变量就会知道,在服务器上的Linux配置环境变量是修改/etc/profile文件。而桌面版的Linux发行版,我们会纠结使用哪个文件保存环境变量如:

/etc/profile
/etc/bashrc
~/.profile
~/.bashrc

shell可以分为login shell / non-log shell / interactive shell / non-interactive shell

login shell登陆式shell,需要登陆校验用户密码后执行的shell,如su - xx ,ssh连接。
non-login shell,非登陆式shell,通常只要是当前用户打开的终端,不去校验登陆。如 bash -c "xxx"命令、桌面系统打开终端,都是使用non-login shell方式
interactive,交互式shell,就是通常变输入命令,边执行
non-interactive,非交互式shell,如shell脚本。

这四种shell举例如下:

登陆式shell 非登陆式shell
交互式shell ssh 登陆,su 登陆 新打开一个终端
非交互式shell 运行一个脚本 比较罕见,可以使用bash -l -c 启动一个看看

参考:https://askubuntu.com/questions/879364/differentiate-interactive-login-and-non-interactive-non-login-shell

环境变量配置文件和不同的shell相关,登陆式shell,加载profile文件。非登陆式shell,不加载profile文件,加载bashrc文件。非交互非登陆shell不加载任何环境变量文件,它直接使用$BASH_ENV

bashrc 是主要作用于non-login shell
profile 是主要作用于login shell
etc下是作用在全局,而~/下的文件只是作用与此用户
etc目录下和~下的文件具有继承关系

所以我们每次登陆都会加载/etc/profile -> /.profile,而当创建新的终端时,则会加载bashrc和/.bashrc文件。其实我们配置环境变量在哪个文件内都可以起作用,如果配置到profile文件中,则需要注销重新登录或重启电脑;而配置到bashrc文件中,则只需要重新打开新的终端或source即可。如果是在/etc目录,这全部用户都可用;反之,只有此用户可用。

2、JDK环境变量配置

上面我们说过了profile和bashrc两种文件的区别,而配置jdk环境变量我们应当配置在哪个文件中呢?

首先,我们通常在server中配置环境变量通常都是直接修改/etc/profile文件,为什么这样干?因为企业中一个服务器,因为每个人的权限不同,会产生很多很多用户使用这台server,而server通常是用来部署服务,所以不管哪个用户登录到此server上,都要能够使用到java的环境变量,这种全部用户都可使用且冗余环境没什么影响的时候,通常选择一个全局的配置项。

然而如果是个人电脑呢?哈哈,我呢同样是建议使用全局配置。为啥?因为Linux系统,是一个天生多用户操作系统,且我们既然涉及到环境变量配置,少不了是用来做开发。所以日常使用中会经常切换用户(比如普通用户切换到root)如果只在普通用户的home下配置.bashrc环境,切换到root后是没有java环境的,这样我们还要再重新配置。

1. JDK下载(openJDK)

我这里使用JDK11,jdk11下载:https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
其他版本下载地址:https://jdk.java.net/
Open jdk其实已经趋于成熟,本质上和Oracle jdk没有什么区别。现在Oracle jdk下载已经需要登录了,所以还是OpenJdk省时间。我们常用的jdk版本无非是jdk8和jdk11,如果是自己开发,选择一个更高版本的吧,即能促进自己的进步又能学习更新的技术。老的早晚会被淘汰。
jdk安装目录:/usr/local/jdk11

2. JDK11环境变量配置 - 修改profile文件

sudo cp /etc/profile /etc/profile.bak
sudo vim /etc/profile
# 在文件末尾追加
export JAVA_HOME=/usr/local/jdk11
export PATH=$JAVA_HOME/bin:$PATH
# 因为jdk11中已经不包含jvm的环境了,所以我们就没必要去配置CLASSPATH,如果使用jdk8,如下
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

修改完profiles文件需要注意一个问题

上述配置完成后,如果是桌面环境,使用 source /etc/profiles 只能使当前会话java环境变量生效。如果要生效,需要重新登录或重启电脑。

3. JDK11环境变量配置 - 使用profile.d目录

都1202了,我呢,还是希望大家别在使用修改/etc/profile文件的方式去配置环境变量了。/etc/profile中的内容是非常重要的,一旦因误操作(因为大家都是使用vim,万一在某一行多按了两下dd)导致环境变量错误是得不偿失的。

那么多次,我们到/etc目录下,难道大家就没有发现存在一个目录: /etc/profile.d 吗?通常Linux中xxx.d的目录都是自动加载配置文件的目录,所以我们也只需要在里面新建个文件即可。虽然说不是直接修改的profile文件,但本质上是一样的,同样是登录时才会重新加载profile文件及其profile.d文件夹下的变量。所以桌面环境需要重新登录。

cd /etc/profile.d
sudo vim dev-soft-path.sh
# 在文件中添加Java环境变量即可
export JAVA_HOME=/usr/local/jdk11
export PATH=$JAVA_HOME/bin:$PATH
# 因为jdk11中已经不包含jvm的环境了,所以我们就没必要去配置CLASSPATH,如果使用jdk8,如下
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

4. 检查环境变量配置是否生效

修改profile类文件:需要重新登录
修改bashrc类文件:当前会话只需要执行 source ~/.bashrc重新加载环境变量;新创建会话会自动加载。

# 执行一下java命令查看java环境变量是否达到期望
$ java
$ javac
$ java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

3、Maven环境变量配置

配置Maven环境变量需要依赖Java环境,否这无法执行mvn命令。

Maven是我们开发中最最常用的一个包管理工具了吧。所以我们配置了Maven的环境变量,就能直接在终端中使用命令打包,释放了ide,也减少了在ide中的配置,习惯了用起来很爽的。Maven环境变量的配置和JDK环境变量是差不多的,也可以所是一样的。

1. 下载Maven包

官方下载地址:https://archive.apache.org/dist/maven/maven-3/

清华源:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/

官方下载比较慢,所以大家一定要学会使用国内源。学习Linux也是一样的,如果不使用国内源的话,网速会调教你的。清华源与163算是两个比较古老的国内源了,都是非常挺稳定且网速跟的上的。

安装地址:/usr/local/maven3

2. 配置Maven环境变量 - 修改/etc/profile

#解压  -C 指定解压目录
sudo tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/maven3
#复制Maven文件路径
# 如:/usr/local/maven3
sudo cp /etc/profile /etc/profile.bak
sudo vim /etc/profile
# 在profiles文件末尾加上
# maven
export MAVEN_HOME=/usr/local/maven3
export PATH=$PATH:$MAVEN_HOME/bin

修改后重新登陆后生效

3. 配置Maven环境变量 - 使用/etc/profile.d文件夹

cd /etc/profile.d
sudo vim dev-soft-path.sh
# 添加Maven环境变量即可
export MAVEN_HOME=/usr/local/maven3
export PATH=$PATH:$MAVEN_HOME/bin

修改后重新登陆生效

4. 检查配置是否生效

修改profile类文件:需要重新登录
修改bashrc类文件:当前会话只需要执行 source ~/.bashrc重新加载环境变量;新创建会话会自动加载。

# 执行mvn命令
$ mvn -version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3
Java version: xxxx, vendor: Oracle Corporation, runtime: xxxx
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.8.0-41-generic", arch: "amd64", family: "unix"

4、Maven配置修改

Maven默认的本地仓库地址是/path/to/local/repo,远程仓库默认:http://my.repository.com/repo/path

所以如果使用默认的,会下载jar包特别慢。

设置本地仓库地址

  <localRepository>${HOME}/.repository</localRepository>

添加国内Maven镜像

<!-- 阿里云仓库服务:https://maven.aliyun.com/mvn/guide -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>Alibaba</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

Linux环境变量及其配置的相关教程结束。

《Linux环境变量及其配置.doc》

下载本文的Word格式文档,以方便收藏与打印。