×

Linux环境变量学习札记
  

justgonnab 6882

{{ttag.title}}
在很多次的Linux实施过程中都用到了环境变量的知识,空下时间来好好学了一学,为后期的工作充充电。

环境变量配置文件
环境变量作用:定义每个用户的操作环境。
变量类型:
l  用户自定义变量(本地变量);
l  环境变量;
l  预定义变量;
l  位置参数变量;
source命令:修改配置文件后,必须注销重新登陆才能生效;
或者使用source命令可以不用重新登陆。
eg:
第一种:[root@localhost ~]# source 配置文件
或者
第二种:[root@localhost ~]# . 配置文件
实际应用中需要特别注意的是使用第二种方法,如:[root@localhost ~]#. .bashrc (2个.的意思不一样)。
PATH、HISTSIZE、PS1、HOSTNAME等环境变量需要写入到相应的环境变量配置文件中。
环境变量配置文件中主要定义对系统操作环境生效的系统默认环境变量,例如:PTAH等。当系统启动开机后,输入用户名密码,这些环境变量配置文件就会被加载生效。
常用的一些环境变量配置文件:
² /etc/profile
² /etc/profile.d/*.sh
² ~/.bash_profile
² ~/.bashrc
² /etc/bashrc
其中,~/.bash_profile和~/.bashrc是针对当前用户的环境变量配置文件,也就意味着如果修改这两个文件那么环境变量只对当前用户生效而不会对系统全局生效。同理,/etc/profile、/etc/profile.d/*.sh和/etc/bashrc是对系统全局用户生效的。

环境变量配置文件功能?
² /etc/profile
² /etc/profile.d/*.sh
² ~/.bash_profile
² ~/.bashrc

² /etc/bashrc

正常完整的登陆流程(系统启动→输入用户名密码)会按照如下两条路径来加载环境变量配置文件:
1. /etc/profile→~/.bash_profile→~/.bashrc→/etc/bashrc→命令提示符
2. /etc/profile→/etc/profile.d/*.sh→/etc/profile.d/*.sh→/etc/sysconfig/i18n


而不输入用户名密码即用户切换时,环境变量配置文件加载流程为:
/etc/bashrc→/etc/profile.d/*sh→/etc/profile.d/lang.sh→/etc/sysconfig/i18n
最后出现命令提示符


接下来以/etc/profile环境变量配置文件为例来大概分析:
/etc/profile的包含如下主要内容:
²  USER变量;
²  LOGNAME变量;
²  MAIL变量;
²  PATH变量;
²  HOSTNAME变量;
²  HISTSIZE变量;
²  umask;

²  调用/etc/profile.d/*.sh文件;

  1. [root@localhost ~]# vim /etc/profile
  2. # /etc/profile

  3. <span style="background-color: yellow;"># System wide environment and startup programs, for login setup【说明只有在用户名密码登陆时会加载】</span>
  4. # Functions and aliases go in /etc/bashrc

  5. # It's NOT a good idea to change this file unless you know what you
  6. # are doing. It's much better to create a custom.sh shell script in
  7. # /etc/profile.d/ to make custom changes to your environment, as this
  8. # will prevent the need for merging in future updates.

  9. pathmunge () {
  10.     case ":${PATH}:" in
  11.         *:"$1":*)
  12.             ;;
  13.         *)
  14.             if [ "$2" = "after" ] ; then
  15. <span style="background-color: yellow;">                PATH=$PATH:$1</span>
  16.             else
  17. <span style="background-color: yellow;">                PATH=$1:$PATH【这里定义了系统查找PATH的路径】</span>
  18.             fi
  19.     esac
  20. }


  21. if [ -x /usr/bin/id ]; then
  22.     if [ -z "$EUID" ]; then
  23.         # ksh workaround
  24.         EUID=`/usr/bin/id -u`
  25. <span style="background-color: yellow;">        UID=`/usr/bin/id -ru`【定义EUID】
  26. </span>    fi
  27. <span style="background-color: yellow;">    USER="`/usr/bin/id -un`"【定义用户角色】
  28.     LOGNAME=$USER【定义用户名】
  29. </span>    MAIL="/var/spool/mail/$USER"
  30. fi

  31. <span style="background-color: yellow;"># Path manipulation【具体地定义登陆用户的PATH】
  32. if [ "$EUID" = "0" ]; then【判断如果登陆用户的UID为0即管理员,则PATH路径为如下所示】</span>
  33. <span style="background-color: yellow;">    pathmunge /usr/sbin
  34.     pathmunge /usr/local/sbin
  35. else【若不是管理员则PATH路径为如下所示】
  36.     pathmunge /usr/local/sbin after
  37.     pathmunge /usr/sbin after</span>
  38. fi

  39. <span style="background-color: yellow;">HOSTNAME=`/usr/bin/hostname 2>/dev/null`【主机名称】
  40. HISTSIZE=1000【常用!历史命令条数】</span>
  41. if [ "$HISTCONTROL" = "ignorespace" ] ; then
  42.     export HISTCONTROL=ignoreboth
  43. else
  44.     export HISTCONTROL=ignoredups
  45. fi

  46. <span style="background-color: yellow;">export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL【将上述定义过的环境变量使用export声明为环境变量】</span>

  47. # By default, we want umask to get set. This sets it for login shell
  48. # Current threshold for system reserved uid/gids is 200
  49. # You could check uidgid reservation validity in
  50. # /usr/share/doc/setup-*/uidgid file
  51. <span style="background-color: yellow;">if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
  52.     umask 002
  53. else
  54.     umask 022
  55. fi【定义了umask默认权限,具体umask说明见本段代码后】</span>

  56. for i in /etc/profile.d/*.sh ; do
  57.     if [ -r "$i" ]; then
  58.         if [ "${-#*i}" != "$-" ]; then
  59.             . "$i"
  60.         else
  61.             . "$i" >/dev/null
  62.         fi
  63.     fi
  64. done

  65. unset i
  66. unset -f pathmunge

  67. JAVA_HOME=/usr/local/jdk
  68. PATH=$JAVA_HOME/bin:$PATH
  69. CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
  70. export PATH JAVA_HOME CLASSPATH

  71. MAVEN_HOME=/usr/local/apache-maven
  72. export MAVEN_HOME
  73. export PATH=${PATH}:${MAVEN_HOME}/bin

  74. export NODE_HOME=/usr/local/node
  75. export PATH=$NODE_HOME/bin:$PATH
复制代码
umask权限,查看系统的默认权限。
注意:
1)      文件最高权限为666;
2)      目录最高权限为777;
3)      权限不能使用数字进行换算,而必须使用字母;
4)      umask定义的权限,是系统默认权限中准备丢弃的权限;
输入命令:
[root@localhost ~]# umask
0022
第1个0定义系统的特殊权限,如SUID、SGID、SBIT;
后面的022代表新建立文件的初始权限,所以默认创建新目录的初始权限为777-022=755,若umask值为033,则新创建目录的初始权限为:744;
其它的配置文件
注销时生效的环境变量配置文件:

² ~/.bash_logout,该文件打开时默认是空的

但如果想要在用户退出时(即logout)想要清空命令的历史记录,则添加history -c


添加后,在用户退出时,该命令则会自动执行。
本地终端欢迎信息:/etc/issue

打开/etc/issue


默认会显示内核版本和硬件架构,通常再加入\l来显示登陆终端号来区别终端。
但是,一般登陆Linux服务器都是SSH远程登陆,而并不会用到太多的本地终端欢迎信息。
所以需要看/etc/issue.net
1)      转义符在/etc/issue.net文件中不能使用;
2)      是否显示此欢迎信息,由SSH的配置文件/etc/ssh/sshd_config决定,加入“Bnner /etc/issue.net”行才能显示(须重启SSH服务);


然后 service sshd restart
但是区分本地登陆和远程登陆的提示信息配置起来太麻烦且容易混淆,所以这里推荐一个“万金油”——/etc/motd
不管是本地登陆还是远程登陆,都可以显示此欢迎信息。

直接vi /etc/motd就可以编辑你的登陆提示信息啦!


打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

sangfor_闪电回_小六 发表于 2018-6-24 19:38
  
干货,学习学习:爱你:
alimaomao 发表于 2018-7-3 08:25
  
很好,很全面!
王者无敌 发表于 2018-7-4 08:23
  
赞一个,太棒啦
ie5000 发表于 2018-7-7 22:28
  
超赞的资料
andylu0075 发表于 2018-7-9 13:55
  
非常不错, 赞一个
新手上路——195352 发表于 2018-7-9 14:12
  
厉害了!
盘藤 发表于 2018-7-9 14:58
  
学习学习
winsia 发表于 2018-7-12 09:16
  
太有用了,学习!
Nevermore 发表于 2018-7-24 19:17
  
必须赞一个。
发表新帖
热门标签
全部标签>
技术盲盒
西北区每日一问
安全效果
每日一问
干货满满
新版本体验
【 社区to talk】
技术笔记
功能体验
技术咨询
产品连连看
标准化排查
GIF动图学习
2023技术争霸赛专题
每周精选
信服课堂视频
通用技术
自助服务平台操作指引
秒懂零信任
技术晨报
安装部署配置
答题自测
原创分享
升级&主动服务
社区新周刊
POC测试案例
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高手请过招
高频问题集锦
全能先锋系列
云化安全能力

本版版主

12
185
6

发帖

粉丝

关注

121
315
352

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人