Bash Shell-版本和环境
[b]开题:[/b] Shell作为系统同用户的交接口,是学习和工作的平台,它所占的地位是举足轻重的.而Bash Shell是作为GNU/Linux系统学习者必不可少的脚本编程语言.看别人写的教材,如果没有实际操作过的话,很容易就忘记了.我觉得比较好的办法就是看教材,然后自己的实际操作一次(当然练习多次,记忆更加深刻),并且把它给记录下来,到时候回头看的时候很快就可以进入当时学习的思路.
目前使用的Linux版本是
[table=98%][tr][td][root@localhost ~]# [b]cat /etc/issue[/b]
CentOS release 4.3 (Final)
Kernel \r on an \m
[/td][/tr][/table]
[b]1.1 bash版本[/b]
确认你当前使用的bash版本,可以使用bash的--version选项或者打印环境变量BASH_VERSION.
[table=98%][tr][td][root@localhost ~]# [b]bash --version[/b]
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
[root@localhost ~]# [b]echo $BASH_VERSION[/b]
3.00.15(1)-release
[/td][/tr][/table]
[b]1.2 Shell启动[/b]
系统启动后运行的第一个进程是init进程,它的进程PID是1.init派生一个getty进程。getty进程负责打开终端端口,提供标准输入的来源,和标准输出与标准错误输出的去处,并且在屏幕上显示一个登陆提示符.
接下来是要执行/bin/login程序,login程序执行的以下工作:提示用户输入口令,加密并验证用户输入的口令,设置初始环境,启动用户登陆的Shell.
Bash 进程首先查找系统文件/etc/profile,并且执行其中的命令.然后它在用户的主目录中查找一个名为.bash_profile的初始化文件.执行完.bash_profile中的命令后,bash shell接着在用户的ENV文件,通常叫做.bashrc,中执行一个命令.最后默认的美圆($)提示符将出现在屏幕上,如果是root用户则为(#)提示符.
[b]2.1 环境[/b]
一个进程的环境包括:变量,打开的文件,当前的工作目录,函数,资源限额,信号等.它定义了可以从一个进程继承到下一个进程的特征,以及对当前工作环境的配置.
登陆时,如果在用户的主目录下存在.bash_profile文件,就对其执行source命令.它先设置用户的别名和函数,再设置用户特定的环境变量以及启动脚本.
如果用户没有.bash_profile文件,但有一个名为.bash_login文件,那么将对这个文件执行source命令,如果也没有.bash_login文件,而有一个.profile文件,就对这个.profile文件执行source命令.
[table=98%][tr][td][root@localhost ~]# [b]pwd[/b]
/root
[root@localhost ~]# ls .bash*
.bash_history .bash_logout .bash_profile .bashrc
[root@localhost ~]# [b]man source[/b]
source filename [arguments]
Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename.
[color=#ff0000](注: source命令是指读并且执行文件里的命令,并且是以当前shell的环境和返回执行完最有一个命令后的退出状态.)[/color]
[/td][/tr][/table]
/etc/profile文件是一个系统级的初始化文件,由系统管理员进行设置,在用户登陆时执行指定的任务.这个文件在bash shell启动时被执行.
[table=98%][tr][td][root@localhost ~]# [b]cat -n /etc/profile[/b]
1 # /etc/profile
2
3 # System wide environment and startup programs, for login setup
4 # Functions and aliases go in /etc/bashrc
5
6 pathmunge () {
7 if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
8 if [ "$2" = "after" ] ; then
9 PATH=$PATH:$1
10 else
11 PATH=$1:$PATH
12 fi
13 fi
14 }
15
16 # Path manipulation
17 if [ `id -u` = 0 ]; then
18 pathmunge /sbin
19 pathmunge /usr/sbin
20 pathmunge /usr/local/sbin
21 fi
22
23 pathmunge /usr/X11R6/bin after
24
25
26 # No core files by default
27 ulimit -S -c 0 > /dev/null 2>&1
28
29 USER="`id -un`"
30 LOGNAME=$USER
31 MAIL="/var/spool/mail/$USER"
32
33 HOSTNAME=`/bin/hostname`
34 HISTSIZE=1000
35
36 if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
37 INPUTRC=/etc/inputrc
38 fi
39
40 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
41
42 for i in /etc/profile.d/*.sh ; do
43 if [ -r "$i" ]; then
44 . $i
45 fi
46 done
47
48 unset i
49 unset pathmunge
解析:
6-14:定义一个函数 pathmunge(),输出路径变量PATH,并对输出做匹配,如果匹配非真时,则进入下一个条件判断语句,然后将函数pathmunge的第二个参数做判断,如果第二个参数等于after,则把第一个参数加入到路径变量PATH的后面,否则就将第一个参数加入到路径变量PATH的前面.
17-21:先判断登陆的用户UID是否为0,如果是的话则将/sbin,/usr/sbin,/usr/local/sbin加入到路径变量PATH前面.
23:把路径/usr/X11R6/bin加入到路径变量PATH后面.
27:设置软限制的core的最大值为0,并且把标准的输出或者标准的错误输出结果丢弃.
29-34:设置环境变量,包括USER(用户),LOGNAME(登陆名),MAIL(邮箱),HOSTNAME(主机名),HISTSIZE(历史命令条数).
36-38:判断变量INPUTRC没有付值并且在HOME目录用户主目录中没有.inputrc文件时,则把/etc/inputrc付值给变量INPUTRC.
40:输出这些变量,让当前的Shell或者派生的子Shell也可以识别.
42-46:如果/etc/profile.d/目录中所有以.sh结尾的脚本有执行权限,则用点(.)命令也就是source命令来执行/etc/profile.d/目录中所有以.sh结尾的这些脚本.
48-49:清除变量i和pathmunge.
[/td][/tr][/table]
~/.bash_profile文件,如果在用户的主目录找到~/.bash_profile,则将它在/etc/profile后执行source命令.如果用户没有~/.bash_profile文件,但有一个名为~/.bash_login文件,那么将对这个文件执行source命令,如果也没有~/.bash_login文件,而有一个~/.profile文件,就对这个~/.profile文件执行source命令.只能对这三个文件中的其中一个执行source命令.Bash还将检查用户是否有一个.bashrc文件并对它执行source命令.
[table=98%][tr][td][root@localhost ~]# [b]cat -n ~/.bash_profile[/b]
1 # .bash_profile
2
3 # Get the aliases and functions
4 if [ -f ~/.bashrc ]; then
5 . ~/.bashrc
6 fi
7
8 # User specific environment and startup programs
9
10 PATH=$PATH:$HOME/bin
11
12 export PATH
13 unset USERNAME
解析:
4-6:先判断是否存在~/.bashrc文件,如果存在则执行source命令.
10:把用户的主目录的/bin目录加入到路径变量PATH中.
12:输出路径变量PATH给Shell环境.
13:注销USERNAME变量.
[/td][/tr][/table]
.bashrc文件,每次当一个新的或交互式Bash Shell或bash脚本启动时自动对这个文件执行source命令。它包含那些只属于Bash Shell的设置。
[table=98%][tr][td][root@localhost ~]# [b]cat -n .bashrc[/b]
1 # .bashrc
2
3 # User specific aliases and functions
4
5 alias rm='rm -i'
6 alias cp='cp -i'
7 alias mv='mv -i'
8
9 # Source global definitions
10 if [ -f /etc/bashrc ]; then
11 . /etc/bashrc
12 fi
解析:
5-7:设置别名
10-12:如果存在文件/etc/bashrc则对其进行source命令。
[/td][/tr][/table]
页:
[1]