간단 한 로그 인, 대량 실행 명령, 대량 copy 파일 셸 스 크 립 트 [Linux 운영 의 길 스 크 립 트 사례]
이름: satool PS: (동료 들 을 바보 토끼 라 고 부 를 수 있 습 니 다)
기능: 이 스 크 립 트 는 명령 을 대량으로 실행 하고 파일 을 복사 하 며 간단하게 로그 인 할 수 있 습 니 다. 서버 의 구체 적 인 IP 를 기억 하지 않 아 도 바로 로그 인 할 수 있 습 니 다.
설명: 그룹 을 나 누 어 대량 관리 할 수 있 습 니 다. 단일 스 레 드 는 각 그룹 에 백 대의 장 치 를 사용 하지 않 습 니 다. (사용 하 셔 도 됩 니 다. 결 과 를 되 돌려 주 는 시간 이 길 고 짧 은 문 제 를 기다 리 는 것 입 니 다)
용법: 비밀번호 없 이 ssh 로 로그 인 해 야 합 니 다.그룹 관리 이기 때문에 그룹 설정 파일 이 필요 합 니 다. /tools/function-all-ips (이름 은 스스로 정할 수 있 지만, 다음 스 크 립 트 는 이 프로필 을 참조 해 야 합 니 다) 프로필 형식
log_server="10.88.1.78 10.88.1.47 192.168.3.117"
lvs="192.168.1.141 192.168.1.142"
그룹 이름 = "IP IP IP IP” 이런 격식
도구 매개 변수:
[root@tools-server sbin]# satool -l lvs
1) 192.168.1.141
2) 192.168.1.142
选择要连接的服务器编号(Ctrl+C退出):
1 또는 2 만 입력 하면 됩 니 다. 바로 로그 인 할 수 있 습 니 다. LVS 의 구체 적 인 IP 가 얼마 인지 기억 할 필요 가 없습니다 [root@tools-server sbin]# satool -g lvs "df -h"
192.168.1.141
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
13G 6.9G 5.5G 56% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 1006M 0 1006M 0% /dev/shm
192.168.1.142
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
13G 6.9G 5.5G 56% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 1006M 0 1006M 0% /dev/shm
코드:
[root@tools-server sbin]# satool -l www
1) 192.168.1.2 6) 192.168.1.166 11) 192.168.7.187 16) 192.168.7.153
2) 192.168.1.3 7) 192.168.3.1 12) 192.168.7.149 17) 192.168.7.154
3) 192.168.1.4 8) 192.168.10.6 13) 192.168.7.150 18) 192.168.7.155
4) 192.168.1.5 9) 192.168.7.185 14) 192.168.7.151
5) 192.168.1.164 10) 192.168.7.186 15) 192.168.7.152
选择要连接的服务器编号(Ctrl+C退出):
[root@tools-server sbin]# satool -g www "w" "3"
192.168.1.2
23:47:34 up 57 days, 8:48, 0 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
192.168.1.3
23:47:34 up 57 days, 8:48, 0 users, load average: 1.04, 0.70, 0.66
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
192.168.1.4
23:47:34 up 57 days, 8:48, 0 users, load average: 3.29, 1.34, 0.84
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
색인 매개 변 수 는 마이너스, 즉 역방향 선택 도 지원 할 수 있 습 니 다.
코드:
[root@tools-server sbin]# satool -g www "w" "-3"
192.168.7.155
23:50:36 up 164 days, 21:52, 0 users, load average: 0.80, 0.40, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
192.168.7.154
23:50:36 up 168 days, 11 min, 0 users, load average: 0.11, 0.23, 0.19
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
192.168.7.153
23:50:37 up 160 days, 6:02, 0 users, load average: 0.91, 0.33, 0.21
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
비 연속 적 인 선택 도 지원 할 수 있 습 니 다.
코드:
[root@tools-server sbin]# satool -g www "w" "1 4 6"
192.168.1.2
23:51:37 up 57 days, 8:52, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
192.168.1.5
23:51:37 up 57 days, 9:34, 0 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
192.168.1.166
23:51:37 up 301 days, 11:22, 0 users, load average: 0.17, 0.31, 0.48
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
3. -cp 로 컬 파일 을 원 격 서버 에 대량으로 보 냅 니 다 (단 방향) [색인 추가 가능]
satool -cp 그룹 이름 src dest "num"(선택 가능)
코드
[root@tools-server tmp]# satool -cp lvs shdmt.txt /tmp/
192.168.1.141
shdmt.txt 100% 4973 4.9KB/s 00:00
192.168.1.142
shdmt.txt 100% 4973 4.9KB/s 00:00
주요 기능 은 바로 상기 와 같 습 니 다. 다른 기능 은 모두 보조 적 입 니 다. 다음은 전체 코드 총 300 여 줄 이 고 약간 비대 합 니 다. 토론 최적화 에 오신 것 을 환영 합 니 다.
#!/bin/bash
##2012-11-21#######
##make by G.M######
##version 3.0######
red="\033[31m"
end="\033[0m"
yel="\033[33m"
pur="\033[35m"
#function-all-ips DIR##
. /tools/function-all-ips
ll=`cat /tools/function-all-ips |awk -F = '{print $1}' |grep -v '#'`
grop () {
if [ -z "$app" ]
then
echo -e "${yel}$ll${end}"|xargs -n 4 |sed 's/ /\] \[/g'|sed 's/^/\[/g'|sed 's/$/\]/g'
elif [ -z "$cmd" ]
then
echo $ll |grep -w $app > /dev/null
if [ $? -eq 0 ]
then
eval echo '$'$app |xargs -n 1
else
echo -e "${red} 输入的组不在 function-all-ips!! $end"
fi
elif [ $# -eq 2 ]
then
for ip in `eval echo "$"$app`
do
echo -e "$red $ip $end"
ssh $ip "$cmd"
done
elif [ $# -eq 3 ]
then
total=`eval echo '$'$app |wc -w`
tmpnum=`echo $num|wc -w`
shuzu=(`eval echo "$"$app`)
echo $num | egrep "[a-zA-Z]" >/dev/null 2>&1
satus=$?
if [ $satus -ne 0 ]
then
if [ $tmpnum -eq 1 ] && [ ${num#-} -le $total ]
then
if [ $num -gt 0 ]
then
for s in `seq 0 $(($num-1))`
do
ip=${shuzu[$s]}
echo -e "$red $ip $end"
ssh $ip "$cmd"
done
elif [ $num -lt 0 ]
then
num=${num#-}
rshuzu=(`eval echo "$"$app |xargs -n 1|tac|xargs`)
for s in `seq 0 $(($num-1))`
do
ip=${rshuzu[$s]}
echo -e "$red $ip $end"
ssh $ip "$cmd"
done
fi
elif [ $tmpnum -gt 1 ]
then
for s in $num
do
if [ $s -le $total ];then
ip=${shuzu[$(($s-1))]}
echo -e "$red $ip $end"
ssh $ip "$cmd"
else
echo "$s is more than $app total"
fi
done
else
echo "$num is more than $app total"
fi
else
echo "$num is not number"
fi
fi
}
ip () {
if [ -z "$app" ]
then
echo -e "${yel}$ll${end}"|xargs -n 4 |sed 's/ /\] \[/g'|sed 's/^/\[/g'|sed 's/$/\]/g'
else
echo "$app" | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' >/dev/null
stat=$?
if [ "$stat" -eq 0 ]
then
ping -c 1 $app > /dev/null
if [ "$?" -eq 0 ]
then
if [ -z "$cmd" ]
then
echo -e "${red} 缺少命令 参数 !!! $end"
elif [ $# -eq 2 ]
then
echo -e "$red $app $end"
ssh $app "$cmd"
fi
else
echo -e "${red}$app 网络不可达${end}"
fi
else
echo -e "${red}无效的IP输入${end}"
fi
fi
}
SSH () {
if [ -z "$app" ]
then
echo -e "${yel}$ll${end}"|xargs -n 4 |sed 's/ /\] \[/g'|sed 's/^/\[/g'|sed 's/$/\]/g'
else
echo $ll |grep -w $app > /dev/null
if [ $? -ne 0 ]
then
echo -e "${red} 输入的组不在 function-all-ips!! $end"
else
PS3="选择要连接的服务器编号(Ctrl+C退出):"
lt=`eval echo "$"$app`
select ip in $lt
do
ssh $ip
break
done
fi
fi
}
fort () {
pid=$$
for i in $ll
do
lt=`eval echo "$"$i`
cat << EOF >>/tmp/$pid.log
$i () {
select a in $lt
do
ssh \$a
break
done
}
EOF
done
. /tmp/$pid.log
rm /tmp/$pid.log
PS3="Select group (Ctrl+C to exit):"
select ip in $ll
do
PS3="Select server: "
$ip
break
done
}
search () {
if [ -z $app ];then
echo '-s is search mode'
echo 'please input IP '
else
echo "$app" | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' >/dev/null
stat=$?
if [ "$stat" -eq 0 ]
then
echo $app
grep -w $app /tools/function-all-ips |awk -F '=' '{print $1}'
else
echo "无效的IP"
fi
fi
}
cps () {
if [ -z "$app" ]
then
echo -e "${yel}$ll${end}"|xargs -n 4 |sed 's/ /\] \[/g'|sed 's/^/\[/g'|sed 's/$/\]/g'
elif [ ! -z $app ] && [ -z $sfile ] || [ ! -f $sfile ]
then
echo $ll |grep -w $app > /dev/null
if [ $? -eq 0 ]
then
echo -e "源文件未指定或不存在!!"
eval echo '$'$app |xargs -n 1
else
echo -e "${red} 输入的组不在 function-all-ips!! $end"
fi
elif [ $# -eq 3 ]
then
for ip in `eval echo "$"$app`
do
echo -e "$red $ip $end"
scp $sfile $ip:$dfile
done
elif [ $# -eq 4 ]
then
total=`eval echo '$'$app |wc -w`
tmpnum=`echo $num|wc -w`
shuzu=(`eval echo "$"$app`)
echo $num | egrep "[a-zA-Z]" >/dev/null 2>&1
satus=$?
if [ $satus -ne 0 ]
then
if [ $tmpnum -eq 1 ] && [ ${num#-} -le $total ]
then
if [ $num -gt 0 ]
then
for s in `seq 0 $(($num-1))`
do
ip=${shuzu[$s]}
echo -e "$red $ip $end"
scp $sfile $ip:$dfile
done
elif [ $num -lt 0 ]
then
num=${num#-}
rshuzu=(`eval echo "$"$app |xargs -n 1|tac|xargs`)
for s in `seq 0 $(($num-1))`
do
ip=${rshuzu[$s]}
echo -e "$red $ip $end"
scp $sfile $ip:$dfile
done
fi
elif [ $tmpnum -gt 1 ]
then
for s in $num
do
if [ $s -lt $total ];then
ip=${shuzu[$(($s-1))]}
echo -e "$red $ip $end"
scp $sfile $ip:$dfile
else
echo "$s is more than $app total"
fi
done
else
echo "$num is more than $app total"
fi
else
echo "$num is not number"
fi
fi
}
case $1 in
-i)
shift
app=$1
shift
cmd=$*
ip $app "$cmd"
;;
-g)
shift
app=$1
shift
cmd=$1
shift
num=$1
if [ -z "$num" ];then
grop $app "$cmd"
else
grop $app "$cmd" "$num"
fi
;;
-cp)
shift
app=$1
shift
sfile=$1
shift
dfile=$1
shift
num=$1
if [ -z "$num" ]
then
if [ -z $sfile ] || [ -z $dfile ]
then
cps $app
else
cps $app "$sfile" "$dfile"
fi
else
if [ -z $sfile ] || [ -z $dfile ]
then
echo
cps $app
else
cps $app "$sfile" "$dfile" "$num"
fi
fi
;;
-l)
shift
app=$1
SSH $app
;;
-a)
fort
;;
-s)
shift
app=$1
search
;;
*)
echo "$0 [-i|-g]"
echo "-i IP cmd"
echo "-g group cmd [index] 经常用"
echo "-cp group src dest [index]"
echo "-s search mode"
echo "-l group (ssh usage) 常用"
echo "-a 堡垒机模式."
;;
esac
면책 성명: 도 구 를 사용 하 는 것 은 자원 적 인 선택 입 니 다. 만약 에 Liux 의 하 드 인용 과 소프트 인용 에 정통 하지 않 은 학생 이 라면 작은 따옴표 와 작은 따옴표 가 있 는 조합 명령 을 사용 하지 마시고 마스크 * (별표) 를 사용 하지 않도록 하 십시오. 사용 할 때 전의 여 부 를 고려 해 야 합 니 다. 만약 에 이 도 구 를 사용 하면 저 자 는 책임 을 지지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.