【Linux】--环境变量

时间:2024-11-17 07:00:37

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦
本文由:残念ing原创****首发,如需要转载请通知
个人主页:残念ing-****博客,欢迎各位→点赞???? + 收藏⭐️ + 留言????
????系列专栏:[残念ing 的【Linux】系列专栏——****博客]
请添加图片描述

目录

  • 1 命令行参数
    • 1.1 为什么要有?
  • 2 ***环境变量(char* env[])
    • 2.1查看环境变量
    • 2.2常见的环境变量
      • PATH:指定命令的搜索路径
      • HOME:当前用户对应的家目录(用户登录到Linux系统中时,默认的目录)
      • SHELL 当前shell,它的值通常是/bin/bash
      • PWD:保存当前进程所在的路径
  • 3 系统提供的具有“全局”属性的变量
    • 3.1 环境变量、本地变量
    • 3.2 为什么环境变量要具有全局属性呢???

学习目标:
1 命令行参数
2 环境变量(char* env[])
3 系统提供的具有“全局”属性的变量

1 命令行参数

int main(int argc,char* argv[])//argc:参数个数、argv:参数的清单
{
	printf("argc:%d\n",argc);
	for(int i=0;i<argc;i++)
	{
		printf("argv[%d]:%s\n",i,argv[i]);
		}
	return 0;
}

1.1 为什么要有?

因为可以让同一个程序,可以根据命令行参数,根据选项的不同,表现出不同的功能。比如;指令中选项的实现
在这里插入图片描述

补充:
命令行启动的程序,父进程都是shell

2 **环境变量(char env[])

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

2.1查看环境变量

int main(int argc,char* argv[],char* env[])//argc:参数个数、argv:参数的清单
{
	printf("argc:%d\n",argc);
	for(int i=0;env[i];i++)
	{
		printf("env[%d]:%s\n",i,env[i]);
		}
	return 0;
}

通过**environ指针来获取,environ是指向env[]的指针

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

extern char **environ;

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

在这里插入图片描述

2.2常见的环境变量

PATH:指定命令的搜索路径

查看指定命令的路径
echo $PATH
PATH—路径的集合—系统可执行文件的搜索集合

添加指令路径(关闭后就没了)
PATH=$PATH:要添加的路径
要想一直都在的话,在家目录下,打开bash_profile配置文件,然后进去里面修改PATH

HOME:当前用户对应的家目录(用户登录到Linux系统中时,默认的目录)

查看环境变量HOME:echo $HOME
当我们登录的时候,系统会给一个bash进程,并且让它读取环境变量的配置文件。bash也是一个进程,命令行执行的命令都是bash的子进程,bash中的cwd就是继承bash的当前工作路径的

SHELL 当前shell,它的值通常是/bin/bash

PWD:保存当前进程所在的路径

 #include <stdio.h>
 #include <stdlib.h>
int main()
{
	printf("%s\n", getenv("PWD"));
	return 0;
}

$PWD:获取环境变量的方式,它保存当前进程所在的工作路径,进程可以通过它来获得自己所在的路径,比如我们新建一个文件“log.txt”,那么它的PWD就是getenv(“PWD”)/filename

补充:
USER 、LOGNAME:当前用户

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
		//我可以让我的程序,识别用户身份,只让whb用户进行 访问
	const char *who = getenv("USER");
	if(strcmp(who,"whb")== 8)
	printf("执行程序的正常命令!\n");return 0;
	else
	printf("无权访问!\n");return 1;
	
	return 0;
}

HOSTNAME:云服务器对应的主机名
TERM:终端的类型
HISTSIZE:默认记录下来的指令条数
LANG:编码方式
OLDPWD:最近一次的路径

3 系统提供的具有“全局”属性的变量

3.1 环境变量、本地变量

创建本地变量:比如 直接执行 a=100
将本地变量转变为环境变量:export a=100
环境变量是可以被子进程继承下去的,而本地变量不能。也就是说环境变量可以被所有bash之后的进程全部都看到——环境变量具有“全局属性”。

3.2 为什么环境变量要具有全局属性呢???

因为:

  1. 系统的配置信息,尤其是具有“指导性”的配置信息,他是系统配置起效的一种表现
  2. 进程具有独立性,环境变量可以用来进程之间传递数据(只读数据)