Entries Tagged as 'Shell'

linux下的initlog

这几天

公司有几台新装机器的私网路由老自动加不上

我跟了一下启动脚本的网络这块儿

发现个问题

ifup这个bash脚本不管我怎么在里面用echo加调试信息都没有用

今天仔细看了一下

发现ifup这个脚本在/etc/rc.d/init.d/network里是用action这个调用的

而action是个bash的函数

定义在文件/etc/init.d/functions里的

在这个函数的定义里

才发现原来ifup这个脚本是用initlog来运行的

准确的来讲是

initlog $INITLOG_ARGS来运行的

而在文件/etc/init.d/functions

INITLOG_ARGS是被赋予"-q"的

initlog -q执行的程序是不打印任何信息的

这也就是为什么控制台上得不到我所要的调试信息的原因

linux下echo加参数help的问题

在linux下
输入命令
echo –help
系统显示
–help
whereis echo
显示最先的是/bin/echo
于是
/bin/echo –help
结果显示了echo的帮助信息
alias命令看
也没有关于echo的alias信息
我的机器是一台FC4(Fedora Core 4)
在另一台AS3(RedHat enterprise advance server 3)的机器上也是这样
搞不懂为什么
比较搞笑
呵呵

在SecureCRT之类的终端仿真程序的标题显示远程server的全部ip地址

作为系统管理员

大概都有这种体会

管理的机器多了

经常同时用终端仿真程序连好几台机器

而且需要一会儿在这台上操作、一会儿又需要在那台机器上操作

很容易搞混机器:)

bash通过环境变量PROMPT_COMMAND支持在显示提示符PS1之前执行命令

而且xterm的终端类型又支持更改标题

所以……呵呵

我用bash的环境变量PROMPT_COMMAND+xterm

可以说已经解决了这个问题

具体的方法是

vi /etc/sysconfig/bash-prompt-xterm

添加一行,像下面这样:

echo -ne "\e]2;$(/sbin/ip -4 -o addr show | awk ‘{print $4}’ | awk -F/ ‘{print $1}’ | grep -v "^127\." | sed -e :a -e ‘$!N;s/\n/\//g;ta’)\a"

如果终端显示模式不是xterm的话

需要用命令export TERM=xterm将终端显示模式设置成为xterm

即可

其实这个问题也有别的解决方法

把每台机器的hostname设成这台机器的ip

然后再通过环境变量PS1来把ip地址显示在提示符里

不过这需要把环境变量PS1中的\h改成\H

\H能显示完整的ip地址

\h只能显示一个字节

像这样:

export PS1="[@\H \W]\\$ "

redhat不同版本下kickstart文件中%pre部分支持的命令的区别

今天上班整理了一下装机用的kickstart文件

发现一个问题

我在FC3(Fedora Core 3)下做的kickstart文件

在FC4(Fedora Core 4)下稍稍改改就能用

但在AS3(RedHat enterprise advance server 3)下死活有问题

后来搞半天才明白

原来是我在kickstart文件的%pre部分的shell程序的问题

我在这一段脚本里用了命令awk

这在FC3、FC4,以及AS4(RedHat enterprise advance server 4)下都没有问题

但在AS3下就是不行(command not found)

也就是说AS3的kickstart文件执行到%pre部分脚本的时候

还没有命令awk(%pre部分运行完毕就可以了)

没办法

只好把AS3下的kickstart文件里%pre部分用到awk命令的部分重新用sed和cut实现了一下

幸好还有命令sed和cut能用

否则我还真搞不定

我想这也许是这几个系统用的busybox的版本不一样造成的