第三部分:3---环境变量

目录

什么是环境变量?

PATH环境变量:

临时修改环境变量PATH:

HOME环境变量:

可能使用环境变量的场景:

进程和环境变量的关系:

环境变量相关操作:

代码获取环境变量:

主函数传参获取环境变量:

通过C语言指针获取环境变量:

本地变量和环境变量的区别:

Linux命令分类:

取消环境变量:

查看环境变量:


什么是环境变量?

  • 环境变量是一个全局变量,系统中存在大量的环境变量,存在新式是以键值对的方式存在。

  • 每一个环境变量都有特殊功能,用于完成特定的系统功能。

  • 环境变量可以被系统中运行的任何进程访问。

  • 环境变量可以存储:目录路径、文件路径、系统信息、临时标志或状态等等。

PATH环境变量:

  • 执行一个命令,需要先找到他的可执行程序在哪,也就是要找到可执行程序的目录。

  • 系统命令可以直接调用,不指明目录,是因为他的目录存储在PATH中。

echo $PATH //打印PATH路径

  • PATH的本质就是一个由目录组成的字符串列表,各目录之间使用冒号分隔(Linux)。当输入一个命令时,操作系统会按照PATH变量中定义的目录顺序依次搜索对应路径,查询命令对应的可执行程序。找到就执行,找不到就报错。

临时修改环境变量PATH:

  • 这种修改适用于其他所有环境变量,且只会持续到当前终端会话结束。

  • 这种修改是对内存中当前会话的环境变量进行修改,并不会影响系统配置文件或其他会话中的 PATH 变量。

PATH=$PATH:new path
//将一个目录添加到环境变量
//$PATH表示之前的目录字符串列表,如果不加$PATH就会直接使用new path覆盖原来的PATH

  • 如果想要删除PATH中的某个目录,可以直接将去掉该目录的PATH覆盖原PATH。

HOME环境变量:

  • HOME环境变量存储当前用户主目录的路径。

  • 用户登陆时,从/etc/passwd 文件读取用户的主目录路径,赋值给HOME环境变量。

  • 用户登陆成功后,调用 "cd $HOME" 命令进入用户的主目录路径。

echo $HOME //查看HOME环境变量

可能使用环境变量的场景:

  • 身份认证,限定部分用户可以使用程序的部分功能。

  • 首先getenv获取USER环境变量的值,得到操作系统的当前用户的用户名。

  • 然后和可使用功能的用户列表做对比,当前用户在列表中,就可以使用功能,否则不行。

进程和环境变量的关系:

  • 命令行启动的进程,他们的父进程都是bash / shell。这些进程的环境变量是由bash / shell传递过来的。

  • 父进程的环境变量是从用户主目录中的.bash_profile文件中读取到的。当用户登录后,系统会自动从.bash_profile文件读取配置信息,将值填充到bash的环境变量表中。

环境变量相关操作:

echo $环境变量 //显示环境变量的变量值。
export 环境变量 //添加一个自己的环境变量到bash,使用env可以查看。并没有直接写入到配置文件,而是在bash的上下文中存储。如果想要写到配置文件,使用vim打开.bash_profile文件,将这句话添加到配置文件即可。
env //显示所有的环境变量。
unset //清楚环境变量。
set //显示本地定义的shell变量和环境变量。

代码获取环境变量:

char* getenv(const char* name); //通过环境变量名称获取环境变量,使用要包含头文件<stdlib.h>。
printf("PATH: %s",getenv("PATH"));//获取PATH环境变量

主函数传参获取环境变量:

int main(int argc,char* argv[])
{
    for(int i=0;argv[i];i++)
    {
        printf("%d : %s",i,argv[i]);
    }
}

通过C语言指针获取环境变量:

  • 通过C语言自动设置好的全局变量,可以在main函数不接受参数的情况下访问环境变量表( char* argv[] )。

extern char** environ; //指向argv[]的指针。
for(int i=0;environ[i];i++) //环境变量表的最后一个元素为nullptr
{
    printf("environ[%d] : %s",i,environ[i]);
}

本地变量和环境变量的区别:

  • 将本地变量使用export声明后,本地变量提升为环境变量。

MY_BIANLIANG=100 //直接在命令行声明,属于本地变量。等于号两边不要带空格。
export MY_BIANLIANG //使用export声明后,提升为环境变量
  • 本地变量只会在bash进程有效,不会被子进程继承。

  • 环境变量可以被所有子进程继承,来实现他的“ 全局性 ”。

Linux命令分类:

  • 内建命令:由Shell程序(如Bash、Zsh等)直接提供和解释执行;不需要启动新的进程,执行速度通常更快。常见的内建命令有 cd、echo、alias、export、set、history 等。

  • 外部命令:独立的可执行程序,当执行外部命令时,Shell会启动一个新的子进程来运行这个命令。常见的外部命令有 ls、grep、find、cp、mv、awk、sed 等。

取消环境变量:

unset MY_BIANLIANG

查看环境变量:

env //查看环境变量
set //查看包含环境变量的所有变量(包括本地变量)

 

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

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

相关文章

C# WPF燃气报警器记录读取串口工具

C# WPF燃气报警器记录读取串口工具 概要串口帧数据布局文件代码文件运行效果源码下载 概要 符合国标文件《GB15322.2-2019.pdf》串口通信协议定义&#xff1b;可读取燃气报警器家用版设备历史记录信息等信息&#xff1b; 串口帧数据 串口通信如何确定一帧数据接收完成是个…

第二证券:科创板股票交易规则,科创板新手可以买吗?

科创板是独立于现有主板商场的特别板块&#xff0c;面向的是国际科技前沿、经济主战场、国家严峻需求&#xff0c;首要服务于契合国家战略、打破要害核心技术、商场认可度高的科技立异企业。 科创板是独立于现有主板商场的特别板块&#xff0c;面向的是国际科技前沿、经济主战…

Windows安装anaconda注意事项及jupyter notebook更换目录

anaconda的介绍就不罗嗦了&#xff0c;既然准备安装了&#xff0c;说明你已经有所了解了。直入主题&#xff0c;Anaconda官网下载&#xff0c;实在太慢&#xff0c;可到https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载&#xff0c;注意&#xff0c;这是清华镜像站…

MySQL基础(8)- 单行函数(2)

目录 一、流程控制函数 1.IF(VALUE,VALUE1,VALUE2) 2.IFNULL(VALUE1,VALUE2) 3.CASE WHEN ... THEN ...WHEN ... THEN ... ELSE ... END 4.CASE ... WHEN ... THEN ... WHEN ... THEN ... ELSE ... END 二、加密与解密的函数 三、MySQL信息函数 四、其他函数 一、流程控…

MySQL之DQL-分组函数

1、分组函数 1. 分组函数语法 分组函数也叫聚合函数。是对表中一组记录进行操作&#xff0c;每组只返回一个结果。我们只讲如下5个常用的分组函数&#xff1a; 分组函数 含义 MAX 求最大值 MIN 求最小值 SUM 求和 AVG 求平均值 COUNT 求个数 分组函数的语法如下…

并发编程:AQS(上)

一、AQS 是什么&#xff1f; AQS 的全称为 AbstractQueuedSynchronizer &#xff0c;翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。 AQS 就是一个抽象类&#xff0c;主要用来构建锁和同步器。 public abstract class AbstractQueuedSynch…

“健康中国 医路无忧——公益联盟”积极响应,国内首支公益陪诊师志愿队伍正式成立

在快节奏的现代生活中&#xff0c;就医不再是简单的“看病”那么简单。面对复杂的医疗流程、专业的医学术语、以及在陌生环境中的焦虑&#xff0c;患者及家属往往感到无所适从。此时&#xff0c;陪诊服务如同一束光&#xff0c;照亮了就医之路&#xff0c;它的重要性不仅体现在…

Visual Studio汇编代码高亮与自动补全

高亮插件&#xff1a;AsmDude (可以按照我的颜色进行设置&#xff0c;或者你自己改) 代码自动补全&#xff1a;CodeGeex (功能很多&#xff0c;支持的语言很多)&#xff0c;按Tab补全

骨传导耳机哪个品牌好用?精选五大高能骨传导耳机分享!

随着科技的进步和人们对健康生活的追求&#xff0c;骨传导耳机凭借其独特的设计理念和使用体验&#xff0c;迅速在运动爱好者和日常通勤族中流行起来。与传统耳机相比&#xff0c;骨传导耳机不仅能够提供清晰的音质&#xff0c;还能确保佩戴者在享受音乐的同时保持对外界环境的…

关于腾讯IM消息ID不统一的问题?服务端的MsgKey和前端的msgID不一样

角色>前端&#xff1a;web、小程序、客户端&#xff08;ios、安卓&#xff09;&#xff1b;服务端&#xff1b;腾讯IM&#xff1b; 1、背景 IM消息ID不一致&#xff0c;本地没有缓存历史数据&#xff0c;导致在调用腾讯sdk方法时&#xff0c;id不一致报错问题 2、调研目的…

HTML 揭秘:HTML 编码快速入门

HTML 揭秘&#xff1a;HTML 编码快速入门 一 . 前端知识介绍二 . HTML 介绍三 . HTML 快速入门四 . HTML 编辑器 - VSCode4.1 插件安装4.2 修改主题配色4.3 修改快捷键4.4 设置自动保存4.5 创建 HTML 文件4.5 书写 HTML 代码4.6 常见快捷键 五 . 基础标签5.1 字体标签5.1.1 col…

java实现图片爬取

开发环境 IntelliJ IDEA 2021.1.3 jdk1.8 Jsoup介绍 一款Java 的HTML解析器 jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数…

SPI子系统

IO特性 SPI接口一般使用四条信号线通信&#xff1a; SDI&#xff08;数据输入&#xff09;&#xff0c;SDO&#xff08;数据输出&#xff09;&#xff0c;SCK&#xff08;时钟&#xff09;&#xff0c;CS&#xff08;片选&#xff09; MISO&#xff1a; 主设备输入/从设备输出…

服装|基于Java+vue的服装定制系统(源码+数据库+文档)

服装定制系统 目录 基于Javavue的服装定制系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布…

【PPT】文字突然变成方框

文章目录 前言一、问题描述二、解决方案参考文献 前言 在 ppt 画图时遇到的问题 一、问题描述 在 ppt 使用过程中&#xff0c;同一字体&#xff0c;有些变成了方框&#xff0c;有些没有变&#xff08;排除字体缺失问题&#xff09; 二、解决方案 如果是页数多了&#xff0…

MyEclipse2020安装教程(图文)

本章教程主要记录如何在Windows上安装MyEclipse2020.。 一、下载安装包 通过网盘分享的文件&#xff1a;Myeclipse 2020.rar 链接: https://pan.baidu.com/s/1fD2P0S0GU_zJlUHTPeXP-A?pwdv71m 提取码: v71m 二、安装步骤 1、打开解压后的文件夹&#xff0c;鼠标右击【myeclip…

Linux日志-日志小结

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具&#xff0c;它们可以帮助管理员监视系统状态、调查问题以及了解系统运行…

基于C#的UDP协议消息传输

1. 服务端 internal class Program{static void Main(string[] args){//1.创建SocketSocket socketServer new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);//2.绑定IP、端口号EndPoint endPoint new IPEndPoint(IPAddress.Parse("127.0.0.1&…

【Qt】实现一个小闹钟

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton>//按钮类 #include <QLineEdit>//行编辑器 #include <QLabel>//标签类 #include <QTextEdit>//输入框 #include <QTimerEvent>//定时器事件类 #inc…

StorageSync数据缓存API

uni.setStorageSyncs参数:将 data 存储在本地缓存中指定的 key 中&#xff0c;会覆盖掉原来该 key 对应的内容&#xff0c;这是一个同步接口。 uni.setStorageSync函数里面写两个参数,分别是key和值,两个参数名称可以随便取,如果有同名的key,那么后面key的值会覆盖掉前面key的值…