Linux运维小小案例


一、生成随机字符串

# 去掉/\两个字符,取第5到14位。
openssl rand -base64 40 | sed 's/[/\]//g' | cut -c 5-14
# 或者生成16位随机字符,1个,要包含数字-n和特殊字符-y。
pwgen 16 1 -n -y

二、文件名批量修改

  • 法一
#!/bin/bash
Filename=_faster.html
Dirname="/test"
cd $Dirname||exit 1
for n in `ls`
do
	name=$(echo ${n}|awk -F '_' '{print $1}')
	mv $n ${name}${Filename}
done
  • 法二
#!/bin/bash
Path="/test"
cd $Path && \
ls | awk -F '_' '{print "mv " "$0" "$1"_faster.html"}' | bash
  • 法三
rename faster.html slow.html *.html

三、并发ping

#!/bin/bash
CMD="ping -W 2 -c 2"
IP="192.168.74."
for n in $(seq 254);do
        {
                $CMD $IP$n > /dev/null 2>&1
                if [ $? -eq 0 ];then
                        echo "$IP$n is ok"
                fi
        }&
done
wait # 主shell进程需要等待各并发子进程的结束返回
echo finish

四、解决DOS攻击

file=$1
while true; do
	awk '{print $1}' $1 | grep -v "^$" | sort | uniq -c > /tmp/tmp.log
	exec < /tmp/tmp.log
	while read line; do
		ip=`echo $line | awk '{print $2}'`
		count=`echo $line | awk {print $1}`
		if [ $count -gt 500 ] && [ `iptables -nL | grep "$ip" | wc -l` -lt 1  ]; then
			iptables -I INPUT -s $ip -j DROP
			echo "$line is dropped" >> /tmp/droplist_$(date +%F).log
		fi
	done
	sleep 3600
done

五、MySQL备份

  • 不登录数据库如何执行sql命令
#!/bin/sh
MYUSER=root
MYPASS=123456
MYCMD="mysql -u$MYUSER -p$MYPASS -e"
for db in db1 db2 db3; do
	$MYCMD "use $db;show tables;"
done
  • 分库备份
#!/bin/sh
MYUSER=root
MYPASS=123456
DBPATH=/root/test/db_bak
MYCMD="mysql -u$MYUSER -p$MYPASS -e"
MYDMP="mysqldump -u$MYUSER -p$MYPASS"
[ ! -d $DBPATH ] && mkdir $DBPATH
for db in `$MYCMD "show databases;" | sed '1d' |egrep -v "mysql|schema|sys"`; do
    if [ -z `echo $db|grep "test"` ];then # 不包含test字符串
      $MYDMP $db | gzip >$DBPATH/${db}_$(date +%F).sql.gz
    fi
done

注意文中包含字符串的判断可有多种方式Shell判断字符串包含关系的几种方法
其中“$A =~ $B”是判断A包含B最简单的方式。

六、入侵检测与报警

  • 建立初始的文件指纹库
find /var/html/www -type f | xargs md5sum > /opt/checksum.bak
  • 利用指纹库检查文件是否被篡改
md5sum -c --quiet /opt/checksum.bak
  • 监测文件数量及文件名的变化
find /var/html/www -type f > /opt/filename.bak
find /var/html/www -type f > /opt/filename.now
diff /opt/filename.*
  • cron
* /3 * * * * /bin/sh /path/to/monitor.sh > /dev/null 2>&1

七、产生随机数

# 0~32767
echo $RANDOM
echo "bulabula$RANDOM" | md5sum | cut -c 8-15
openssl rand -base64 8
date +%s%N
head /dev/urandom|cksum
cat /proc/sys/kernel/random/uuid

apt install expect
expect_mkpasswd -l 8 -d 2 -c 3 -C 2 -s 1

yum install expect
mkpasswd -l 8 -d 2 -c 3 -C 2 -s 1

# 参数说明
-l 密码长度
-d 数字的数量
-c 小写字母的数量
-C 大写字母的数量
-s 特殊字符的数量

八、子脚本的调用方式

  • fork方式(分身,复制——产生新的PID)
    执行方式
/path/script.sh
/bin/sh /path/script.sh

系统启动一个子shell执行调用的脚本(生成新的PID——子shell)。子shell执行的时候父shell处于Sleep状态(S)。子shell执行完毕后返回到父shell。子shell可以继承父shell的环境变量,但反之不然。

  • exec方式(变身——沿用原来的PID)
    执行方式
exec /path/script.sh

被调用的脚本与父脚本在同一个shell内运行(不产生新的PID),但使用exec调用一个新脚本后,父脚本中exec之后的内容就不会再执行了——变身。

  • source方式(类似exec方式,沿用原来的PID)
    执行方式
source /path/script.sh
. /path/script.sh

source方式开启的脚本和父脚本在同一个shell中运行(不产生新的PID)。source调用一个新脚本,执行完成后,父脚本source之后的内容还会再执行。

九、shell逐行读取文件

  • 法一
exec <file
while read line; do
	echo $line
done
  • 法二
cat file | while read line; do
	echo $line
done
  • 法三
while read line; do
	echo $line
done < file
  • 法四
for line in `cat  test.txt`; do
    echo $line
done

十、测试表达式区别

测试表达式符号[ ]test[[ ]](())
边界是否需要空格YYYN
支持的逻辑运算符!,-a,-o!,-a,-o!,&&,┃┃!,&&,┃┃
支持的算数运算符-eq,-gt,-lt,-ge,-le-eq,-gt,-lt,-ge,-le-eq,-gt,-lt,-ge,-le和=,>,<,>=,<=-eq,-gt,-lt,-ge,-le和=,>,<,>=,<=
字符串比较=,==,!==,==,!==,==,!==,==,!=
是否支持通配*NNYN
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值