【Linux进程】二、什么是环境变量

简介: 【Linux进程】二、什么是环境变量

🥇什么是环境变量

环境变量是指在操作系统中用来指定操作系统运行环境的一些参数,环境变量的本质是字符串,并且环境变量有统一的格式:变量名=值[:值],其中值用来描述进程环境信息,注意等号两边不能有空格。另外环境变量具有下面这些特点:环境变量的存储形式与命令行参数类似,char* [] 数组,数组名environ,内部存储字符串,NULL所谓哨兵结尾;环境变量的使用形式也和命令行参数类似;环境变量的加载位置也与命令行参数类似,位于用户区,高于stack的起始位置;如果我们需要引入环境变量表必须声明环境变量,extern char** environ。

🥈常见的环境变量

  • PATH
    该环境变量包含了可执行文件的搜索路径。比如说ls命令,该命令实际上是一个程序,执行这个程序的时候并不需要提供完整路径 /bin/ls ,但是执行我们自己编写的可执行文件a.out却需要提供相对路径 ./a.out ,这就是环境变量在其中起到的作用。环境变量PATH的值里面已经包含了ls命令所在的目录 /bin ,所以执行ls命令不需要提供路径,但是并没有包含我们自己编写的可执行文件的路径,所以我要在执行的时候需要添加路径。PATH环境变量的值中可以包含多个路径,它们之间用冒号 : 隔开。在shell下通过 echo $PATH 命令可以查看环境变量的值(shell下引用变量需要加 $ 符号)。
  • SHELL
    该环境变量的值为当前使用的shell,一般我们使用的是 /bin/bash ,也就是 bash shell。
  • TERM
    当前终端类型,在图形界面终端下它的值一般是xterm,终端的类型决定了一些程序的输出显示方式,比如图形界面终端可以显示中文,但是字符终端一般不能显示中文。
  • LANG
    语言和locale,决定了字符编码以及时间、货币等信息的显示格式。
  • HOME
    当前用户主目录的路径,其实就是家目录的路径,很多程序需要在主目录下保存配置文件,使得每个用户在运行该程序时都有自己的配置。每个用户的配置文件最好放在该用户自己的目录下,而不是直接放在/etc目录下。下面通过一个图来说明这个环境变量的用处

比如说我们在主机user1上开发了一个软件,这里有一个配置文件被放在了user1的家目录下,我们的程序中open()函数使用的是user1的路径,如果后期这个软件被移到了主机user2的话,open()函数内就找不到这个目录了,因为在user2下使用的配置文件放在了user2目录下,这时候就可以利用环境变量HOME和函数getenv()来提取路径,然后去替换即可。

🥉操作环境变量的相关函数

  • getenv()函数
  • 头文件及函数原型
#include <stdlib.h>
char *getenv(const char *name);
  • 函数参数
  • name:变量名,比如 “HOME” 等。
  • 函数返回值
    环境变量的值,是一个字符串的形式。The getenv() function returns a pointer to the value in the environment, or NULL if there is no match.
  • 函数用法
    该函数用于获取环境变量,它的效果和shell命令echo是一样的。
  • setenv()函数
  • 头文件及函数原型
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
  • 函数参数
  • name:要设置的环境变量名
  • value:要设置的环境变量的值
  • overwrite:是否覆盖原来的环境变量,1表示覆盖原来的环境变量,0表示不覆盖原来的环境变量。
  • 函数返回值
    成功返回0,失败返回-1。The setenv() function returns zero on success, or -1 if there was insufficient space in the environment.
  • 函数用法
    该函数用于设置一个环境变量,可以添加新的环境变量,也可以改变原有的环境变量。我们在shell下修改环境变量一般是配置相关文件.bashrc,增加环境变量只需要在配置文件.bashrc中添加一条命令 export key=val; 即可实现添加环境变量key。
  • unsetenv()函数
  • 头文件及函数原型
#include <stdlib.h>
int unsetenv(const char *name);
  • 函数参数
  • name:要删除的环境变量名
  • 函数返回值
    成功返回0,失败返回-1并设置errno。The unsetenv() function returns zero on success, or -1 on error, with errno set to indicate the cause of the error.
  • 函数用法
    删除一个环境变量,需要注意的是如果环境变量name不存在函数会返回0(成功),如果环境变量的形式为 “KEY=” 那么会出现错误。同样也可以在配置文件.bashrc中删除一个环境变量。
相关文章
|
11月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
373 67
|
10月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
282 16
|
10月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
201 20
|
9月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
211 0
|
9月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
285 0
|
9月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
168 0
|
9月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
230 0
|
12月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1747 21
|
12月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
12月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
447 4