[Linux]环境变量

[Linux]环境变量

文章目录

  • [Linux]环境变量
    • 环境变量的概念
    • 查看环境变量
    • 环境变量的加载原理
    • 环境变量的添加
    • 刷新环境变量
    • 配置文件的路径

环境变量的概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

环境变量的本质:一张内存级的表,在用户登录系统的时候,为用户形成属于自己的环境变量表。表结构示意图如下:

image-20230825100446726

环境变量是从配置文件中读取获得的。

每一个环境变量都有自己的用途,有的是用于路径搜索,有的是用于身份认证,有的是用于库的查找等等。

查看环境变量

  1. Linux系统下输入env指令查看所有环境变量

image-20230824144857767

其中一些常见的环境变量:

  • SHELL : 当前Shell,它的值通常是/bin/bash
  • USER:当前用户名
  • PWD:当前用户所处的路径
  • HOME:当前用户的家目录
  • LOGNAME:用户登录时的名字

环境变量中值得注意的是PATH环境变量,他记录了Linux系统中的系统指令程序路径,编程语言的动静态库地址。因此同样是可执行程序我们自己编写的程序需要加路径运行,而系统指令不用,并且编译代码时,不需要关心动静态库的链接问题,因为环境变量中记录了路径,编译器会根据环境变量的路径查找。

  1. Linux系统下输入echo $NAME 指令查看特定环境变量,其中NAME是所要查看的环境变量名

image-20230824145401729

说明: 一些特定的环境变量比如LOGNAME不同的用户的环境变量是不同的。

  1. 编写代码查看环境变量
  • 通过main函数的参数查看

main函数是有三个参数的,即使我们不写明,编译器也在编译时自动加上并接收参数,其中第三个参数是一个名为envp的指针数组,其接收的参数就是环境变量。envp的数据中最后一个有效数据的下一个数据是空指针,因此编写如下代码查看环境变量:

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

编译后运行程序查看结果:

image-20230824153440087

  • 通过全局变量查看

在Linux系统头文件unistd.h中有一个全局变量,名为environ的二级指针,指向环境变量数据表,environ的数据中最后一个有效数据的下一个数据是空指针。因此编写如下代码查看环境变量:

#include <stdio.h>
#include <unistd.h>int main()
{extern char** environ; //变量声明int i = 0;for (i = 0; environ[i]; i++){printf("environ[%d]->%s\n", i, environ[i]);}return 0;
}

编译后运行程序查看结果:

image-20230824153816060

  • 调用系统函数查看

Linux系统提供了系统函数getenv来获取特定的环境变量。因此编写如下代码查看环境变量:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main()
{char* usr = getenv("USER");printf("当前用户名为:%s\n", usr);return 0;
}

getenv函数所在的头文件是stdlib.h,参数要查看的特定环境变量,编译后运行程序查看结果:

image-20230824155926150

环境变量的加载原理

环境变量是从系统配置文件获取数据的一张内存级的表,在Linux操作系统下每启动一个shell进程,shell进程内部就会执行创建环境变量表的代码,然后从配置文件中获取数据加载到自身创建的环境变量表中。由于我们使用Linux操作系统都是通过shell进行命令行解释然后启动子进程完成功能,因此在Linux操作系统下启动的进程都可以通过main函数的参数获取到环境变量,如下:

image-20230825102435919

说明:

  • 修改某个shell进程自身的环境变量表不影响新启动的shell进程。
  • 修改所有新启动的shell进程的环境变量需要修改配置文件。

环境变量的添加

  1. 给当前shell进程添加本地变量

直接输入NAME=VAL给当前shell进程添加本地变量:

image-20230825103508771

shell进程的本地变量只在shell进程内部有效,由shell启动的子进程都无法接收到本地变量。为了验证子进程无法接收到该本地变量编写如下代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main()
{char* env = getenv("HELLO");if (env) printf("%s\n", env);else printf("该环境变量不存在\n");return 0;
}

编译运行程序查看结果:

image-20230825103959849

  1. 给当前shell进程添加全局变量

输入export 本地变量或者export NAME=VAL添加全局变量:

image-20230825104111625

export指令会将变量添加到shell进程的环境变量表中,因此shell进程的全局变量可以由shell启动的子进程都接收。(图中myproc进程代码同上)

刷新环境变量

.操作符

. 配置文件名 可以刷新当前shell进程的环境变量,将配置文件中的数据加载到环境变量表中使其生效。

source命令

source 配置文件名可以刷新当前shell进程的环境变量,将配置文件中的数据加载到环境变量表中使其生效。

配置文件的路径

在Linux系统家目录下的每个用户目录中都会存在两个配置文件.bash_profile.bashrc

image-20230825111017108

.bash_profile.bashrc文件中都有一些环境变量和加载其他配置文件的shell脚本,shell脚本的功能是到对应的路径下加载配置文件,为用户创建shell进程时就会先加载.bash_profile.bashrc文件然后执行其中的shell脚本完成环境变量的加载。

.bash_profile内容示意图:

image-20230825111406724

.bashrc内容示意图:

image-20230825111330098

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

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

相关文章

网络安全--wazuh环境配置及漏洞复现

目录 一、wazuh配置 二、wazuh案例复现 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署&#xff0c;傻瓜式操作 1.3通过账号&#xff1a;wazuh-user&#xff0c;密码&#xff1a;wazuh进入wazuh…

chatGPT界面

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head><title>复选框样式示例</title> </head> <style>* {padding:0;margin: 0;}.chatpdf{display: flex;height: 100vh;flex-direction: row;}.chatpdf .pannel{widt…

实战演练 | Navicat 导出向导

数据库工具中的导出功能是指将数据从一个数据库系统导出到另一个数据库系统&#xff0c;或者将数据从一个文件格式导出到另一个文件格式。导出功能可以通过各种方式实现&#xff0c;例如使用SQL语句、数据库管理工具或第三方库和工具。在进行数据迁移时&#xff0c;通常需要先将…

5.4 webrtc的线程

那今天呢&#xff1f;我们来了解一下webrtc中的threed&#xff0c;首先我们看一下threed的类&#xff0c;它里边儿都含了哪些内容&#xff1f;由于threed的类非常大啊&#xff0c;我们将它分成两部分。 那第一部分呢&#xff0c;是我们看threed的类中都包含了哪些数据之后呢&a…

【HTML】基础语法讲解

基础语法 1. HTML 结构1.1 认识HTML标签1.2 HTML 文件基本结构1.3 标签层次结构1.4 快速生成代码框架 2. HTML 常见标签2.1 注释标签2.2 标题标签:h1-h62.3 段落标签:p2.4 <br>换行标签2.5 格式化标签2.6 图片标签&#xff1a;img2.7 超链接标签&#xff1a;a2.8 表格标签…

Vue2.0+webpack 引入字体文件(eot,ttf,woff)

webpack.base.config.js 需要配置 {test:/\/(woff2?|eot|ttf|otf)(\?.*)?$/,loader: url-loader,options: {limit: 10000,name: utils.assetsPath(fonts/[name].[hash:7].[ext])}} 如果 Vue2.0webpack3.6引入字体文件&#xff08;eot&#xff0c;ttf&#xff0c;woff&…

自己搭建Minecraft服务器并通过cpolar内网穿透实现与公网小伙伴联机我的世界

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

YUV图片查看器以及测试文件(YUV420)

参考文章&#xff1a;YUV格式的图片查看工具YUView 2.13 亲测可用 在windows上解压打开即可 需要输入一下宽高&#xff0c;如果格式不对&#xff0c;需要设置下格式 还可以看像素分量值&#xff0c;爽歪歪 YUV查看器和YUV测试文件 文章目录 20230816YUV图片查看器及其测试文…

BSN与中国食品药品企业质量安全促进会达成战略合作协议

2023年8月18日至20日&#xff0c;“首届中国食品药品医疗器械化妆品高质量发展大会”在北京召开&#xff0c;本届大会以“树立新发展理念&#xff0c;服务构建新发展格局&#xff0c;助力食药行业高质量发展”为主题&#xff0c;聚焦食药监管和行业发展的热点、难点问题&#x…

Redis下载与安装

文章目录 Redis简介下载&#xff0c;安装和配置&#xff08;cmd&#xff09;图形化工具 Redis 简介 下载&#xff0c;安装和配置&#xff08;cmd&#xff09; 开启redis服务 1.在解压出来的文件夹中打开cmd 2.输入 redis-server.exe redis.windows.conf即可开启服务 可以看到…

洗涤护理门店小程序DIY制作教程

随着移动互联网的快速发展&#xff0c;小程序成为了各行各业推广和服务的新平台。对于干洗店来说&#xff0c;拥有一个专属的洗护小程序不仅可以提升用户体验&#xff0c;还能增加店铺的曝光度和销售额。那么&#xff0c;如何DIY制作一个干洗店洗护小程序呢&#xff1f; 首先&a…

Android获取手机已安装应用列表JAVA实现

最终效果: 设计 实现java代码: //获取包列表private List<String> getPkgList() {List<String> packages new ArrayList<String>();try {//使用命令行方式获取包列表Process p Runtime.getRuntime().exec("pm list packages");//取得命令行输出…