Linux环境变量和命令行参数

本文详细介绍了Linux环境变量的基本概念,如PATH和HOME,以及如何查看和设置环境变量。同时,文章探讨了命令行参数在C程序中的应用,包括main函数的参数列表和命令行参数的意义。此外,还讲解了如何通过C库函数getenv获取环境变量,并讨论了环境变量的组织方式,包括通过main函数的第三个参数获取环境变量。
摘要由CSDN通过智能技术生成

📒博客主页:Morning_Yang丶
🎉欢迎关注🔎点赞👍收藏⭐️留言
📌本文所属专栏: 【Linux】
🙏作者水平有限,如果发现错误,敬请指正!感谢感谢!

1.1 基本概念

环境变量我们早已听说过,比如在学习 Python 的时候,会在 windows 上配置环境变量:

image-20221002162708584

可环境变量到底是什么呢

  • 环境变量 (environment variables) 一般是指在操作系统中用来指定操作系统运行环境的一些参数

    这些参数通常有特殊的用途。

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

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

常见环境变量

  • PATH:(当前用户)指定命令的搜索路径

  • HOME:指定当前用户的主工作目录(即用户登陆到 Linux 系统中时,默认的目录)。

  • SHELL:当前 shell,即当前用户使用的命令行解释器的版本,它的值通常是 /bin/bash。

  • HISTSIZE:命令历史记录保存数量。(centos 6.7 默认是 3000 条)

    命令 history 可以查看所有命令历史记录。搭配管道 history | wc -l 可以查看命令历史记录的行数。


1.2 查看环境变量

  • echo $PATH 命令,PATH 是环境变量的名称,查看指定环境变量。

    image-20221002162814610

  • env 命令,查看系统中所有的环境变量。

    image-20221002171853230


1.3 环境变量:PATH

思考

  • 我们编写的 C/C++ 代码,编译生成的可执行程序,是不是一个命令呢?—— 是的。
  • 在 Linux 中,任何一个可执行程序,具有可执行权限(x),就称之为它是一条命令。所以我们通过gcc编译得到的可执行文件其实也是一条命令。

其实我们听过的:程序、命令、指令、可执行程序等等,其实都是一个概念,是同一个东西。(⭐)

思考

  • 既然是同一个概念,那为什么我们运行 ls 等命令,不用带 ./ 当前路径,而运行我们自己的可执行程序 proc 必须要带 ./proc 当前路径呢?

    image-20221002163319273

分析

  • 环境变量 PATH 中保存的是指定命令的搜索路径

  • 因为 ls 等命令是在系统的特定路径下保存起来的。

  • 而我们的 proc 命令没有保存在 PATH 指定的这些路径中,而系统执行命令只会在 PATH 指定的这些路径中搜索,所以系统找不到我们的 proc 命令,就报错了。

    image-20221002162814610

    每个路径都是绝对路径,并且每条路径以冒号 :分隔开,当我们运行一条命令时,如果在这些路径中都没查找到该命令,就会报错

思考

那有没有什么办法,可以让可执行程序 proc 不用带 ./ 当前路径就可以直接运行呢?

  • 方法1:把 proc 文件拷贝到环境变量 PATH 指定的任一路径下。不推荐该方式,会污染别人写好的指令集。

  • 方法2:把 proc 所在路径添加到环境变量 PATH 中。(注意:我们自己添加的环境变量,系统重启后不会被保存)

    PATH=$PATH:/home/yzy/xxx/10
    
    # :冒号是分隔符
    # 注意:PATH=/home/yzy/xxx/10,不能这样写,必须加上$PATH:,否则会把PATH中所有内容覆盖掉
    

    运行效果图:

    image-20221002165115344

    注意

    如果我们不幸把环境变量给覆盖掉了,不用担心,环境变量既然是变量,说明它是可以被赋值的,即在用户登录的时候,通过用户目录下的配置文件赋值的,所以只需要重新登录下就好了。

    比如:用户目录下的 .bash_profile 文件,这些文件不建议自己去随意修改:

    image-20220616225449396


1.4 环境变量:HOME

分别在 root 和普通用户下执行 cd ~ 和 pwd 查看家目录,分别是 /root/home/yzy,为什么不一样呢?

是因为不同用户的家目录中的配置文件不一样,所以不同用户下的环境变量 HOME 也是不一样的:

[yzy@VM-4-4-centos ~]$ echo $HOME # 指定用户的主工作目录
/home/yzy
[root@VM-4-4-centos ~]$ echo $HOME
/root

1.5 和环境变量相关的命令

  1. echo:显示某个环境变量值。
  2. export:设置一个新的环境变量。
  3. env:显示所有环境变量。
  4. set:显示在本地 shell 内定义的变量和环境变量。(既能查看本地变量,也可以查看环境变量)
  5. unset:清除环境变量。

1.6 通过 C 库函数获取环境变量:getenv

getenv 和 setenv 函数介绍:

#include <stdlib.h>
/*
* name: 环境变量的名称
* 返回值: 环境变量的内容
*/
char *getenv(const char *name); // 获取环境变量

int setenv(const char *
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morning_Yang丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值