马哥教育-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[@]}"
posted @ 2023-05-30 08:12  Jack_Cui  阅读(62)  评论(0编辑  收藏  举报