坚持#第248天~awk和初级、中级测试
来源:互联网 发布:mac哪个粉底液好 编辑:程序博客网 时间:2024/06/07 00:09
awk数组:
awk -v是定义变量的var
关联数组:因为awk数组的下表可以是数值,也可以是字符串,遍历的是数组的下标
declare -a test1普通数组是-a
test2=(e0 e1 e2)
declare -A test2关联数组是-A
test2[zifuchuan1]=var1
test2[zifuchuan2]=var2
declare -A | grep test2
declare -A test3=([zifuchuan1]=”var1”[zifuchuan2]=”var2”)
declare -A test4=([A]=”aa”[B]=”bb”)
无法将普通(索引)数组转换为关联数组
要unset 数组名
echo ${test4[*]}
echo ${!test4[*]}
数组的遍历:
for(num in test4){print test4[num]}
awk支持下标类型:
1. 使用数字或变量作为下标
cat shuzu.txt
a
b
c
d
awk '{name[a++]=$1};END{for(i in name){printi,name[i]}}' shuzu.txt
0 a
1 b
2 c
3 d
注意下标是从0开始的,这个输出的顺序不一定每次都一样,是随机的,如果要想让输出按照数组下标的顺序输出,就要用for循环了,而不用遍历了:awk'{name[a++]=$1};END{for(i=0;i<NR;i++){print i,name[i]}}' shuzu.txt,或者使用sort去排序
awk '{name[1]=$1};END{for(i in name){printi,name[i]}}' shuzu.txt
为什么结果是1 d? 读一行处理一下,会覆盖之前赋予的值,最后一个是d
# awk'{name[$1]++};END{for(i in name){print i,name[i]}}' shuzu.txt
a 1
b 1
c 1
d 1
e 1
f 1
定义数组名、取值作为下标、并赋值++,加完后为1,若有相同的,会叠加
统计apache的访问次数,访问ip:
awk '{IP[$1]++};END{for (i in IP){print i,IP[i]}}' /var/log/httpd/access_log或/etc/httpd/logs/access_log
定义数组名、取值作为下标、并赋值++,加完后为1,若有相同的,会叠加
把相同ip的累加到一起,这就是下标++统计的作用
好巧妙呀
统计的公式
统计的万能公式排序:awk'{IP[$1]++}END{for (i in IP){print i,IP[i]}}' /var/log/httpd/access_log | sort-n -t " " -k2
统计的万能公式总结:简直就是叼爆了
1. awk '{print $1}'/var/log/httpd/access_log查看第一列的信息(这个第一步是有必要去做的,因为/etc/passwd里面需要-F “:”)
2.awk统计累加肯定要起一个数组名,取值$1给下标,赋值用++
awk '{ipaddr[$1]++;}' /var/log/httpd/access_log
3.输出语句在END里面写,并且必须要用for(i in 数组名)循环遍历
awk '{ipaddr[$1]++;}END{for(i in ipaddr){printipaddr[i]}}' /var/log/httpd/access_log
4.把ip也打印出来
awk '{ipaddr[$1]++;}END{for(i in ipaddr){print i,ipaddr[i]}}'/var/log/httpd/access_log
5排序
awk '{IP[$1]++}END{for (i in IP){print i,IP[i]}}' /var/log/httpd/access_log| sort -n -t " " -k2
统计系统中每种shell的用户有几个人?
awk -F ":" '{shellusr[$7]++}END{for(i inshellusr){print i,shellusr[i]}}' /etc/passwd
查看第一列的信息(这个第一步是有必要去做的,因为/etc/passwd里面需要-F ":")
打印uid、gid之和
awk -F":" '{print $1,"uid+gid="$3+$4}' /etc/passwd
1.对文件编辑
格式要求
姓名 工号 银行卡号 基本工资 绩效 总工资 保险 实发工资
解:
awk 'BEGIN{printf "%-s\t %-s\t %-s\t %-s\t %-s\t %-s\t %-s\t %-s\t %-s\t%-s\t %-s\t %-s\t %-s\t %-s\t %-s\t %-s\t\n","姓名","工号","银行卡号","基本工资","绩效","总工资","保险","实发工资","\na","007","123456\t","1000\t","100","1100","200","900"}'
2.打印uid小于20的用户的信息
格式要求
用户名 uid gid 家目录
awk -F ":" '$3<20{print $1,$3,$4,$6}'/etc/passwd
注意不能给20打双引号,因为是整型
3.打印用户的shell为可登陆的shell的用户名及shell
awk -F ":" '/bash$/{print $1,$7}' /etc/passwd
4.分别用shell和awk实现打印九九乘法表
for((i=1;i<=9;i++));do
for((j=1;j<=i;j++));do
echo -ne "${j}*${i}=$[j*i]\t"
done
echo
done
awk 'BEGIN{for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf"%d*%d=%d\t",j,i,i*j}print ""}}'
5. 这个班的每门课程的平均成绩(每科的平均成绩)
# cat e.txt
jim 80 60 89 80
tom 89 75 80 85
jack 78 96 90 98
解:
awk 'BEGIN{print "yuwen shuxue yingyutiyu";av_yuwen=0;av_shuxue=0;av_yingyu=0;av_tiyu=0}{av_yuwen+=$2;av_shuxue+=$3;av_yingyu+=$4;av_tiyu+=$5}END{printav_yuwen/NR,av_shuxue/NR,av_yingyu/NR,av_tiyu/NR}' e.txt
老师另一种方法:
awk ‘{}’ e.txt
6.统计每个人的平均成绩
awk 'BEGIN{print"name YW SX YW TY"}{sum=$2+$3+$4+$5;print $1,$2,$3,$4,$5,sum/=4}'e.txt
打印效果如下:
成绩在90分以上的有几人
成绩在80分到90分之间有几人
成绩在80分以下的有几人
解:
awk 'BEGIN{dj1=0;dj2=0;dj3=0}{av_score=($2+$3+$4+$5)/(NF-1);print$0,av_score;if(av_score>90){dj1=dj1+1}elseif(av_score<90&&av_score>80){dj2=dj2+1}else{dj3=dj3+1};}END{print"成绩在90分以上的有"dj1"人\n""成绩在80分到90分之间有"dj2"人\n""成绩在80分以下的有"dj3"人"}' e.txt
7.将passwd文件中第一行的每个字段纵向打印
awk -F ":" 'BEGIN{OFS="\n"}NR==1{print$1,$2,$3,$4,$5,$6,$7}' /etc/passwd
注意OFS对$0无效,要将$0分成$1,$2,$3,$4...
注意要NR==1
8.sed和awk的主要异同
sed: 流编辑,对文件内容编辑,动作的部分可以不写大括号,可以用到正则表达式和替换操作,没有内置变量和流程控制,加-i之后可以直接对源文件进行修改和备份。
awk: 文本报告生成器,对文本内容排版,动作的部分必须写大括号,可以用到正则表达式但不能使用替换操作,有内置变量和流程控制,不能对源文件进行修改和备份
相同点:都是读一行、处理一行,语法类似
文本处理工具有什么?
答:grep文本过滤、sed流编辑、awk文本报告生成器
VNC server是服务器端,开始菜单里面有,more-password设置为none;users第1、2个勾是控制的权利
正式考试:
1.将本机中/usr/local/src/目录下的http目录拷贝到192.168.1.30,要求不需要输入密码就可以传输
scp -r /usr/local/src/httproot:1@192.168.1.30/root
2.将本机上的大小为500M的/dev/sdc1分区,共享的192.168.1.0/24网段的所有用户,以读写的方式共享?如空间不够能够在线将空间提升至1000M,如何实现?
umount/dev/sdc1
parted/dev/sdc
mklabel gpt
mkpartprimary 1 500M
mkpartprimary 500M 1500M
pvcreate/dev/sdc1
vgcreate test/dev/sdc1
lvcreate -ndata -L 500M test
创建逻辑卷别忘了格式化啊:mkfs.xfs/dev/test/data
chmodg+w,o+w /dev/test/data
vim/etc/samba/smb.conf
[hello]
comment=thisis share-test dir
path=/dev/test/data
read only=No
hostsallow=192.168.1. 255.255.255.0
systemctlrestart nmb
systemctlrestart smb
空间不够就扩容:
pvcreate/dev/sdc2
vgextendtest /dev/sdc2
lvextend -L+500M /dev/test/data
xfs_growfs/dev/test/data
3. umask为034的情况下创建一个普通文件和目录,权限分别为多少?
解:
创建目录:777-034=743,得权限是drwxr---wx
创建文件:
666展开得到:rw- rw- rw-
034展开得到:--- -wx r--
两者相减得到:rw- r-- -w-
得权限是-rw-r---w-
用数字表示为642
4. 创建一个用户natasha,UID为2048,基本组为natasha,附加组为IT,家目录为/natasha,此用户登录后提示"欢迎natasha登录!"
groupadd IT
useraddnatasha
usermod -u2048 -g "natasha" -a -G "IT" -d /natasha natasha
订正:
不要漏了题目,忘记了后面还要登陆有欢迎
先切换到natasha用户,再[natasha@server ~]$ vim~/.bashrc修改初始化的文件,echo “欢迎natasha登录!”
5. 一个权限为700的脚本文件/tmp/test.sh,属主属组都为root,在不改变属主属组及基本UGO权限的情况下想让natasha用户可以执行,如何操作?
setfacl -mu:natasha:rx /tmp/test.sh
su - natasha
/tmp/test.sh
6. 如何查看系统的CPU,硬盘,内存信息?
查看CPU:cat /proc/cpuinfo或lscpu
查看硬盘:fdisk -l /dev/sda或df -hT
内存信息:cat /proc/meminfo或free -h
7. 将/etc目录下所有以.conf结尾的文件拷贝到/tmp/confiles目录中
\cp -R/etc/*.conf /tmp/confiles
备注:\cp是覆盖重名的并拷贝过去
8. 制定计划任务,每周一凌晨3:00将/var/log/下所有的文件压缩备份到/backup目录下,注意不要覆盖之前备份的内容
crontab -e
0 3 * * 1tar -czvf /backup/LogFiles$(date +\%F).gz /var/log/*
%最好转义一下,虽然在sh脚本里面不用转义,但是在crontab里面要转义\%
9. "b文件为a文件的软链接,通过b文件访问的也是a文件,由此可以得出结论:a文件和b文件为同一文件."这句话对吗?为什么?
b----->a
不对,a文件是软链接的源文件,如若a坏了,b也就坏了;但如若b坏了的话,a不会坏,a还能狗继续使用;
b文件的权限是777,而a权限的默认权限是肯定不是777,他们两者的权限不一样;
可以这么说:b文件只是a文件的一个快捷方式,你拷贝b文件过去,得不到a里面原有的内容,但你拷贝a文件过去,你能得到a里面原有的内容。
10. 怎样查看一个进程的进程号,请至少写出三种方法
pidof 进程名
pgrep -l 进程名的关键字
ps -ef
ps aux
pstree -p
11. raid0,raid1,raid5,raid10的优缺点?
raid 0:优点是平均分配每个磁盘的大小,大小都要一致,最少要用两个磁盘,读取性能是最快的,缺点是一个磁盘都不能坏,安全性低
raid 1:优点是磁盘大小全是一样大,并且最少要用两个磁盘,两两为一组,且内容是复制的,坏掉一个也不要紧,安全性最高,缺点是读取性能慢
raid 5:最少要3个磁盘为一组,有校验码,还可以有备盘,若坏了一个,则可以根据校验码计算出坏掉的那个磁盘的大小,并可以用备盘替补坏掉的磁盘,读写性能较快,安全性较高,缺点是校验码需要占用一个盘的大小
raid 10:优点是至少需要4个磁盘为一组,读写性能较快,安全性较高,每组各允许坏一个磁盘,缺点是坏了的话不能替补坏掉的那个磁盘
12. 在没有对vsftpd服务器作特殊设置的情况下,服务器端主动模式和被动模式的端口分别为多少?
答:服务端主动为20数据端口,21连接端口;
服务端被动数据为大于1024端口、21连接端口
13. httpd服务器中,仅允许192.168.10.0/24这个网段访问网页,如何设置?
vim/etc/httpd/conf/httpd.conf进入主配置文件设置httpd访问控制
<Directory"/var/www/html">
order deny,allow
deny from all
allow from 192.168.10. 255.255.255.0
</Directory>保存退出
systemctlrestart httpd重启服务
14. 只显示apache主配置文件中的有效配置(不显示注释内容和空行),尽可能使用多种方法实现
1. grep -v"#" /etc/httpd/conf/httpd.conf | tr -s "\n"
2. grep -v"#\|^$" /etc/httpd/conf/httpd.conf
3. cat/etc/httpd/conf/httpd.conf | tr -s "\n" | grep -v "#"
4. sed ''/etc/httpd/conf/httpd.conf | grep -v "#" | tr -s "\n"
5. sed'/#/d;/^$/d' /etc/httpd/conf/httpd.conf
6. awk '{print $0}'/etc/httpd/conf/httpd.conf | grep -v "#" | tr -s "\n"
7. awk '!/#|^$/{print $0}' /etc/httpd/conf/httpd.conf
8.vimapache.sh
grep -v"#\|^$" /etc/httpd/conf/httpd.conf保存退出
bashapache.sh
9. vimapache.sh
grep -v"#\|^$" /etc/httpd/conf/httpd.conf保存退出
awk'BEGIN{system("bash apache.sh")}'
10.vim apache.txt
/#/d;/^$/d保存退出
sed -f apache.txt/etc/httpd/conf/httpd.conf
15. 统计apache访问日志中访问次数最多的前5名及访问次数.
1.cut -d" " -f1 /etc/httpd/logs/access_log | grep -v "::" | sort |uniq -c | tr -s " " | sort -nr | head -5
2. awk '{IP[$1]++}END{for (i in IP){print i,IP[i]}}' /var/log/httpd/access_log| grep -v "::" | sort -nr -t " " -k2 | head -5
附加
写一个脚本httpd,执行时后接start参数启动httpd服务,接stop则停止,接restart则重启
要求:
1.启动失败提示原因: 1)端口被占用 2)服务已在运行 3)配置文件语法错误
2.停止服务前先检查配置文件语法,若有错误则禁止停止服务
3.停止失败提示原因: 1)服务未运行 2)配置文件语法错误
提示: 1)重启=停止+启动 2)可用httpd命令启动服务 3)可用httpd -t检测语法
解:
if(($1=="start"));then
duankou=`netstat -luantp | grep "80" | tr -s " " | cut -d " " -f6`
run=`systemctl status httpd | grep"Active" | tr -s " " | cut -d " " -f4`
if(($duankou=="LISTEN"));then
echo "端口被占用"
elif(($run=="(running)"));then
echo "服务已在运行"
else
systemctl start httpd
fi
fi
if(($1=="restart"));then
systemctl restart httpd
elif(($1=="stop"));then
systemctl stop httpd
fi
订正:
if [ $1 =="start" ];then
duankou=`netstat -luantp | grep "80" | tr -s " " | cut -d " " -f6`
run=`systemctl status httpd | grep"Active" | tr -s " " | cut -d " " -f4`
if [ $duankou == "LISTEN" ];then
echo "端口被占用"
elif [ -z $duankou ];then
if [ $run == "(running)"];then
echo "服务已在运行"
elif [ $run == "(dead)"];then
systemctl start httpd
fi
fi
fi
if ["$1" == "restart" ];then
systemctl restart httpd
elif ["$1" == "stop" ];then
systemctl stop httpd
fi
总结:会写的题却没有时间写,原因:没有开启超速度!没时间写和执行了!
马哥:
lsblk是查看磁盘分区的大小情况
blkid /dev/sda1可以查看uuid和磁盘类型是xfs还是vfat或其他的
凡哥作业6:
1、创建计划任务,5分钟后给所有人发消息"hello"。
方法一:(非交互式)
echo 'wall hello' | at now +5min
方法二:(交互式)
at now +5min
wall hello
ctrl+d
方法三:(非交互式)
at now +5min <<EOF
wall hello
EOF
2、今天晚上9:50执行关机命令。用at命令的两种方法(交互式、非交互式)。
交互式:
at 9:50pm
poweroff
ctrl+d
非交互式:
echo 'poweroff' | at 21:50
3、每天晚上11:50打包备份/etc目录到/opt/年-月-日_etc.tar.gz文件。
方法一:
crontab -e
50 23 * * * tar -czf /opt/$(date +\%F)_etc.tar.gz /etc
%最好转义一下,虽然在sh脚本里面不用转义,但是在crontab里面要转义\%
方法二:
vim /opt/c1.sh
tar -czf /opt/$(date +\%F)_etc.tar.gz /etc
chmod +x /opt/c1.sh
crontab -e
50 23 * * * . /opt/c1.sh
4、每周1、3 、5的8、12、15、18点每隔5分钟发送‘ni hao’消息给所有用户。
方法一:
crontab -e
*/5 8,12,15,18 * * 1,3,5 wall 'ni hao'
方法二:
echo "*/5 8,12,15,18 * * 1,3,5 root wall 'ni hao'">> /etc/crontab
6、创建日志文件/var/log/test.log,将ls /命令的结果追加到test.log文件中,给test.log创建轮滚策略。每天一轮滚,用数字作为文件名后缀,启用压缩功能,保留5个备份。强制做轮滚测试。
touch /var/log/test.log
ls / >> /var/log/test.log
cat >/etc/logrotate.d/test <<ok
/var/log/test.log {
daily
nodateext
create
compress
rotate 5
}
ok
测试:logrotate-fv /etc/logrotate.d/test- 坚持#第248天~awk和初级、中级测试
- 坚持#第246天~sed和awk
- 坚持#第247天~sed和awk进阶
- 初级中级高级测试工程师的区别
- 坚持#第107天~坚持!
- 软考初级和中级考试须知
- 坚持#第236天~Apache之httpd与周五测试
- 兴趣与坚持:程序员从初级到中级10个秘诀
- 兴趣与坚持:程序员从初级到中级10个秘诀
- 兴趣与坚持:程序员从初级到中级10个秘诀
- 兴趣与坚持:程序员从初级到中级10个秘诀
- 兴趣与坚持:程序员从初级到中级10个秘诀
- 坚持#第19天~
- 坚持#第42天~
- 坚持#第43天~
- 坚持#第44天~
- 坚持#第45天~
- 坚持#第46天~
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析[转]
- Spring Cloud Bus 消息总线集成Kafka
- 向量内积
- easyui的复选框与行的选中问题
- 链码
- 坚持#第248天~awk和初级、中级测试
- 技术架构管理体系思考-整体版
- 图片干扰背景处理,简单易懂
- 安卓的蓝牙全面开发教程
- 细说awk-2
- 驱动之路-platform简例按键驱动☆☆☆
- java基础(1)
- Solr学习总结(三)solr查询
- 微信浏览器内兼容android iOS调取手机摄像头进行拍照、打水印、压缩、预览