check and disable device

#!/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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章