devops 信创在数字经济时代提升企业竞争力的关键策略
932
2022-11-27
【Linux中高级运维: 第55天——Shell编程】第6章:解决类DDOS攻击+批量改名+批量生成随机字符文件名
面试题1:已知test.txt文件里含有如下域名:
etiantian.orgbbs.etiantian.orgetiantian.orgblog.etiantian.orgetiantian.orgetiantian.orgblog.etiantian.org
uniq 去重 -c计数sort
[root@web01 /server/scripts]# sort test.txt|uniq -c|sort -rn 4 etiantian.org 2 blog.etiantian.org 1 bbs.etiantian.org [root@web01 /server/scripts]# awk '{++S[$1]} END {for(key in S) print S[key],key}' test.txt|sort -rn
第一篇:详解linux netstat输出的网络连接状态信息 第二篇:庖丁解牛获取连接状态数的awk数组命令 第三篇:awk数组命令经典生产实战应用拓展 第四篇:老男孩培训第八节课前awk考试题案例(门户面试题解答) 第五篇:linux生产服务器有关网络状态的优化措施(告一段落) -I INPUT -s IP地址 -j DROP。
[root@web01 /server/scripts]# cat ctrl_ddos1.sh #!/bin/bash############################################################### File Name: ctrl_ddos.sh# Version: V1.0# Author: oldboy# Organization: oldboyedu.com##############################################################jisuan(){ awk -F "[ :]+" '/ESTABLISHED/{print $(NF-3)}' netstat.log|sort|uniq -c|sort -rn|head -10 >/tmp/ip.log while read line do ip=`echo $line|awk '{print $2}'` count=`echo $line|awk '{print $1}'` if [ $count -gt 10 ] && [ `iptables -nL|grep "$ip"|wc -l` -lt 1 ] then echo "$ip iptables -I INPUT -s $ip -j DROP else echo "$ip fi done
for 变量名 in 变量取值列表do 指令...donefor n in 1 2 3 4 5do echo $ndonefor n in {1..5} do echo $ndonefor n in `seq 5`do echo $ndone
第二种for循环语句称之为C语言型for循环语句,其语法结构如下:
for((exp1;exp2;exp3))do 指令...donefor ((i=1;i<=5;i++))do echo $idoneecho ====================i=1while ((i<=5))do echo $i ((i++))done
随机数:
1、openssl随机数
[root@web01 /server/scripts]# openssl rand -base64 8|cut -c 1-8M7R3cvSl[root@web01 /server/scripts]# openssl rand -base64 8|cut -c 1-8
2、简单random随机数
[root@web01 /server/scripts]# echo $RANDOM28127RANDOM Each time this parameter is referenced, a random integer between 0 and 32767 is generated. Thesequence of random numbers may be initialized by assigning a value to RANDOM. If RANDOM isunset, it loses its special properties, even if
3、时间随机数
[root@web01 /server/scripts]# date +%N783556744[root@web01 /server/scripts]# date +%N|md5sum|cut -c 5-13
4、
[root@web01 /server/scripts]# head /dev/urandom|cksum|md5sumf448a3b537ca1d8883079efc12705282 -[root@web01 /server/scripts]# head /dev/urandom|cksum|md5sum
5、
[root@web01 /server/scripts]# cat /proc/sys/kernel/random/uuid4c2c10a8-e340-48e8-a61e-65b052fe1ea8[root@web01 /server/scripts]# cat /proc/sys/kernel/random/uuid
6、
mkpasswd命令依赖于数据包expect,因此必须通过yum install expect
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下:
[root@oldboy scripts]# ls /oldboyapquvdpqbk_oldboy.html mpyogpsmwj_oldboy.html txynzwofgg_oldboy.htmlbmqiwhfpgv_oldboy.html mtrzobsprf_oldboy.html vjxmlflawa_oldboy.htmljhjdcjnjxc_oldboy.html qeztkkmewn_oldboy.htmljpvirsnjld_oldboy.html ruscyxwxai_oldboy.htmltouch apquvdpqbk_oldboy.htmltouch bmqiwhfpgv_oldboy.htmltouch jhjdcjnjxc_oldboy.htmltouch
1、10位小写字母随机数:
[root@web01 /server/scripts]# openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11
2、命令行手工搞定一个
[root@web01 /server/scripts]# random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`[root@web01 /server/scripts]# echo $randomqvnprjvpey[root@web01 /server/scripts]# echo $randomqvnprjvpey[root@web01 /server/scripts]# random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`[root@web01 /server/scripts]# echo $randomftlhpzuvcg[root@web01 /server/scripts]# touch ${random}_oldboy.html[root@web01 /server/scripts]# random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11`[root@web01 /server/scripts]# touch ${random}_oldboy.html
3、搞定多个脚本for循环
[root@web01 /server/scripts]# vim 19_1_1.sh#!/bin/bash############################################################### File Name: 19_1_1.sh# Version: V1.0# Author: oldboy# Organization: oldboyedu.com##############################################################Path=/oldboy[ -d $Path ] || mkdir $Pathfor n in {1..10}do random=`openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11` touch $Path/${random}_oldboy.html done [root@web01 /server/scripts]# sh 19_1_1.sh[root@web01 /server/scripts]# ls /oldboy/
19.1.2 企业Shell面试题2:批量改名特殊案例 将上面试题19.1.1中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写HTML。 三种方法实现:
1、先命令行处理一个
[root@web01 /oldboy]# file1=kfixfkghqz_oldboy.html[root@web01 /oldboy]# mv $file1 ${file1/oldboy.html/oldgirl.HTML}
2、脚本处理多个 方法1:
Path=/oldboy[ -d $Path ] || mkdir $Pathcd $Pathfor file1 in `ls`do mv $file1 ${file1/oldboy.html/oldgirl.HTML} done
方法2: rename专业改名
[root@web01 /oldboy]# rename "oldgirl.HTML" "oldboy.html" *HTML[root@web01 /oldboy]# lsfzewmfbowb_oldboy.html kfixfkghqz_oldboy.html qaxuezrdyh_oldboy.html vkftijhssz_oldboy.htmlibcmutcmyj_oldboy.html ovqxxevhlw_oldboy.html rkoxkozsfs_oldboy.htmlinpdcqsmfo_oldboy.html paoreutqqd_oldboy.html sksdayeamk_oldboy.html[root@web01 /oldboy]# rename "oldboy.html" "oldgirl.HTML" *html[root@web01 /oldboy]# ls
方法3:
mv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTMLmv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTMLmv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTML[root@web01 /oldboy]# ls *.html|awk -F '_' '{print "mv",$0,$1"_oldgirl.HTML"}'mv fzewmfbowb_oldboy.html fzewmfbowb_oldgirl.HTMLmv ibcmutcmyj_oldboy.html ibcmutcmyj_oldgirl.HTMLmv inpdcqsmfo_oldboy.html inpdcqsmfo_oldgirl.HTMLmv kfixfkghqz_oldboy.html kfixfkghqz_oldgirl.HTMLmv ovqxxevhlw_oldboy.html ovqxxevhlw_oldgirl.HTMLmv paoreutqqd_oldboy.html paoreutqqd_oldgirl.HTMLmv qaxuezrdyh_oldboy.html qaxuezrdyh_oldgirl.HTMLmv rkoxkozsfs_oldboy.html rkoxkozsfs_oldgirl.HTMLmv sksdayeamk_oldboy.html sksdayeamk_oldgirl.HTMLmv vkftijhssz_oldboy.html vkftijhssz_oldgirl.HTML[root@web01 /oldboy]# [root@web01 /oldboy]# [root@web01 /oldboy]# ls *.html|awk -F '_' '{print "mv",$0,$1"_oldgirl.HTML"}'|bash[root@web01 /oldboy]# ls
#!/bin/shFilename=_oldgirl.HTMLDirname="/oldboy"cd $Dirname||exit 1for n in `ls` do name=$(echo ${n}|awk -F '_' '{print $1}') mv $n ${name}${Filename}done
19.1.1 企业Shell面试题1:批量生成随机字符文件名案例
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含oldboy固定字符串加10个随机小写字母,名称示例如下:
[root@oldboy scripts]# ls /oldboy
19.1.3 企业Shell面试题3:批量创建特殊要求用户案例
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)。 不用for循环的实现思路:解答: 本题的详细答案见第11章范例11_14,此处仅作为Shell案例集中收集整理。
范例12_4:已知下面的字符串是通过将RANDOM随机数采用md5sum加密后任意取出连续10位的结果,请破解这些字符串对应的md5sum前的数字? 4fe8bf20ed
19.1.8 企业Shell面试题8:筛选符合长度的单词案例
利用bash for循环打印下面这句话中字母数不大于6的单词(某企业面试真题)。 I am oldboy teacher welcome to oldboy training class 解答: 本题的详细答案见第13章范例13_4,此处仅作为Shell案例集中收集整理。
1)字符串长度
[root@web01 /server/scripts]# oldboy="I am oldboy."[root@web01 /server/scripts]# echo ${#oldboy}12[root@web01 /server/scripts]# echo ${oldboy}|wc -L12[root@web01 /server/scripts]# expr length "${oldboy}"12[root@web01 /server/scripts]# echo $oldboy|awk '{print length}'12[root@web01 /server/scripts]# echo $oldboy|awk '{print length($0)}'12chars="I am oldboy teacher welcome to oldboy training class"for word in $charsdo if [ ${#word} -le 6 ] then echo $word fidone [root@web01 /server/scripts]# sh 19_1_8.sh
19.1.1 企业Shell面试题1:批量生成随机字符文件名案例
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含oldboy固定字符串加10个随机小写字母,名称示例如下:
[root@oldboy scripts]# ls /oldboy
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~