一、环境
shell在环境中存储了两种数据类型:环境变量(environment variables )shell变量(shell variables).在shell中这两种变量基本没有什么不同。
此外shell还存放一些变成数据(programmatic data),分别是aliase和shell functions.
为了看环境中存储的东西:我们使用set和printenv程序来观察。set会显示shell和environment中的变量。printenv只会显示环境中的变量。
1 [me@linuxbox ~]$ printenv | less
显示了一系列环境变量及其对应值,我们也可以使用pritenv观察某个特定变量的值。
1 [me@linuxbox ~]$ printenv USER 2 me
1 [me@linuxbox ~]$ set | less
1 [me@linuxbox ~]$ echo $HOME 2 /home/me
alias需要使用alias显示
1 [me@linuxbox ~]$ alias 2 alias l.='ls -d .* --color=tty' 3 alias ll='ls -l --color=tty' 4 alias ls='ls --color=tty' 5 alias vi='vim' 6 alias which='alias | /usr/bin/which --tty-only --read-alias --showdot 7 --show-tilde'
部分环境变量如下图所示:
二、环境建立过程
当我们登录系统时,bash程序启动,从启动文件里读取一系列配置脚本。配置脚本里有所有用户的默认环境配置。
shell会话类型有两种,它决定了启动文件的执行顺序。
login shell:提示我们输入用户名和密码,例如虚拟控制台会话。
non-login shell:大多发生在我们使用GUI启动终端。
在读取以上启动文件之后,non-login shell还会继承父类进程的环境,通常是一个login shell。
由于大部分启动文件以“.”开头,意味着他们是隐藏的,所以在使用ls查看时要加上-a。
~./bashrc是一个最重要的启动文件。
我们来看下启动文件中有什么?
1 # .bash_profile 2 # Get the aliases and functions 3 if [ -f ~/.bashrc ]; then 4 . ~/.bashrc 5 fi 6 # User specific environment and startup programs 7 PATH=$PATH:$HOME/bin 8 export PATH
其中三、四行翻译如下:
1 If the file "~/.bashrc" exists, then 2 read the "~/.bashrc" file.
以上启动文件中的另一个重要因素是PATH变量。当用户输入ls,shell不会搜索整个系统来寻找/bin/ls(ls命令的完整路径名)而是会搜索
PATH变量中存储的目录列表。PATH变量通常是由启动文件/etc/profile中的一段代码设定。
1 PATH=$PATH:$HOME/bin
以上代码是利用参数扩展将$HOME/bin添加到PATH值的尾部。当系统需要检索用户输入的命令时,$HOME/bin这个路径会处于被搜索的路径列表之中。
1 export PATH
以上命令告诉shell子进程也可以使用PATH变量的内容。
三、修改环境
在PATH中添加变量或者定义另外的环境变量,是在.bash_profile(ubuntu是在.profile)中修改。其他的修改是在.bashrc中。
1 [me@linuxbox ~]$ printenv | less