MagN86阶段测验

说明:

1. 开卷,把代码和命令敲出来,能跑通,贴进来即可

2.不会写的题可以不写,但尽量写一下哪里不懂

一:用sed 命令修改/etc/fstab文件,删除文件中的空行,注释行,并保留文件备份(7分)

答案写这里:

sed -i.bak '/^$/d;/^#/d' /etc/fstab

二: 用 find 命令查找出 /var/ 目录中大于1M且以db结尾的文件(7分)

答案写这里:

find /var/ -type f -size +1M -name "*db"

三: 先判断当前主机是否安装了nginx包,如果没安装,则执行命令安装,如果己安装,则执行命令卸载,用短路运算实现(rocky8.6)(7分)

答案写这里:

rpm -q nginx &> /dev/null && yum remove -y nginx || yum install -y nginx

四:请用 rpm 命令列出 nginx 包中所有的配置文件(7分)

答案写这里:

rpm -qc nginx

五: 新增一块20G的硬盘,分三个区,大小分别是3GB,4GB,5GB,将这三个分区做成物理卷,然后创建卷组,在该卷组上创建一个6GB的逻辑卷,挂载至/log/ 目录下,再将该逻辑卷扩容至10GB,请写出实现步骤,文件系统不限(7分)

答案写这里:

第一步:初始化新的硬盘

执行 `lsblk` 或 `fdisk -l` 命令来完成。

第二步:划分分区

使用 fdisk 分割硬盘

执行命令 `fdisk /dev/sdb`

   在 `fdisk` 的交互界面中:

   - 输入 `n` 来创建新分区。

   - 输入 `p` 选择主分区。

   - 输入分区大小,例如对于第一个 3GB 分区,输入默认起始点,然后输入 `+3G`。

   - 对于第二个 4GB 分区,重复以上步骤,输入 `+4G`。

   - 对于第三个 5GB 分区,再次重复步骤,这次不需要指定大小,直接按回车使用剩余空间。

   - 输入 `w` 保存并退出。

第三步:格式化分区

3. **格式化分区**:使用 `mkfs` 命令来格式化这些分区。我们这里使用 ext4 文件系统为例。

执行命令 `mkfs.ext4 /dev/sdb1`

第四步:创建物理卷

执行命令 `pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3`

第五步:创建卷组

执行命令 `vgcreate myvg /dev/sdb1 /dev/sdb2 /dev/sdb3`

第六步:创建逻辑卷

执行命令 `lvcreate -L 6G -n loglv myvg`

第七步:格式化逻辑卷

执行命令 `mkfs.ext4 /dev/myvg/loglv`

第八步:挂载逻辑卷

执行命令 `mkdir -p /log`

`mount /dev/myvg/loglv /log`

第九步:扩展逻辑卷

执行命令 `lvextend -L +4G /dev/myvg/loglv`

第十步:调整文件系统大小

执行命令 `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

答案写这里:

磁盘设备信息:

sda: 这是系统的主要硬盘,具有主次设备号 8:0,大小为 200G,并且是一个非可移动的磁盘(RM 标志为 0)。

分区信息:

sda1: 这是 sda 磁盘的第一个分区,大小为 1G,被用作 /boot 目录的挂载点。

sda2: 这是 sda 磁盘的第二个分区,大小为 199G,它本身没有直接挂载,但包含了后续的 LVM 卷组。

LVM (Logical Volume Manager) 信息:

rl-root, rl-swap, rl-home: 这些是由 sda2 分区创建的逻辑卷,属于同一卷组。它们分别用于挂载根目录 /、交换分区 [SWAP] 和 /home 目录。

rl-root: 大小为 70G,挂载在 / 目录下。

rl-swap: 大小为 2G,用作交换空间。

rl-home: 大小为 127G,挂载在 /home 目录下。

类型标识:

disk: 表示设备是一个磁盘。

part: 表示设备是一个分区。

lvm: 表示设备是一个 LVM 逻辑卷。

读写属性:

RO 标志为 0 表示设备是可以读写的,而非只读。

挂载点:

挂载点列出了每个分区或逻辑卷在系统中的挂载位置。

七: 请配置一块网卡,IP地址是 10.0.0.110,子网掩码是24位,网关是 10.0.0.2,DNS分别是 10.0.0.2 和 114.114.114.114,请写出配置文件内容,另外,写一个脚本,配置成别名,该别名对 root用户永久生效,要求传入网卡设备名可以让修改后的内容重载生效。(8分)

答案写这里:

网卡配置文件内容

# 网卡配置文件内容
TYPE=Ethernet
BOOTPROTO=static
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

脚本

#!/bin/bash

# 检查参数是否提供
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <device>"
    exit 1
fi

# 设备名
DEVICE=$1

# 配置文件路径
CONF_FILE="/etc/sysconfig/network-scripts/ifcfg-$DEVICE:0"

# 写入别名配置
echo "TYPE=Ethernet" > $CONF_FILE
echo "BOOTPROTO=none" >> $CONF_FILE
echo "DEFROUTE=no" >> $CONF_FILE
echo "IPV4_FAILURE_FATAL=no" >> $CONF_FILE
echo "NAME=$DEVICE:0" >> $CONF_FILE
echo "UUID=<your-unique-uuid>" >> $CONF_FILE
echo "DEVICE=$DEVICE:0" >> $CONF_FILE
echo "ONBOOT=yes" >> $CONF_FILE
echo "IPADDR=10.0.0.110" >> $CONF_FILE  # 注意这里的 IP 地址需要更改
echo "NETMASK=255.255.255.0" >> $CONF_FILE
echo "GATEWAY=" >> $CONF_FILE
echo "DNS1=10.0.0.2" >> $CONF_FILE
echo "DNS2=114.114.114.114" >> $CONF_FILE

# 重载网络设置
systemctl restart network


#保存以上内容为脚本,脚本命名为network_reload.sh
#创建一个别名写入到root的.bashrc文件中
[root@blog-web ~]# echo "alias modnet='bash /root/network_reload.sh'" >> /root/.bashrc
#加载
[root@blog-web ~]# source .bashrc 

八: 请描述一下一个网络请求从一台设备到另一台设备的具体过程(10分)

答案写这里:

应用程序(如Web浏览器)发起请求,例如发送一个HTTP GET请求。

请求被封装成TCP段或UDP数据报。

TCP段或UDP数据报被封装在网络层的IP数据包中。IP协议添加源IP地址和目的IP地址。路由器使用IP地址进行数据包的路由决策,将数据包从源设备转发到目的地。

IP数据包被封装在链路层的数据帧中。添加源MAC地址和目的MAC地址。如果目的地址是广播地址或多播地址,或者如果设备不知道目的MAC地址,它将广播ARP请求来查找目的设备的MAC地址。

数据帧被转换为比特流,通过物理介质(如以太网线、光纤或无线信号)发送。

目的设备的应用层准备响应,经过相同的逆向封装过程,最终通过物理层发送回源设备。

九:当执行shell脚本时,可向shell脚本传参,请说明 $0, $#,$@,$* 这几个参数的含义(10分)

答案写这里:

$0 变量包含的是脚本本身的名称。

$# 变量包含了传递给脚本的参数个数。

$@ 和 $* 都是用来引用所有传递给脚本的参数,但它们在某些情况下表现不同。

当在双引号内使用时,"$@" 将每个参数视为单独的字符串,即使参数中包含空格或其他特殊字符。这意味着 "$@" 在传递给其他命令或函数时,会保持参数的完整性,每个参数都会被视为独立的实体。

相比之下,"$*" 在双引号内使用时,将所有参数合并为一个字符串,中间用空格分隔。如果某个参数中包含空格,那么 "$*" 会将它视为字符串的一部分,而不是独立的参数。

十: 写一个脚本,计算出100以内能被3整除的数之和,以及能被4整除的数之后,然后再输出这两个数字(10分)

答案写这里:

#!/bin/bash

# 初始化计数器
sum_div_by_3=0
sum_div_by_4=0

# 循环遍历从 1 到 100 的数字
for (( i=1; i<=100; i++ ))
do
    # 检查数字是否能被 3 整除
    if [ $((i % 3)) -eq 0 ]; then
        sum_div_by_3=$((sum_div_by_3 + i))
    fi

    # 检查数字是否能被 4 整除
    if [ $((i % 4)) -eq 0 ]; then
        sum_div_by_4=$((sum_div_by_4 + i))
    fi
done

# 输出结果
echo "Sum of numbers divisible by 3: $sum_div_by_3"
echo "Sum of numbers divisible by 4: $sum_div_by_4"

十一:写一个脚本,打印输出8行8列的国际象棋棋盘,使用红黄两色(10分)

答案写这里:

#!/bin/bash

# ANSI color codes
RED="\E[41m"
YELLOW="\E[43m"
RESET="\E[0m"

# Function to print a single square of the chessboard
print_square() {
    if (( ($1 + $2) % 2 == 0 )); then
        echo -ne "${YELLOW}  ${RESET}"
    else
        echo -ne "${RED}  ${RESET}"
    fi
}

# Print the chessboard
for ((row=0; row<8; row++)); do
    for ((col=0; col<8; col++)); do
        print_square $row $col
    done
    echo # Newline for the next row
done

十二:写一个脚本,生成10个随机数放到一个数组中,再将该数组中的元素从小大到排序进行输出(10分)

答案写这里:

#!/bin/bash

# 创建一个空数组来存储随机数
random_numbers=()

# 循环10次来生成随机数
for i in {1..10}; do
    # 生成一个随机数并添加到数组中
    random_numbers+=($((RANDOM % 100 + 1)))
done

# 输出原始的随机数数组
echo "Original array: ${random_numbers[@]}"

# 将数组中的数字排序
sorted_numbers=($(printf '%s\n' "${random_numbers[@]}" | sort -n))

# 输出排序后的数组
echo "Sorted array: ${sorted_numbers[@]}"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值