环境变量:
用于存储配置信息的变量,每个系统进程都可以访问这些变量,并根据它们的值来改变自己的执行方式或操作环境;
作用:
- 配置系统行为:比如指定默认的文本编辑器,默认加载程序
- 传递信息给程序:很多程序依赖环境变量来获取系统信息或配置。例如,PATH 环境变量用于告诉系统在什么路径下查找可执行文件,HOME 变量定义了当前用户的主目录
- 动态控制程序运行:通过修改环境变量,用户可以影响程序的运行行为。例如,通过 LD_LIBRARY_PATH 可以指定程序加载共享库时优先查找的路径
分类:
全局和局部,局部环境变量仅在当前shell脚本或者进程中有效,推出后就失效
生命周期:
子进程继承父进程的环境变量,但子进程中新添加的环境变量不会被父进程拿到
LD_PRELOAD:
一个环境变量,用于在运行时强制加载一个动态库,它的优先级最高,比编译时绑定的动态库优先级还高;
原理: linux的动态链接器 ld.so 会优先加载 LD_PRELOAD 中的库,覆盖或替换程序原本链接的库
作用:
- 重写系统库函数:比如替换 malloc 和 free 函数
- 拦截库调用:可以通过 LD_PRELOAD 来监控或修改一个程序对某个共享库的调用,而无需修改程序本身
- 替换动态库:有时,系统提供的动态库存在 bug 或性能问题,通过 LD_PRELOAD 可以临时替换掉有问题的库
LD_LIBRARY_PATH:
用于指定动态链接器在运行时搜索共享库的路径;当你运行一个依赖共享库的程序时,动态链接器会根据该路径列表,优先搜索目录中的动态库文件,而非默认的 /usr/lib 路径