shell_script 练习题

shell_script练习题

1. 获取随机生成的8位字符串:
    # echo $RANDOM | md5sum | cut -c 1-8
    # openssl rand -base64 4
    # cat /proc/sys/kernel/random/uuid | cut -c 1-8

2. 获取随机的8位数字:
    # echo $RANDOM |cksum |cut -c 1-8
    # openssl rand -base64 4 | cut -c 1-8
    # date +%N |cut -c 1-8

3. 检查软件包是否安装:
    #!/usr/bin/env bash
    if rpm -qa sysstat &>/dev/null; then
        echo "sysstat is already installed."
    else
        echo "sysstat is not installed!"
    fi

4. 监控系统中的重要地方:
cpu:
# cat cpu_vmstat.sh
#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=`ifconfig | awk -F' ' 'NR==2{print $2}'`
MAIL="liuchao07a@163.com"
if ! which vmstat &>/dev/null; then
    echo "vmstat command no found, Please install procps package."
    exit 1
fi
US=$(vmstat |awk 'NR==3{print $13}')
SY=$(vmstat |awk 'NR==3{print $14}')
IDLE=$(vmstat |awk 'NR==3{print $15}')
WAIT=$(vmstat |awk 'NR==3{print $16}')
USE=$(($US+$SY))
if [ $USE -ge 50 ]; then
    echo "
    Date: $DATE
    Host: $IP
    Problem: CPU utilization $USE
    " | mail -s "CPU Monitor" $MAIL

memory:

#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')
MAIL="example@mail.com"
TOTAL=$(free -m |awk '/Mem/{print $2}')
USE=$(free -m |awk '/Mem/{print $3-$6-$7}')
FREE=$(($TOTAL-$USE))
# 内存小于1G发送报警邮件
if [ $FREE -lt 1024 ]; then
    echo "
    Date: $DATE
    Host: $IP
    Problem: Total=$TOTAL,Use=$USE,Free=$FREE
    " | mail -s "Memory Monitor" $MAIL

disk:

#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')
MAIL="example@mail.com"
TOTAL=$(fdisk -l |awk -F'[: ]+' 'BEGIN{OFS="="}/^Disk \/dev/{printf "%s=%sG,",$2,$3}')
PART_USE=$(df -h |awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5),$6}')
for i in $PART_USE; do
    PART=$(echo $i |cut -d"=" -f1)
    USE=$(echo $i |cut -d"=" -f2)
    MOUNT=$(echo $i |cut -d"=" -f3)
    if [ $USE -gt 80 ]; then
        echo "
        Date: $DATE
        Host: $IP
        Total: $TOTAL
        Problem: $PART=$USE($MOUNT)
        " | mail -s "Disk Monitor" $MAIL
    fi

5. 系统初始化:

#!/usr/bin/env bash
#
# Author: liuchao
# Email: liuchao07a@icloud.com
# Version: v1.0
# BeiJingQianFengHuLianKeJiYouXianGongSi.

# This script is used to set your server to initialize, and it can be used to install the necessary software,
# set your yum source, but also configure some security settings, you can also add the appropriate functionality
# to meet your needs



# Get os version.
OSRELEASE=$(rpm -q --qf "%{Version}" $(rpm -q --whatprovides redhat-release))

# Configure yum source, config is BeiJingQFcloud.
sed -ri s/^#baseurl/baseurl/g /etc/yum.repos.d/CentOS-Base.repo
sed -ri s/^mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS.Base.repo

yum clean all
yum makecache
wait

yum -y install epel-release &>/dev/null

sed -ri s/^#baseurl/baseurl/g /etc/yum.repos.d/epel.repo
sed -ri s/^mirrorlist/#mirrorlist/g /etc/yum.repos.d/epel.repo

yum makecache
wait

# Install software.
yum -y install nc vim iftop iotop dstat tcpdump
yum -y install ipmitool bind-libs bind-utils
yum -y install libselinux-python ntpdate
yum -y install net-tools lftp

# disable unuse service.
systemctl stop auditd && systemctl disable auditd
systemctl stop firewalld && systemctl disable firewalld

# disable ipv6.
cd /etc/modprobe.d/ && touch ipv6.conf
>/etc/modprobe.d/ipv6.conf
cat >> /etc/modprobe.d/ipv6.conf <<EOF
alias net-pf-10 off
alias ipv6 off
EOF

# set route forward.
>/etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
EOF

# disable SELINUX.
setenforce 0
sed -ri s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config

# set history display datetime.
echo "HISTFILESIZE=2000" >> /etc/bashrc && echo "HISTSIZE=2000" >> /etc/bashrc && echo 'HISTTIMEFORMAT="%Y%m%d %T "'>> /etc/bashrc && export HISTTIMEFORMAT



6. 搭建内网yum源服务器,并定期同步公网数据

#!/bin/bash
#
# BeiJing QFcloud office made.
# author:liuchao
# 2017/8/12.

if [ -f /var/log/yum_server.pid ];then
    rm -rf /var/log/yum_server.pid
else
    echo "Ok. Continue rsync yum server." &> /dev/null
fi

YUM_SITE="rsync://mirrors.tuna.tsinghua.edu.cn/centos/"
#存放路径,我这里直接用的是httpd默认根目录
LOCAL_PATH="/var/www/html/centos/"
#需要同步哪些目录
LOCAL_VER='6 6* 7 7*'
BW_limit=2048
LOCK_FILE="/var/log/yum_server.pid"
RSYNC_PATH=""

# check update yum server pid
MY_PID=$$
if [ -f $LOCK_FILE ]; then
get_pid=`/bin/cat $LOCK_FILE`
get_system_pid=`/bin/ps -ef|grep -v grep|grep $get_pid|wc -l`
if [ $get_system_pid -eq 0 ] ; then
echo $MY_PID>$LOCK_FILE
else
echo "Have update yum server now!"
exit 1
fi
else
echo $MY_PID>$LOCK_FILE
fi

# check rsync tool
if [ -z $RSYNC_PATH ]; then
RSYNC_PATH=`/usr/bin/whereis rsync|awk ' ''{print $2}'`
if [ -z $RSYNC_PATH ]; then
echo 'Not find rsync tool.'
echo 'use comm: yum install -y rsync'
fi
fi

# sync yum source
for VER in $LOCAL_VER;
do
# Check whether there are local directory
if [ ! -d "$LOCAL_PATH$VER" ] ; then
echo "Create dir $LOCAL_PATH$VER"
`/bin/mkdir -p $LOCAL_PATH$VER`
fi
# sync yum source
echo "Start sync $LOCAL_PATH$VER"
$RSYNC_PATH -avrtH --delete --bwlimit=$BW_limit --exclude "isos" $YUM_SITE$VER $LOCAL_PATH
done

# clean lock file
`/bin/rm -f $LOCK_FILE`

echo "rsync end $(date +%Y-%m-%d_%k:%M:%S)" >> /var/www/html/centos/centos_rsync_is_end.txt
exit 1

1.使用shell脚本,判断10.18.41.0/24网络里,当前在线的IP有哪些。并对在线的主机批量传送公钥
2.使用shell脚本,获取本机的详细信息(当前用户,IP,内核版本,主机名称,CPU版本信息……)
3.请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况
写到到这个文件中,(不用考虑cron,仅仅写脚本即可)
5.使用shell脚本进行判断磁盘,内存使用情况,当磁盘,内存使用量超过20%,就发警报进行报警(或者发报警邮件给自己)
工具分享:
top 查看进程活动状态以及一些系统状况
vmstat 查看系统状态、硬件和系统信息等
iostat 查看CPU 负载,硬盘状况
sar 综合工具,查看系统状况
mpstat 查看多处理器状况
netstat 查看网络状况
iptraf 实时网络状况监测
tcpdump 抓取网络数据包,详细分析
tcptrace 数据包分析工具
netperf 网络带宽工具

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容

  • 基本上,shell script 有点像早期的批处理程序,即将一些命令汇整起来一次执行,但shell script...
    Zhang21阅读 1,120评论 0 0
  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 3,150评论 3 49
  • 这是我第一次尝试使用双拼输入法翻译一篇日本的Liunx基础教材上的一章。共花费一周左右。 shell的使用 前言 ...
    今後次阅读 1,049评论 0 4
  • 笨办法学 Python (Learn Python The Hard Way)中文版 习题 0: 准备工作 总有一...
    fatfatEddy阅读 1,415评论 0 5
  • 长言道导读:社群,一个有着共同的价值观的群体,社群是共建、共友、共价值的组织,每个人都能在这个组织里收获价值,打造...
    长言道阅读 276评论 1 1