Linux环境变量

news2024/10/4 5:46:04

文章目录

      • 什么是环境变量?
      • 什么是本地变量?
      • 如何获取环境变量?
        • 在shell中
        • 在程序中
      • 如何添加/删除环境变量&&本地变量?
        • 在shell中
        • 在程序中
      • 为什么环境变量能够被子进程继承?

什么是环境变量?

环境变量是进程中的一种变量,它具有各种特殊的意义,但作用一般是为用户和OS提供他们想要的信息。环境变量是能够被子进程继承下去的。

比如,环境变量PATH中保存了程序的搜索路径、环境变量HOME保存了指定用户的主工作目录、环境变量SHELL保存了当前的Shell。

什么是本地变量?

本地变量是shell进程中的一种变量,只在本shell中起作用,因此本地变量不能够被子进程继承下去。

如何获取环境变量?

在shell中

1.获取目标环境变量&&本地变量

echo $NAME #NAME是目标环境变量名称

image-20230103184819065

2.获取进程所有环境变量

env #env是一个命令

image-20230103185010899

=左边是环境变量民称,右边是环境变量的内容

3.获取进程所有环境变量&&进程的所有本地变量

set #set是一个命令

image-20230103185703714

用set获取的内容非常多,因为同时获取了所有的环境变量和本地变量。

在程序中

1.获取目标环境变量通过函数getenv

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *s1 = getenv("PATH");
    char *s2 = getenv("HOME");
    char *s3 = getenv("SHELL");
    printf("PATH=%s\n", s1);
    printf("HOME=%s\n", s2);
    printf("SHELL=%s\n", s3);
    return 0;
}

image-20230103190631156

2.获取进程所有环境变量通过命令行第三个参数

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
    for(size_t i = 0; env[i]; ++i)
    {
        printf("%s\n", env[i]);
    }
    return 0;
}

image-20230103191001760

3.获取进程所有环境变量通过第三方变量environ

#include <stdio.h>
int main()
{
    extern char **environ;
    for(size_t i = 0; environ[i]; ++i)
    {
        printf("%s\n", environ[i]);
    }
    return 0;
}

image-20230103191250948

如何添加/删除环境变量&&本地变量?

在shell中

添加本地变量

直接按照上面显示的格式输入自己的变量即可

image-20230103192130398

添加环境变量

其实就是将本地变量变为环境变量

export 目标本地变量

截屏2023-01-03 19.28.55

也可以一步到位,不需要先定义本地变量

export 变量名=变量内容

截屏2023-01-03 19.33.33

删除环境变量&&本地变量

unset 目标变量

image-20230103192316473

在程序中

通过函数putenv

#include <stdio.h>
#include <stdlib.h>
int main()
{
    putenv("myvar=12345678");
    extern char **environ;
    for(size_t i = 0; environ[i]; ++i)
    {
        printf("%s\n", environ[i]);
    }
    return 0;
}

截屏2023-01-03 19.45.33

为什么环境变量能够被子进程继承?

image-20230103213514304

这是因为进程中有一张环境变量表,而进程地址空间里有指向该表的指针,fork创建子进程的时候会以父进程为模版创建PCB,此时该环境变量表和指针也就会被拷贝下来,所以子进程能够继承环境变量。

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

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

相关文章

Vue初识系列【1】

文章目录一 前端体系1.1 前端三要素1.2 JavaScript 框架1.3 JavaScript 构建工具1.4 前端所需后端技术1.5 UI框架二 前后端分离史2.1 后端为主的 MVC 时代&#xff08;web1.0&#xff09;2.2 基于 AJAX 带来的 SPA 时代(web2.0)2.3 前端为主的 MV* 时代2.4 NodeJS 带来的全栈时…

OBS 进阶 音频面板优化

因为,面板高度就那么大,如果声音源很多的话,就有点乱。 优化目的:静音的,自动放在底部,这样,音频面板上面的都是没有静音的,也是我们最关注的部分。 目录 一、音频面板优化 1、不想要音频面板的title,将其去掉

【LeetCode每日一题】【2023/1/3】2042. 检查句子中的数字是否递增

文章目录2042. 检查句子中的数字是否递增方法1&#xff1a;直接遍历写法2&#xff1a;按本题特有条件方法2&#xff1a;栈方法3&#xff1a;std::stringstream写法22042. 检查句子中的数字是否递增 LeetCode: 2042. 检查句子中的数字是否递增 简单\color{#00AF9B}{简单}简单 句…

202301-第一周资讯

大家好&#xff0c;欢迎来到本周资讯&#xff0c;在过去的一周内呢&#xff0c;我们在示例DEMO、文档、教学视频上都有了较多的产出并且帮助大家解决了不少问题&#xff0c;赶紧看看上周成果吧&#xff01; 目录 DEMO 动态TopN报表 导出图文报告的脚本示例 Superpage pc端…

【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置

写在前面&#xff1a;本章的目的是让你理解与门、或门和非门的行为&#xff0c;并使用 Verilog 语言实现多输入与门、或门和非门。在生成输入信号之后&#xff0c;你需要通过模拟来验证这些门的操作&#xff0c;并使用 FPGA 来验证 Verilog 实现的电路的行为。 0x00 引入&#…

Vue+Echarts监控大屏实例十六:Echarts对接天地图插件开发

一、实例概述 本实例实现echarts使用天地图组件的开发,通过修改echarts中百度地图及高德地图插件实现echarts中使用天地图的使用。本实例实现对于监控界面的相关开发资料,提供实例源码、开发过程视频及实现过程。   1. Echarts参考文档: echarts   2. 高德地图插件:ech…

P1455 搭配购买

题目描述 明天就是母亲节了&#xff0c;电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢&#xff1f;听说在某个网站上有卖云朵的&#xff0c;小朋友们决定一同前往去看看这种神奇的商品&#xff0c;这个店里有 nn 朵云&#xff0c;云朵已经被老板…

非Web服务弱口令检查工具下载与使用

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是非Web服务弱口令检查工具下载与使用。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1…

操作系统的运行机制和体系结构

文章目录&#x1f380;前言&#xff1a;本篇博客知识总览&#x1f3c5;运行机制&#x1f387;两种指令&#x1f387;两种状态&#x1f387;两种程序&#x1f3c5;操作系统的内核&#x1f387;内核概念&#xff1a;&#x1f3c5;操作系统的体系结构&#x1f3af;最常考点&#x…

DevOps - Jenkins可视化流水线(后端部分)

目录 &#x1f9e1;创建DevOps工程 &#x1f9e1;拉取代码 &#x1f9e1;项目编译 &#x1f9e1;构建镜像 &#x1f9e1;推送镜像 &#x1f9e1;部署到Dev环境 &#x1f9e1;邮件功能 &#x1f9e1;激活微服务 &#x1f49f;这里是CS大白话专场&#xff0c;让枯燥的学习…

zookeeper下载安装

1、环境准备 ZooKeeper服务器是用Java创建的&#xff0c;它运行在JVM之上。需要安装JDK 7或更高版本。 2、上传 将下载的ZooKeeper放到/opt/ZooKeeper目录下 #上传zookeeper altp put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz #打开 opt目录 cd /opt #创建zooKeeper目录…

电子招标采购系统源码之什么是电子招投标系统?

随着互联网时代的到来&#xff0c;各行业都受到不同的影响&#xff0c;其中招投标行业也不例外。为了顺应互联网潮流的发展&#xff0c;电子招投标逐渐取代传统的纸质的招投标方式&#xff0c;给招标方、投标方、招标代理等各方也带来了前所未有的机遇与挑战。那么什么是电子招…

日志采集 - Filebeat

Filebeat 是什么&#xff1f; Filebeat是本地文件的日志数据采集器&#xff0c;可监控日志目录或特定日志文件&#xff08;tail file&#xff09;&#xff0c;并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等。 是使用 Golang 实现的轻量型日志采集器&#xff0c;也…

Spring Boot配置MinIO(实现文件上传、读取、下载、删除)

一、 MinIO MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&#x…

INSERT ON DUPLICATE KEY UPDATE返回值引起的小乌龙

一、东窗事发 某个版本送测,测试大佬给提了一个缺陷,且听我描述描述: 一个学习任务: 两个一模一样的学习动态: 产品定义:学习任务(生字学习)完成后,会在小程序生成一个动态,再次完成不重复生成obviously,上边出现的两个动态不符合“罗辑” 二、排查看看 既然出现了两个动态…

dubbo源码实践-transport 网络传输层的例子

1 Transporter层概述Transporter层位于第2层&#xff0c;已经实现了完整的TCP通信&#xff0c;定义了一套Dubbo自己的API接口&#xff0c;支持Netty、Mina等框架。官方定义&#xff1a;transport 网络传输层&#xff1a;抽象 mina 和 netty 为统一接口&#xff0c;以 Message 为…

剑指 Offer 09. 用两个栈实现队列

用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 示例 1&#xff1a; 输入&#xff1a; ["…

自然语言处理 第11章 问答系统 复习

问答系统问答系统概述问答系统定义问答(QA)系统发展历程问答系统分类&#xff1a;问答系统框架&#xff1a;内容提要专家系统检索式问答系统1.问题分析主要功能&#xff1a;问题分类 和 关键词提取问题分类实现方法2.关键词提取检索模块相关文档检索句段检索3. 答案抽取模块检索…

回顾2022年,展望2023年

这里写目录标题回顾2022年博客之星你参加了吗&#xff1f;学习方面写博客方面在涨粉丝方面展望2023回顾2022年 时间如梭&#xff0c;转眼间已经2023年了。 你开始做总结了吗&#xff1f; 博客之星你参加了吗&#xff1f; 这是 2022 博客之星 的竞选帖子&#xff0c; 请你在这…

【从零开始学习深度学习】36. 门控循环神经网络之长短期记忆网络(LSTM)介绍、Pytorch实现LSTM并进行训练预测

上一篇文章介绍了一种门控循环神经网络门控循环单元GRU&#xff0c;本文将介绍另一种常用的门控循环神经网络&#xff1a;长短期记忆&#xff08;long short-term memory&#xff0c;LSTM&#xff09;&#xff0c;它比GRU稍复杂一点。 本文将介绍其实现方法&#xff0c;并使用其…