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.mfbz.cn/a/603946.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生产制造中刀具管理系统,帮助工厂不再频繁换刀

一、刀具管理的定义与重要性 刀具管理是指对生产过程中使用的各种刀具进行计划、采购、存储、分配、使用、监控、维修和报废等全过程的管理。刀具作为制造过程中的直接工具,其性能、质量和使用效率直接影响产品的加工精度、表面质量和生产效率。因此,建…

ansible—playbook的template、tags、roles模块

目录 一、template 1、简介 2、template模块实例 1.先准备一个以.j2结尾的template模板文件,设置引用的变量,ansible上要先安装httpd 2、修改主机清单文件,使用主机变量定义一个变量名相同而值不同的变量 3、主机添加hosts 4、编写pla…

【漏洞复现】金和OA FileDownLoad接口处存在任意文件读取漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

词袋法TFIDF

Tf-idf⽂本特征提取 TF-IDF的主要思想是:如果某个词或短语在⼀篇⽂章中出现的概率⾼,并且在其他⽂章中很少出现,则认为此词或者短语具有很好的类别区分能⼒,适合⽤来分类。TF-IDF作⽤:⽤以评估⼀字词对于⼀个⽂件集或…

数据结构-线性表-链表-2.3-1

设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。 void del(Linkllist &L,int x){LNode *p;if(LNULL){return;}if(L->datax){pL;LL->next;;free(p);del(L,x);}else{del(L->next,x);} } 时间复杂度为O(n)

Linux系统编程--网络编程

一、OSI网络七层模型 OSI模型将整个网络通信过程分解为七个层次,每个层次都为网络通信提供了特定的功能。以下是OSI模型的七个层次,从上到下依次是: 应用层(Application Layer):为应用软件提供网络服务&am…

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

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

Linux:进程通信(二)信号的保存

目录 一、信号的处理是否是立即处理的? 二、信号如何保存 1、阻塞、未决、递达 2、信号集 3、信号集操作函数 4、sigprocmask函数 5、sigpending 函数 上篇文章我们讲解了信号的产生:Linux:进程信号(一)信号的产…

7天精通Web APIs——-Bom操作(理论+实战)(第五天)

一、window对象 1.1 window对象和bom的关系 首先理解dom和bom之间的关系 显然bom的范围比较大 bom的全称为浏览器对象模型 window是bom的核心对象,window里面有很多属性和方法,用于实现浏览器与 JavaScript 代码之间的交互。作为 JavaScript 的全局对…

项目管理-项目绩效域2/2

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 八大绩效域包括:“团干部 策划开公交” 团队、干系人、不确定性、测试、规划、开发方法与生命周期、项目工作、交付。 上节…

淘宝评论电商API接口:便捷查询商品真实评价

随着电商的快速发展,用户对于商品的评价越来越重要。淘宝作为中国最大的电商平台,拥有海量的商品和用户评价数据。联讯数据为了提供便捷的商品评价查询服务,淘宝推出了评论电商API接口。 什么是淘宝评论电商API接口 淘宝评论电商API接口是淘…

抖音赚钱可以看看这些小众赛道,很多人都赚到了自己的第一个一百万!2024适合小白入手的项目!白手起家新手小白创业真经

抖音创业最大的魅力是什么? 如果你还想创业,还想在抖音这个赛道上发光发热,不妨停下来思考一下这个问题。 那就是可以让一个及其小众的小品类的产品,捅破天花板!达到一个不可思议的销售额!这就是我的答案&…

Windows注册表

注册表 一.概述 注册表(Registry)是Microsoft Windows中的一个重要的数据库,用于[存储系统]和[应用程序]的设置信息。早在[Windows 3.0]推出[OLE]技术的时候,注册表就已经出现。随后推出的[Windows NT]是第一个从系统级别广泛使…

Python:一种强大的编程语言与无限可能

引言 Python是一种易于学习且功能强大的编程语言,它被广泛用于各种领域,包括数据科学、人工智能、Web开发、系统自动化等。Python以其简洁的语法、丰富的库和易于阅读的风格,成为了许多开发者的首选。本文将探讨Python的特性和应用&#xff…

CSS:一篇教会你用CSS装饰你的HTML文本

目录 ▐ CSS概述 ▐ CSS基本语法 ▐ 选择器 ▐ 修饰文本 ▐ 修饰背景 ▐ 伪类 ▐ 透明度 ▐ 标签的分类 ▐ display属性 ▐ div>标签 ▐ span>标签 ▐ CSS概述 • 全称Cascading Style Sheets 级联样式表 • css是一种样式表语言,用于为HTML文档控制外观&am…

DDPM与扩散模型

很早之前就新建了一个专栏从0开始弃坑扩散模型 ,但发了一篇文章就没有继续这一系列,在这个AIGC的时代,于是我准备重启这个专栏。 整个专栏的学习顺序可以见这篇汇总文章 这是本专栏的第一章 目录 引言生成模型的发展历程 引言 扩散模型( Diffusion Mode…

虹科Pico汽车示波器 | 免拆诊断案例 | 2010款凯迪拉克SRX车发动机无法起动

故障现象 一辆2010款凯迪拉克SRX车,搭载LF1发动机,累计行驶里程约为14.3万km。该车因正时链条断裂导致气门顶弯,大修发动机后试车,起动机运转有力,但发动机没有着机迹象;多起动几次,火花塞会变…

手动实现简易版RPC(四)

手动实现简易版RPC(四) 往期内容 手动实现简易版RPC(一):RPC简介及系统架构 手动实现简易版RPC(二):简单RPC框架实现 手动实现简易版RPC(三):mock数据生成 前言 接上几篇博客我们实现了最…

QT--3

Qt 1>将文本编辑器完整实现 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->resize(800,600);edit1 new QTextEdit(this);edit1->resize(600…

计算机网络技术主要学什么内容,有哪些课程

计算机网络技术专业是一个涉及理论与实践紧密结合的学科,主要学习内容有计算机网络基础、网络设备技术、网络编程等内容,以下是上大学网(www.sdaxue.com)整理的计算机网络技术主要学什么内容,供大家参考! 基…
最新文章