2010年(19)
分类:
2010-05-08 16:05:28
1、查看当前bash版本,bash –version,或者打印环境变量BASH_VERSON。
[root@localhost ~]# bash --version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
[root@localhost ~]# echo $BASH_VERSION
3.00.15(1)-release
2、系统启动后运行的第一个进程为init,进程标识符为1,其派生出一个getty进程,该进程负责打开终端端口。接下来就是执行提/bin/login程序。其功能是验证相关用户名、密码等和设计环境,然后启动一个shell给该用户。bash进程首先要查找系统文件/etc/profile,执行其中的命令,然后在用户目录中查找一个名为.bash_profile的初始化文件。执行完相关命令后,bash shell接着在用户的ENV文件,执行.bashrc中的命令。最后获得相关的提示符如$等,接受用户的输入命令。
3、如何改变当前的shell?当前我的shell为bash,我在命令行中直接键入csh,然后ps查看一下,就看到我有二个shell在运行了,当前运行的shell为csh。按exit可以退出,这就是最临时改变一下你使用的shell。
4、查看/etc/profile文件看它有什么功能。
[root@localhost xinbo]# cat /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
pathmunge /usr/X11R6/bin after
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
unset pathmunge
从上面我们可以看出,其功能主要有给PATH变量赋值,shell将其指定的位置搜索命令;指定主提示符等一系统的功能。就这是为什么开始我们不同用户会显示不同的参数的原因。
4、再来看看目前用户的相关设置文件。~/.bash_profile,注意他是一个隐藏文件,我们要用ls –al 才能查看得到。如果在我们的主目录里面能找到它,那将被执行source命令。
[root@localhost xinbo]# cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
5、shell处理的是一些命令。而这些命令可以是:别名、关键字(if等)、函数、内置命令和可执行文件。其按以上类型顺序执行。通过type来查看相关命令类型。内置命令和函数是在shell中定义的,执行速度快。而像ls这样的脚本和可执行程序在存储在磁盘上的,shell为了运行它们得先搜索PATH的目录来查找它们,然后在shell中调用一个新的shell来执行脚本,因此相对而言较慢。
[root@localhost xinbo]# type test
test is a shell builtin
[root@localhost xinbo]# type ls
ls is aliased to `ls --color=tty'
[root@localhost xinbo]# type pwd
pwd is a shell builtin
[root@localhost xinbo]# type clear
clear is /usr/bin/clear
6、有条件执行命令。&&和|| 如gcc –o test test.c && test这个意思就是如果我执行gcc –o test test.c如果成功,即其退出状态为0的时候,我们才会接下执行test命令,如果失败就不执行和C语言中的一样。对于||来说的话,与C中中一样的理解就OK了。
7、shell的元字符。
&:在后台处理的进程;
;:隔命令;
$:替换变量;
?:匹配单个字符;
*:匹配0个或者多个字符;
[abc]:匹配abc中的一个。
[!abc]:除abc以外的一个字符。
(cmds):在子shell中执行命令。
{cmds}:在当前shell中执行命令。