当前位置: 首页 > news >正文

Linux学习笔记之环境变量

        写这篇博客的目的主要是因为本人学习动静态库时,用到了环境变量的知识,发现略有遗忘,因此回顾复习,整理成博客。

一、环境变量是什么

        Linux环境变量是存储系统或程序运行时配置信息的特殊变量,用于为程序提供配置参数、影响程序行为以及简化命令使用等。常见的环境变量包括PATH(指定可执行文件查找路径)、HOME(用户主目录路径)、SHELL(用户使用的shell类型)、USER(当前登录用户名)、PWD(当前工作目录路径)等。

        bash启动时,会形成两张表,一张是环境变量表,一张是命令行参数表。bash首先解析命令行参数,根据得到的每一个命令行参数,去查找对应的环境变量表。

        通俗来说,环境变量就像是电脑里的“小便签”,上面写着一些重要的提示信息,比如“我的程序该去哪里找文件”或者“我用的是哪种语言”。这些便签的内容可以随时查看和修改,帮助电脑和程序更好地完成任务。

二、常用环境变量

1.PATH:用来指定系统可以在哪些目录中查找可执行文件

2.HOME:指定当前家目录是多少

3.SHELL:当前shell,通常为/bin/bash

4.LD_LIBRARY_PATH:用于指定动态链接器在运行时查找共享库的路径。当程序运行时,动态链 接器会查找所需的共享库(.so文件)。默认情况下,链接器会在标准库路径(如/lib、/usr/local/lib等)中查找这些库。然而,有些程序可能需要使用非标准路径中的库文件。LD_LIBRARY_PATH环境变量允许用户指定额外的库搜索路径,从而确保程序能够找到所需的库。

三、环境变量的一些指令

1.查看系统中所有环境变量的指令:env

        如下图:

2.查看某个具体环境变量的内容 echo $NAME //NAME是环境变量的名字

        我们使用 echo $PATH查看该环境变量内容:

3.1export 设置一个新的环境变量

        用export设置的环境变量不仅在当前shell环境中有效,还可以被子进程继承。请注意,export是内建命令,内建命令是指那些直接集成在操作系统命令行解析器中的命令,由当前的shell执行,而不是子进程,因此才可以export到该环境中。如果是子进程来执行,由于存在写时拷贝,父进程,即shell是无法拥有新加入的环境变量的!

        使用格式是 export 变量名=内容

3.2 set 显示当前shell环境中的本地变量

        设置本地变量常用的方法是直接赋值:

4.unset清除某个环境变量

接下里我们来取消上一张图片中新增的环境变量MYENV

        可以看到我们刚刚设置的MYENV环境变量已经消失。

5.修改环境变量内容的方法

        比如此时我有一个运行helloworld的可执行程序,我需要./code.c来运行,./就是指明可执行程序的路径。

       修改PATH这个环境变量的内容,为了运行可执行程序时不再写./code.c,而是直接code.c,我们可以修改PATH。

        直接在命令行输入以下内容:

        PATH=要执行的可执行程序的路径 ,是不被允许的,因为这样会覆盖原有内容,我们要做的是保留原有内容,增添新内容,所以我们可以这样做:

        即使用:作为分隔符,既保留原有内容,又增添所需路径。

四、环境变量从来的

        环境变量是用户登录时,bash从系统配置文件加载环境变量。这里的配置文件指的是 和.bash_profile这两个配置文件。

        .bashrc:用于设置交互式非登录shell的环境变量和别名。

        .bash_profile(ubtuntu下是.profile文件):用于设置登录shell的环境变量。

五、获取某个环境变量的系统调用接口:getenv

        具体用法如下代码:

        运行结果如下,跟我们上文看到的PATH内容一样。

         感谢观看!希望仔细读到这里的你能够有所收获。下期我们讲操作系统找到动态库的四种方法,尽情期待哟!

http://www.xdnf.cn/news/139969.html

相关文章:

  • 住宅IP如何选择:长效VS短效,哪个更适合你的业务?
  • java排序算法-计数排序
  • OCR(Optical Character Recognition),光学字符识别
  • HashMap底层原理 什么是哈希表?哈希冲突?如何处理哈希冲突?
  • kotlin与MVVM结合使用总结(三)
  • (Go Gin)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
  • 防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战
  • 【1】GD32 系统架构、内核、中断系统、存储器系统
  • IDEA编写flinkSQL(快速体验版本,--无需配置环境)
  • Vue3后代组件多祖先通讯设计方案
  • OpenCV 图形API(63)图像结构分析和形状描述符------计算图像中非零像素的边界框函数boundingRect()
  • 52.[前端开发-JS实战框架应用]Day03-AJAX-插件开发-备课项目实战-Lodash
  • ubuntu20.04安装x11vnc远程桌面
  • AI数据分析的利器:解锁BI工具的无限潜力
  • android将打包文件的password和alias写入到本地文件
  • 区块链如何达成共识:PoW/PoS/DPoS的原理、争议与适用场景全解
  • 一些有关ffmpeg 使用(1)
  • LSPatch官方版:无Root Xposed框架,自由定制手机体验
  • MySQL的日志--Undo Log【学习笔记】
  • MCP认证考试技术难题实战破解:从IP冲突到PowerShell命令的深度指南
  • Hadoop进阶之路
  • 第100+39步 ChatGPT学习:R语言实现Xgboost SHAP
  • AI网络渗透kali应用(gptshell)
  • 第十二天 使用Unity Test Framework进行自动化测试 性能优化:Profiler分析、内存管理
  • 【QQmusic自定义控件实现音乐播放器核心交互逻辑】第三章
  • PyCharm 中 FREECAD 二次开发:从基础建模到深度定制
  • uni-app中获取用户实时位置完整指南:解决权限报错问题
  • 运维之SSD硬盘(SSD hard Drive for Operation and Maintenance)
  • Spring Cloud Gateway 如何将请求分发到各个服务
  • AI 工程师崛起:科技浪潮下的新兴力量