【Linux笔记】一起入门Linux咯 | 环境变量

一起入门Linux咯 | 环境变量管理

  • 前提概念
    • 什么是环境变量
    • 环境变量的划分
    • 环境变量的注意事项
  • 环境变量常用命令
    • 命令
    • 功能
  • 设置永久性系统环境变量
    • 什么是永久性系统环境变量?
    • 实现永久性环境变量的原理
    • 环境变量相关配置文件
    • 如何实现永久性环境变量?
  • 环境变量的作用与应用
    • 把路径加入PATH
    • 别名

前提概念


什么是环境变量?

环境变量就是系统预定义的变量,windows下也有,就比如在windows下经常要配置路径到path变量下,JAVA_HOME等待。所以,它有很多的作用:

  • 通过一个变量就可以指向一个很复杂的数据或信息
  • 如果多个地方使用到了同一个东西,我们可以把它抽象成一个变量
  • 可以快速的执行某些二进制执行文件,而不需要打一长串的路径
环境变量的划分
linux下的环境变量可以分为两种

linux下的环境变量根据可见性可以分为Shell变量和系统环境变量两种,说白了就是局部变量和全局变量,但是我们要清楚“局部”“全部”分别代表的是什么

  • Shell变量
    shell变量,又称局部变量,shell变量只允许当前shell使用,无法提供给其他的shell或程序使用, 即该变量只对当前shell是可见的
  • 系统环境变量
    系统环境变量,就是通常所说的全局环境变量,即该变量是所有shell或是程序都是能够共享使用的,即系统环境变量对所有的shell或是应用都是可见的
全局环境变量的再细化

根据全局环境变量的生命周期,我们可以分为永久性变量和临时性变量;根据用户等级的不同,我们又可以将其分为系统级变量和用户级变量。总的来说,全局环境变量可以总结为以下三种:

  • 系统级永久性变量
    所有用户环境下,所有shell,程序都可以共享使用的永久性变量,该变量在不同的客户端(session)下,即使是注销登录后都是可见的
  • 用户级永久性变量
    用户级永久性变量区别于系统级永久性变量,仅仅是单用户全局永久可见,比如说由user1user2两个用户,某个全局变量hello仅对user1全局永久可见,而对user2是不可见的
  • 临时性全局变量
    临时性环境变量没有系统级,用户级的区分,它的临时性指的是仅对某个用户当前session下全局可见,即临时全局变量仅对当前用户,当前session可见,退出重新登录后,关闭客户端(terminal)就可不见了,其他用户就更不用说了; 临时性全局变量一般是由export或是declare -x指令将shell变量升迁而来
总结
  • 环境变量分为全局变量局部变量,也称系统环境变量shell变量,也称环境变量自定义变量。不同的资料,不同的书籍,有不同的说法,看你自己怎么认为罗,其实都是一个意思,只是不同的角度描述
  • shell变量必然是一个临时的变量,而全局变量有永久性的变量,也有临时性的变量。所谓临时,就是关闭终端客户端,注销登录后,变量就没了。所谓永久的意思就是,每次登陆,都会先执行某个文件的命令,让某个东西成为全局变量,所以永久其实就是每次登陆都执行一次添加变量而已,并不是真正意义的永久。
  • 当我们定义了shell变量,可以通过declare -x, export等命令将其设置为全局环境变量,当然也可以通过declare +x, export -n等命令撤销其的全局环境变量身份
环境变量注意事项
  • 变量名与等号之间,不能有空格,否则shell会把变量名当做是命令
  • 变量名称一般使用大写,以示区别,比如PATH

环境变量常用命令


命令
  • echo
    输出指定的字符串或变量

  • env
    显示系统中所有系统环境变量(不包含shell变量)

  • set
    显示或设置shell特性及shell变量
    set 显示查看所有的环境变量(系统环境变量以及shell变量)

  • export
    设置和显示系统环境变量
    export 显示系统中所有系统环境变量(不包含shell变量)
    export {name},export {name}={value} 将某个shell变量设置为系统环境变量
    export -n {name} 从系统环境变量中删除该变量,非真删除,仅是让该变量不再是全局环境变量

  • declare
    declare 显示查看所有的环境变量(系统环境变量以及shell变量)
    declare -x {name},declare -x {name}={value} 将某个shell变量设置为系统环境变量
    declare +x {name} 从系统环境变量中删除该变量,非真删除,仅是让该变量不再是全局环境变量

功能
  • 显示系统中所有系统环境变量(不含shell变量)
    env
    export

  • 显示系统中所有的系统环境变量以及shell变量
    set
    declare

  • 从系统环境变量和shell变量中删除某变量
    unset {name} 删除之后,env与set都看不见该变量了,是完全的删除

  • 仅从系统环境变量中删除某变量
    declare +x {name} ,export -n {name} 删除之后,env看不见,但是set命令还是看的见,是半删除

  • 新增shell变量
    {name}={value}
    declare {name}, declare {name}={value}

  • 新增临时全局变量
    declare -x {name}, declare -x {name}={value}
    export {name} , export {name}={value}

  • 修改环境变量
    {name}={value} 跟创建shell变量一样,无论是什么类型变量,都是这么修改


设置永久性系统环境变量


什么是永久性系统环境变量?

从上面我们可以知道,系统环境变量可以是永久性的,也可以是临时性的。什么是永久性的系统环境变量呢?

简而言之,就是不会过期,当你关闭了终端或是注销了账户,再重新使用终端登录账户,一样可以看见这个变量,不需要认为的再次设置,那么这个变量就是一个永久性环境变量


实现永久性环境变量的原理

那么这个永久性变量是怎么实现的呢?

其实所谓永久并不是真的永久,只是linux通过某种手段造成了一个永久的假象。它的手段就是每当一个用户通过终端登录服务器时,该shell就会按照一定的顺序执行某些文件,自动将文件中内容执行一遍,而这些文件的内容就是设置环境变量的命令。

所以我们可以知道,之所以我们每次登录都可以访问到这些变量,是因为在我们登录的时候,就已经自动的执行了设置环境变量的命令了。

而这些存放设置环境变量的命令的文件就是环境变量配置文件。当然,从上面的环境变量划分中,我们也可以知道,永久性系统环境变量也会分为用户级系统级的, 导致不同类型的永久性变量的根本原因就是配置文件的不同


环境变量相关配置文件

环境变量配置文件有很多种,有登录时生效的,有注销时生效的,也有别的时候生效的,我们这里主要说的是登录时生效的一些配置文件

系统级永久性环境变量的生效配置文件

  • /etc/profile(Centos), /etc/bash.bashrc(Ubuntu)
  • /etc/profile.d/*.sh
  • /etc/.bashrc

用户级永久性环境变量的生效配置文件

  • ~/.bash_profile
  • ~/.bashrc

从上面我们就可以知道,存放在/etc目录下的配置文件是对全局用户生效的,所以其产生的就是系统级的永久性环境变量;而用户Home目录下的配置文件仅仅对该用户生效,自然产生的环境变量也不会影响到其他的用户

配置文件起作用的流程

我们都知道,这些环境变量配置文件都是在用户登录的时候起作用的,那么到底谁先被访问,谁后被访问呢?是怎么个流程顺序?

  • 正常登录下(有完整输入账号密码的登录方式)
  • 非正常登录下(root用户通过su {user}的方式)

一遍在某个配置文件中,都会有调用下个配置文件的shell代码,如果整个流程中某个配置文件丢失了,就会造成流程中下流的某些配置文件没有被调用,比如说,如果/etc/profile文件缺失了,就会导致后续配置文件都没有被执行

当然,Linux有太多的发行版本,并行都已经迭代了很多年了,可能存在流程与上面不同的情况,比如具体的文件可能不同,不过原理都是相通的

其实说是环境变量配置文件,但它不仅仅可以做配置环境变量的事情,你如果想要开机做一些事情,也可以在这些配置文件中写入某些命令。都可以玩玩


如何配置永久性变量?

所以如果你要配置一个系统级的永久性环境变量:

  • 只要/etc下的配置文件中追加上export {name}={value}或类似的命令, 最后source {配置文件}, 让配置文件立即生效即可

如果你想要配置一个用户级的永久性环境变量:

  • 只需要在该用户的主目录~/下的配置文件中追加export {name}={value}或类似的命令, 最后source {配置文件}, 让配置文件立即生效即可

环境变量的作用与应用


把路径加入PATH

如果我们想将某个路径加入PATH路径,这样就可以让路径下的二进制文件直接被访问了。而不需要打出一大长串的路径

export PATH=$PATH:{path}

临时全局变量

  • ubuntu/centos 直接在终端上输入export PATH=$PATH:{path}即可

用户级永久全局变量:

  • ubuntu/centos都是在~/.profile中合适的位置添加以上代码,保存,最后source .profile文件即可

系统级永久全局变量:

  • ubuntu/centos都是在 /etc/profile中合适的位置添加以上代码,保存,最后source profile文件即可\

别名

比如我们想要定义ls的别名,如ll, la ,l

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

临时全局变量

  • ubuntu/centos直接在终端上依次输入以上代码即可

用户级永久全局变量:

  • ubuntu/centos都是在~/.bashrc中合适的位置添加以上代码,保存,最后source .bashrc文件即可; 当然你也可以在.profile文件中添加,只是通常的约定俗成是在.bashrc中修改

系统级永久全局变量:

  • ubuntu在/etc/bash_bashrc中合适的代码中添加以上代码,保存,最后source bash_bashrc文件即可
  • centos在/etc/.bashrc中合适的代码中添加以上代码,保存,最后source .bashrc文件即可

参考资料


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值