Linux变量的认识及环境变量配置详解

文章目录

    • 1、变量的划分
    • 2、局部变量
    • 3、全局变量
    • 4、环境变量
      • 4.1、概述
      • 4.2、配置临时环境变量
      • 4.3、配置永久环境变量
        • 4.3.1、用户级配置文件
          • 1)配置方法一:~/.bashrc文件
          • 2)配置方法二:~/.profile文件
          • 3)配置方法三:~/.bash_profile文件
        • 4.3.2、系统级配置文件
          • 1)配置方法一:/etc/environment文件
          • 2)配置方法二:/etc/profile文件
          • 3)配置方法三:/etc/bashrc文件
        • 4.3.3、/etc/profile.d/配置路径
      • 4.3、查看环境变量
    • 5、内置变量
    • 6、参考

1、变量的划分

在Linux中,变量的划分有很多种,其中根据变量的作用范围(作用域)进行划分的有四类,分别是局部变量、全局变量、环境变量、内置变量。下面来具体讨论,本文以环境变量的讨论为主,其他变量简要说明。

2、局部变量

局部变量,使用local关键字定义的变量,通常在定义它的脚本或命令中可见,但仅在定义的函数中可使用,脚本或命令中的其他函数不可使用,除非被明确传递,在其子脚本或子进程中也不可用。通常在函数中使用关键字local来定义,示例:

function myFunction() {local localVar="a local var"
}

3、全局变量

全局变量,未使用 local 关键字的变量都是全局变量,在定义的脚本及命令中可见,一般在函数外定义,在整个脚本及命令中全局可使用。但在不使用export导出的情况下,无法在子脚本中可见,即切换进程后无法使用:

  • 定义全局变量,示例:
GlobalVar1="A global VAR1"
# 切换用户查看
su other_user
echo $GlobalVar1

image-20240503222755932

切换进程后,无法查看到对应的全局变量,因为没通过export将其导出,无法正常的访问。

  • 定义全局变量,并将其export导出,示例:
export GlobalVar2="A global VAR2"
# 切换用户查看
su other_user
echo $GlobalVar2

image-20240503222740097

切换进程后,能够正常的访问到相应的全局变量,其通过export导出,使其在子脚本或命令中可见,因此能够正常访问到。

注意: 全局变量一般定义为小写字母,当定义为大写字母时,默认其为全局配置,即环境变量,这是一个通用的约定,避免变量的调用冲突。

4、环境变量

4.1、概述

环境变量是在Linux操作系统中用来指定操作系统运行环境的一些参数的一种机制。它们是动态命名的值,通常名称用大写字母进行定义,由操作系统或用户设置。通常情况下会存放重要的配置信息,如配置文件路径、用户信息、网络设置参数等。常见的环境变量有 PATH, HOME, USER 等,下面来详细讨论环境变量的不同配置方法及其作用域。

4.2、配置临时环境变量

使用 export 命令来设置临时环境变量,示例:

export TEST="$TEST:/usr/local/bin"

执行完后通过echo $PATH查看,仅在当前窗口生效,关闭窗口或新建其他窗口,无法查看到之前设置的临时环境变量:

image-20240503225912798

作用范围: 仅当前用户,当前窗口。

注意: 与全局变量中使用export导出变量效果类似,差别在于大小写。

4.3、配置永久环境变量

4.3.1、用户级配置文件

用户级配置文件,作用范围仅为单个用户的账户,只有当该用户登录shell或启用新的shell面板时,配置内容才会生效。提供给不同用户可以灵活配置各自的工作环境,下面是具体的用户配置方法:

1)配置方法一:~/.bashrc文件
vim ~/.bashrc
# 内容末行添加环境变量内容:完成后wq保存并关闭文件
export TEST="$TEST:/usr/local/bin"

适用于当前登录用户,用于非登录 shell,即在用户登录后启动的shell中生效或新的终端窗口或新的shell脚本。

生效方法: 使用source ~/.bashrc生效配置,并重新打开新的终端,即刻生效。

用户范围: 当前用户,新建窗口&刷新变量后的窗口。

2)配置方法二:~/.profile文件
vim ~/.profile
# 内容末行添加环境变量内容:完成后wq保存并关闭文件
export TEST="$TEST:/usr/local/bin"

适用于当前登录用户,登录型shell,即登录过程中进行配置生效。

生效方法: 使用source ~/.profile生效配置,并重新打开新的终端,即刻生效。

用户范围: 当前用户,新建窗口&刷新变量后的窗口。

3)配置方法三:~/.bash_profile文件
vim ~/.bash_profile
# 内容末行添加环境变量内容:完成后wq保存并关闭文件
export TEST="$TEST:/usr/local/bin"

适用于当前登录用户,登录型shell,即登录过程中进行配置生效。与~/.profile作用范围相同,但生效的优先级高于~/.profile文件

生效方法: 使用source ~/.profile生效配置,并重新打开新的终端,即刻生效。

用户范围: 当前用户,新建窗口&刷新变量后的窗口。

4.3.2、系统级配置文件

系统级配置文件,影响范围为整个系统,所有的用户账户,无论是哪一位用户登录均可使用当前配置的系统环境变量内容,作用在提供一套标准的用户环境,保持系统环境一致性。同时系统级配置存在权限控制,仅有管理员可以进行配置,加强了环境管理。下面是不同的系统级配置的方法:

1)配置方法一:/etc/environment文件
vim /etc/environment
# 内容末行添加环境变量内容:完成后wq保存并关闭文件
TEST="$TEST:/usr/local/bin"

这是一个简单的键值对文件,用于设置系统级环境变量。这里设置的变量对所有用户有效。这里由于使用键值对存储,无需使用export关键字。

生效方法: 系统重启,或用户注销重新登录

用户范围: 系统所有用户

2)配置方法二:/etc/profile文件
vim /etc/profile
# 内容末行添加环境变量内容:完成后wq保存并关闭文件
export TEST="$TEST:/usr/local/bin"

这是全系统的登录脚本,当任何用户登录时运行,登录过程中进行配置生效。

生效方法: 系统重启,或用户注销重新登录

用户范围: 系统所有用户

3)配置方法三:/etc/bashrc文件
vim /etc/bashrc
# 内容末行添加环境变量内容:完成后wq保存并关闭文件
export TEST="$TEST:/usr/local/bin"

适用于所有用户的 Bash 配置,用于非登录 shell,即在用户登录后启动的shell中生效或新的终端窗口或新的shell脚本。

生效方法: 系统重启,或用户注销重新登录。针对当前窗口可以使用source /etc/bashrc来生效配置。

用户范围: 系统所有用户

4.3.3、/etc/profile.d/配置路径

在Centos 7.9中,有/etc/profile.d/路径用来存放自定义脚本,这些脚本会在登录时自动运行,可以通过该机制,创建shell脚本来配置环境变量,如setenv.sh

#!/bin/bash
export TEST="$TEST:/usr/local/bin"

之后,赋予该脚本执行权限,即可在每次登录时,使用特定的环境变量:

chmod +x /etc/profile.d/setenv.sh

由于是在系统级路径下进行配置,其实整个过程,也相当于是系统级的一个环境变量配置。这个路径下的脚本,所有用户登录都会执行。

生效方法: 系统重启,或用户注销重新登录

用户范围: 系统所有用户

4.3、查看环境变量

  • 1、printenv 命令

可以打印部分或全部环境变量:

# 打印全部环境变量
printenv
# 打印PATH环境变量
printenv PATH
  • 2、env命令

env 命令类似于 printenv,但通常用于在修改后的环境中运行程序,不带参数时与printenv等价。

# 打印全部环境变量
env
# 在新环境变量中运行程序
env test.sh
  • 3、echo命令

使用 echo 命令可以显示一个特定环境变量的值,可用于快速检查一个变量的修改是否生效:

echo $PATH
  • 4、set命令

set 命令可以显示局部和环境变量以及 shell 函数,其打印的信息比printenv更多,但不推荐使用,因为其包含的内容不只是环境变量,结果会更杂乱。

5、内置变量

由 shell (比如 Bash Shell)本身预定义的变量称之为内置变量,非用户自定义。这些内置变量提供了关于系统环境和 shell 自身运行状态的重要信息,用户无法创建新的内置变量。一般情况下不允许用户修改内置变量,仅可读取,常见的内置变量有下面这些:

内置变量描述
HOME当前用户的主目录路径。
PWD当前工作目录的路径。
USER当前登录的用户名。
BASH_VERSION当前运行的 Bash 版本信息。
PATH系统查找命令的目录列表。
RANDOM每次引用时生成的随机整数。
UID当前用户的用户ID。

使用内置变量示例:

echo "Your home directory is $HOME"
echo "You are logged in as $USER"

6、参考

https://juejin.cn/post/6844904173775880199

https://zhuanlan.zhihu.com/p/566600783

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF-reverse二维四向迷宫路径求解

二维四向迷宫是一个re中的常考点,说不上难,但也不简单,本篇记录了常规的二维四向迷宫解题套路以及帮助快速解题的脚本 可能你看我的教程会觉得十分繁琐,但实际只要你用了一次熟练之后,基本都是拿到迷宫就一题一分钟解决…

jmeter控制器讲解

1,随机顺序控制器和随机控制器的区别:随机顺序控制器下所有的接口都会执行,只是执行顺序是随机的,随机控制器下所有的接口中随机执行一个接口,其余接口不执行。

【跨境商家必读】TikTok Shop商城运营全指南

随着社交媒体和电子商务之间界限的日益模糊,一种全新的购物平台——TikTok商城,正在迅速成为全球跨境商家们关注的焦点。在这个竞争激烈的TikTok跨境电商领域中,了解如何有效利用TikTok Shop的各项功能,理解其独特的运营模式&…

Linux进程——Linux进程间切换与命令行参数

前言:在上一篇了解完进程状态后,我们简单了解了进程优先级,然后遗留了一点内容,本篇我们就来研究进程间的切换,来理解上篇提到的并发。如果对进程优先级还有没理解的地方可以先阅读: Linux进程优先级 本篇…

Gmail邮箱怎么注册?2024年完整指南(包含跳过手机号验证)

一、为什么要注册Gmail邮箱? 全球通用性:Gmail是一个全球性的邮件服务平台,被广泛认可和信赖。因为客户对于Gmail的接受度高,无需担心邮件被自动标记为垃圾邮件。 整合营销工具:通过Gmail账号,你可以轻松…

C++之大数运算

溪云初起日沉阁 山雨欲来风满楼 契子✨ 我们知道数据类型皆有范围,一旦超出了这个范围就会造成溢出问题 今天说说我们常见的数据类型范围: 我们平时写代码也会遇到数据类型范围溢出问题: 比如 ~ 我们之前写的学生管理系统在用 int类型 填写…

stack的使用

1.栈的定义 我们可以看到模板参数里面有一个容器适配器 ,什么是适配器?比如充电器就叫做电源适配器,用在做转换,对电压进行相关的转换适配我们的设备。栈,队列不是自己直接管理数据,是让其他容器管理数据&a…

java-函数式编程-语法

目录 1、函数表现形式 分类 lambda表达式 参数类型可以全写,也可以全不写,但不能一部分写,一部分不写lambda 的省略策略:凡是可推导,都可以省略 方法引用 练习-判断语法正确性 练习-写出与方法引用等价的lambda表达式…

新火种AI|马斯克聘用OpenAI泄密者,他们的梁子着实越结越深...

作者:小岩 编辑:彩云 就在最近,昔日就职于OpenAI的工程师Pavel Izmailov正式加入了马斯克的AI团队,他还在自己的推特上大张旗鼓的做着宣传:研究院xai。 AI工程师的跳槽本不值得惊讶,但Pavel的跳槽却在行…

LSTM神经网络 vs Transformer在量化中的应用

LSTM,全称Long Short-Term Memory,是一种特殊的递归神经网络。它通过巧妙的"门"结构,可以有效地捕捉时间序列数据中的长期依赖关系。这一特点,使得LSTM在处理股价这种具有时间序列特性的数据时,展现出了非凡的潜力。 这种特殊的递归神经网络 与一般的前馈神经网络不…

C++语法|如何写出高效的C++代码(一)|对象使用过程中背后调用了哪些方法(构造和析构过程)?

文章目录 再探拷贝构造函数和重载复制运算符实例化新对象和赋值操作强转为类类型指针和引用时临时对象的构造和析构过程 考考你问题答案 再探拷贝构造函数和重载复制运算符 实例化新对象和赋值操作 首先我们写一个类,实现它的拷贝构造并重载赋值运算符。 class T…

盘点四种计算数组中元素值为1的个数的方法

目录 一、引言 二、方法一:基础循环遍历 三、方法二:列表推导式 四、方法三:使用内置函数sum和生成器表达式 五、方法四:使用NumPy库 六、性能比较 七、性能结果分析与讨论 八、最佳实践 九、总结 一、引言 在编程和数…

银河麒麟QT项目打包详细教程

银河麒麟QT项目打包详细教程 一、QT项目打包 下载linuxdeployqt,下载地址:https://github.com/probonopd/linuxdeployqt/releases 安装Linuxdeployqt 2.1 为了安装方便,将下载下来的文件名称改短些 mv linuxdeployqt-6-x86_64.AppImage lin…

92、动态规划-最小路径和

思路: 还是一样,先使用递归来接,无非是向右和向下,然后得到两种方式进行比较,代码如下: public int minPathSum(int[][] grid) {return calculate(grid, 0, 0);}private int calculate(int[][] grid, int …

射频无源器件之巴伦

一. 巴伦的作用 Balun,balanced-unbalanced的缩写,即平衡-不平衡转换器,是一种三端口无源器件,其本质是通过电感线圈的相互耦合实现的信号转换。用于平衡信号(差分信号,即振幅相等、相位相差180 的两个信号)与非平衡信号(单端信号)的相互转换。 Balun是高频电路重要器…

Vmware虚拟机瘦身及Samba服务不可用问题解决

虚拟机磁盘空间膨胀是一个令人头疼的问题,特别是对许多搞开发的小伙伴。无论是做后台服务、嵌入式还是Android开发,都面临着这个难题。首先,操作系统本身就已占用不少空间,更新安装包,再下载一些开源软件,剩…

运行Spring Boot项目失败?显示java: 无法访问org.springframework.boot.SpringApplication,让我来看看~

idea项目运行报错截图: (1)查看错误提示“类文件具有错误的版本 61.0, 应为 52.0”,61.0对应的是jdk17,52.0对应1.8。 通过这个网址可以查询版本: https://stackoverflow.com/questions/9170832/list-of-ja…

网络编程入门之UDP编程

欢迎各位帅哥美女来捧场,本文是介绍UDP网络编程。在这里,你会见到最详细的教程;细致到每一行代码,每一个api的由来和使用它的目的等。 目录 1.UDP相关API 1.1.两个类 1.2.两个类中的方法 2.UDP编程 2.1.大体框架 2.2.内容构…

【项目学习01_2024.05.08_Day06】

学习笔记 5 新增课程5.1 需求分析5.1.1 业务流程5.1.2 数据模型 5.2 接口定义5.3 接口开发5.3.1 保存课程基本信息5.3.2 保存营销信息 5.4 接口测试 5 新增课程 5.1 需求分析 5.1.1 业务流程 5.1.2 数据模型 5.2 接口定义 5.3 接口开发 根据需求分析,新增课程表…

【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT

在繁华的都市中心,一座崭新的大型商业综合体拔地而起,集购物、餐饮、娱乐、办公于一体,是现代城市生活的缩影。然而,这座综合体的幕后英雄——一套高度集成的楼宇自动化系统,正是依靠多功能协议网关,实现了…