[题目要求] 用shell打印下面这句话中字母数小于6的单词. Bash also interprets a number of multi-character options. [核心要点] for循环遍历所有单词 wc -L获取字符串长度 [脚本] #!/bin/bash c="Bash also interprets a number of multi-character options." n=`echo $c|awk -F '[ +-.]' '{print NF}'` ;i&…
[题目要求] 请仔细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字 10 31 53 77 105 141... ... [核心要点] 计算两个数值之间的差值 [脚本] #!/bin/bash x= y= ` do echo $x x=$[$y+$y] z=$[**$i] y=$[$y+$z] done…
[题目要求] 用shell脚本实现如下需求 添加user_00 -- user_09 10个用户,并且给他们设置一个随机密码,密码要求10位包含大小写字母及数字,注意要把每个用户的密码记录到一个日志文件里 提示: 1. 随机密码使用命令 mkpasswd 2. 在脚本中给用户设置密码, 可以使用echo, 然后管道passwd命令 [核心要点] seq实现数字递增 mkpasswd产生随机字符 [脚本] #!/bin/bash ` do useradd user_$i -s ` echo "us…
[题目要求] 把一个文本文档的前5行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉. [核心要点] sed命令 [脚本] .txt |sed '/[a-zA-Z]/d' .txt |sed '1,5s/[a-zA-Z]//g' #示例文件 .txt的内容 121212aaasdasdf asdfasdfasdfasdfasdf 12121212aklsdfjaklsdfkjk *****#)#((@#*@) root@gitlba-aming shell100 12aaasdas23a…
[题目要求] 设计一个shell脚本用来备份数据库,首先在本地服务器上保存一份数据,然后再远程拷贝一份,本地保存一周的数据,远程保存一个月 假设我们知道mysql root账号的密码,要备份的库为data123,本地备份目录为/bak/mysql,远程服务器ip为192.168.1.100,远程提供了一个rsync同步服务 [核心要点] 备份数据库的命令 同步到远程服务器的命令 本地一周,可以用 date +%w做后缀,远程一个月可以用date +%d作为后缀 [脚本] #!/bin/bash…
[题目要求] 请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件 例如生成的文件为2019-04-25.log,并且把磁盘使用情况写入到这个文件中 不用考虑cron,仅仅写脚本即可 [核心要点] date命令用法: #打印昨天的时间:date -d "-1 day" +%F#打印前一小时date -d "-1 hours" +%T... ... df命令 [脚本] #!/bin/bashd=`date +%F`dir=/data/logs/disklog…
[题目要求] 写一个支持选项的增加或删除用户的shell脚本 #!/bin/bash ]; then echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 -- help" exit fi exist_user() { >/dev/null >/dev/null then echo $i not exist fi } in --add) ]; then echo "…
[题目要求] 计算文档a.txt中每一行出现数字的个数并且要计算一下整个文档中一共出现了几个数字 例如a.txt如下: sdhhyh776dbbgbfg dhhdffhhhs556644382 运行结果为: 3 9 sum=12 [核心要点] sed把非数字字符删除,计算长度 for 循环计算总和 [脚本] #!/bin/bash # 可以逐行打印出 # . sed -n "$i"p # . while read line; do echo $line; done < a.txt…
[题目要求] 查看使用最多的10个命令 [核心要点] history 或者 ~/.bash_history sort uniq [脚本] #!/bin/bash # history就是调用cat ~/.bash_history cat ~/.bash_history | sort | uniq -c | sort -nr | head -n 1…
[题目要求] 有一台服务器作为web应用,有一个目录(/data/web/attachment)不定时会被用户上传新的文件,但是不知道什么时候会被上传.所以,需要我们每5分钟做一次检测是否有新文件生成.请写一个shell脚本去完成检测.检测完成后若是有新文件,还需要将新文件的列表输出到一个按年.月.日.时.分为名字的日志里 [核心要点] find -mmin -5 date +%Y%m%d%H%M [脚本] #!/bin/bash basedir=/data/web/attachment t=`…
[题目要求] 写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时候,发邮件提醒 [核心要点] df df -i date +%F [脚本] #!/bin/bash dir=/tmp/disk d=`date +%F` [ -d $dir ] || mkdir $dir df >> $dir/$d.log df -i >> $dir/$d.log df | sed '1d' | awk…
[题目要求] 写个shell,看看你的Linux系统中是否有自定义的用户(普通用户),如有有的话统计个数 [核心要点] CentOS6,uid>=500 CentOS7,uid>=1000 [脚本] #!/bin/bash v=`cat /etc/redhat-release | awk -F'release' '{print $2}' | cut -d'.' -f1 | awk -F' ' '{pr }'` user() { -eq ]; then echo "no users&q…
[题目要求] 在服务器上写一个脚本,要求如下 1. 每隔10秒去检查而一次服务器上的nginx进程数,如果>=500的时候,就需要自动重启一下nginx服务,并检测启动是否成功 2. 如没有正常启动还要再一次启动,最大不成功数超过5次则需要立即发邮件通知管理员,并且之后不需要再检测 3. 如果启动成功之后,1分钟后再次检测nginx进程,若正常则重复之前的操作(每隔10秒检查一次),若还是>=500,那放弃重启并需要发邮件给管理员,然后自动退出脚本.假设发邮件脚本为mail.py [核心要点]…
[题目要求] 服务器上跑的是LNMP环境,近期总是有502现象.502为网站访问的状态码,200正常,502错误是nginx最为普遍的错误状态码. 由于502只是暂时的,并且只要一重启php-fpm服务则502消失,但不重启的话,则会一直持续很长时间. 所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm. 502 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 我们设定: 1)access_log /data/log/ac…
[题目要求] 写一个脚本,判断本机的80端口(加入服务为httpd)是否开启,如果开启就什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知相关人员 [核心要点] 检测80端口使用nmap -p 80 127.0.0.1 或者 netstat -lntp | grep -w 80 重启httpd的相关命令 发邮件脚本依然使用mail.py [脚本] #!/bin/bash m=@.com while : do n=`netstat -lntp | grep ':80 ' |…
[题目要求] 找到123/目录下所有后缀名为.txt的文件 1. 批量修改.txt为.txt.bak 2. 把所有.bak文件打包压缩为123.tar.gz 3. 批量还原文件的名字,即把增加的.bak再删除 [核心要点] find 用来查找所有的.txt文件 tar 打包一堆文件 还原文件名用for循环 [脚本] #!/bin/bash / -type f -name "*.txt" > /tmp/txt.list for f in `cat /tmp/txt.list` do…
[题目要求] 设计一个脚本,监控远程的一台机器(ip为192.168.1.100)的存活状态,当发现宕机的时候发一份邮件给自己 [核心要点] ping -c10 192.168.1.100通过 ping 来判定对方是否在线 发邮件脚本:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py [脚本] #!/bin/bash n=`ping -c5 192.168.1.100 | grep 'pa…
[题目要求] 写一个脚本计算一下linux系统所有进程占用内存的大小的和 [核心要点] ps命令用法 for循环 加法运算 [脚本] #!/bin/bash for n in `ps aux | grep -v 'TIME COMMAND' | awk '{print $6}'` do sum=$[$sum+$n] done echo $sum…
[题目要求] 有日志1.log,部分内容如下: 112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com “/seccode.php?update=0.5593110133088248″ 200″http://formula-x.haotui.com/registerbbs.php” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)” 61.147.76.5…
#include <iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个整数类型的数字:" <<endl; cin>>a>>b>>c; void sort(int x,int y,int z); sort(a,b,c);//abc有具体值,称为实际参数 ; } void sort(int x,int y,int z)//用于接收实际参…
[题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从服务是否正常.如果是主,则不需要做什么 [核心要点] mysql -uroot -p123456 -e "show processlist" show slave status [脚本] #!/bin/bash mysql="/usr/local/mysql/bin/mysql…
[题目要求] 写一个脚本判断我的linux服务器是否开启web服务?监听80端口 [核心要点] netstat -lntp | grep '80' [脚本] #!/bin/bash n=`netstat -lntp | grep ':80' | wc -l` ]; then echo "It not listen port 80" else ser=`netstat -lntp | grep ':80 ' | awk -F '/' '{print $NF}'` echo "I…
[题目要求] 一台机器负载高,top查看到有很多sh的进程,然后top -c查看可以看到对应的进程命令是sh -c /bin/clear.sh 经分析后发现是因为该脚本执行时间太长,导致后续执行时,上次的脚本还未执行结束,写一个脚本批量杀死所有的sh的进程 [核心要点] kill -9 pid [脚本] #!/bin/bash for p in `ps aux | grep clear.sh|awk '{print $2}'` do $p done #或者…
[题目要求] 写一个脚本,检测网卡流量并记录到日志,需要按照如下格式并一分钟统计一次(只需统计外网网卡,网卡名称eth0) 2019-06-07 1:11 eth0 input: 1000bps eth0 output: 200000bps ################## 2019-06-07 1:12 eth0 input: 1000bps eth0 output: 200000bps 提示:使用sar -n DEV 1 59这样统计一分钟的平均网卡流量,只需要最后的平均值.换算1Byt…
[题目要求] 加入A服务器可直接ssh到B,不用输入密码.A和B都有一个目录是/data/web/这下有很多文件,我们不知道这下面有多少层目录,但是之前的目录结构和文件是一模一样的.但是现在不确定是否一致. 所以以A为标准,检测AB不同的文件,看看哪些文件是被修改过的 [核心要点] md5sum file [脚本] #!/bin/bash dir=/data/web [ -f /tmp/md5.list ] && rm -f /tmp/md5.list while read line do…
[题目要求] 加入需要每小时执行一个脚本.功能:当时间是0点和12点时,将/data/log/下的文件全部清空,注意只能清空文件内容而不能删除文件.而其他时间只需要统计一下每个文件的大小,一个文件一行,输出到一个按日期和时间为名字的日志里,需要考虑/data/log/目录下的二级.三级所有的子目录中的文件 [要点] find列出所有文件 date +%H >file 清空文件 [脚本] #!/bin/bash dir=/tmp/log_stat t=`date +%d%H` t1=`date +…
[题目要求] 需求,根据web服务器的访问日志,把一些请求高的ip给拒绝掉,并且每隔半小时把不再发起请求或者请求量很小的ip给解封 假设: 1. 一分钟内请求量高于100次的ip视为不正常的请求 2. 访问日志路径为/data/logs/access_log 取线上的Nginx日志作为练习 [核心要点] 统计ip访问次数,排序 如何标记每隔半个小时 iptables计数器是一个重要的判断标准 函数(封ip,解封ip) [脚本] block_ip() { t1=`date -d "-1 min&q…
[题目要求] 写一个脚本实现如下功能:输入一个数字,然后运行对应的一个命令 显示命令如下: *cmd menu* 1--data  2--ls 3--who 4--pwd 输入1时,会运行data [核心要点] case判断 [脚本] #!/bin/bash echo "*cmd menu* 1-data 2-ls 3-who 4-pwd" read -p "please input a number:" n n1=`echo $n | sed 's/[0-9]//…
shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M…
shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M…