对UNIX系统管理员来说,日常例行要做的系统维护、管理工作是非常多而繁琐的,虽然现在各UNIX版本都有了图形界面,但对我们这些中Windows病毒太深的人来说,使用起来自然不是那么得心应手。其实UNIX也有自己的独到之处,那就是方便灵活、功能强大的UNIX shell 脚本(shell script,在有的文章中也叫shell程序)。
UNIX shell脚本是用户创建的ASCII码文件,在文件中包含着UNIX 或 shell命令,这些命令是可以在命令行提示符后键入的任何命令,包括管道、过滤器和重定向等操作。shell脚本还具有高级程序语言的一切特征,而且不需要编译和另外的命令解释程序支持。Shell脚本的强大功能不仅使简化管理员的日常工作成为可能,而且还可以实现UNIX管理工具所不能提供的功能(由于UNIX的版本很多,本文仅以HP-UX为例)。
实现不同终端登录同一帐号时执行不同的程序
一般情况下,系统管理员和普通用户登录同一帐号的目的是不同的,系统管理员登录后要进行的是系统维护,通常是在shell命令提示符下工作,而普通用户则希望登录后直接进入有关业务系统,而退出业务系统时同时退出登录。在网络终端接入模式下可以用下面的办法可以解决这个问题:
我们把系统管理员所使用的网络终端在/etc/hosts文件中定义为adm,普通用户所使用的网络终端依次定义为client1,client2,client3.......,然后在要登录的帐号的自动脚本文件.profile的适当位置添加以下代码:
who am i -R |cut -d"(" -f2|cut -d")" -f1| grep '^adm'>/dev/null
#过滤出当前用户主机名为adm的行
if [ $? = 0 ]
#判断过滤输出是否为空
then
exec sh
#进入命令提示符
else
exec 业务系统程序
#运行业务系统
fi
如果不同的用户在同一帐号中所使用的业务系统也不同,那么上面的代码可扩充为:
term_name=` who am i -R|cut -d"(" -f2|cut -d")" -f1`
#取当前用户主机名
case "$term_name"
in
adm) exec sh;;
client1) exec业务系统执行程序1;;
client2) exec业务系统执行程序2;;
esac
在两台主机间合理分配资源
假设有hosta、hostb两台主机,hosta上有一帐号user1用来运行一大型应用系统main,同时该系统使用的数据库也在hosta的数据库服务器dbserver中,由于受硬件资源所限,最多只能有10个用户登录到user1使用该系统,第11个用户登录后使用该系统时,出现系统资源不足的相关提示。我们可以利用UNIX远程登录信任机制和数据库网络访问模式,结合shell脚本,在hosta和hostb之间自动分配资源。
1、 把hosta和hostb分别设成数据库的服务器和客户机;
2、 在hosta中添加帐号user1,并将hosta的user1设为信任帐号(以上两步的具体步骤非本文讨论范围)
3、 在hostb的帐号user1中安装相同的应用系统;
4、 在hosta帐号user1的.profile的适当位置,加入以下脚本代码:
max_user_no = 10 #定义最大用户数
user_no=`w|grep '^user1'|wc -l`
#当前用户数
if test $user_no -gt $max_user_no
then
rlogin -8 hostb user1
#自动登录到hostb
else
exec main #在本机运行main
fi
自动删除core文件
core文件一般作为严重错误或QUIT信号的结果,产生在进程被异常中止时。程序员可以使用它来确定当进程被终止时的情况。Core文件可能很大,当不再需要时应该从系统上删除。可以执行含有以下代码的脚本来发现和清除系统上的core文件:
echo "正在搜索并删除core文件......"
find / -name core -print -exec rm {} ; #显示并删除所有的core文件
你还可以通过corn定期执行这个脚本。
以上只是我总结工作中使用shell脚本的几个典型的例子,其实它的功能之强大远远不止这些,希望大家能够利用《网管员世界》这个空间,多多交流,互相提高。
作者:李炜