首页 > 系统相关 >linux系统环境变量

linux系统环境变量

时间:2022-09-07 20:33:26浏览次数:138  
标签:文件 LC 0524 linux 系统 etc 生效 root 环境变量

打印环境变量

打印环境变量命令

命令 说明
set 显示当前shell的所有变量包括其内建环境变量(与shell外观等相关),用户自定义变量及导出的环境变量
env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
export 显示从shell中导出成环境变量的变量,也可以通过他将自定义变量导成全局变量。

结果对比

#设置变量
[root@0524 ~]# temp=kylin
[root@0524 ~]# export temp_env=kylin
#查看变量输出结果
[root@0524 ~]# env | grep kylin
temp_env=kylin
[root@0524 ~]# export | grep kylin
declare -x temp_env="kylin"
[root@0524 ~]# set | grep kylin
temp=kylin
temp_env=kylin


#将命令结果输出到文件
[root@0524 ~]# env | sort > env.txt
[root@0524 ~]# export | sort > export.txt
[root@0524 ~]# set | sort > set.txt
#对比结果
[root@0524 ~]# vimdiff env.txt  export.txt  set.txt 
  HISTSIZE=1000               |  declare -x HISTSIZE="1000"        |                                  ;;  
  HOME=/root                  |  declare -x HOME="/root"           |                                  ;;     
  HOSTNAME=0524               |  declare -x HOSTNAME="0524"        |                                  *)     
  LANG=zh_CN.UTF-8            |  declare -x LANG="zh_CN.UTF-8"     |                                  *) 
  LOGNAME=root                |  declare -x LOGNAME="root"         |                                  *)
  ............

环境变量修改方式

修改方式

变量修改方式 说明
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据。
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配子串的最长数据。
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据。
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的子串} 将符合旧字串的全部字串替换为新的字串

${变量名#匹配字串}

#从头向后开始匹配,删除符合匹配字串的最短数据。
[root@0518 ~]# path=$PATH	#变量赋值
[root@0518 ~]# echo $path	#查看变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/.dotnet/tools:/root/bin
[root@0518 ~]# path=${path#/usr}	#删除字符串
[root@0518 ~]# echo $path	#查看
/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/.dotnet/tools:/root/bin

环境变量配置文件

系统级

/etc/environment,

	是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需要加入一行如PATH=$PATH:/xxx/bin的代码即可

生效时间: 新开终端生效,或者手动source /etc/environment生效
生效期限: 永久有效
生效范围: 对所有用户有效

/etc/profile

	是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。该文件一般是调用/etc/bashrc文件。

生效时间: 新开终端生效,或者手动source /etc/profile生效
生效期限: 永久有效
生效范围: 对所有用户有效

/etc/bashrc

	系统级的bashrc文件,为每一个运行bash shell的用户执行此文件。此文件会在用户每次打开shell时执行一次。

生效时间: 新开终端生效,或者手动source /etc/bashrc生效
生效期限: 永久有效
生效范围: 对所有用户有效

注意

  • /etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与用户登录无关,后者与用户登录有关。
  • 这两个文件修改一般都要重启操作系统生效。
  • 如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值,则以用户环境为准。

用户级(文件处于用户家目录下)

~/.bash_profile

	是对应当前登录用户的profile文件,用于定制当前用户的个人工作环境。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方。

生效时间: 使用相同的用户打开新的终端时生效,或手动source ~/.bash_profile生效
生效期限: 永久有效
生效范围: 仅对当前用户生效

~/.bashrc

	是对应当前用户登录的bash初始化文件,当用户每次打开shell时,系统都会执行此文件一次。
生效时间: 使用相同的用户打开新的终端时生效,或手动source ~/.bashrc生效
生效期限: 永久生效
生效范围: 仅对当前用户生效

注意

  • ~/.profile可以设定本用户专有的路径,环境变量等,他只能登入的时候执行一次。

  • ~/.bashrc也是用户专有的设定文档,可以设定路径,命令别名等,用户每次打开shell都会使用他一次。

  • 每次退出shell,会读取~/.bash_logout

用户登录顺序

1. /etc/environment
2. /etc/profile
3. /etc/bash.bashrc
4. ~/.profile
5. ~/.bashrc

特殊的环境变量

locale

文件位置

	涉及语言和符号等locale设置,语言不匹配会出现字符框等乱码现象。可以再/etc/locale.conf中配置,也可以在/etc/profile配置,注意生效范围。

配置方法

#查看配置文件
[root@0524 ~]# cat /etc/locale.conf 
LANG="zh_CN.UTF-8"
#命令查看
[root@0524 ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

#说明
LC_ALL : 一个宏,如果该值设置了,则会覆盖所有的LC_*的设置。
LC_CTYPE : 语言符号及其分类。
LANG : 可以看做是所有未被设置的locale变量的默认值。
LANGUAGE :  许多应用程序读取这个变量作为界面语言。
#优先级   优先级低的会被优先级高的覆盖
LC_ALL > LC_* > LANG

动态库相关

LD_PRELOAD(一般不用)

​ 是一个环境变量,用于动态库的加载,加载时优先级最高。

​ 可以影响程序运行时的链接,允许你自定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,可以再主程序和动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。

​ 一方面,不用修改源代码不用重新编译应用程序,就可以在运行时调整某部分功能。可用来做问题诊断、错误注入测试、数据监控、日志加亮、性能优化以及异常检测等;另一方面,也可以向别人的程序注入程序,从而达到特定的目的(双刃剑)

测试使用

​ 通过自定义 库文件,使ls输出的内容保存到文件中,并且查看时内容有颜色。有无颜色和isatty函数的返回值有关,可使用ltrace查看。

#查看isatty返回值
[root@0524 ~]# ltrace ls > ltrace_ls 2>&1
[root@0524 ~]# grep isatty ltrace_ls 
isatty(1)                                        = 0

#生成库文件,定义isatty的返回值为1
[root@0524 ~]# echo 'int isatty(int fd){ return 1;}' | gcc -x c -o libisatty.so -shared -
[root@0524 ~]# ls
env.txt  export.txt  file1  file2 ltrace_ls  test  libisatty.so(生成的库文件)

#指定库文件执行命令
[root@0524 ~]# LD_PRELOAD=./libisatty.so ls > file1

#查看文件
[root@0524 ~]# cat file1 
env.txt  export.txt  file1  file2  libisatty.so  ltrace_ls  test
现在使用cat命令查侃file1文件,文件中目录和库文件都是有颜色的。

LD_LIBRARY_PATH(常用)

​ 也是一个环境文件,主要用于指定查找动态链接库外时除默认路径外的其他路径。

​ 一直程序时经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中。

ldconfig

​ 位于/usr/sbin/下,他将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用。因此当安装完库文件或者修改了/etc/ld.so.conf文件增加了新的路径后,需要运行一下ldconfig命令,使所有的库文件都被缓存到/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

默认库文件路径

在没有其他设置的情况下,默认在标准库路径/lib和/usr/lib中搜索库文件。

区别和使用

  • 一般情况下,优先级顺序为: LD_PRELOAD > LD_LIBRARY_PATH > /etc/ld.so.cache > /lib > /usr/lib
  • 连接器的缺省搜索路径是 /lib 和 /usr/lib
  • ld.so.conf 在系统范围内全局有效,而且最好配合ldconfig使用
  • LD_PRELOAD与LD_LIBRARY_PATH都是环境变量,更多时候作为一种临时解决方案,在没有权威或临时需要的时候使用。也可以添加至/etc/profile 、 ~/.bashrc等地方使之自行生效并扩大有效范围。

标签:文件,LC,0524,linux,系统,etc,生效,root,环境变量
From: https://www.cnblogs.com/maituzideluobei/p/16667175.html

相关文章

  • Linux-->定时任务调度
    crond任务调度概述指定系统在某个时间执行特点的命令或程序。任务调度分类:系统工作:有些重要的工作需要周而复始的重复执行,如病毒扫描等。个别用户工作:个别用户可能......
  • 学生管理系统
    //学生类packageTest;publicclassStudent{privateStringname;privateintage;privateStringid;privateStringare;publicStringgetName......
  • Linux内核参数-共享内存
    在数据库配置过程中经常会遇到系统内核参数配置,而其中比较关键的有关于共享内存参数的配置首先解释几个定义共享内存共享内存,顾名思义即系统中两个或多个进程可以共同访......
  • 2、系统的硬件组成
    目录1系统的硬件组成概览1.1总线1.2I/O设备1.3主存1.4处理器1系统的硬件组成概览1.1总线总线是负责在各个部件之间传递信息的,信息的单位是字节。根据部件类别,......
  • 推荐系统论文-baseline论文
    ①Wide&DeepLearningforRecommenderSystems中文版英文版下载②DeepFM:AFactorization-MachinebasedNeuralNetworkforCTRPrediction中文版1中文版......
  • Linux防火墙放行端口
      CentOS7采用新的firewalld,CentOS6及以前版本采用iptables,不过firewalld底层仍然调用的是iptables1、查看已经开放的端口firewall-cmd--list-ports2、放行端......
  • [安装配置] Linux docker 安装
    官方安装文档地址:https://docs.docker.com/engine/install/centos/1.卸载旧版本dockersudoyumremovedocker\docker-client\......
  • linux 内核参数优化
    linux内核参数优化//允许非本地Ip地址socket监听net.ipv4.ip_nonlocal_bind=1//开启ipv4转发net.ipv4.ip_forward=1//是否开启数据包时间戳net.ipv4.tcp_time......
  • 交叉编译移植Python到arm架构下的Linux系统
    参考:https://blog.csdn.net/weixin_41922484/;https://blog.csdn.net/qq_28351465/article/details/54406180;  https://cloud.tencent.com/developer/articl......
  • Docker 容器部署jenkins后忘记系统用户密码处理方案
    一、问题描述由于本地尝试使用docker部署jenkins来研究梳理工具的使用步骤,但隔了一段时间之后,重新拉起容器应用镜像,发现忘记了用户密码,无法登录系统。二、解决方案第......