Linux下的环境变量

embedded/2024/10/18 0:45:45/

目录

1.引言

1.1bash的部分工作

1.2main函数也有参数 

1.3我们可以通过给main函数传入不同的参数,让同一份代码实现不同的功能

1.4先认识一个环境变量PATH,帮助Linux找到指令程序的地址 

2.环境变量

2.1环境变量的概念

2.2见见其他的环境变量

2.3自己设置环境变量

2.4程序自己获取环境变量

2.4.1通过参数env获取环境变量

2.4.2环境变量的特性 

2.4.2通过getenv()(系统调用接口)获取环境变量 

2.4.3环境变量的一个小应用

2.4.4第三方调用接口获取环境变量

2.5环境变量的配置文件

2.5环境变量与本地变量


1.引言

1.1bash的部分工作

这一个就是我们命令行的开始,这个是谁输入的呢?这个其实是bash输出的。

bash不仅输出开头,还帮我们接受输入值。 

1.2main函数也有参数 

 

我们在命令行中输入字符串,都被bash传递给了main函数,

argc存储输入字符串的个数,argv存储输入的所有字符串。

1.3我们可以通过给main函数传入不同的参数,让同一份代码实现不同的功能

 ./mybin -add 1 2 ,这个就是我们在运行自己的程序,这个是不是和Linux下的指令特别相似。之前提到,Linux下的指令其实上本质就是程序,这点在这里也得到了验证,

但是,这里还有一点区别的是我们自己的程序./ mybin 声明了自己的路径(执行一个程序必须先找到一个程序),而Linux下的指令却不需要声明路径,这是为什么呢?

我们联想到应该是有一个未知的东西帮助指令完成了这个工作。

1.4先认识一个环境变量PATH,帮助Linux找到指令程序的地址 

 其实上这个PATH路径就是一个默认的搜索路径,当你输入一个命令没有输入路径时,Linux就会默认到这个路径下搜索。

PATH不是一个单一路径,这是一个以冒号( :)作为分隔符的很多路径的集合。

我们如果将自己的程序添加到,PATH内的某一路径下时,也可以在执行时不需要添加路径。 (这里不建议这么干,因为你写的软件毕竟只是一个半成品,贸然加进去可能会污染命令池)。

 我们同样也可以把我们的可执行程序所处的路径加入到PATH变量当中去。

PATH = 路径:$PATH(这里对PATH是覆盖式写入的,需要加上:PATH来保留之前的值) 

2.环境变量

2.1环境变量的概念

环境变量,一般是系统内置的的具有特殊作用的变量(本质就是系统开辟空间,给他名字和内容)。

环境变量不是一个,而是一堆,彼此之间没有特殊联系。 

2.2见见其他的环境变量

如PWD就是记录着你的当前路径,当你使用pwd命令时,OS才能给你返回值。

。。。 

env 查看所以的环境变量 

就是当你访问操作系统的时候,操作系统根本不知道你是谁。

是操作系统,在当你登录的时候,把你需要的周边信息都暂时维护起来了。当操作系统需要识别你是谁时,或者你的主机号等等你的信息时,就能够直接通过环境变量去找。

就是每次当你登录的时候,操作系统都会开辟一段空间,把你用户的信息维护起来。 

2.3自己设置环境变量

export name=val


2.4程序自己获取环境变量

2.4.1通过参数env获取环境变量

其实上,main函数还有一个参数,char * env[],这个数组里就存储着环境变量字符串的第一个字符的的地址。 

 

2.4.2环境变量的特性 

我们发现,bash进程真的把环境变量以参数的形式传递给了main函数。 

我们的程序运行的时候,也会变成一个进程,那么他的环境变量就应该是来着bash,也就是他的父进程。 

环境变量的特性:具有全局属性 ,会被所有的子进程和孙子进程给继承。

如果某一进程需要修改,即发生写时拷贝

2.4.2通过getenv()(系统调用接口)获取环境变量 

const char *username=getenv("USER");

2.4.3环境变量的一个小应用

利用环境变量设置一个小权限,让代码只有自己能够运行。 

2.4.4第三方调用接口获取环境变量

#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;
}

2.5环境变量的配置文件

我们发现,当我们在把环境变量在命令行上直接给修改了,我们重启Linux的时候,再次查看环境变量,他就恢复成了原样。

这就说明了,我们的修改数据仅仅停留在了内存上,当虚拟机重启的时候,文件重新加载进入内存的时候一切都恢复了。 


2.5环境变量与本地变量

 环境变量具有全局属性,会被子进程继承。

本地变量,只会留在本进程


http://www.ppmy.cn/embedded/128314.html

相关文章

设计模式概览

设计模式是一种解决常见编程问题的经验总结&#xff0c;提供了代码的可重用性、可扩展性和可维护性。常见的设计模式有23个&#xff0c;主要分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。下面是这三类设计模式的详细分类和讲解&#xff1a; 一、创建型模式 创建…

中间件有哪些分类?

中间件的分类 中间件是位于操作系统和应用程序之间的软件&#xff0c;它提供了一系列服务来简化分布式系统中的应用程序开发和集成。中间件可以根据其功能和用途被分为不同的类别。以下是中间件的一些主要分类&#xff1a; 1. 通信处理&#xff08;消息&#xff09;中间件&am…

【vue+printJs】前端打印, 自定义字体大小, 自定义样式, 封装共享样式

效果示例 思维导图 目录 1,基本使用1, 依赖下载2, 页面导入3, 修改字体大小(可行但不推荐) 2, 自定义样式,字体大小1, 修改字体大小(推荐)2, 自定义样式3, 封装共享样式 3, 去除页面页脚内容4, 测试案例demo, 直接cv可用5, print-js的其他参数说明 1,基本使用 1, 依赖下载 …

systemd实现seatunnel自动化启停

在 systemd 中,您可以通过配置服务单元文件来设置服务在失败或退出后自动重启。这对于确保关键服务在意外退出时能够自动恢复运行非常有用。下面是实现 systemd 自动重启服务的步骤: 通用操作 1. 创建或编辑服务单元文件 假设服务单元文件位于 /etc/systemd/system/my-ser…

RTX3070的yolo训练模型迁移到NVIDIA JETSON XAVIER NX 上的踩坑经验,时机部署避雷点

NVIDIA JETSON XAVIER NX 的yolo环境部署 首先为了保证yolo的权重模型pt文件可以顺利迁移过去&#xff0c;要保证torch和cuda的版本一致 如何在NX上安装torch? 1.用 jtop工具 实时查看和控制板子状态 安装: sudo -H pip3 install jetson-stats使用: sudo jtop 在这里是为…

计算机网络基础(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 计算机网…

Vert.x,Web - Restful API

将通过Vert.x Web编写一个前后分离的Web应用&#xff0c;做为Vert.x Web学习小结。本文为后端部分&#xff0c;后端实现业务逻辑&#xff0c;并通过RESTfull接口给前端(Web页面)调用。 案例概述 假设我们要设计一个人力资源(HR)系统&#xff0c;要实现对员工信息的增删改查。…

C++笔记之静态多态和动态多态

C++笔记之静态多态和动态多态 code review! 在C++中,多态(Polymorphism)是面向对象编程的一个核心概念,允许对象以多种形式存在。多态性主要分为静态多态(Static Polymorphism)和动态多态(Dynamic Polymorphism)。下面将详细解释这两种多态及其在C++中的实现方式、优缺…