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

news2024/11/23 20:57:02

文章目录

    • 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.coloradmin.cn/o/1641172.html

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

相关文章

git学习指南

文章目录 一.版本控制1.认识版本控制2.版本控制功能3.集中式版本控制4.分布式版本控制 二.Git的环境安装搭建1.Git的安装2.Git配置分类3.Git配置选项 三.Git初始化本地仓库1. git init/git clone-获取Git仓库2. 本地仓库文件的划分3. git status-检测文件的状态4. git add-文件…

什么?300TB SSD要来了?

SK海力士在韩国首尔的一场新闻发布会上宣布,其正在研发一款前所未有的300TB容量的固态硬盘(SSD)。这款硬盘的预告是该公司一系列旨在推动数据中心和设备端AI能力发展的产品与技术组合的一部分。SK海力士引用市场研究预测,全球在AI…

前端-React项目初始化

大家好我是苏麟 , 今天聊聊前端依赖 Ant Desgin Pro 快速初始化项目 . Ant Desgin Pro 官网 : 开始使用 - Ant Design Pro 初始化项目 找到文档->快速上手 脚手架命令 : # 使用 npm npm i ant-design/pro-cli -g创建项目命令 : pro create 项目名称 选择简单还是全量 : …

课时114:sed命令_进阶实践_高阶用法1

2.2.3 高阶用法1 学习目标 这一节,我们从 基础知识、缓存实践、小结 三个方面来学习。 基础知识 简介 对于sed命令来说,除了我们经常使用的模式空间之外,它还支持一个叫暂存空间(Hold Space)的模式,所谓的暂存空间,也就是说&a…

【软件工程】详细设计

目录 前言详细设计算法设计工具——判定表 前言 软件工程生命周期分为八个阶段: 问题定义—>可行性研究—>需求分析 —>概要设计—>详细设计—>编码与单元测试 —>综合测试—>软件维护 这节我们讲的是软件开发流程中的一个阶段,需求…

如何批量复制多个文件到多个目录中(提取匹配法)

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 具体操作 1、情景再现 我这里创建了3个数字命名的文件夹和一些带有数字命名的图片文件。 (这里仅做演示作用,实际操作的数量肯定巨…

webpack与vite

webpack 使用步骤: 初始化项目 pnpm init -y安装依赖webpack、webpack-cli在项目中创建src目录,然后编写代码(index.js)执行pnpm weboack来对代码进行打包(打包后观察dist文件夹) 配置古文件(w…

快速构建vscode pytest 开发测试环境

如果不想用 heavy 的pycharm vscode 也是1个很好的选择 安装python SDK pacman -S python [gatemanmanjaro-x13 tmp]$ pacman -Q python python 3.11.8-1安装Vscode 很多中方法 yay -S visual-studio-code-bin [gatemanmanjaro-x13 tmp]$ pacman -Q | grep -i visual visua…

HTML_CSS学习:列表相关属性

一、列表相关属性 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>列表相关属性</title><style>ul{/*列表符号*//*list-style-type: decimal;*//*list-style-type…

使用OpenCV绘制两幅图验证DSC和IoU以及BCELoss的计算程序

1.创作灵感 很多小伙伴在玩深度学习模型的时候,需要计算Groudtruth和predict图的dsc、IOU以及BCELoss。这两个关键的指标的程序有很多种写法,今天使用OpenCV绘制两张已知分布的图像,计算其dsc、IOU以及BCELoss。 2、图像如图所示 在一个100100的区域内,红色框范围为预测…

在家连学校的服务器

在家连接学校的服务器。 Step1: 首先下载一个vscode的插件 Visual Studio Code - Code Editing. Redefined 我的服务区是ubuntu20.04&#xff0c;x64的&#xff0c;所以下载这个。 Step2: 下载到本地之后&#xff0c;想办法将这个文件拷贝到你的服务器上。 Step3: 解压该包…

基于Spring Boot的音乐网站与分享平台设计与实现

基于Spring Boot的音乐网站与分享平台设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 系统功能界面图&#xff0c;在系统首页可以查看首…

C语言 联合和枚举

目录 1. 联合体1.1 联合体类型的声明1.2 联合体变量的创建1.3 联合体的特点1.4 联合体在内存中的存储1.5 联合体使用举例 2. 枚举类型2.1 枚举类型的声明2.2 枚举变量的创建和初始化2.3 枚举类型的大小2.4 枚举类型的优点 正文开始 上次我们通过《C语言 结构体详解》学习了结构…

深入理解 LinkedList 及底层源码分析

LinkedList 是基于链表结构的一种 List&#xff0c;在分析 LinkedList 源码前我们先对对链表结构做一个简单的了解。 一、链表的概念 链表是由一系列非连续的节点组成的存储结构&#xff0c;简单分下类的话&#xff0c;链表又分为_单向链表和双向链表&#xff0c;而单向 / 双…

领域驱动设计(DDD)笔记(三)后端工程架构

文章链接 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客领域驱动设计(DDD)笔记(三)后端工程架构-CSDN博客前导 领域驱动设计(Domain Driven Design,简称DDD)是业内主导的业务工程理论。它在各中权威人士被广泛讨论…

C++ | Leetcode C++题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; class Solution { public:string addBinary(string a, string b) {string ans;reverse(a.begin(), a.end());reverse(b.begin(), b.end());int n max(a.size(), b.size()), carry 0;for (size_t i 0; i < n; i) {carry i < a.siz…

为什么 IP 地址通常以 192.168 开头?(精简版)

网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。IP地址就类似于快递上填的收件地址和发件地址一样&#xff0c;路由器就充当快递员的角色&#xff0c;在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包&#xff0c;所以说&#xff1a;IP地址就像快递里…

vue2项目webpack3.x打包文件分割优化加载

vue2项目webpack3.x打包文件分割优化加载 0. 项目目录和依赖信息1. 开启 gzip&#xff08;建议&#xff09;2. vue2项目配置懒加载&#xff08;建议&#xff09;3. 拆分 vendor 包注意&#xff1a;webpack3使用CommonsChunkPlugin实现 本文使用 3 种方案进行叠加优化 优先级按以…

多级留言/评论的功能实现——SpringBoot3后端篇

目录 功能描述数据库表设计后端接口设计实体类entity 完整实体类dto 封装请求数据dto 封装分页请求数据vo 请求返回数据 Controller控制层Service层接口实现类 Mapper层Mybatis 操作数据库 补充&#xff1a;返回的数据结构自动创建实体类 最近毕设做完了&#xff0c;开始来梳理…

题目:线性代数

问题描述&#xff1a; 解题思路&#xff1a; 列相乘&#xff0c;然后行相加。 注意点&#xff1a;由于元素数据范围最大为1e6&#xff0c;两个元素相乘乘积最大为1e12&#xff0c;如果元素类型为int则在乘的过程中就会爆炸&#xff0c;所以需要开long long类型。 AC代码…