shell运维习题训练注:初学shell,以下为本⼈⾃⼰写的答案,如果有更好的,请指教!
1. 求2个数之和:
2. 计算1-100的和
3. 将⼀⽬录下所有的⽂件的扩展名改为bak
4.编译并执⾏当前⽬录下的所有.c⽂件
5.打印本机的交换分区⼤⼩,处理结果: Swap:1024M
6. ⽂本分析,取出/etc/password中shell出现的次数
第⼀种⽅法结果:
4  /bin/bash
1  /sbin/halt
2  /sbin/nologin
7. ⽂件整理,employee⽂件中记录了⼯号和姓名
100 Jason Smith
200 John Doe   
300 Sanjay Gupta
400 Ashok Sharma
bonus⽂件中记录⼯号和⼯资:
100 $5,000
200 $500
300 $3,000
400 $1,250
要求把两个⽂件合并并输出如下,处理结果:
400 ashok sharma $1,250
100 jason smith  $5,000
200 john doe  $500
300 sanjay gupta  $3,000
| sort -k2
8. 写⼀个shell脚本来得到当前的⽇期,时间,⽤户名和当前⼯作⽬录。
1 #!/bin/bash
2 echo "the present date is : `date` "
3 echo "the present user is : `whoami`"
4 echo "the present dir is : `pwd`"
9. 编写shell脚本获取本机的⽹络地址。
1 #!/bin/bash
2 echo "IP=$(ifconfig eth3| sed -n '/inet addr:/p'|awk '{print $2}'|awk -F: '{print $2}')"
10. 编写个shell脚本将当前⽬录下⼤于10K的⽂件转移到/tmp⽬录下
1 #!/bin/bash
2 for file in $(ls -l | awk '$5 >100 {print $9}')
3 do
4        mv $file /home/chenjj/shell/temp
5 done
11. 编写⼀个名为myfirstshell.sh的脚本,它包括以下内容。
a) 包含⼀段注释,列出您的姓名、脚本的名称和编写这个脚本的⽬的。
b) 问候⽤户。
c) 显⽰⽇期和时间。
d) 显⽰这个⽉的⽇历。
e) 显⽰您的机器名。
f) 显⽰当前这个操作系统的名称和版本。
g) 显⽰⽗⽬录中的所有⽂件的列表。
h) 显⽰root正在运⾏的所有进程。
shell最简单脚本i) 显⽰变量TERM、PATH和HOME的值。
j) 显⽰磁盘使⽤情况。
k) ⽤id命令打印出您的组ID。
m) 跟⽤户说“Good bye”
1 #!/bin/bash
2 echo "hello!"
3 echo "Today is : $(date)"
4 #echo $(date)
5 echo "this month is :"
6 cal
7 echo "the hostname is : $(hostname)"
8 echo "the name of OS is $(uname -r) and the verion is $(uname -r) "
9 echo "the files are :$(ls -l ../)"
10 echo "the running process of root is $(ps -u root)"
11 echo "TERM=$TERM"
12 echo "PATH=$PATH"
13 echo "HOME=$HOME"
14 echo "the use of disk is :$(df -lh)"
15 echo "the id of the group is $(id -g)"
16 echo "Goodbye Sir!"
12. ⽂件移动拷贝,有m1. m3.,分别创建出对应的⽬录,m1 m2 m3 m4 并把⽂件移动到对应的⽬录下
1 #!/bin/bash
2 m2. m4.txt
3 for((i=1;i<=4;i++))
4 do
5        mkdir m$i
6        mv   m$i
7 done
13. 终端输⼊⼀个⽂件名,判断是否是设备⽂件
1 #!/bin/bash
2 #coding=utf-8
3 echo "please input a filename:"
4 read fileName
5 if [ -c $fileName -o -b $fileName ]
6 then
7        echo "$fileName 是设备⽂件!"
8 else
9        echo "$fileName 不是设备⽂件!"
10 fi
14. 统计IP访问:要求分析apache访问⽇志,出访问页⾯数量在前100位的IP数。⽇志⼤⼩在78M左右。以下是apache的访问⽇志节选:
202.101.129.218 - - [26/Mar/2006:23:59:55 +0800] "GET /online/stat_inst.php?pid=d065 HTTP/1.1" 302 20-"-" "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
⽇志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。⼤多数时候,这项值是200,它表⽰服务器已经成功地响应浏览器的请求,⼀切正常。此处不准备给出状态代码的完整清单以及解释它们的含义,请参考相关资料了解这⽅⾯的信息。但⼀般地说,以2开头的状态代码表⽰成功,以3开头的状态代码表⽰由于各种不同的原因⽤户请求被重定向到了其他位置,以4开头的状态代码表⽰客户端存在某种错误,以5开头的状态代码表⽰服务器遇到了某个错误。
1 #!/bin/bash
2 awk '{print $1}' $1 |sort |uniq -c |sort -k1nr | head -n 100
执⾏脚本:source apache.sh apache(⽂件)
15. 设计⼀个Shell程序,在/userdata⽬录下建⽴50个⽬录,即user1~user50,并设置每个⽬录的权限,其中其他⽤户的权限为:读;⽂件所有者的权限为:读、写、执⾏;⽂件所有者所在组的权限为:读、执⾏。
1 #!/bin/bash
2 cd /Userdata
3 for ((i=1;i<=50;i++))
4 do
5        mkdir user$i
6        chmod 754 user$i
7 done
16. 设计⼀个shell程序,添加⼀个新组为class1,然后添加属于这个组的30个⽤户,⽤户名的形式为st
dxx,其中xx从01到30,并设置密码为对应的stdxx。
1 #!/bin/bash
2 #coding=utf-8
3 #设计⼀个shell程序,添加⼀个新组为class1,然后添加属于这个组的30个⽤户,⽤户名的形式为stdxx,其中xx从01到30,并设置密码为对应的stdxx。
4 groupadd class1
5 i=1
6 while [ $i -le 30 ]
7 do
8        if [ $i -lt 10 ]
9        then
10                useradd -g class1 std0$i
11                passwd std0$i std0$i
12        else
13                useradd -g class1 std$i
14                passwd std$i std$i
15        fi
16        let "i++"
17 done
17.编写shell程序,实现⾃动删除30个账号的功能。账号名为std01⾄std30。
1 #!/bin/bash
2 i=1
3 while [ $i -le 30 ]
4 do
5        if [ $i -lt 10 ]
6        then
7                userdel std0$i
8        else
9                userdel std$i
10        fi
11        let "i++"
12 done
18. ⽤户清理,清除本机除了当前登陆⽤户以外的所有⽤户
kill $(who -u | grep -v `whoami`| awk '{print $6}'|sort -u )
19.写脚本实现,可以⽤shell、perl等。在⽬录/tmp下到100个以abc开头的⽂件,然后把这些⽂件的第⼀⾏保存到⽂件new中。
1 #!/bin/bash
2 #coding=utf-8
3 #在⽬录/tmp下到100个以abc开头的⽂件,然后把这些⽂件的第⼀⾏保存到⽂件new中。
4 files=`find /tmp -type f -name "abc*" | head -n 100`
5 for file in $files
6 do
7        sed -n '1p' $file >> new
8 done
20. 把⽂件b中有的,但是⽂件a中没有的所有⾏,保存为⽂件c,并统计c的⾏数。
21. 查看TCP连接状态
netstat -ant | awk '{print $6}'|sort |uniq -c|sort -k1nr
22. 查请求数为20个IP(常⽤于查攻来源)
netstat -atn | grep 80 |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c |sort
23. 查较多time_wait连接
netstat -n | grep 'TIME_WAIT' | awk '{print $5}'|sort | uniq -c |sort -k1nr
24. 获得访问前10位的ip地址,access.log⽇志记录
61.155.149.20 - - [13/Jan/2017:15:42:47 +0800] "GET /category/db/ HTTP/1.1" 200 23225 cat access.log | awk '{print $1}' | sort |uniq -c |sort -nr | head -n10
Linux常⽤:
1. 查看服务器空间:
df -h
2. 查看当前⽬录下哪个⽂件占⽤最⼤:
du -h --max-depth=1
3. 查看指定⽬录下⽂件⼤⼩:
du -sh ${dir}
du -sh *  # 查看当前⽬录下各⽂件及⽂件夹占⽤⼤⼩
4. 查看服务器端⼝是否被占⽤:
lsof  -i:8081
5.查看服务器所有端⼝:
netstat -ntlp

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。