#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
disk_info_file='../data/disk_info.dat'
net_info_file='../data/net_info.dat'
# 創建
function init_disk(){
echo -n '' > ${disk_info_file}
# 所有硬盤的列表
disklist=$(lsblk -p | grep "^/dev/sd" | cut -d ' ' -f 1)
# 過濾出每塊硬盤的序列號,並保持在文件裏
for disk in ${disklist}
do
#echo ${disk}
hdparm -i ${disk} | grep "SerialNo=" | cut -d ',' -f 3 | tr -d '[^( ?)|( ?)$]' | cut -d '=' -f 2 >> ${disk_info_file}
done
}
function init_net(){
# 提取網卡型號並保存
lshw -C network | grep "product:" | cut -d ':' -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' > ${net_info_file}
}
function shutdown_disk() {
echo "shutdown disk..."
echo 1 > /sys/block/${1}/device/delete
}
function shutdown_net() {
echo "shutdown net..."
ifconfig ${1} down
}
function disable_usb() {
echo "install usb-storage /bin/true" > /etc/modprobe.d/block_usb.conf
}
function check_disk() {
disklist=$(lsblk -p | grep "^/dev/sd" | cut -d ' ' -f 1)
# 過濾出每塊硬盤的序列號,並保持在文件裏
for disk in ${disklist}
do
serialno=$(hdparm -i ${disk} 2>/dev/null | grep "SerialNo=" | cut -d ',' -f 3 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | cut -d '=' -f 2)
#serialno=123
if test -n "${serialno}" -a -z "$(grep "${serialno}" ${disk_info_file})"; then
echo "發現異常硬盤 ${disk} ${serialno}"
shutdown_disk ${disk#/dev/}
fi
done
}
function check_net() {
# 網卡型號
lshw -C network | grep "product:" | cut -d ':' -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' > tmp_1
# 網絡名稱
lshw -C network | grep "logical name:" | cut -d ':' -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' > tmp_2
while IFS=, read -r net_type net_name
do
## take some action on $line
# echo " ======= " $net_type
# echo " ======= " $net_name
# net_type=$(echo "$line" | cut -d ',' -f 1)
# net_name=$(echo "$line" | cut -d ',' -f 2)
if test -n "${net_type}" -a -z "$(grep "${net_type}" ${net_info_file})"; then
echo "發現異常網卡 ${net_type} , ${net_name}"
shutdown_net ${net_name}
fi
done < <(paste -d ',' tmp_1 tmp_2)
}
function init(){
init_disk
init_net
#disable_usb
}
function check() {
check_disk
check_net
}
function usage() {
echo "Usage: ${0} {init | check}"
}
# echo $#
# 參數數量小於3
if test $# -lt 1; then
usage ${0}
exit 1
fi
case ${1} in
"init")
init
;;
"check")
check
;;
*)
usage ${0}
exit 1
;;
esac
check and disable device
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.