马哥教育-Sre网络班阶段测试
说明:
1. 开卷,把代码和命令敲出来,能跑通,贴进来即可
2.不会写的题可以不写,但尽量写一下哪里不懂
一:用sed 命令修改/etc/fstab文件,删除文件中的空行,注释行,并保留文件备份(7分)
1. 在执行sed命令之前,您需要确保已对要修改的文件进行备份。可以使用cp命令来备份文件: cp /etc/fstab{,.bak} 2. 然后使用sed命令在原始文件/etc/fstab中删除所有空行和注释行,将结果保存到一个新文件中,例如/etc/fstab.new: sed -e '/^[[:space:]]*#/d' -e '/^$/d' /etc/fstab > /etc/fstab.new 3. 检查新文件是否包含正确的内容。如果一切正常,请使用mv命令将新文件重命名为原始文件: mv /etc/fstab.new /etc/fstab
二: 用 find 命令查找出 /var/ 目录中大于1M且以db结尾的文件(7分)
find /var/ -type f -name "*.db" -size +1M 解释一下上述命令: - `find`是查找命令。 - `/var/`指定了要查找的目录。 - `-type f`表示要查找的是文件而不是目录。 - `-name "*.db"`表示要查找文件名以`.db`结尾的文件。 - `-size +1M`表示只要查找大于1MB的文件。
三: 先判断当前主机是否安装了nginx包,如果没安装,则执行命令安装,如果己安装,则执行命令卸载,用短路运算实现(rocky8.6)(7分)
1. 安装nginx包 rpm -q nginx || yum install nginx 解释一下上述命令: - `rpm -q nginx`是查看是否安装了nginx包。如果已安装,则返回版本号;否则,返回“package nginx is not installed”。 - `||`是逻辑或运算符。如果前面的命令返回非零值(即未安装),则执行后面的命令(安装nginx包)。 2. 卸载nginx包 rpm -q nginx && yum remove nginx 解释一下上述命令: - `rpm -q nginx`是查看是否安装了nginx包。如果已安装,则返回版本号;否则,返回“package nginx is not installed”。 - `&&`是逻辑与运算符。如果前面的命令返回零值(即已安装),则执行后面的命令(卸载nginx包)。
四:请用 rpm 命令列出 nginx 包中所有的配置文件(7分)
1. 首先,使用rpm命令查询已安装的nginx包及其版本号: rpm -q nginx 您将看到类似以下输出,其中[version]为您实际安装的nginx版本号: nginx-[version]-1.el7.x86_64 2. 然后,使用rpm命令查看nginx包中所有的配置文件: rpm -ql nginx | grep conf 解释一下上述命令: - `rpm -ql nginx`用于列出已安装的nginx软件包中所有的文件和目录。其中,`-q`表示查询,`-l`表示显示软件包中所有的文件。 - `grep conf`用于过滤只显示文件名中含有“conf”的行。
五: 新增一块20G的硬盘,分三个区,大小分别是3GB,4GB,5GB,将这三个分区做成物理卷,然后创建卷组,在该卷组上创建一个6GB的逻辑卷,挂载至/log/ 目录下,再将该逻辑卷扩容至10GB,请写出实现步骤,文件系统不限(7分)
1. 查看系统中磁盘信息,确认新增的20G硬盘名称 [root@cuixuanguo ~]# fdisk -l 2. 使用`fdisk`命令创建三个分区并格式化 [root@cuixuanguo ~]# fdisk /dev/sdb n p 1 2048 +3G n p 2 6293504 +4G n p 3 12587008 +5G w [root@cuixuanguo ~]# mkfs.ext4 /dev/sdb1 [root@cuixuanguo ~]# mkfs.ext4 /dev/sdb2 [root@cuixuanguo ~]# mkfs.ext4 /dev/sdb3 3. 创建物理卷,并将刚刚创建的三个分区作为物理卷添加到该卷组中 [root@cuixuanguo ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 4. 创建一个名为myvg的卷组,并将刚刚创建的物理卷添加到这个卷组中 [root@cuixuanguo ~]# vgcreate myvg /dev/sdb1 /dev/sdb2 /dev/sdb3 5. 在myvg卷组上创建逻辑卷loglv,大小为6GB [root@cuixuanguo ~]# lvcreate -L 6G -n loglv myvg 6. 格式化逻辑卷 [root@cuixuanguo ~]# mkfs.ext4 /dev/myvg/loglv 7. 挂载逻辑卷至目录"/log" [root@cuixuanguo ~]# mount /dev/myvg/loglv /log 8. 查看/log目录的挂载情况和磁盘容量 [root@cuixuanguo ~]# df -h /log 9. 将逻辑卷扩容至10GB [root@cuixuanguo ~]# lvextend -L +4G /dev/myvg/loglv [root@cuixuanguo ~]# resize2fs /dev/myvg/loglv
六:根据下列命令执行结果,写出你能读出来的信息(7分)
```bash
[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
```
七: 请配置一块网卡,IP地址是 10.0.0.110,子网掩码是24位,网关是 10.0.0.2,DNS分别是 10.0.0.2 和 114.114.114.114,请写出配置文件内容,另外,写一个脚本,配置成别名,该别名对 root用户永久生效,要求传入网卡设备名可以让修改后的内容重载生效。(8分)
vim /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" NAME="eth0" DEVICE="eth0" ONBOOT="yes" IPADDR=10.0.0.110 NETMASK=255.255.255.0 GATEWAY=10.0.0.2 DNS1=10.0.0.2 DNS2=114.114.114.114 systemctl restart network 接下来,您可以编写一个脚本来设置别名并加载新的网络配置。 创建一个新文件 `/usr/local/bin/alias_network.sh`,并添加以下内容: #!/bin/bash # 设置网卡别名 alias setnet='sudo nano /etc/sysconfig/network-scripts/ifcfg-$1' # 重新加载网络配置 alias reloadnet='sudo systemctl restart network' # 将该脚本设置为永久别名 echo "alias netsetup='/usr/local/bin/alias_network.sh'" >> ~/.bashrc 保存文件后,使用以下命令使脚本可执行: sudo chmod +x /usr/local/bin/alias_network.sh 现在,您可以通过运行以下命令来设置您的网络配置并重新加载它: netsetup eth0 reloadnet 这些配置将在以后的会话中保持不变,只需键入 `netsetup` 命令即可重新使用这些别名。
八: 请描述一下一个网络请求从一台设备到另一台设备的具体过程(10分)
九:当执行shell脚本时,可向shell脚本传参,请说明 $0, $#,$@,$* 这几个参数的含义(10分)
在执行Shell脚本时,可以通过命令行参数将值传递给脚本。这些参数可以使用$0, $#,$@,$* 等特殊变量来访问。 - $0:表示脚本本身的文件名。 - $#:表示传递给脚本的参数个数。 - $@:表示所有传递给脚本的参数列表。 - $*:也表示所有传递给脚本的参数列表,但是每个参数都被视为单独的字符串,而不是作为一个整体字符串。 下面有一些示例来说明这些特殊变量: #!/bin/bash echo "脚本名称为:$0" echo "传递给脚本的参数个数为:$#" echo "传递给脚本的参数列表为:$@" echo "每个参数作为单独的字符串输出为:$*" 对于上述代码,如果在命令行中运行该脚本并传递三个参数(例如sh myscript.sh arg1 arg2 arg3),则它将输出以下内容: 脚本名称为:myscript.sh 传递给脚本的参数个数为:3 传递给脚本的参数列表为:arg1 arg2 arg3 每个参数作为单独的字符串输出为:arg1 arg2 arg3 请注意,$@ 和 $* 在大多数情况下是相同的,但是当它们用在双引号中时,它们的行为会有所不同。例如,"$@"将每个参数作为单独的字符串传递给命令,而"$*"将所有参数视为一个字符串传递。
十: 写一个脚本,计算出100以内能被3整除的数之和,以及能被4整除的数之后,然后再输出这两个数字(10分)
#!/bin/bash # 计算能被3整除的数之和 sum1=0 for ((i=0; i<=100; i+=3)) do sum1=$((sum1+i)) done echo "能被3整除的数之和为:$sum1" # 计算能被4整除的数之和 sum2=0 for ((j=0; j<=100; j+=4)) do sum2=$((sum2+j)) done echo "能被4整除的数之和为:$sum2"
十一:写一个脚本,打印输出8行8列的国际象棋棋盘,使用红黄两色(10分)
#!/bin/bash for ((row=1; row<=8; row++)) do for ((col=1; col<=8; col++)) do if ((($row+$col)%2==0)) then echo -e "\e[48;5;214m \e[0m\c" else echo -e "\e[48;5;226m \e[0m\c" fi done echo "" done
十二:写一个脚本,生成10个随机数放到一个数组中,再将该数组中的元素从小大到排序进行输出(10分)
#!/bin/bash # 生成10个随机数并存入数组中 for ((i=0; i<10; i++)) do arr[$i]=$RANDOM done echo "随机数组:${arr[@]}" # 对数组进行排序 sorted_arr=($(echo "${arr[@]}" | tr ' ' '\n' | sort -n)) echo "排序后的数组:${sorted_arr[@]}"