一. 简答实验题( 每题5分 ):

1. 请说出 5 个你熟悉的类 unix 系统名称

redhat,CentOS,debian,ubuntu,suse,freebsd

2. 请写出 5 个你熟悉的 Linux 软件的网络端口号和对应的软件名称。

httpd    80
nginx    80
mysql    3306
ftp        20,21
samba    137,138,139,445
NFS        111
rsync    873
smtp    25

3. CentOS7.6 和 Ubuntu18.04 网卡配置

-2 分(后面最好加上biosdevname=0)

#系统默认安装完成后网卡名称为 ens33,请写出如何使系统网卡名称格式变为 eth0 风格的步骤.
#CentOS7修改网卡
sed -ri '/^GRUB_CMDLINE/s/(.*)"/\1 net.ifnames=0 biosdevname=0"/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
#ubuntu修改网卡,改的时候要谨慎配置文件
sed -ri '/^GRUB_CMDLINE/s/(.*)"/\1 net.ifnames=0 biosdevname=0"/' /etc/default/grub
grub-mkconfig -o  /boot/grub/grub.cfg 
reboot

#修改完成后请分别写出两种系统配置网卡的过程,地址为桥接网络模型的 172.18.学号.200,并测试是否可以执行curl www.baidu.com 命令
# CentOS7配置
[root@node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
NAME=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.18.28.200
NATMASK=255.255.0.0
GATEWAY=172.18.0.1
DNS1=172.18.0.1
[root@node1 ~]# systemctl restart network
[root@node1 ~]# curl www.baidu.com -I
HTTP/1.1 200 OK

# ubuntu配置
root@ubuntu:~# grep -v ^# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [172.18.28.201/16]
      gateway4: 172.18.0.1
      nameservers:
        addresses:
          - 123.123.123.123
          - 8.8.8.8
root@ubuntu:~# netplan apply
root@ubuntu:~# curl www.baidu.com -I
HTTP/1.1 200 OK

4. 请写出 ipv4 地址分类和每种类型中的私有网络地址范围

A类地址

(1)A类地址第1字节为网络地址,其它3个字节为主机地址。
(2)A类地址范围:1.0.0.1—126.255.255.254
(3)A类地址中的私有地址和保留地址: ① 10.X.X.X是私有地址范围(10.0.0.0-10.255.255.255) ② 127.X.X.X是保留地址,用做循环测试用的。

B类地址

(1) B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。
(2) B类地址范围:128.0.0.1—191.255.255.254。
(3) B类地址的私有地址和保留地址 :① 172.16.0.0—172.31.255.255是私有地址 ② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。

C类地址

(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
(2)C类地址范围:192.0.0.1—223.255.255.254。
(3)C类地址中的私有地址: 192.168.X.X是私有地址。(192.168.0.0-192.168.255.255)

D类地址

(1) D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
(2) D类地址范围:224.0.0.1—239.255.255.254

E类地址

(1) E类地址不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
(2) E类地址范围:240.0.0.1—255.255.255.254

5. 使用 xshell 连接 Linux 服务器时等待时间过长,请问您有什么处理方法解决这个问题。

#一般都是服务器的ssh服务未优化
    sed '/^GSSAPIAuthentication/d' /etc/ssh/sshd_config -i
    sed '/^UseDNS/d' /etc/ssh/sshd_config -i
    echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
    echo "UseDNS no" >> /etc/ssh/sshd_config
    systemctl restart sshd

6. shell 脚本编程 创建 60 个普通用户,用户名为 magedu01 到 magedu60 用户密码为Linux2019@38

[root@node1 ~]# cat useradd.sh 
#!/bin/bash
RED="\033[0;31m"
GREEN="\033[0;32m"
NO_COLOR="\033[0m"
usernameid=$(seq -w 01 60)
for i in ${usernameid};do
    username=magedu$i
    id ${username} &> /dev/null
    [ "$?" -eq 0 ] && { echo -e "${RED}${username} already exists${NO_COLOR}";continue; }
    useradd ${username}
    echo "${username}:Linux2019@38" | chpasswd
    id ${username} &> /dev/null
    [ "$?" -eq 0 ] && { echo -e "${GREEN}${username} created successfully${NO_COLOR}"; }
done
[root@node1 ~]# bash useradd.sh 
magedu01 created successfully
magedu02 created successfully
......

7. 使用 crontab 任务计划,完成:每月27号晚上10到12点之间每分钟执行一次 /root/backup.sh 脚本文件任务

[root@node1 ~]# echo '*/1 22,23 27 * * /bin/bash  /root/backup.sh' >> /var/spool/cron/root

8. 请在 mysql 中创建 school 数据库,并在其中创建一个 student 表,表字段分别为学号(stuid),姓名(name),年龄(age), 电话(tel),

请写出上面的操作步骤和过程,并写出 "查询年龄大于平均年龄的前3名学生的姓名和年龄" 的sql语句

表结构如下:
MariaDB [school]> desc student;
+-------+--------------+------+-----+---------+----------------+| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| stuid | int(11)      | NO   | PRI | NULL    | auto_increment || name  | varchar(100) | NO   |     | NULL    |                |
| age   | int(11)      | NO   |     | NULL    |                || tel   | varchar(100) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+


所有学生数据如下:
MariaDB [school]> select * from student;
+-------+---------+-----+-----+
| stuid | name    | age | tel |+-------+---------+-----+-----+|     1 | magedu1 |  22 | 110 |
|     2 | magedu2 |  36 | 120 ||     3 | magedu3 |  39 | 999 |
|     4 | magedu4 |  19 | 666 ||     5 | magedu5 |  27 | 139 |
+-------+---------+-----+-----+
5 rows in set (0.00 sec)

MariaDB [school]>
# 建库MariaDB [(none)]> create database school;# 建表MariaDB [school]> CREATE TABLE student(
    -> stuid int(11) PRIMARY KEY AUTO_INCREMENT,
    -> name varchar(100) NOT NULL,
    -> age int(11) NOT NULL,
    -> tel varchar(100) NOT NULL );
Query OK, 0 rows affected (0.00 sec)# 看表结构MariaDB [school]> desc student;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| stuid | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100) | NO   |     | NULL    |                |
| age   | int(11)      | NO   |     | NULL    |                |
| tel   | varchar(100) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)#插入数据INSERT INTO student  (name,age,tel) VALUES ("magedu1",22,"110");
MariaDB [school]> INSERT INTO student  (name,age,tel) VALUES ("magedu2",36,"120"),("magedu3",39,"999"),("magedu4",19,"666"),("magedu5",27,"139");#查看表数据MariaDB [school]> select * from student;
+-------+---------+-----+-----+
| stuid | name    | age | tel |
+-------+---------+-----+-----+
|     1 | magedu1 |  22 | 110 |
|     2 | magedu2 |  36 | 120 |
|     3 | magedu3 |  39 | 999 |
|     4 | magedu4 |  19 | 666 |
|     5 | magedu5 |  27 | 139 |
+-------+---------+-----+-----+# 查询年龄大于平均年龄的前3名学生的姓名和年龄MariaDB [school]> select name,age from student where age > ( select avg(age) from student) limit 3;
+---------+-----+
| name    | age |
+---------+-----+
| magedu2 |  36 |
| magedu3 |  39 |
+---------+-----+
2 rows in set (0.00 sec)

二. 扩展题 (每题30分)

-8分

1. 编写 ansible playbook 实现在一台 CentOS7 中编译安装 httpd2.4.41 和 php7.3.7 的 fpm 模式,实现 httpd 通过 socket 与 php-fpm 通信,并测试 php 页面是否工作正常

# 参考:https://blog.51cto.com/14012942/2444885

2. httpd 服务器的访问日志保存在容量为20G 的 /dev/sdb 磁盘中,对应的挂载路径为/data-http-log,编写一个shell 脚本,每隔一个小时测试一下该磁盘的使用率是否超过70%,如果超过立刻将非本周的日志移动到远程服务器 172.18.0.100 服务器上,移动完成后,如果磁盘空间使用率依旧大于 70%, 则发邮件给 [email protected]提示报警,需要手动进行处理。

-2 分(罗里吧嗦)

#vmware插入磁盘,
#触发磁盘扫描
[root@node1 ~]# for i in `seq 0 2`;do echo - - - >  /sys/class/scsi_host/host$i/scan;done
root@node1 ~]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   200G  0 disk 
├─sda1   8:1    0   250M  0 part /boot
├─sda2   8:2    0 197.8G  0 part /
└─sda3   8:3    0     2G  0 part [SWAP]
sdb      8:16   0    20G  0 disk 
#格式化
[root@node1 ~]# fdisk /dev/sdb
n -> p -> 回车 -> 回车 -> w
[root@node1 ~]# partprobe
[root@node1 ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  20G  0 disk 
└─sdb1   8:17   0  20G  0 part 
#创建文件系统并挂载
[root@node1 ~]# mkdir /data-http-log
[root@node1 ~]# echo '/dev/sdb1 /data-http-log   ext4  defaults,noatime  0 0' >> /etc/fstab 
[root@node1 ~]# mount -a
[root@node1 ~]# df -h /dev/sdb1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        20G   45M   19G   1% /data-http-log
#编写脚本,发送邮件可以使用sendmail并配置发件人
#!/bin/bash
. /etc/profile
PARTITION=/dev/sdb1
NUMBER=70

USAGE=`df ${PARTITION} | awk -F'[ ]*|%'  '/^\/dev\/sd/ {print  $5}'`

mailmail(){
    #邮件服务已经配置测试好
    echo $1 | mail -s 'warning' [email protected]
}
[ "${USAGE}" -gt "${NUMBER}" ] && \
    {
        #ssh可连,目标存在
        find /data-http-log/ -type f -mtime +7 -exec scp {} [email protected]:/backup/httpd-log/ \;
        [ "$?" -eq 0 ] && \ 
        {
            find /data-http-log/ -type f -mtime +7 -delete;    
        } || mailmail "backup failed..."
    }
[ "${USAGE}" -gt "${NUMBER}" ] && \
    {
        mailmail "${PARTITION} usage over 70 percent..."
    }
#计划任务
[root@node1 ~]# echo '* */1 * * * /bin/bash /data/scripts/disk-usage-check.sh' >> /var/spool/cron/root