a wonderful shell script
司寇飞航
2023-12-01
来自/etc/init.d/iptables,
a. 递归
b. 找出引用它的其它模块的方法
# Get referring modules.
# New modutils have another output format.
[ $NEW_MODUTILS = 1 ] /
&& ref=`lsmod | awk "/^${mod}/ { print ///$4; }" | tr ',' ' '` /
|| ref=`lsmod | grep ^${mod} | cut -d "[" -s -f 2 | cut -d "]" -s -f 1`
函数如下:
rmmod_r() {
# Unload module with all referring modules.
# At first all referring modules will be unloaded, then the module itself.
local mod=$1
local ret=0
local ref=
# Get referring modules.
# New modutils have another output format.
[ $NEW_MODUTILS = 1 ] /
&& ref=`lsmod | awk "/^${mod}/ { print ///$4; }" | tr ',' ' '` /
|| ref=`lsmod | grep ^${mod} | cut -d "[" -s -f 2 | cut -d "]" -s -f 1`
# recursive call for all referring modules
for i in $ref; do
rmmod_r $i
let ret+=$?;
done
# Unload module.
# The extra test is for 2.6: The module might have autocleaned,
# after all referring modules are unloaded.
if grep -q "^${mod}" /proc/modules ; then
modprobe -r $mod > /dev/null 2>&1
let ret+=$?;
fi
return $ret
}