【Linux进程(五)】Linux / Windows命令行参数与环境变量深度解析 | 附代码实验与配置技巧

【Linux进程(五)】Linux / Windows命令行参数与环境变量深度解析 | 附代码实验与配置技巧

在这里插入图片描述

🎬 个人主页艾莉丝努力练剑
专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录
Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:

在这里插入图片描述

文章目录

  • 本文预告
  • 4 ~> 环境变量和命令行参数
    • 4.1 命令行参数
      • 4.1.1 命令行参数的原理
      • 4.1.2 命令行参数可以实现选项功能——以关机程序(shutdown)为例
      • 4.1.3 补充:命令行参数名可以自定义
    • 4.2 环境变量
      • 4.2.1 概念
      • 4.2.2 常见的环境变量
      • 4.2.3 查看环境变量的方法
        • 4.2.3.1 测试PATH
        • 4.2.3.2 测试HOME
      • 4.2.4 和环境变量相关的指令
      • 4.2.5 环境变量的组织方式
      • 4.2.6 通过代码如何获取环境变量
        • 4.2.6.1 命令行第三个参数
        • 4.2.6.2 通过第三方变量environ获取
      • 4.2.7 通过系统调用获取或设置环境变量
      • 4.2.8 环境变量通常是具有全局属性的
      • 4.2.9 做一做:实验
      • 4.2.10 环境变量的实际场景:以vs为例。
        • 4.2.10.1 变量:变量名 + 变量的内容
        • 4.2.10.2 在Windows操作系统中将vs添加到PATH
      • 4.2.11 引入Linux环境变量,3~4个,环境变量命令,扩展Linux常见环境变量
        • 4.2.11.1 PATH
        • 4.2.11.2 要让myproc执行时候能够不用带任何路径,有两种做法
          • 4.2.11.2.1 做法一:将可执行程序拷贝到系统所指明的路径底下
          • 4.2.11.2.2 做法二:把当前路径添加到环境变量里面
        • 4.2.11.3 HOME
        • 4.2.11.4 PWD
        • 4.2.11.5 明明都是用c语言写的,凭什么这些指令使用时可以不带路径,而我们写的myproc要带路径?
        • 4.2.11.6 像pwd、ls、make、top…这些程序可以执行是因为系统会去这些路径下面去找,是找得到的!
        • 4.2.11.7 结论
        • 4.2.11.8 which命令
        • 4.2.11.9 环境变量思维导图一
      • 4.2.12 获取、设置环境变量
      • 4.2.13 理解环境变量的产生,修改文件配置实验
        • 4.2.13.1 env:查看环境变量
        • 4.2.13.2 结论
        • 4.2.13.3 环境变量具有全局属性——本质:环境变量被子进程继承了!
        • 4.2.13.4 环境变量相关命令
        • 4.2.13.5 bash也是一门语言(脚本语言)
        • 4.2.13.6 export:把本地变量变成环境变量
        • 4.2.13.7 本地变量:只在bash内部有效
        • 4.2.13.8 修改文件配置实验的思维导图
        • 4.2.13.8 配置文件:bashrc和bash_profile
          • 4.2.13.8.1 环境变量是从系统的特定的配置文件中来的
          • 4.2.13.8.2 .bashrc
          • 4.2.13.8.3 .bash_profile
          • 4.2.13.8.4 Windows当中的配置文件
        • 4.2.13.9 getenv
    • 4.3 查看并详解系统中所有的环境变量
      • 4.3.1 env | set
      • 4.3.2 HOME
      • 4.3.3 XDG_SESSION_ID
      • 4.3.4 HOSTNAME
      • 4.3.5 TERM
      • 4.3.6 SHELL
      • 4.3.7 SSH_CLIENT
      • 4.3.8 SSH_TTY
      • 4.3.9 USER
      • 4.3.10 LD_LIBRARY_PATH
      • 4.3.11 LS_COLORS
      • 4.3.12 PATH
      • 4.3.13 PWD
      • 4.3.14 LANG
      • 4.3.15 HOME
      • 4.3.16 LOGNAME
      • 4.3.17 OLDPWD
    • 4.4 内建命令
  • 本文文章代码演示
    • Makefile
    • myproc.c
  • 结尾

在这里插入图片描述

本文主要是围绕【命令行参数和环境变量】来展开的,重点在于以下四点——

在这里插入图片描述

环境变量和命令行参数,和进程并不强相关,但是任何OS都要讨论这个问题。

4.1.1 命令行参数的原理

了解了命令行参数之后,对于理解完整的程序有很大帮助。

main函数一般不用带参数——

在这里插入图片描述

解析命令行参数,通常是bash进程来做的——程序替换。

在这里插入图片描述

4.1.2 命令行参数可以实现选项功能——以关机程序(shutdown)为例

实现选项功能的原理——命令行参数。

选项——C语言的时候我们写过一个关机程序——系统调用的方式关闭计算机。

在这里插入图片描述

用——


——


在这里插入图片描述

——

:关闭计算机。 xxx(秒数,0 ~ 10年):设定多久之后关机,默认是30秒。

在这里插入图片描述

4.1.3 补充:命令行参数名可以自定义

,都是可以改的,argc这种都是约定俗成的,可以改,但是既然已经有约定俗成的名字了,用着就好了,当然虽然如此,还是给了程序员更改的自由。

在这里插入图片描述

像这些参数都是可以自定义的,因为是形参。

4.2.1 概念

(1)(environmentvariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。(2)如:我们在编写C/C++代码时——具体是在链接的时候——。(3)通常具有某些特殊用途,还有。

在这里插入图片描述

4.2.2 常见的环境变量

在这里插入图片描述

4.2.3 查看环境变量的方法


NAME:你的环境变量名称。

4.2.3.1 测试PATH
  • 1、创建文件

  • 2、对比执行和之间执行。
  • 3、为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序需要带路径才能执行?
  • 4、将我们的程序所在路径加入环境变量PATH当中,程序所在路径。
  • 5、对比测试。
  • 6、还有什么方法可以不用带路径,直接就可以运行呢?
4.2.3.2 测试HOME

1、用root和普通用户,分别执行,对比差异。

2、执行,对应和的关系。

4.2.4 和环境变量相关的指令

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

4.2.5 环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以结尾的环境字符串。

在这里插入图片描述

4.2.6 通过代码如何获取环境变量

4.2.6.1 命令行第三个参数

4.2.6.2 通过第三方变量environ获取

中定义的全局变量指向环境变量表,没有包含在任何头文件中,所以在使用时要用声明。

4.2.7 通过系统调用获取openclaw docker 教程或设置环境变量

  • ,我们后面介绍。
  • ,我们本次介绍。

常用和函数来访问特定的环境变量。

4.2.8 环境变量通常是具有全局属性的

在这里插入图片描述

直接查看,发现没有结果,说明该环境变量根本不存在——



  • 再次运行程序,发现结果有了——说明:我们再思考为什么?

4.2.9 做一做:实验

如果只进行,不调用导出,在用我们的程序查看,会有什么结果?为什么?

  • 普通变量。
  • 如果时间允许:做一下修改文件级环境变量

4.2.10 环境变量的实际场景:以vs为例。

4.2.10.1 变量:变量名 + 变量的内容

——和系统相关。

在这里插入图片描述
4.2.10.2 在Windows操作系统中将vs添加到PATH
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.11 引入Linux环境变量,3~4个,环境变量命令,扩展Linux常见环境变量

4.2.11.1 PATH

:获取环境变量的内容。

在这里插入图片描述

像下面这样是查不到的(后面带的PATH会被当成字符串)——

在这里插入图片描述
4.2.11.2 要让myproc执行时候能够不用带任何路径,有两种做法
在这里插入图片描述
4.2.11.2.1 做法一:将可执行程序拷贝到系统所指明的路径底下
在这里插入图片描述
  • 这种做法早在我们为了打消对指令恐惧的时候就已经实践过了——指令本质就是一个二进制可执行程序。

要想改回去——像这样就删除了,再执行就会报错了——

在这里插入图片描述
4.2.11.2.2 做法二:把当前路径添加到环境变量里面

——就是直接把当前路径贴到后面(会出现问题:大部分的命令跑不起来了,环境变量不是变量吗?改一个变量不就是变量名等于内容吗?)——

在这里插入图片描述

我们把当前路径添加到环境变量是要在原有路径之上新增这一段路径,而不是覆盖!

这样一改,系统中绝大部分命令都跑不起来了,只有诸如、这样的命令还能跑起来。

说明了一个问题:(这里一覆盖,原来PATH里面的内容就被清掉了)Linux系统能够使用那些命令,是因为在环境变量PATH里面记录了应该去哪里搜索那些命令的搜索路径。

在这里插入图片描述

那正确的做法是什么?如下图所示——

在这里插入图片描述
4.2.11.3 HOME
在这里插入图片描述
4.2.11.4 PWD

:查看用户当前所处的路径。

:记录用户当前所处的路径。

在这里插入图片描述
4.2.11.5 明明都是用c语言写的,凭什么这些指令使用时可以不带路径,而我们写的myproc要带路径?
在这里插入图片描述
4.2.11.6 像pwd、ls、make、top…这些程序可以执行是因为系统会去这些路径下面去找,是找得到的!
在这里插入图片描述
4.2.11.7 结论

结论:命令行中,修改环境变量,是内存级修改,退出再重启Xshell就会恢复(根据系统特定的配置文件重新生成)。

在这里插入图片描述
在这里插入图片描述
4.2.11.8 which命令
在这里插入图片描述

:搜索环境变量PATH(存在,结束查找)——

4.2.11.9 环境变量思维导图一
在这里插入图片描述

uu们,这里把艾莉丝的上下两张图结合起来看一下就好啦——

在这里插入图片描述

4.2.12 获取、设置环境变量

  • 指定的可执行程序,只能被我执行!!!
在这里插入图片描述
  • 代码一
在这里插入图片描述

在这里插入图片描述
  • 代码二
在这里插入图片描述

在这里插入图片描述
  • 代码三
在这里插入图片描述

在这里插入图片描述

4.2.13 理解环境变量的产生,修改文件配置实验

4.2.13.1 env:查看环境变量
在这里插入图片描述
4.2.13.2 结论

1、2、

4.2.13.3 环境变量具有全局属性——本质:环境变量被子进程继承了!

这一个一个环境变量值从哪里来的?。

环境变量是内存级的?。

在这里插入图片描述
4.2.13.4 环境变量相关命令

前面已经介绍过了,这里不多提——

在这里插入图片描述
4.2.13.5 bash也是一门语言(脚本语言)
在这里插入图片描述
4.2.13.6 export:把本地变量变成环境变量
在这里插入图片描述
4.2.13.7 本地变量:只在bash内部有效
在这里插入图片描述
在这里插入图片描述

这里OK是被当成字符串处理了。

4.2.13.8 修改文件配置实验的思维导图
在这里插入图片描述
4.2.13.8 配置文件:bashrc和bash_profile
4.2.13.8.1 环境变量是从系统的特定的配置文件中来的

环境变量是从系统的特定配置文件中来的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.2.13.8.2 .bashrc

掩码、都在开机启动时配置好了——

设置,以及根据uid设置掩码——

在这里插入图片描述

我们可以更改环境变量,使得重新登录进入XShell时打印下面的话——

在这里插入图片描述
4.2.13.8.3 .bash_profile

在这里插入图片描述
4.2.13.8.4 Windows当中的配置文件

如下图,这些就是——

在这里插入图片描述
4.2.13.9 getenv

:根据名字,。


在这里插入图片描述


在这里插入图片描述

4.3.1 env | set

:查看环境变量——。


:显示本地定义的shell变量和环境变量。

在这里插入图片描述

4.3.2 HOME

:记录当前用户的身份,记录下当前用户默认的家目录是谁(默认把用户所处的路径设置为家目录)。

说白了就是为什么登录时家目录在你指定的路径下——因为环境变量配置好了。

4.3.3 XDG_SESSION_ID

:这个我们不管。

在这里插入图片描述

4.3.4 HOSTNAME

:当前机器的主机名。


为什么会知道你的主机名叫什么?

在这里插入图片描述

在环境变量里面已经记录下来了。

4.3.5 TERM

:登录终端是谁——“XXX”。


只是一种登录形式。

4.3.6 SHELL

:代表登陆之后所采用的shell是什么。


用到的shell(媒婆)是bash(王婆)。

4.3.7 SSH_CLIENT

:代表当前的客户端是谁(远程登录)。


在这里插入图片描述

4.3.8 SSH_TTY

:代表登录时给用户的终端文件是什么。


在这里插入图片描述

4.3.9 USER

:代表是谁来登录的。


启动XShell、创建用户时知道了用户是谁、UID是多少。

4.3.10 LD_LIBRARY_PATH

:这是关于动态库的,我们后面再介绍。


4.3.11 LS_COLORS

:这么长一大堆都是命令执行时的一些配色方案。


4.3.12 PATH

:命令行参数在搜索可执行程序时带的路径。


4.3.13 PWD

:当前用户所处的工作路径。


4.3.14 LANG

:代表语言和编码格式。


4.3.15 HOME

:代表当前的家目录。


4.3.16 LOGNAME

:代表当前真实登录的用户是谁。


4.3.17 OLDPWD

:上一次的工作路径。

用可以做到跳转 / 。


在这里插入图片描述

像下面这种都是内置命令——

在这里插入图片描述




uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!

往期回顾:

【Linux进程(四)】深入理解 Linux O(1) 调度器:双队列轮转与进程优先级机制——如何避免进程饥饿,实现公平且高效的进程调度

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡૮₍ ˶ ˊ ᴥ ˋ˶₎ა


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/284399.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月15日 下午1:49
下一篇 2026年3月15日 下午1:50


相关推荐

关注全栈程序员社区公众号