Linux学习之环境变量

news2025/7/20 13:05:45

目录

  • 环境变量
    • 基本概念
    • 查看环境变量的方法
    • 常见的环境变量
      • PATH:指定命令的搜索路径。
        • PATH测试
      • HOME:指定用户的主工作目录
      • SHELL:当前Shell
    • 和环境变量有关的命令
    • 环境变量的组织方式
    • 通过代码来获得环境变量
    • 通过函数来获得环境变量
    • 环境变量具有全局性

环境变量

基本概念

  • 环境变量一般是指操作系统中用来指定操作系统运行环境的一些参数。
  • 比如,在C/C++编程中我们用动静态库的时候,我们只需用#include来链接并不需要提供库的文件地址,而在形成可执行程序时,照样可以链接成功,其实就是相关环境变量帮助编译器找到地址。
  • 在系统中,环境变量具有全局性。

查看环境变量的方法

echo $NAME //NAME:你需要查看的环境变量名。

常见的环境变量

PATH:指定命令的搜索路径。

在这里插入图片描述
可能有的朋友会不明白PATH这一串字符是什么意思,接下来我们用一个测试来了解PATH的含义。

PATH测试

我们知道ll和pwd等命令其实都是可执行程序,我们可以在任意路径下使用。
在这里插入图片描述

这是我们自己写的代码形成的可执行程序。
在这里插入图片描述
而我们不能用test1直接使用,报错找不到该命令;我们必须带上路径(./test1)才能使用。
在这里插入图片描述

这是为什么呢?明明都是可执行程序,为什么ls就能直接使用,而我们的程序就必须带上路径呢?

这就是PATH环境变量的作用了。

  • 首先,不论任何程序,你要运行它就必须要让操作系统知道可执行程序的文件路径。
  • 其次,我们再来看看PATH的内容就能理解了,其实它是由若干组路径(“ : ”作为分割符)组成的一个字符串,而这些路径就是系统中那些大佬写给我们使用的可执行文件路径。所以像ls和pwd等命令就不需要我们提供路径了。
    在这里插入图片描述
    在这里插入图片描述
  • 最后,可以将我们的可执行文件路径写入PATH变量中,这样我们也可以直接使用我们的可执行程序了。
    在这里插入图片描述
    在这里插入图片描述

HOME:指定用户的主工作目录

我们在登入时,总会在/home/用户名这样的文件下,这就是HOME的作用。(可以通过切换用户来测试)
在这里插入图片描述

SHELL:当前Shell

在这里插入图片描述

和环境变量有关的命令

  • echo:显示变量的值
    在这里插入图片描述

  • env:显示所有的环境变量
    在这里插入图片描述

  • export:设置一个新的环境变量
    在这里插入图片描述
    我们可以看到在导入myvalue之前是没有这个值的,在export后就可以发现myvalue确实添加到环境变量中了。

  • unset:删除指定的shell变量或函数
    在这里插入图片描述

  • set:显示本地的shell变量和环境变量

在这里插入图片描述
因为太多了就不全部展示了。

环境变量的组织方式

环境变量由谁来管理呢?那肯定是我们的OS了,一提到管理就会想到**“先描述,再组织”**,这里我们来讲讲环境变量的组织方式。
在这里插入图片描述

环境变量的组织方式就是我们熟知的字符指针数组,也叫做环境表,数组中每一个指针都指向一个字符串。

通过代码来获得环境变量

  • 命令行第三个参数
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
 int i = 0;
 while(env[i] != NULL){
 printf("%s\n", env[i]);
 i++;
 }
 return 0;
}

在这里插入图片描述
我们来看结果是不是和env一模一样。

  • 通过第三方变量environ获取
#include<stdio.h>

int main()
{
	extern char** environ;
	int i=0;
	while(environ[i]){
		printf("%s\n",environ[i]);
		i++;
	}
	return 0;
}

在这里插入图片描述
lib中定义environ变量指向环境表且没有包含在头文件中,只需extern声明变量。

通过函数来获得环境变量

  • putenv
  • getenv

先讲解getenv的使用(获得特定环境变量的值)
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>

int main()
{
	printf("%s\n",getenv("PATH"));
	return 0;
}

在这里插入图片描述
和echo打印的PATH值一致。

环境变量具有全局性

因为每个main函数都可以通过第三个命令行参数获得环境表的指针,所以环境变量具有全局性。

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

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

相关文章

集成AI智能安防平台EasyCVR时,调取录像接口报跨域错误的解决方法

EasyCVR视频融合平台基于云边端架构&#xff0c;可支持海量视频汇聚管理&#xff0c;能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强&#xff0c;支持多协议、多类型设备接入&#xff0c;包括&#xff1a;国标G…

Datawahle组队学习——妙趣横生大数据 Day1

妙趣横生大数据 Day1[妙趣横生大数据 Juicy Big Data](https://datawhalechina.github.io/juicy-bigdata/#/?id妙趣横生大数据-juicy-big-data)一、大数据概述大数据——第三次信息化浪潮大数据概念大数据应用大数据关键技术二、Hadoop背景介绍特性项目架构实验1. 准备工作2. …

Tomcat 配置IPV6

文章目录一、场景二、tomcat开启ipv6三、ipv6环境配置四、访问总结一、场景 我们在linux下安装一个tomcat&#xff0c;启用ipv6的方式&#xff0c;然后在windows下用浏览器访问这个tomcat 二、tomcat开启ipv6 在server.xml配置文件的里面加上 address”[::]” &#xff0c;这…

选择排序、快速排序、插入排序等经典八大算法稳定性分析

选择排序、快速排序、插入排序等经典八大算法稳定性分析稳定性定义&#xff1a;各排序算法的稳定性&#xff1a;一、冒泡排序二、选择排序三、插入排序四、快速排序五、归并排序六、希尔排序(shell)七、基数排序 &#xff1a;八、堆排序常用排序算法对比稳定性定义&#xff1a;…

代码的简单设计五原则

欢欢&#xff1a;“你看我的代码用了策略模式和状态模式&#xff0c;假如后面客户会有这样的需求&#xff0c;可以无缝扩展&#xff0c;多么健壮&#xff01;” 清扬一脸狐疑&#xff0c;心中念叨了数遍 &#xff1a;“哼&#xff0c;过度设计&#xff01;”&#xff0c;只见她…

APISpace 带你一起走进西湖美景

俗话说&#xff1a;“上有天堂&#xff0c;下有苏杭”。 “欲把西湖比西子&#xff0c;浓妆艳抹总相宜” 今天我就带大家走进杭州的西湖美景。自古以来&#xff0c;文人歌者面对西湖美景留下千古绝句&#xff0c;还以西湖为背景书写了一段段动人的爱情传说。 天生自带浪漫色…

医学生考研考博太卷,一篇文章轻松助力上岸——生物信息学及R语言基础知识之向量的运算(二)

考研考博太卷了,卷不过,想没想过本科发一篇文章呢? 330分考研人淘汰390分考研人这个故事,大家应该都知道吧。 本专栏带你六个月内,搞定一篇文章,本科生发文章也很容易。 在卷考研的同时,再卷一篇SCI,你就是新一任卷王。 本专栏教你不用花钱发一篇生信文章,从三个方…

态库、静态库之间的相互嵌套

本文的目的是测试各种类型库的编译后的使用效果&#xff0c;包括库又链接其他库的编译方法&#xff0c;使用方法&#xff0c;依赖性等。 太长不看版&#xff1a;请跳至文章最后的总结对比表。 一、内容包含&#xff1a; ①静态库libbb.a依赖静态库libaa.a的测试&#xff1b; …

学会分享,学会生活,分享5款简单易用的软件。

分享是一种博爱的心境&#xff0c;学会分享&#xff0c;就学会了生活。 1.在线图片编辑工具——佐糖 佐糖是一款在线免费图片编辑工具&#xff0c;采用AI人工智能技术&#xff0c;自动识别图片&#xff0c;支持一键抠图&#xff0c;更换背景&#xff0c;移除水印等。另外还提…

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…

别再花钱买 Chatgpt 资源了,这里有免费的,2 分钟上手

最近无论是打开社交网站&#xff0c;还是朋友圈&#xff0c;就连中午吃个饭都能听到大家都在聊 ChatGPT&#xff0c;仿佛如果这一刻你不懂这是个啥玩意儿&#xff0c;你就会觉得自己完全搭不上他们的话... 那ChatGPT 是什么&#xff1f; 百度上是这样解释的&#xff1a; ChatG…

最全的免费录屏工具,这 19 款录屏软件绝对值得你收藏

屏幕录制软件可让您捕获屏幕以与他人共享&#xff0c;创建与产品相关的视频、教程、课程、演示、视频等。这些软件是您能够从网络摄像头和屏幕录制视频。以下是精选的顶级屏幕录像机列表。 适用于 PC 的19 款免费录屏屏幕录像机软件 1&#xff09;奇客免费录屏 奇客免费录屏&am…

2023家用投影仪怎么选?极米H5值得推荐

如今不管是手机还是电视都在不断向大屏幕靠近&#xff0c;消费者也在追求越来越大的屏幕尺寸。同时作为提升生活幸福指数的重要家居用品&#xff0c;投影仪正逐渐取代电视&#xff0c;成为消费者的首选。随着国内智能投影行业的不断发展&#xff0c;市面上智能投影产品也越来越…

Allegro移动器件时附带的孔和线被同步更改的原因和解决办法

Allegro移动器件时附带的孔和线被同步更改的原因和解决办法 用Allegro做PCB设计的时候,移动器件的时候,会出现附带的孔和线也会被同步更改,有时并不是期望的效果,如下图 Allegro其实将这个功能关闭即可,具体操作如下 选择Edit点击Move命令

Vulnhub 渗透练习(二)—— BILLU: B0X

环境下载 下载链接 环境搭建 直接用 vmware 打开&#xff0c;设为 NAT 模式。 信息收集 nmap 扫描 主机扫描&#xff1a; nmap -sP 192.168.200.0/24端口扫描&#xff1a; nmap -sV 192.168.200.129 开了一个 80 端口 apache 服务&#xff0c;和 ssh 服务&#xff0c;后…

时间轮算法概念

概述 在一些中间件中我们经常见到时间轮控制并发和熔断。 那么这个时间轮具体是什么呢&#xff0c;又是怎么使用的呢。 简介 其实时间轮可以简单的理解成我们日常生活中的时钟。 时钟里的指针一直在不停的转动&#xff0c;利用这个我们可以实现定时任务&#xff0c;目前lin…

c入门数的编程 拆数,构造数,c语言字符找出数字拼接,水仙花数 将一个多位数各位拆分

学会构造数和拆分数 目录 学会构造数和拆分数 1&#xff1a;一个三位数&#xff0c;求其各位数字之和 补充&#xff1a;将一个多位数各位拆分求和&#xff0c;&#xff08;不知道位数怎么求&#xff09; 2&#xff1a;串中取数&#xff08;字符转数字&#xff09; 3&#…

大数据之-Nifi-Nifi的应用场景1_创建并配置getfile处理器---大数据之Nifi工作笔记0004

来说一下nifi的应用场景,首先添加一个GETFILE处理器 添加以后设置处理器名称 设置处理器属性 getfile处理器的属性解释 这个加黑的是必须要选择的,非加黑的可以先不进行选择 这里我们只是设置这个input directory就可以了

是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...

华为是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有9.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在字节和腾…

PMP是不是要考第七版了?

现在确实已经到第七版了&#xff0c;但是第六版还是需要学习的&#xff0c;就是结合两个版本去备考&#xff0c;新考纲把很多内容都缩减了&#xff0c;增加了敏捷管理的内容&#xff0c;但是第六版有很多详细的解析&#xff0c;所以如果你想稳一点&#xff0c;那么两个版本都需…