Linux操作系统学习(了解环境变量)

news2024/11/23 13:24:48

文章目录

  • 环境变量初识
    • 除了上述介绍的PATH,还有一些常见的环境变量如:
    • 查看环境变量方法 :
    • 环境变量的基本概念:
  • 本地变量:

环境变量初识

环境变量解释起来比较抽象,先看示例:

#include <stdio.h>
#include <unistd.h>
#define NUM 100
#include <string.h>                                                                                                    
 int main()
 {
     char bar[NUM+1];
     memset(bar,'\0',sizeof(bar));
 
     const char* lable = "|/-\\";
 
     int i = 0;
     while(i <= 100)
     {
        printf("[%-101s][%%%3d](%c)\r",bar,i,lable[i%4]);//%% 输出一个%
         fflush(stdout);
        bar[i] = '=';
        bar[i+1] = '>';
         i++;
         usleep(50000);//单位是毫秒
         
     }
     printf("\n");
     return 0;
 }

​ 上面是一个进度条小程序的代码,gcc print.c -o print 编译后想要运行它,需要输入 ./print,./代表当前目录下。但是有一个问题,为什么gcc pwd vim 这些不需要加./,这些命令程序的代码在哪?

答案是他们都存在环境变量中,通过 PATH(是一种环境变量)可以查看 :

​ 也就是说,这些不需要加路径( ./ )就可以执行的指令,是因为他们的路径都拷贝到环境变量中了;那么回到上面的进度条小程序,把它的路径也拷贝到环境变量中,操作如下:

(上述把print的路径加入到环境变量,只在本次会话有效,关闭退出时就会清除)

或者在windows中桌面的快捷方式,也和环境变量有关

除了上述介绍的PATH,还有一些常见的环境变量如:

  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash

查看环境变量方法 :

  • echo $NAME (NAME是你的环境变量名称)

有了上述介绍的示例再来看环境变量的概念会好理解一些了

环境变量的基本概念:

一般是指在操作系统中用来指定操作系统运行环境的一些参数

​ 环境变量是具有特殊作用/特殊用途的变量;环境变量也是一种变量(变量名+内容),本质是OS在内存中/磁盘中开辟空间,用来保存系统相关数据的,所以也是系统自己给自己定义的变量;

获取环境变量的方法:

  • 命令行第三个参数
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
     int i = 0;
     for(; env[i]; i++)
     {
        printf("%s\n", env[i]);
     }
     return 0;
}
  • 通过第三方变量environ获取
#include <stdio.h>
int main(int argc, char *argv[])
{
     extern char** environ;
     int i = 0;
     for(; environ[i]; i++)
     {
     printf("%s\n", environ[i]);
     }
     return 0;
}

在没包相关头文件时,environ前要加extern

  • getenv 通过系统调用获取环境变量
#include <stdio.h>
#include <stdlib.h>
int main()
{
 printf("%s\n", getenv("PATH"));
 return 0;
}

实际应用中,常用getenv(和putenv)函数来访问特定的环境变量,前两种不推荐也不常用。

环境变量还具有全局性

​ 比如用fork创建子进程时,PPID是他的父进程,而父进程的PPID是谁呢,答案是bash,bash是一种命令行解释器,一般命令行启动的进程,他们的父进程都是bash。

在我们登录Linux时,bash会从系统中读取环境变量,存在一个环境变量列表中(如上图),那我们在子进程中可以用环境变量吗?

请看如下代码:

​ 当把MYENV导出为环境变量时,bash的环境变量列表就多了一个MYENV而 ./myproc执行的指令的进程是bash的子进程发现可以执行MYENV这个环境变量相关的操作;

​ 说明子进程可以获取到父进程环境列表中的环境变量 ====> 子进程继承了bash的环境变量 , bash的所有子进程都可以看到bash环境列表中的环境变量,就如同用fork创建子进程,子进程继承父进程的代码和数据一样 是可以继承的

所以,bash的所有子进程都可以获取到bash的环境列表,也就是环境变量具有全局属性

本地变量:


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

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

相关文章

如果你是O型血的准妈妈,新生儿溶血症一定要提前了解,有备无患

婚姻&#xff0c;最重要的是同理心&#xff0c;合适的家庭&#xff0c;但一个刚刚分娩的宝贝妈妈认为&#xff0c;爱也可能需要血型匹配。原因是宝马刚出生的宝宝在医院治疗黄疸&#xff0c;因为宝马是O型血&#xff0c;而丈夫不是O型血&#xff0c;医院治疗黄疸的宝宝很多。这…

完美解决:重新安装VMware Tools灰色。以及共享文件夹的创建(centos8)

解决&#xff1a;重新安装VMware Tools灰色问题&#xff1a;重新安装VMware Tools灰色解决方案-挂载VMware中的linux.iso1. vmtools的linux.iso挂载及安装2. 共享文件夹的创建及配置问题&#xff1a;重新安装VMware Tools灰色 发现一个小问题&#xff0c;我的vm虚拟机安装后发…

前后端一些下载与配置(第二篇 第10天过后)nuxt banner redis 短信服务

NUXT 应该是不用怎么装&#xff1f; 有现成的 axios 还需要在npm吗 好像已经有现成的了 banner banner 笔记汇总P396 Redis Linux安装redis tar -xzvf redis-6.2.6.tar.gz cd redis-6.2.6 照着他做 然后 cd /usr/local/redis/bin ./redis-server /usr/local/redis…

微信小程序 事件传参,参数同步显示 button提交内容,读取input内容

我们先来回顾一下之前学的内容 我们可以在button组件中加入bindtap参数进行事件绑定 <button type"primary" bindtap"onbutton">按钮</button> onbutton(e){console.log(按钮被按下)}, 然后我们也能在input组件中加入bindinput参数进行事件绑…

Django框架之模型系列

模型 重点 模型配置 数据的增删改 增:book BookInfo() book.save() 和BookInfo.objects.create() 删:book.delete() 和BookInfo.objects.get().delete() 改:book.namexxx book.save() 和 BookInfo.objects.get().update(namexxx) 数据的查询 基础查询 F对象和Q对象 关联…

C语言刷题——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰要巩固一下之前学过的知识&#xff0c;那么&#xff0c;最好的复习方式就是刷题啦&#xff0c;现在&#xff0c;我们就进入C语言的世界吧 从最简单的开始噢 完完全全零基础都能看懂 题目来源于牛客网 编程语言初学训…

微信小程序开发笔记 进阶篇⑧——Java后端推送订阅消息 | HTTPS调用,消息卡片,跳转页面

文章目录一、前言二、接口说明三、access_token 获取四、消息模板五、参数page六、参考一、前言 微信小程序开发笔记——导读 微信小程序开发笔记 进阶篇⑦——小程序订阅消息 | 发起订阅&#xff0c;获取当前设置 小程序前端做好消息订阅的准备工作Java后端将数据按照消息模板…

SpringBoot依赖管理特性

我们注意到&#xff0c;在项目的 pom.xml 配置文件中&#xff0c;引入的依赖 spring-boot-starter-web 并没有指定其版本号 而在 maven 依赖中却可以发现其版本号为 2.3.4.RELEASE&#xff0c;这说明 SpringBoot 自动帮我们引入了对应版本的依赖&#xff0c;那么在哪儿可以找到…

ChatGPT横空出世|超强大功能写代码、写情书、写文章、做设计火爆全网

会被人工智能替代的行业 不是孩子未来的发展方向 因为我们在有限的时间里 无法穷尽对技术的学习 那么人工智能无法替代的是什么&#xff1f; 最近火热的ChatGPT&#xff0c;是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型&#xff0c;它能够通过学习和理解人…

新来一个卷王,天天加班到2点,太让人崩溃......

在程序员职场上&#xff0c;什么样的人最让人反感呢&#xff1f;是技术不好的人吗&#xff1f;并不是。技术不好的同事&#xff0c;我们可以帮他。是技术太强的人吗&#xff1f;也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。真正让人反感的&a…

第39天| 70. 爬楼梯 (进阶)、LeetCode322. 零钱兑换、LeetCode279.完全平方数

1.题目描述&#xff1a; 给定n阶台阶的楼梯&#xff0c;一次能跳m阶问跳到楼顶有多少种方法&#xff1f;假设m可以是1~9任意一种&#xff0c;weight[i] {1,2,3,4,5,6,7,8,9} 解法&#xff1a; 1.五步曲&#xff1a; ①将本题转换成背包问题---即给定容量为n的背包&#xff0c…

MySQL系统变量和自定义变量

1 系统变量1.1 查看系统变量可以使用以下命令查看 MySQL 中所有的全局变量信息。SHOW GLOBAL VARIABLES; MySQL 中的系统变量以两个“”开头。global 仅仅用于标记全局变量&#xff1b;session 仅仅用于标记会话变量&#xff1b;首先标记会话变量&#xff0c;如果会话变量不存在…

TCP实现可靠传输的实现

TCP实现可靠传输的实现 目录TCP实现可靠传输的实现ARQ协议停止等待协议&#xff08;古老&#xff09;连续ARQ协议累计重传&#xff08;回退N帧的ARQ协议&#xff09;缓存确认&#xff08;选择重传ARQ协议&#xff09;超时重传的时间选择TCP的流量控制零窗口探测报文段Nagle算法…

4.8 注解与自定义注解

文章目录1.概述2.注解的分类2.1 JDK注解2.2 元注解2.2.1 Target ElementType…2.2.2 Retention RetentionPolicy…3 自定义注解1.概述 在注解刚出现时&#xff0c;曾受到过好多程序员的鄙夷&#xff0c;觉得这就是多此一举的操作&#xff1b; 但随着时间的推移&#xff0c;越…

电子技术——电流镜负载的差分放大器

电子技术——电流镜负载的差分放大器 目前我们学习的差分放大器都是使用的是差分输出的方式&#xff0c;即在两个漏极之间获取电压。差分输出主要有以下优势&#xff1a; 降低了共模信号的增益&#xff0c;提高了共模抑制比。降低了输入偏移电压。提升了差分输入的增益。 由于…

【单目标优化算法】食肉植物优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

vant 4 正式发布,支持暗黑主题,那么是如何实现的呢

2022年10月25日首发于掘金&#xff0c;现在同步到公众号。11. 前言大家好&#xff0c;我是若川。我倾力持续组织了一年多源码共读&#xff0c;感兴趣的可以加我微信 lxchuan12 参与。另外&#xff0c;想学源码&#xff0c;极力推荐关注我写的专栏《学习源码整体架构系列》&…

八股文总是忘?一张图牢记JVM内存结构|金三银四系列

金三银四又来啦&#xff01;八股文还是得复习起来&#xff0c;最近准备把一些常见的八股文知识点聊聊。本文详解了JVM内存结构和各个部分详细内容&#xff0c;应付面试绰绰有余&#xff01;点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达…

visual studio2022配置opencv

标题&#xff1a;在vs下配置使用opencv 流程&#xff1a; 1、下载安装opencv 2、添加环境变量 3、vs中配置属性 4、使用 5、可能遇到的报错和解决 1、 下载安装opencv 官网下载地址&#xff1a; https://opencv.org/releases/ 我这里是windows环境&#xff0c;所以选择点击w…

Java数据结构之优先级队列

前言总是忘了优先队列的一些应用&#xff0c;其实这都是很基础的了。为了再加强印象&#xff0c;抄一遍吧。PriorityQueue简介PriorityQueue&#xff0c;即优先级队列。优先级队列可以保证每次取出来的元素都是队列中的最小或最大的元素&#xff08;Java优先级队列默认每次取出…