博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第16期-Linux运维挑战赛
阅读量:6897 次
发布时间:2019-06-27

本文共 4395 字,大约阅读时间需要 14 分钟。

  hot3.png

实验楼比赛第16期

1 备份日志

1.1 要求

作为系统管理员,小楼收到一个需求,需要每天备份系统当天的部分日志文件,日志备份的需求描述如下:

  1. 为 shiyanlou 用户添加计划任务
  2. 每天凌晨2点的时候定时打包 /var/log 下的 dpkg.log,mysql.log,fontconfig.log 三个文件到 /home/shiyanlou/backup/ 目录
  3. 命名格式为 年-月-日.tar,比如今天是2017年10月23日,那么文件名为2017-10-23.tar,若有重名则覆盖

1.2 思路

1.3 方案

#!/bin/shtar -Pcf /home/shiyanlou/backup/`date +%F`.tar /var/log/dpkg.log /var/log/mysql.log /var/log/fontconfig.log# 说明-P参数:使用绝对路径

定时任务

crontab -e0 2 * * * shiyanlou sudo tar -Pcf /home/shiyanlou/backup/`date +%F`.tar /var/log/dpkg.log /var/log/mysql.log /var/log/fontconfig.log

实验环境中cron启动问题

sudo cronsudo cron start

排查问题

tail -f /var/log/crontail -f /var/spool/mail/root

2 批量创建删除用户和组

2.1 要求

小楼是一个系统管理员,需要为一个教室中的服务器添加一个老师和若干学生用户,手动添加太麻烦了,请你为他编写一个bash脚本 userctr.sh 实现批量添加和删除用户。老师用户名,学生用户名和学生数量使用参数进行控制。

userctr.sh 脚本执行时候包括四个参数:

bash userctr.sh 操作(add或者del)教师名 学生名前缀 学生数量

脚本成功执行后将创建1个教师用户和若干个学生用户,满足下列条件:

  1. 学生数量参数,参数范围为1~10,若超过10或不为正整数,则报错打印 parameter error
  2. 学生名前缀为字符串,只允许包含小写字母,否则报错打印 parameter error,前缀后面跟数字序列
  3. 每个用户默认使用 zsh,教师用户默认具备 sudo 权限
  4. 每个用户设置一个随机6位数字密码,在添加命令执行后并将用户名和对应的密码输出
  5. 如果某个用户名已经存在,则默认不需要创建该用户,输出时密码显示为6个星号

执行脚本的范例:

# 添加一个 teacher 用户和 stu1 到 stu6 6个学生用户$ bash userctr.sh add teacher stu 6teacher:901231stu1:271828stu2:928172stu3:******stu4:384712stu5:098273stu6:921098# 删除一个 teacher 用户和 stu1 到 stu6 6个学生用户$ bash test.sh del teacher stu 6

其中 stu3 六个星号代表这个用户先前已经被创建了,所以该命令执行的时候并不清楚该用户的密码。删除命令执行时如果某个用户不存在也不需要报错,直接执行删除其他用户。

2.2 思路

# 6位随机数密码date +%s%N | cut -c14-19

sudo权限

# Ubuntugpasswd -a username sudogpasswd -d username sudo# CentOSgpasswd -a username wheelgpasswd -d username wheel# 说明# CentOS如果设置后不生效,进入sudo文件(/etc/sudoers),把wheel的注释去了visudo%wheel ALL=(ALL) ALL

2.3 方案

userctr.sh

#!/bin/shusage() {    #echo "Usage: $0 
" echo "parameter error"}# 参数判断# 4个参数if [ $# -ne 4 ]; then usage exit 1fi# 操作是add/delif [ $1 != "add" -a $1 != "del" ]; then usage exit 1fi# 老师姓名,小写字母if [ "`echo $2 | grep -P '^[a-z]+$'`" != $2 ]; then usage exit 1fi# 学生姓名前缀,小写字母if [ "`echo $3 | grep -P '^[a-z]+$'`" != $3 ]; then usage exit 1fi# 学生数量是整数expr $4 + 1 &>/dev/nullif [ $? -ne 0 ]; then usage exit 1fi# 学生数量范围 1-10if [ $4 -lt 1 -a $4 -gt 10 ]; then usage exit 1fi# 添加操作if [ $1 = 'add' ]; then # 添加老师 username=$2 pass='******' id $username &>/dev/null if [ $? -ne 0 ]; then pass=`date +%s%N | cut -c14-19` useradd $username &>/dev/null echo "$pass"|passwd --stdin $username &>/dev/null gpasswd -a $username sudo &>/dev/null fi echo "${username}:${pass}" # 添加学生 for num in `seq $4` do username="$3$num" pass="******" id $username &>/dev/null if [ $? -ne 0 ]; then pass=`date +%s%N | cut -c14-19` useradd $username &>/dev/null echo "$pass"|passwd --stdin $username &>/dev/null fi echo "${username}:${pass}" donefi# 删除操作if [ $1 = 'del' ]; then # 删除老师 username=$2 gpasswd -d $username &>/dev/null userdel -r $username &>/dev/null # 删除学生 for num in `seq $4` do username="$3$num" userdel -r $username &>/dev/null donefi

3 获取系统信息

3.1 要求

$ bash getinfo.shcpu num: 2memory total: 2.8Gmemory free: 329Mdisk size: 10Gsystem bit: 32process: 32software num: 944ip: 192.168.1.9

注意上述每行内容的冒号后都有一个空格。

其中包括的数据项:

  1. CPU数量(cpu num)
  2. 总内存(memory total),单位为 G
  3. 可用内存(memorty free),单位为 M
  4. 挂载到 / 根目录的文件系统的总大小(disk size),单位为 G
  5. 系统位数(system bit)
  6. 当前系统正在运行的进程数(process)
  7. 查看已安装的软件包数量(software num)
  8. eth0的ip地址(ip)

3.2 思路

# CPU数量grep -Po '(?<=physical id\s:\s)\d+' /proc/cpuinfogrep 'physical id' /proc/cpuinfo | wc -l# 总内存free | grep '^Mem:' | awk '{print $2/(1024 * 1024)"G"}'# 可用内存free | grep '^Mem:' | awk '{print $4/1024"M"}'# 根目录的文件系统的总大小df -h / | sed -n '2p' | awk '{print $2}'# 系统位数getconf LONG_BIT# 正在运行的进程数ps -A | wc -l# 已安装的软件包数量rpm -qa | wc -l# eth0的ip地址ifconfig eth0 | grep -Po '(?<=inet )\S+'

3.3 方案

Ubuntu

#!/bin/shecho "cpu num:" `grep 'physical id' /proc/cpuinfo | wc -l`echo "memory total:" `free | grep '^Mem:' | awk '{print $2/(1024 * 1024)"G"}'`echo "memory free:" `free | grep '^Mem:' | awk '{print $4/1024"M"}'`echo "disk size:" `df -h / | sed -n '2p' | awk '{print $2}'`echo "system bit:" `getconf LONG_BIT`echo "process:" `ps -A | wc -l`echo "software num:" `dpkg -l | wc -l`echo "ip:" `ifconfig eth0 | sed -n '2p' | awk -F"[: ]+" '2{print $4}'`

转载于:https://my.oschina.net/yysue/blog/1621906

你可能感兴趣的文章
SecureCRT 端口转发突破防火墙访问内网机器
查看>>
Kylin 2.0 升级总结
查看>>
My97日期控件
查看>>
理解关系数据库中的ACID、事务、隔离级别
查看>>
Rinetd
查看>>
安卓电子市场开放下载VMware View 客户端
查看>>
Backbone.js(1.1.2) API中文文档
查看>>
Spring Social实现QQ社交登录
查看>>
adm100练习4-关闭SAP
查看>>
详解karma & jasmine自动化测试
查看>>
让代码飞起来——高性能Julia学习笔记(二)
查看>>
SCCM TP4安装客户端Agent
查看>>
基于Solr的全文搜索服务器的安装部署
查看>>
网页图片优化的实用工具和技巧分享
查看>>
Smarty高级特性 – 用户自定义函数使用 SMARTY:: register_function
查看>>
APR协议
查看>>
Dedecms从服务器到安装一条龙攻略
查看>>
查看tomcat启动文件都干点啥---Catalina.java
查看>>
JDK安装与环境变量配置
查看>>
SaltStack源码分析之file状态模块
查看>>