在我的大学里,我必须作为练习来运行bash脚本,以反向查找他们拥有的B类网络块的所有DNS条目。
这是我所获得的最快的速度,但需要永远的时间。优化此代码有帮助吗?
#!/bin/bash
network="a.b"
CMD=/usr/bin/dig
for i in $(seq 1 254); do
for y in $(seq 1 254); do
answer=`$CMD -x $network.$i.$y +short`;
echo $network.$i.$y ' resolves to ' $answer >> hosts_a_b.txt;
done
done
答案 0 :(得分:0)
使用GNU xargs一次运行64个进程可能看起来像:
override func isEqual(object: AnyObject?) -> Bool {
if let object = object as? MyClass {
// check for every ivar that should be equal
return foo == object.foo && bar == object.bar
} else {
return false
}
}
请注意,这不能保证输出的顺序(并且依靠#!/usr/bin/env bash
lookupArgs() {
for arg; do
# echo entire line together to ensure atomicity
echo "$arg resolves to $(dig -x "$arg" +short)"
done
}
export -f lookupArgs
network="a.b"
for (( x=1; x<=254; x++ )); do
for (( y=1; y<=254; y++ )); do
printf '%s.%s.%s\0' "$network" "$x" "$y"
done
done | xargs -0 -P64 bash -c 'lookupArgs "$@"' _ >hosts_a_b.txt
函数对每个结果执行一个lookupArgs
系统调用)-但是输出是可排序的,因此您应该可以重新排序。否则,通过切换到GNU并行-大的perl脚本,而GNU xargs的小,简单,相对低功能的实现,可以得到有序的输出(并确保结果的原子性)。