【Linux系统编程】环境变量的组织方式

简介: 【Linux系统编程】环境变量的组织方式

environ和getenv函数


       在Linux中,environ是一个全局的外部变量,其类型为char**,存储着系统的环境变量。除了使用主函数中的第三个参数外,我们也可使用environ函数直接访问系统的环境变量。


       注意:这里在代码内部使用environ时,需要先定义environ。在系统下的libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。定义如下:


extern char **environ;


       getenv是通过指定的环境变量名称来获取环境变量,在头文件<stdlib.h>中。


环境变量表


       环境变量表简称环境表,它是一个存储环境变量的数据结构,类似于一个数组,其中每个元素都是一个环境变量,而environ指针指向的就是存放环境变量的数据结构,而getenv指向表中指定名称的环境变量。


aab9270cfdc8486babafc139ac4cfa9b.png


       下面代码通过使用environ来获取系统下的所有环境变量。


#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
    extern char **environ;
    for (int i = 0; environ[i]; i++)
    {
        cout << "environ[" << i << "]: " << environ[i] << endl;
    }
    return 0;
}


       下面使用getenv获取表中的指定名称的环境变量


[zhujunhao@bogon code]$ cat code.cpp
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
    char*s = getenv("PATH");   //访问PATH环境变量
    cout << s << endl;
    return 0;
}
[zhujunhao@bogon code]$ g++ -o code.exe code.cpp
[zhujunhao@bogon code]$ ./code.exe
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/zhujunhao/.local/bin:/home/zhujunhao/bin
[zhujunhao@bogon code]$ echo $PATH   //可看出,代码输出的内容与之相同
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/zhujunhao/.local/bin:/home/zhujunhao/bin


环境变量的存放


       Linux系统下的环境变量天然都会被保存在磁盘的文件中。只有登入系统时,bash/shell进程才会存在,也就是说只有登入系统的时候,才会分配bash/shell程序,而环境变量就在bash/shell的上下文中。当开始登入系统时,所有的环境变量都是从磁盘中的某些脚本或配置文件中来的。因此,每当重启系统时,环境变量都会被更新。


       通常,我们可以使用 set 指令显示本地定义的shell变量和环境变量,但要注意的是,本地定义的shell变量不能被子进程进行下去,它只在本地bash内部有效。


       下面我们来认识一下 bash_profile 文件。


       在Linux系统中,.bash_profile是一个Shell脚本文件,它被用于在用户登录时设置用户的环境变量和配置选项。它是bash或shell的配置文件之一,通常位于用户的家目(~/.bash_profile)


       当用户登录时,bash_profile文件会被自动执行,允许用户设置环境变量等。通过编辑bash_profile文件,用户可以定制自己的shell会话环境,以便更方便地使用命令行工具和应用程序。下面是代码演示:


首先,我们要进行配置环境变量
[zhujunhao@bogon ~]$ cat .bash_profile
//下面是系统下的源代码
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
//下面是我们设置的一个简单的环境变量MY
MY=yiyezhiqiu
export MY 
因为当系统启动时,环境变量就已执行,因此,配置完毕之后要重启系统才可被运行
[zhujunhao@bogon ~]$ echo $MY
yiyezhiqiu



相关文章
|
1天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
97 78
|
4天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
29 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
28天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
115 48
|
1天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
11 0
|
24天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
17 3
|
29天前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
50 4
|
28天前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
30 1
|
28天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
58 1
|
28天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
12天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。