【Linux】深度解剖环境变量

这篇具有很好参考价值的文章主要介绍了【Linux】深度解剖环境变量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:熟悉并掌握Linux的环境变量。

> 毒鸡汤:不为模糊不清的未来过分担忧,只为清清楚楚的现在奋发图强。

> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

【Linux】深度解剖环境变量,Linux初阶,linux

🌟前言

        咱们先抛出问题,不知道大家还记得我们使用java时需要安装环境变量,这里的环境变量就是我们今天所谈的环境变量,其实我们使用APP都需要配置环境变量,有些是不需要配置的,因为这些软件自己会配置环境变量,像我们使用的java编辑器就需要配置环境变量。基于这些情况我们来谈谈Linux下的环境变量。

【Linux】深度解剖环境变量,Linux初阶,linux

⭐主体

我们从以下学习【Linux】深度解剖环境变量🥰🥰。

【Linux】深度解剖环境变量,Linux初阶,linux

🌙浅谈基本概念

        环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量。

        例如,我们编写的C/C++代码,在各个目标文件进行链接的时候,从来不知道我们所链接的动静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。选取:<Linux>环境变量_linux 环境变量-CSDN博客

环境变量通常具有某些特殊用途,并且在系统当中通常具有全局特性。

要执行一个程序,那就需要先找到这个程序,如何去找是个问题🤔🤔,这里提供两个方案:

  • 第一种方法(把文件拷贝到系统的默认路径下)
  1. 缺陷:指令没有经过测试,把代码安装在系统里,会污染系统指令池。
  2. 这种方法是能够找到,因为系统有环境变量🫢🫢:

比如在编写代码的时候,在链接的时候,我们不知道所链接的动态静态库在哪里,但是可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

使用PATH查看:

【Linux】深度解剖环境变量,Linux初阶,linux

  • 第二种方法(把当前的路径添加到环境变量里面)

指令如下:

export PATH=$PATH:加上路径

【Linux】深度解剖环境变量,Linux初阶,linux

windows下的环境变量的查看,比如之前配置的jdk的环境变量:

【Linux】深度解剖环境变量,Linux初阶,linux

🌙常见环境变量

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • LOGNAME:当前登录的用户名
  • HOSTNAME:主机名
  • SHELL : 当前Shell,它的值通常是/bin/bash

指令查看:

【Linux】深度解剖环境变量,Linux初阶,linux

🌙获取环境变量

除去指令去获取环境变量,那我们就可以通过getenv获取环境变量🤗🤗。

1.创建文件mycmd.c和makefile

mycmd.c代码:

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

#define USER "USER"

int main()
{
	char *who = getenv(USER);
	printf("user:%s\n",who);
	return 0;
}

makefile代码:

mycmd:mycmd.c
	gcc -o mycmd mycmd.c

.PHONY:clean

clean:
	rm -f mycmd.c

2.运行结果

【Linux】深度解剖环境变量,Linux初阶,linux

3.总结

USER环境变量最大的意义就是可以标识当前使用Linux用户


我们可以也可以使用strcmp直接去判断是否为root用户

mycmd.c代码:

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

#define USER "USER"

int main()
{
	char *who = getenv(USER);
	if(strcmp(who,"root") == 0)
	{
		printf("user:%s\n",who);
	}
	else
	{
		printf("权限不足!\n");
	}

	return 0;
}

运行结果1:

【Linux】深度解剖环境变量,Linux初阶,linux

运行结果2:

【Linux】深度解剖环境变量,Linux初阶,linux

总结:

执行指令的时候,通过访问任何文件,文件上面有对应的拥有者和所属组,会根据环境变量user去进行对应,对身份进行认证,环境变量会在不同的应用场景被使用。

🌙设置环境变量

  • echo: 显示某个环境变量值
  • export: 设置一个新的环境变量
  • env: 显示所有环境变量
  • unset: 清除环境变量
  • set: 显示本地定义的shell变量和环境变量

echo:

【Linux】深度解剖环境变量,Linux初阶,linux

env查环境变量并没有结果,要想找到结果,我们可以用export

export:

mycmd.c代码:

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

#define USER "USER"
#define MY_ENV "myval"

int main()
{
	char *who = getenv(USER);
	if(NULL == myval)
	{
		printf("%s not found\n",MY_ENV);
		return 1;
	}
	printf("%s = %s\n",MY_ENV,myval);

	return 0;
}

【Linux】深度解剖环境变量,Linux初阶,linux

这时候用到export,把本地变量导成环境变量。

【Linux】深度解剖环境变量,Linux初阶,linux

set:

set可以显示本地定义的shell变量和环境变量

【Linux】深度解剖环境变量,Linux初阶,linux

unset:

清除取消我们的环境变量

【Linux】深度解剖环境变量,Linux初阶,linux


抛出问题:我们的系统为什么知道我们当前的路径在哪里:如一开始学的ls,加上文件名就可以了,不需要加上路径,那ls为什么知道当前的路径是在哪里?PWD

【Linux】深度解剖环境变量,Linux初阶,linux

环境变量在bash中维护当前所处的路径,路径发生变化时,shell会调整环境变量的值,而运行ls是在创建子进程,而环境变量会被子进程继承,所以ls拿到了当前路径,所以ls不需要带上路径

🌙命令行参数

抛出问题:main函数可以带参数吗?最多可以带多少?

  • main函数也是存在参数的(最多有三个)
  • main函数也会被系统调用。

下面我们先来看看这三个参数:

int main(int argc, char* argv[], char* envp[])
{
    return 0;
}
  • int argc:数组里的元素个数
  • char argv[ ]:指针数组*
  • char*envp[] :环境变量

这个我们先演示前两个参数:

myproc.c代码:

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

int main(int argc, char* argv[])
{
	int i = 0;
	for(i = 0; i < argc; i++)
	{
		printf("argv[%d]:%s\n", i, argv[i]);
	}

	return 0;
}

运行结果:

【Linux】深度解剖环境变量,Linux初阶,linux

总结:

我们给main函数传递的argc,char* argv[ ]是命令行参数,传递的内容是命令行中输入的程序名和选项,并且结尾以NULL束!!!

【Linux】深度解剖环境变量,Linux初阶,linux


演示第三个参数:

char*envp[] 就是环境变量。也是一个字符指针数组,前面的argv是指向的命令行参数字符串,而这里envp指向的是一个一个环境变量字符串,最后也是以NULL结尾。结构图如下:

【Linux】深度解剖环境变量,Linux初阶,linux

代码如下:

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

int main(int argc, char* argv[], char* envp[])
{
	for (int i = 0; envp[i]; i++)
	{
		printf("envp[%d]: %s\n", i, envp[i]);
	}
	return 0;
}

运行结果:

【Linux】深度解剖环境变量,Linux初阶,linux

  • 总结:一个进程是会被传入环境变量参数的。
  • 补充:一个函数在声明和定义的时候都没有参数,那么我实际传参的时候可以传参。

🌙代码获取环境变量

  • 命令行第三个参数(char*env[])获取环境变量

代码如下:

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

int main(int argc, char* argv[], char* envp[])
{
	for (int i = 0; envp[i]; i++)
	{
		printf("envp[%d]: %s\n", i, envp[i]);
	}
	return 0;
}

运行结果:

【Linux】深度解剖环境变量,Linux初阶,linux

  • 通过第三方变量environ获取 (extern char**environ)

代码如下:

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

int main(int argc, char* argv[], char* envp[])
{
	extern char **environ;
	for (int i = 0; environ[i]; i++)
	{
		printf("environ[%d]: %s\n", i, environ[i]);
	}
	return 0;
}

运行结果:

【Linux】深度解剖环境变量,Linux初阶,linux

  🌟结束语

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

【Linux】深度解剖环境变量,Linux初阶,linux文章来源地址https://www.toymoban.com/news/detail-791058.html

到了这里,关于【Linux】深度解剖环境变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】进度条小程序的深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月16日
    浏览(26)
  • 【闪击Linux系列P7】进度条小程序の深度解剖

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月13日
    浏览(32)
  • 【C语言深度解剖】float变量在内存中存储原理&&指针变量与“零值”比较

    大家好好我是沐曦希💕 根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。 例如: 十进制中的5.0转换成二进制

    2024年02月14日
    浏览(28)
  • 【Linux】Linux环境变量的理解 --- 命令行参数、shell子进程、环境变量、本地变量…

    加油布鲁斯,你能行的! 1. 我们平常所用的Linux指令其实也是可执行程序,和我们自己写的二进制程序没什么两样,那么为什么在执行自己的程序的时候需要加上./,而执行这些系统提供的指令(可执行程序),不需要加上./呢? 2. 要执行一个程序或者指令,必须先找到这个

    2024年01月16日
    浏览(36)
  • 【Linux】环境变量--PATH环境变量/环境变量的操作/命令行参数

    这里我们先提出一个问题: 为什么我们运行自己写的程序需要带路径,而系统的指令不需要带路径? 这是因为系统能找到它的位置,系统中是存在相关的环境变量,保存了程序的搜索路径的,系统中搜索可执行程序的环境变量叫做PATH。所以我们只需要把我们的程序拷贝到

    2024年02月04日
    浏览(48)
  • 【Linux基础】Linux环境变量(超详细)

    按 生命周期 分: 永久的 :在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。 临时的 :用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。 按 作用域 分: 系统 环境变量:公共的,对全部的用户都生效。 用户 环境变量

    2024年01月19日
    浏览(21)
  • 【Linux | Shell命令】Linux 环境变量

    Linux 系统中,很多程序和脚本通过环境变量来获取系统信息、存储临时数据和配置信息,了解去哪里设置相应的环境变量很重要。 本文总结了Linux 环境变量:它们存储在哪里、如何使用,以及如何创建自己的环境变量,最后会以数组变量的用法作结。 环境变量允许在内存中

    2024年02月12日
    浏览(42)
  • 【Linux】探索Linux进程优先级 | 环境变量 |本地变量 | 内建命令

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月04日
    浏览(45)
  • [linux] Linux中环境变量配置多个路径

    学校的服务器信息如下命令可以查询:  由于是学校的服务器,我们当然没有root权限,但是我们可以修改.bashrc文件来修改配置环境,此配置文件永久有效,但是仅针对当前用户。 CentOS的修改./bashrc文件的命令是 按下Enter就可以进入文件中  使用键盘上的Insert按钮便可以进行

    2024年02月07日
    浏览(28)
  • Linux和Shell笔记-4Linux环境变量

    Linux环境变量是在Linux操作系统中定义的一组变量,用于存储系统和用户的配置信息,例如系统路径、命令别名、语言环境等。 这些环境变量可以被所有进程和用户访问 。用户可以自定义环境变量或者使用预定义的环境变量,如PATH、HOME、USER等。其中,PATH环境变量定义了系统

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包