linux小白对系统环境变量的一些不解和迷惑解析
linux涉及环境变量的日常问题解释
一、案例一
配置完环境变量后不生效?:
如配置了全局环境变量如下:
然后查看Java版本并没有变化
需要检查系统环境变量配置与优先级
以下配置优先级顺序从左到右以此降低
需将java的环境变量优先级调高
可以将配入/etc/profile中的参数
export PATH=$PATH:$JAVA_HOME/bin
改为
export PATH=$JAVA_HOME/bin:$PATH
重新source /etc/profile发现Java环境变量优先级变高了且java版本也生效了
二、案例二
为什么有的服务可以用任意目录启动为什么有的服务只能去特定的bin/目录下启动?
原因:可以在任意目录下启动的可执行程序是因为配置了全局环境变量
使用下面命令可以查询验证:
echo $PATH
会列出当前系统所有的环境变量生效目录
which 服务可执行程序
例:
which helm
会列出可执行程序helm的具体位置,可以发现可全局使用的可执行程序 helm 处于$PATH下的某一个目录下
如果 which 查不到结果,就说明可执行程序并没有配置全局生效
将需要全局执行的可执行程序复制到$PATH任一目录下(通常是/usr/bin或/usr/local/bin目录下,前提是这两个目录处于 $PATH所列出的结果中),然后再任一目录下都可以执行了。
三、案例三
在linux中安装软件或服务时为什么有的可以使用 systemctl 来管理服务,有的却提示找不到服务?
原因:使用systemctl管理需要相关的.service文件,大多数情况下该文件存在于/etc/systemd/system/目录下,而一些软件或服务在安装过程中并不会自动创建相关的.service文件。
下面为一个service配置例子:
mysqld.service:
[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
# 指向服务启动的可执行程序用于启动或停止
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
ExecStop=/usr/bin/mysqladmin shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
因此将不会自动创建service文件的服务手动创建 name.service 文件后且放于/etc/systemd/system/下后,即可使用system start / stop / restart name.service来管理自己的服务了