1.
写了个脚本,来备份目录下所有的 shell脚本文件。
-
#! /bin/bash
-
-
mkdir -p scripts
-
for i in $(find ./ -name "*".sh);do
-
cp $i scripts
-
done
后来才想到也许find 一条命令就可以实现。
-
mkdir -p scripts;
-
find . -name "*".sh -exec cp {} scripts \;
这时候会报很多文件相同的错,想了一下明白了,scripts 也在当前目录下,我这个命令既然是find 当前目录,那么scripts 也会被扫描,也会用cp 来拷贝scripts到scripts ,所以会出现这样的报错。
当然可以掩耳盗铃一下。
-
#就当我看不见
-
find . -name "*".sh -exec cp {} scripts \; 2> /dev/null
-
#但是用prune 不是更好吗?我记得在某本书上看过说-prune 只能和-print 连用,但是我今天决定试一下。
-
find . \( -path scripts \) -prune -o -name "*".sh -exec cp {} scripts \;
-
#-path scripts 居然不行,scripts 要写成./scripts, 但是我已经证明了 -prune 可以和exec连用。
-
#所以可以写成这样
-
find . -path ./scripts -prune -o -name "*".sh -execp cp {} scripts \;
-
#也可以
-
find . \( -path ./scripts \) -prune -o -name "*".sh -exec cp {} scripts \;
-
#如果多个目录要排除
-
find . \( -path ./scripts -o -path ./path \) -prune -o -name "*".sh -exec cp {} scripts \;
-
#所以在整个文件系统中找SUID 的文件,下面两种办法都可以.
-
find / \( -path /proc -o -path /run \) -prune -o -perm -4000 -exec ls -ld {} \;
-
find / \( -path /proc -o -path /run \) -prune -o -perm -4000 -print
-
2. traceroute 默认是用UDP通信,以目的端口33434 作为target.
但是今天我实验了一下,我在一台机器HOSTA用nc 来监听了33434的UDP 端口
在另外一台机器HOSTB,我使用traceroute 来print path.
很奇怪,在HOSTB上仍然很正常的打印出了有2个HOP。
百思不得其解。
3. 写了个脚本可以获取其他linux的内存,用到了expect.
-
auto_smart_ssh () {
-
expect -d -c "set timeout -1;
-
spawn ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $2 ${@:3};
-
expect {
-
*assword:* {send -- $1\r;
-
expect {
-
*denied* {exit 2;}
-
eof
-
}
-
}
-
eof {exit 1;}
-
}
-
"
-
return $?
-
}
-
-
IP_HEADER="10.32.134."
-
ip_range=(32 34 35 36 37 38 46 47 48 49)
-
ssh_opts="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
-
-
-
for i in ${ip_range[@]};do
-
mem=`auto_smart_ssh d1rector $IP_HEADER$i -C "free -m" |awk '/Mem:/{print $2}'`
-
echo "$IP_HEADER$i has ${mem}M memory"
-
done
4. ping 多个host的串行脚本
-
shopt -s -o nounset
-
IP_HEADER="10.12."
-
ip_range=("33.88" "30.233" "31.173" "33.27" "30.241" "32.32" "33.123")
-
length=${#ip_range[@]}
-
for (( i=0;i<$length;i++ ));do
-
ping -c 1 $IP_HEADER${ip_range[$i]} 2>&1 > /dev/null
-
#for i in ${ip_range[@]};do
-
# ping -c 1 $IP_HEADER$i 2>&1 > /dev/null
-
if [[ $? -ne 0 ]];then
-
echo $IP_HEADER${ip_range[$i]} is not respond to ping
-
#echo $IP_HEADER$i is not respond to ping
-
fi
-
done
阅读(806) | 评论(0) | 转发(0) |