解压 jdk 到指定位置
首先,有一个 Java 环境的 jdk 包:jdk-8u191-linux-x64.tar.gz
其次,把这个 jdk 移动到虚拟机里面,最好不要直接就放到 ~ 目录中( ~ 目录就是 /home/你的用户名字),建议放到 /usr/loacal/java 目录下
因此,有如下命令和对应的命令执行时返回输出:
[root@localhost ~]# mkdir -p /usr/local/java
[root@localhost ~]# sudo mv ~/jdk-8u191-linux-x64.tar.gz /usr/local/java/
[root@localhost ~]# cd /usr/local/java
[root@localhost java]# ls
jdk-8u191-linux-x64.tar.gz
[root@localhost java]# sudo tar -zxvf jdk-8u191-linux-x64.tar.gz
jdk1.8.0_191/
jdk1.8.0_191/javafx-src.zip
jdk1.8.0_191/bin/
jdk1.8.0_191/bin/jmc
jdk1.8.0_191/bin/serialver
jdk1.8.0_191/bin/jmc.ini
jdk1.8.0_191/bin/jstack
jdk1.8.0_191/bin/rmiregistry
jdk1.8.0_191/bin/unpack200
...
...
jdk1.8.0_191/jre/lib/fontconfig.SuSE.10.properties.src
jdk1.8.0_191/jre/lib/fontconfig.SuSE.11.bfc
jdk1.8.0_191/jre/COPYRIGHT
jdk1.8.0_191/jre/THIRDPARTYLICENSEREADME-JAVAFX.txt
jdk1.8.0_191/jre/Welcome.html
jdk1.8.0_191/jre/README
jdk1.8.0_191/README.html
# 至此,jdk 解压完毕啦,进入对应的java 目录,
# 应该能看的解压好的安装包对应的文件夹
# (我的是叫 jdk1.8.0_191, 你的可能不是这个名字,这个名字在 jdk 中指定的)
[root@localhost java]# ls
jdk1.8.0_191 jdk-8u191-linux-x64.tar.gz
[root@localhost java]# cd jdk1.8.0_191/
[root@localhost jdk1.8.0_191]# ls
bin include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
COPYRIGHT javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
设置环境变量
要让系统认识这个 JDK,需要设置环境变量。最常用的是修改 /etc/profile(系统全局生效)
由于我们解压后的目录是 : /usr/local/java/jdk1.8.0_191
因此,想要永久生效,需要 编辑 /etc/profile( 注意编辑的时候需要 sudo)
sudo vi /etc/profile
在末尾加:
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
注意 配置 JAVA_HOME、PATH、CLASSPATH 等环境变量 是根据你解药jdk包的位置指定的
修改后的配置文件如图所示:

然后让配置立即生效,执行:
source /etc/profile
通过命令 查看version 看环境是否配置成功
[root@localhost jdk1.8.0_191]# source /etc/profile
[root@localhost jdk1.8.0_191]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
环境变量配置的延伸:
为什么我把profile 对应的Java都注释掉了,然后也source了,为什么:
[root@hadoop101 profile.d]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
依旧有返回 ?
Linux 的环境变量是「进程级别」的:
-
每次你登录 ssh / 开新终端,都会新建一个 shell 进程
-
这个新进程会重新加载
/etc/profile和/etc/profile.d/*.sh -
所以只需要重新登录 / 新开一个 shell 就能看到新配置生效 / 旧配置失效
/etc/profile vs /etc/profile.d/
| /etc/profile | /etc/profile.d/*.sh | |
|---|---|---|
| 本质 | 主配置文件(脚本) | 存放子脚本目录 |
| 加载时机 | 用户登录交互式 shell 时 | /etc/profile 里自动循环 source 所有 *.sh |
| 风险 | 覆盖会影响整个系统 | 每个小脚本独立,不影响其他 |
| 推荐 | 不直接改动 | 推荐新建脚本放这里 |
由于在 /etc/profile 上增加 Java的环境变量相当于在系统环境配置上增加 Java配置,
当我们有分发配置的运维需求时,就有些难以处理,因此,更推荐使用下述的 profile.d的方式:
为什么生产环境都推荐用 profile.d/
-
不破坏系统原有配置
-
更易管理:想删环境变量就删对应脚本
-
多个软件各放一个脚本,不会相互覆盖
具体操作(假设你三台机器 /usr/java 里已经有 jdk1.8.0_191)
如果还没有,那么执行:
scp -r /usr/java/ hadoop103:/usr/ 就可以把hadoop101 的 /usr/java/ 文件夹下属的内容全部移动到 hadoop103 中了
1) 在 hadoop101 上创建:
cat >/etc/profile.d/java.sh <<EOF
export JAVA_HOME=/usr/java/jdk1.8.0_191
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
2) 在 hadoop101机器上执行下述命令,将配置文件分发到 hadoop102 和 hadoop103:
[root@hadoop101 profile.d]# scp /etc/profile.d/java.sh hadoop102:/etc/profile.d/
java.sh 100% 73 147.9KB/s 00:00
[root@hadoop101 profile.d]# scp /etc/profile.d/java.sh hadoop103:/etc/profile.d/
java.sh 100% 73 169.2KB/s 00:00
3) 立即生效:
在每台机器(101/102/103)执行:
source /etc/profile.d/java.sh
4) 测试:
java -version
JDK 位置移动
由于配置部署需要,我要将jdk移动个位置,这时候,涉及到一个相当重要,且小白都会担心的事情:
我不知道我这么 mv移动后,我是不是就全都移动完毕了?会不会Java还有什么东西散落在其他我不知道的角落,然后由于我就只是移动了这个 jdk1.8.0_191 文件夹,其他的没兼顾到,反而出错?
回答是:真正 Java 能运行的,只需要那个 jdk1.8.0_191 目录,它本身就是一个完整的、自包含的运行时,里面该有的都有:bin、lib、include、jre …
Java 没有散落在别处,不需要担心。
我的当前文件夹内容如下:

893

被折叠的 条评论
为什么被折叠?



