**Sre网络班阶段测试(满分100分)
说明:
- 开卷,把代码和命令敲出来,能跑通,贴进来即可
2.不会写的题可以不写,但尽量写一下哪里不懂**
一:用sed 命令修改/etc/fstab文件,删除文件中的空行,注释行,并保留文件备份(7分)
答案写这里:
[root@Rocky8 ~]#sed -ri.bak '/^(#|$)/d' /etc/fstab
/dev/mapper/rl-root / xfs defaults 0 0
UUID=3c34b218-40db-4e4f-ab95-3fbcb99a3df1 /boot ext4 defaults 1 2
/dev/mapper/rl-date /date xfs defaults 0 0
UUID=7c505526-0fca-4a24-8542-795f4875f371 /date/mysql ext4 defaults 0 0
UUID=f6a41fd5-04a7-4600-8b51-98071ca7de87 /date/mysql ext4 defaults 0 0
[root@Rocky8 ~]#ls /etc/fstab*
/etc/fstab /etc/fstab.bak
二: 用 find 命令查找出 /var/ 目录中大于1M且以db结尾的文件(7分)
答案写这里:
[root@Rocky8 ~]#find /var/ -name *.db -size +1M |xargs ls -hl
-rw-r--r--. 1 root root 1.8M Jun 14 10:28 /var/cache/dnf/packages.db
-rw-r--r-- 1 root root 2.1M Jun 14 10:28 /var/cache/man/index.db
-rw-r----- 1 root slocate 4.1M Jun 14 00:00 /var/lib/mlocate/mlocate.db
三: 先判断当前主机是否安装了nginx包,如果没安装,则执行命令安装,如果己安装,则执行命令卸载,用短路运算实现(rocky8.6)(7分)
答案写这里:
which nginx &> /dev/null && yum remove nginx || yum -y install nginx
四:请用 rpm 命令列出 nginx 包中所有的配置文件(7分)
答案写这里:
[root@Rocky8 src]#rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/usr/bin/nginx-upgrade
/usr/lib/.build-id
/usr/lib/.build-id/2d
/usr/lib/.build-id/2d/a6da8eadeb05c036be9b4ea9ec6aecde0fcc35
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx/modules
/usr/sbin/nginx
/usr/share/doc/nginx
/usr/share/doc/nginx/CHANGES
/usr/share/doc/nginx/README
/usr/share/doc/nginx/README.dynamic
/usr/share/licenses/nginx
/usr/share/licenses/nginx/LICENSE
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/usr/share/nginx/html/nginx-logo.png
/usr/share/nginx/html/poweredby.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx
五: 新增一块20G的硬盘,分三个区,大小分别是3GB,4GB,5GB,将这三个分区做成物理卷,然后创建卷组,在该卷组上创建一个6GB的逻辑卷,挂载至/log/ 目录下,再将该逻辑卷扩容至10GB,请写出实现步骤,文件系统不限(7分)
答案写这里:
1、将主机添加并连接一个20G的新硬盘
2、使用fdisk分区工具创建三个大小分别是3GB,4GB,5GB的分区,命令行输入fdisk /dev/nvme0n2,按下 n 创建新分区,然后选择适当的分区类型(p 为主分区,e 为扩展分区)。按照提示创建一个3GB的分区,重复此步骤创建4GB和5GB的分区。最后,按下 w 保存分区表并退出。
3、将这三个分区创建为物理卷
[root@Rocky8 ~]#pvcreate /dev/nvme0n2p1 /dev/nvme0n2p2 /dev/nvme0n2p3
Physical volume "/dev/nvme0n2p1" successfully created.
Physical volume "/dev/nvme0n2p2" successfully created.
Physical volume "/dev/nvme0n2p3" successfully created.
4、创建一个卷组(Volume Group),将物理卷添加进去。假设卷组的名称为mysqlvg0
[root@Rocky8 ~]#vgcreate mysqlvg0 /dev/nvme0n2p1 /dev/nvme0n2p2 /dev/nvme0n2p3
Volume group "mysqlvg0" successfully created
5、再卷组上创建一个逻辑卷(Logical Volume)。假设逻辑卷的名称为 mysqlvg0-lv,大小为6GB:
[root@Rocky8 ~]#lvcreate -L 6G -n mysqlvg0-lv mysqlvg0
Logical volume "mysqlvg0-lv" created.
6、格式化逻辑卷,可以选择 ext4、XFS 等文件系统格式,这里以 ext4 为例:
[root@Rocky8 ~]#mkfs.ext4 /dev/mysqlvg0/mysqlvg0-lv
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 1572864 4k blocks and 393216 inodes
Filesystem UUID: c658b7a5-56cd-4b1d-8f67-a5248f5f012e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
7、创建一个挂载点 /log/
[root@Rocky8 ~]# mkdir /log/
8、将逻辑卷挂载到 /log 目录下:
[root@Rocky8 ~]#mount /dev/mysqlvg0/mysqlvg0-lv /log/
9、查看挂载情况
[root@Rocky8 ~]#df -hl
Filesystem Size Used Avail Use% Mounted on
devtmpfs 875M 0 875M 0% /dev
tmpfs 893M 0 893M 0% /dev/shm
tmpfs 893M 87M 806M 10% /run
tmpfs 893M 0 893M 0% /sys/fs/cgroup
/dev/mapper/rl-root 100G 20G 81G 20% /
/dev/nvme0n1p1 974M 220M 687M 25% /boot
/dev/mapper/rl-date 50G 390M 50G 1% /date
tmpfs 179M 0 179M 0% /run/user/0
/dev/mapper/mysqlvg0-mysqlvg0--lv 5.9G 24K 5.6G 1% /log
10、扩容逻辑卷至10GB。首先,扩展逻辑卷的大小:
[root@Rocky8 ~]# lvextend -L 10G /dev/mysqlvg0/mysqlvg0-lv
Size of logical volume mysqlvg0/mysqlvg0-lv changed from 6.00 GiB (1536 extents) to 10.00 GiB (2560 extents).
Logical volume mysqlvg0/mysqlvg0-lv successfully resized.
11、实现文件系统的扩展 针ext 4文件系统
[root@Rocky8 ~]#resize2fs /dev/mysqlvg0/mysqlvg0-lv
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/mysqlvg0/mysqlvg0-lv is mounted on /log; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mysqlvg0/mysqlvg0-lv is now 2621440 (4k) blocks long.
12、查看挂载情况及逻辑卷大小
[root@Rocky8 ~]#df -h
/dev/mapper/mysqlvg0-mysqlvg0--lv 9.8G 24K 9.3G 1% /log
六:根据下列命令执行结果,写出你能读出来的信息(7分)
[mage@rocky86 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
答案写这里:
sda 硬盘上存在两个分区(sda1和sda2)。sda2 分区上创建了三个 LVM 逻辑卷(rl-root、rl-swap 和 rl-home),其中 rl-root 挂载在根目录 (/) 下,rl-swap 作为交换分区被使用,rl-home 挂载在 /home 目录下。分区1(sda1)上的 1GB 空间被挂载为 /boot 目录。
硬盘总体信息:
设备名:sda
大小:200GB
分区信息:
分区1:
设备名:sda1
大小:1GB
分区类型:part
挂载点:/boot
分区2:
设备名:sda2
大小:199GB
分区类型:part
逻辑卷(LVM)信息:
逻辑卷1:
设备名:rl-root
大小:70GB
分区类型:lvm
挂载点:/
逻辑卷2:
设备名:rl-swap
大小:2GB
分区类型:lvm
挂载点:[SWAP]
逻辑卷3:
设备名:rl-home
大小:127GB
分区类型:lvm
挂载点:/home
七: 请配置一块网卡,IP地址是 10.0.0.110,子网掩码是24位,网关是 10.0.0.2,DNS分别是 10.0.0.2 和 114.114.114.114,请写出配置文件内容,另外,写一个脚本,配置成别名,该别名对 root用户永久生效,要求传入网卡设备名可以让修改后的内容重载生效。(8分)
答案写这里:
1、打开终端,使用以下命令编辑网络配置文件(以Ubuntu为例)
sudo nano /etc/netplan/99-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [10.0.0.110/24]
gateway4: 10.0.0.2
nameservers:
addresses: [10.0.0.2, 114.114.114.114]
2、应用配置更改,使用以下命令使配置生效:
[root@Ubuntu ~]#sudo netplan apply
3、配置成别名创建一个脚本文件setnetwork.sh
[root@Ubuntu ~]#vim setnetwork.sh
#!/bin/bash
# 网卡设备名
DEVICE=$1
# 判断是否为root用户
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root."
exit 1
fi
# 编辑网络配置文件
Sudo vim /etc/netplan/eth0.yaml
# 应用配置更改
sudo netplan apply
4、对root用户永久生效,将脚本复制到 /usr/local/bin/ 目录下,并更改文件的权限为可执行:
[root@Ubuntu ~]# cp setnetwork.sh /usr/local/bin/
[root@Ubuntu ~]# chmod +x setnetwork.sh
5、在 /root/.bashrc 文件中添加以下行以创建别名:
[root@Ubuntu ~]# vim/root/.bashrc
alias setnetwork='/usr/local/bin/set_network_alias.sh'
保存并关闭文件。
6、使用以下命令配置设备名为 eth0 的网卡:
[root@Ubuntu ~]# setnetwork eth0
7、重启或者netplay apply使配置生效
八: 请描述一下一个网络请求从一台设备到另一台设备的具体过程(10分)
答案写这里:
一个网络请求从一台设备到另一台设备的过程通常包括以下步骤:
1. 应用层请求:应用程序发起网络请求,例如,使用浏览器发送 HTTP 请求或使用邮件客户端发送电子邮件。
2. 传输层封装:请求数据被传递给传输层协议,例如 TCP(传输控制协议)或 UDP(用户数据报协议),用于分割和封装数据。
3. 网络层封装:传输层的数据被封装在网络层协议数据包中,例如 IP(互联网协议),该数据包包含源IP地址和目标IP地址。
4. 数据链路层封装:网络数据包被封装在数据链路层协议的数据帧中,例如以太网协议,该数据帧包含源MAC地址和目标MAC地址。
5. 物理层传输:数据帧通过网络中的物理链路传输,例如通过以太网电缆、无线信号等。
6. 物理层接收:数据帧到达目标设备的物理层,根据MAC地址进行接收。
7. 数据链路层解封:目标设备的数据链路层协议解封接收到的数据帧,提取网络数据包。
8. 网络层解封:目标设备的网络层协议解封接收到的网络数据包,从中提取传输层数据。
9. 传输层解封:目标设备的传输层协议解封接收到的传输层数据,提取应用层数据。
10. 应用层处理:目标设备的应用程序处理接收到的应用层数据,执行相应的操作,例如呈现网页内容或解析电子邮件。
九:当执行shell脚本时,可向shell脚本传参,请说明 $0, KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲,@,$* 这几个参数的含义(10分)
答案写这里:
$1, $2, ... 对应第1个、第2个等参数,shift [n]换位置
$0 命令本身,包括路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
十: 写一个脚本,计算出100以内能被3整除的数之和,以及能被4整除的数之后,然后再输出这两个数字(10分)
答案写这里:
[root@Rocky8 ~]#vim test.sh
#!/bin/bash
sum_by_3=0
sum_by_4=0
# 计算能被3整除的数之和
for ((i=3; i<=100; i+=3)); do
sum_3=$((sum_by_3 + i))
done
# 计算能被4整除的数之和
for ((i=4; i<=100; i+=4)); do
sum_by_4=$((sum_by_4 + i))
done
echo "能被3整除的数之和:$sum_by_3"
echo "能被4整除的数之和:$sum_by_4"
[root@Rocky8 ~]#bash test.sh
能被3整除的数之和:1683
能被4整除的数之和:1300
十一:写一个脚本,打印输出8行8列的国际象棋棋盘,使用红黄两色(10分)
答案写这里:
#!/bin/bash
# 初始颜色
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# 循环打印棋盘
for ((row=1; row<=8; row++)); do
for ((col=1; col<=8; col++)); do
# 判断颜色
if (( (row + col) % 2 == 0 )); then
square_color=$RED
else
square_color=$YELLOW
fi
# 打印棋盘方块
echo -e "${square_color}██${NC}\c"
done
echo # 换行
done
十二:写一个脚本,生成10个随机数放到一个数组中,再将该数组中的元素从小大到排序进行输出(10分)
答案写这里:
[root@Rocky8 ~]#vim script.sh
#!/bin/bash
# 生成10个随机数的数组
numbers=()
for ((i=0; i<10; i++))
do
numbers+=($RANDOM)
done
# 排序数组
sorted_numbers=($(printf '%s\n' "${numbers[@]}" | sort -n))
# 输出排序后的数组
echo "排序后的数组:"
for num in "${sorted_numbers[@]}"
do
echo "$num"
Done
[root@Rocky8 ~]#bash script.sh
排序后的数组:
8027
8487
9099
9394
10978
18259
20089
20445
29792
31737
[root@Rocky8 ~]#bash script.sh
排序后的数组:
3859
5509
13370
17862
18520
19585
20772
30055
30692
32474