环境变量的配置
title: linux设置环境变量
date: 2020-12-24 15:17:34
tags: [linux]
categories:
- linux
abbrlink: linux-profile
我今日就要带佢走,我睇下边个够胆拦我。 ——伍六七 《刺客伍六七》
本文介绍Linux/Unix操作系统下,如何设置变量,以及如何将变量升级为环境变量。
操作变量的命令
查询变量值
echo $PATH ;
echo ${PATH};
设置变量值
foo=bianliang;
等号两边不能有空格,比如下面这样会报错:
foo = bianliang;
foo=bian liang;
如果变量值中有空格,用单引号或双引号括起来
foo = 'bian liang';
取消变量
unset foo;
$()命令替换
用$()或``包裹命令常用于命令替换
foo=$(uname);
echo $foo; #输出uname命令的返回值,在我的mac上是Darwin
环境变量
普通变量的作用域只局限于当前程序。
通过export命令,可以将普通变量升级为环境变量,环境变量就可以作用于整个操作系统内啦。
export foo;
foo=klhans;
zsh; #进入子程序,我用的是zshell,如果是bash shell的话命令改为bash;
echo $foo; #输出为空,子程序中没有这个变量
exit; #回到父程序
export foo; #设置为环境变量
zsh;
echo $foo; #输出klhans,设置环境变量成功!
也可以在声明变量的同时,升级为环境变量
export foo=hans;
env/export查看环境变量
env;
export;
在我的mac上部分输出如下:
$PATH变量
我们在命令行下运行某个命令的时候,这个命令往往不在当前目录下,那os怎么知道去哪找这个命令呢,总不能搜索所有目录吧。
$PATH变量就是用于保存搜索目录的变量,如果输入的命令不在当前目录下,那么os就会读取$PATH变量对应的目录,依次从目录中寻找命令,如果$PATH变量对应的目录中也没有找到命令,那就说明真的没有这个命令啦
我们可以将常用的命令保存在$PATH变量中,这样就不需要进入特定的目录啦,但是注意不要覆盖系统原有的变量,否则一些系统命令就执行不了啦,比如cd
命令😅。
所以我们一般选择在原有的$PATH上追加上我们的新环境变量,命令如下
追加/添加变量
PATH=${PATH}:/home/bin;
PATH=${PATH}:${JAVA_HOME}/bin;
环境变量配置文件
不写入文件的变量或环境变量在注销shell之后就会失效,如果想要变量一直保留,就要写入配置文件
配置文件读取流程
shell根据用户是否登录区分为login shell和 non-login shell,这两种shell读取的配置文件是不同的,所以我们分开来说,先说login shell
login shell
login shell会读取两种配置文件:
- 系统配置文件
- 用户配置文件
/etc/profile是系统的变量配置文件,被所有用户共享。
读取完/etc/profile之后,会去读取用户私有的配置文件,在bash shell中用户私有的配置文件主要有三个,优先级高的配置文件读取到之后,就不会再读取优先级低的配置了,也就是说,用户私有的配置文件只会有一个生效!优先级从高到低是:
-
~/.bash_profile
-
~/.bash_login
-
~/.profile
另外~/.bash_profile中os预写了逻辑,会去主动读取~/.bashrc中的变量,所以~/.bashrc中的变量也会生效,总流程图如下:
non-login shell
non-login shell 只会读取~/.bashrc一个配置文件
source或.使配置文件立即生效
由于变量配置文件只会在shell启动的时候读取一次,所以如果不想退出当前shell的话,要用source或.命令主动读取配置文件并生效。
source ~/.bash_profile;
. ~/.bash_profile;
参考
《鳥哥的 Linux 私房菜》
程序员Fy
已于 2022-07-25 17:03:35 修改
308
收藏 9
文章标签: linux bash 运维
版权
目录
Linux中的shell详解
什么是shell
shell中的变量
普通变量
环境变量
在文件中设置环境变量(永久生效)
显示与取消变量
(1)通过 echo 或 printf 打印变量
(2)显示默认的环境变量
(3)用 unset 消除本地变量和环境变量
环境变量设置实例
Linux中的shell详解
什么是shell
shell:壳,命令解释器,负责解析用户输入的命令。命令分两类:
type 命令查看命令是file、alias还是builtin
type -a列出当前命令可以如何执行
type -t仅列出命令按照哪种方式执行
1
2
内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多外置命令,在文件系统的某个目录下,有个与命令名称相同的文件
系统为了让用户在命令行快速方便地执行命令,将可执行文件的
路径存储在环境变量PATH中。
1
2
shell中的变量
上图中用户与有关环境变量的文件已经展示,如果想要定义针对某一个用户的变量,就在 .bash_profile 或者 .bashrc 文件中写入,如果要为所有用户定义就在另外3个文件中定义。
变量简单说就是让某一个特定字符串代表不固定的内容,变量可分为两类:环境变量(全局变量)和普通变量(局部变量)
普通变量
普通变量也可称为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建。
设置变量:
变量命名的规则:只能使用数字、字母和下划线,且不能用数字开头
变量名和变量值用“=”连接
等号两边不能有空格符
1
2
3
2, 变量的赋值,一般有五种写法:
name=value
name1='value'
name_2="value"
_name_3=`cmd`
_na_me_4=$(cmd)
1
2
3
4
5
环境变量
环境变量也可称为全局变量,可以在创建它们的Shell 及其派生出来的任意子进程 Shell 中使用,环境变量又可分为自定义环境变量和 bash 内置的环境变量。
(1)bash内置的环境变量:用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell 通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等
(2)自定义环境变量:自定义环境变量可以在命令行中设置和创建,但用户退出命令时这些变量值就会丢失。如果希望永久保存环境变量,可在用户家目录下的.bash_profile 或 .bashrc文件中,或者全局配置/etc/bashrc或 /etc/profile 文件中定义,在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化。
按照系统规范,所有环境变量的名字均采用大写形式。
在文件中设置环境变量(永久生效)
root用户的环境变量配置文件:
[root@www ~]$ ls /root/.bashrc # 推荐在此文件中优先设置
/root/.bashrc
[root@www ~]$ ls /root/.bash_profile
/root/.bash_profile
1
2
3
4
所有用户生效的环境变量配置文件:
[root@www ~]$ll /etc/profile
[root@www ~]$ll /etc/bashrc
[root@www ~]$ll /etc/profile.d/ 若要在登陆后初始
化或显示加载内容,则把脚本文件放在 `/etc/profile.d/`
下即可(无需加载执行权限)
1
2
3
4
5
示例:设置生产环境下的Java环境变量,将以下内容写入以上任意一个文件即可。
显示与取消变量
(1)通过 echo 或 printf 打印变量
(2)显示默认的环境变量
(3)用 unset 消除本地变量和环境变量
环境变量设置实例
例1:创建普通变量local_data=1并且访问
如下:
[root@localhost ~]# export local_data=1
[root@localhost ~]# echo $local_data
1
1
2
3
例2:创建环境变量ROOT_DATA=root,只有root用户可以访问。
一:环境变量只有root用户可以访问,那么就在root的家目录中创建环境变量。如下:
[root@localhost ~]# vim .bashrc 进入这个文件
1
然后在这个文件最后一行写入如下代码。
保存并退出,再用source命令刷新这个文件最后访问这个变量:输出结果为 root
[root@localhost ~]# source .bashrc
[root@localhost ~]# echo $ROOT_DATA
root
1
2
3
注意:必须先用source刷新这个文件,不然不会生效
二:xshell切换到普通用户登录,本人普通用户名是redhat
如下:
[C:\~]$ ssh redhat@192.168.107.129 登录普通用户redhat
[redhat@localhost ~]$ echo $ROOT_DATA 再访问ROOT_DATA 访问不到了。
1
2
例4:创建环境变量DATA=all,root和普通用户都可以看到
一:在/etc/bashrc文件里面最后一行写入代码:
export DATA=all
1
然后退出刷新文件,访问这个文件:输出all
[root@localhost ~]# source /etc/bashrc
[root@localhost ~]# echo $DATA
all
1
2
3
二:切换到普通用户:
刷新并且访问这个变量,发现可以访问了。
[redhat@localhost ~]# source /etc/bashrc
[redhat@localhost ~]# echo $DATA
all
————————————————
版权声明:本文为CSDN博主「程序员Fy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fuyuo/article/details/125858539