两个sed小技巧

在写shell时使用sed处理一些输出,遇到两个问题,在网上找到了相应的解决办法,在此处备份一下。

[ sed处理空字符 ]

空字符,它的ASCII码值为0。在sed中如何标识空字符呢?看下面的例子:

find . -print0 | sed -e 's/\x0/\n/g'

在上面的例子中,find命令把当前目录下的文件名输出出来,以空字符分隔。输出被管道送给Sed进行处理。在sed中,则把空字符替换成回车符。

之所以用空字符做分隔符来分隔find命令的输出,是为了正确处理带空格的文件名。在上例中并没有体现出这点,我会在其它文章中说明。

[ sed使用shell中的变量 ]

在脚本中,有时希望在sed命令中使用shell定义的变量。在此时,就要用双引号而不是单引号来引用sed命令,因为对shell来说,它会处理双引号中的变量引用,而对单引号中的内容,shell完全不会动。例如:

  TERM1=term; TERM2=rxvt; echo "term" | sed -e "s/$TERM1/$TERM2/g"

注意上例中的引号用法。如果改成单引号,输出结果会不同。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/two-sed-tips/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在CentOS启动时自动加载内核模块

要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块。

下面是我所用的一个名为8021q.modules的脚本,用来在我的CentOS 5.3中自动加载802.1Q模块:

#! /bin/sh

/sbin/modinfo -F filename 8021q > /dev/null 2>&1
if [ $? -eq 0 ]; then
    /sbin/modprobe 8021q
fi 

上面的脚本首先检查8021q模块文件是否存在,如果存在,则调用/sbin/modprobe命令加载此模块。

把这个文件放在/etc/sysconfig/modules/目录中,并为其增加可执行权限。这样,下次重启系统时,802.1Q模块就会被自动加载。

在网上有些文章建议在/etc/rc.local文件中增加modprobe命令,这样做在某些情况下工作会不正常。因为在启动时,/etc/rc.local在执行完rc.d目录中的程序后才执行,因此,如果在rc.d中的程序如果用到了所需加载的模块,就会出错。

另外有些文章提到修改/etc/modprobe.conf文件,其实是错误的。这个文件仅仅是定义一些内核模块的别名、以及一些特殊的加载、卸载命令。修改此文件并不能使模块在启动时被自动加载。

本文参考了http://www.centos.org/modules/newbb/viewtopic.php?topic_id=15303&forum=37&post_id=53665

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/auto-load-kernel-module-on-boot-in-centos/

文章的脚注信息由WordPress的wp-posturl插件自动生成