Fangjian

FE / 生活是一种态度

导航
 » 主页
 » 项目
 » Github
 » 关于我

linux环境变量及执行顺序 [linux]

11 Sep 2017 » http
  • 1.环境变量是操作系统环境设置的变量,适用于整个系统的用户进程

  • 2.环境变量可以在命令中设置,但是用户注销的时候将会丢失这些设置值

  • 3.若要重复使用,则最好在 .profile 中定义; 环境变量的使用与本地变量的使用方法相同

  • 4.在使用之前,必须用 export 命令导出


一、概要

/etc/environment  	# 系统环境变量,系统启动时装载+

/etc/profile 		# 所有用户的环境变量,用户登陆时装载

~/.bash_profile 	# 存在就执行,且后续4,5配置文件不加载

~/.bash_login 		# 存在就执行,且后续5配置文件不加载

~/.profile 			# 存在就行

---------------------------------------------------------------

~/.bashrc 			# 用户登录成功后,每启动一个terminal就会执行一次加载

注:每次用户登录时,都会从2~5的顺序加载,有则加载并停止后续加载


二、系统启动文件

1. /etc/environment 文件

操作系统在登录时使用的第一个文件是 /etc/environment 文件,/etc/environment 文件包含指定所有进程的基本环境的变量


2. /etc/profile 文件

操作系统在登录时使用的第二个文件是 /etc/profile 文件

/etc/profile 文件控制系统范围的缺省变量, 系统管理员配置系统上所有用户的 /etc/profile 文件。只有系统管理员可以更改此文件

  • 导出变量

  • 文件创建掩码(umask)

  • 终端类型

  • 新邮件到达时作为指示的邮件消息

#Set file creation mask
umask 022
#Tell me when new mail arrives
MAIL=/usr/mail/$LOGNAME
#Add my /bin directory to the Shell search sequence
PATH=/usr/bin:/usr/sbin:/etc::
#Set terminal type
TERM=lft
#Make some environment variables global
export MAIL PATH TERM

3. profile 文件

.profile 文件在主目录($HOME)中,定制个人工作环境

cd 

ls -a

在 login 程序将 logname(登录名) 和 home(登录目录)变量添加到环境中后,将会执行 $HOME/.profile

  • .profile 文件包含覆盖 /etc/profile 文件中变量集的个人概要文件

  • .profile 文件通常用于设置导处的环境变量和终端方式

.profile文件控制以下缺省值:

  • 要打开的 shell

  • 提示符外观

  • 键盘声音

例子:

PATH=/usr/bin:/etc:/home/bin1:/usr/lpp/tps4.0/user::
epath=/home/gsc/e3:
export PATH epath
csh

此示例定义了两个路径变量(PATH 和 epath),将它们导出,并打开 C Shell(csh)。

还可以使用 .profile 文件(或者,如果它不存在,使用 /etc/profile 文件)来确定登录 Shell 程序变量。您还可以定制其他 Shell 环境。例如,使用 .cshrc 文件和 .kshrc 文件来分别定制 C Shell 和 Korn Shell 程序(当启动每种类型的 Shell 时)

4. .env 文件

如果 .profile 包含以下行:export ENV=$HOME/.env,那么操作系统在登录时使用的第四个文件是 .env 文件。

  • .env 文件使您能够定制个人工作环境变量

  • .env 文件包含覆盖 /etc/environment 文件中变量集的个人用户环境变量

  • 可以通过修改 .env 文件来按需定制环境变量

例子:

export  myid=`id | sed -n -e 's/).*$//' -e 's/^.*(//p'`
#set prompt: login & system name & path 
if [ $myid = root ]
        then    typeset -x PSCH='#:\${PWD}> '
                PS1="#:\${PWD}> "
        else    typeset -x PSCH='>'
                PS1="$LOGNAME@$UNAME:\${PWD}> "
                PS2=">"
                                PS3="#?"
fi
export PS1 PS2 PS3
#setup my command aliases
alias   ls="/bin/ls -CF" \
                d="/bin/ls -Fal | pg" \
                rm="/bin/rm -i" \
                up="cd .."