在很多次的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文件;
- [root@localhost ~]# vim /etc/profile
- # /etc/profile
- <span style="background-color: yellow;"># System wide environment and startup programs, for login setup【说明只有在用户名密码登陆时会加载】</span>
- # Functions and aliases go in /etc/bashrc
- # It's NOT a good idea to change this file unless you know what you
- # are doing. It's much better to create a custom.sh shell script in
- # /etc/profile.d/ to make custom changes to your environment, as this
- # will prevent the need for merging in future updates.
- pathmunge () {
- case ":${PATH}:" in
- *:"$1":*)
- ;;
- *)
- if [ "$2" = "after" ] ; then
- <span style="background-color: yellow;"> PATH=$PATH:$1</span>
- else
- <span style="background-color: yellow;"> PATH=$1:$PATH【这里定义了系统查找PATH的路径】</span>
- fi
- esac
- }
- if [ -x /usr/bin/id ]; then
- if [ -z "$EUID" ]; then
- # ksh workaround
- EUID=`/usr/bin/id -u`
- <span style="background-color: yellow;"> UID=`/usr/bin/id -ru`【定义EUID】
- </span> fi
- <span style="background-color: yellow;"> USER="`/usr/bin/id -un`"【定义用户角色】
- LOGNAME=$USER【定义用户名】
- </span> MAIL="/var/spool/mail/$USER"
- fi
- <span style="background-color: yellow;"># Path manipulation【具体地定义登陆用户的PATH】
- if [ "$EUID" = "0" ]; then【判断如果登陆用户的UID为0即管理员,则PATH路径为如下所示】</span>
- <span style="background-color: yellow;"> pathmunge /usr/sbin
- pathmunge /usr/local/sbin
- else【若不是管理员则PATH路径为如下所示】
- pathmunge /usr/local/sbin after
- pathmunge /usr/sbin after</span>
- fi
- <span style="background-color: yellow;">HOSTNAME=`/usr/bin/hostname 2>/dev/null`【主机名称】
- HISTSIZE=1000【常用!历史命令条数】</span>
- if [ "$HISTCONTROL" = "ignorespace" ] ; then
- export HISTCONTROL=ignoreboth
- else
- export HISTCONTROL=ignoredups
- fi
- <span style="background-color: yellow;">export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL【将上述定义过的环境变量使用export声明为环境变量】</span>
- # By default, we want umask to get set. This sets it for login shell
- # Current threshold for system reserved uid/gids is 200
- # You could check uidgid reservation validity in
- # /usr/share/doc/setup-*/uidgid file
- <span style="background-color: yellow;">if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
- umask 002
- else
- umask 022
- fi【定义了umask默认权限,具体umask说明见本段代码后】</span>
- for i in /etc/profile.d/*.sh ; do
- if [ -r "$i" ]; then
- if [ "${-#*i}" != "$-" ]; then
- . "$i"
- else
- . "$i" >/dev/null
- fi
- fi
- done
- unset i
- unset -f pathmunge
- JAVA_HOME=/usr/local/jdk
- PATH=$JAVA_HOME/bin:$PATH
- CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
- export PATH JAVA_HOME CLASSPATH
- MAVEN_HOME=/usr/local/apache-maven
- export MAVEN_HOME
- export PATH=${PATH}:${MAVEN_HOME}/bin
- export NODE_HOME=/usr/local/node
- 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就可以编辑你的登陆提示信息啦!
|