Skip to content

Linux 操作系统

更新: 6/22/2025 字数: 0 字 时长: 0 分钟

  • 时间:14:30 - 16:30
  • 地点:中心楼 628-630
  • 监考老师:安翎嘉、胡晓程

第一大题

1.1

公司安装 CentOS stream 9 操作系统时为什么用虚拟机?创建虚拟机的软件有哪些?(至少两种)。

使用虚拟机的原因

  • 资源隔离和安全性:虚拟机提供隔离环境,避免影响物理主机
  • 快速部署和复制:可以快速创建多个相同配置的虚拟机
  • 便于测试和开发:不会影响生产环境
  • 节省硬件成本:多台虚拟机可运行在同一物理服务器上
  • 快照功能:便于系统备份和恢复

创建虚拟机的软件

  • VMware Workstation
  • VirtualBox
  • Hyper-V

1.2

结合云计算与大数据平台的搭建测试工作。论述安装 CentOS stream 9 操作系统的步骤

云计算与大数据平台搭建中的安装步骤:

准备阶段

  • 下载 CentOS Stream 9 ISO 镜像
  • 准备虚拟机环境
  • 确保硬件满足最低要求 (CPU、内存、存储)

安装过程

  • 启动系统并从 ISO 镜像引导
  • 配置网络连接
  • 选择安装类型
  • 配置磁盘分区 (建议:/boot, swap, /, /home 等)
  • 设置 root 密码和创建普通用户
  • 开始安装并等待完成
  • 安装完成后重启系统

1.3

小张完成 CentOS stream 9 安装后,为了防止在后续配置和测试过程中因操作不当损毁系统,领导让他使用虚拟机提供的“快照”轻量级备份工具进行备份。请简要说明该工具的使用步骤。

使用快照备份工具的步骤

  1. 打开虚拟机管理软件 (如 VMware 或 VirtualBox)
  2. 选择目标虚拟机
  3. 找到"快照"或"Snapshot"功能菜单
  4. 点击"创建快照"或"Take Snapshot"
  5. 输入快照名称和描述 (如"初始安装完成状态")
  6. 确认创建快照
  7. 等待快照创建完成

恢复快照的步骤

  1. 打开虚拟机管理软件
  2. 选择目标虚拟机
  3. 找到"快照管理器"或"Snapshot Manager"
  4. 选择要恢复的快照
  5. 点击"恢复"或"Revert"
  6. 确认恢复操作

1.4

请你为系统创建销售部 (group1) 和技术部 (group2) 两个用户组,然后为每个部门创建一个用户,用户名分别为 tom1 和 tom2,初始密码均为 111111。

bash
# 创建用户组
sudo groupadd group1    # 销售部
sudo groupadd group2    # 技术部

# 创建用户并设置初始密码
sudo useradd -g group1 -m tom1              # 销售部用户
echo "111111" | sudo passwd --stdin tom1
sudo useradd -g group2 -m tom2              # 技术部用户
echo "111111" | sudo passwd --stdin tom2

1.5

根据公司要求,在第二块磁盘 (/dev/sdb) 上创建一个 ext4 文件系统,并挂载到 /var/www/images 日录,用于存储商品图片。

bash
# 1. 查看磁盘情况
sudo fdisk -l

# 2. 假设/dev/sdb是第二块磁盘,创建文件系统
sudo mkfs.ext4 /dev/sdb

# 3. 创建挂载点目录
sudo mkdir -p /var/www/images

# 4. 临时挂载
sudo mount /dev/sdb /var/www/images

# 5. 永久挂载(编辑/etc/fstab)
echo "/dev/sdb /var/www/images ext4 defaults 0 0" | sudo tee -a /etc/fstab

# 6. 验证挂载
mount | grep /var/www/images

第二大题

2.1

企业服务器的 IP 地址为 192.168.10.20,安装 Nginx Web 服务器,并配置为开机自启,并验证 Nginx 服务是否可以正常访问?

bash
# 安装Nginx
sudo dnf install nginx -y

# 启用Nginx开机自启动
sudo systemctl enable nginx

# 验证Nginx是否可以正常访问
ping -I 192.168.10.20

2.2

在完成今日各项任务时,为提高效率决定使用 shell 脚本,而编写脚本离不开编辑器。请写出两种以上编辑器,并详细说明它们具体使用方法。

常用的编辑器主要有 Vim 和 Nano

Vim 的三种主要模式

  1. 普通模式 (Normal mode) - 打开文件后默认进入的模式
    • i 进入插入模式
    • : 进入命令模式
    • h j k l 分别对应左、下、上、右移动光标
    • x 删除当前字符
    • dd 删除当前行
    • yy 复制当前行
    • p 粘贴
    • u 撤销
    • Ctrl + r 重做
  2. 插入模式 (Insert mode) - 编辑文本内容
    • i 进入插入模式
    • 此时可以像普通编辑器一样输入文本
    • Esc 返回普通模式
  3. 命令模式 (Command mode) - 执行保存、退出等操作
    • 在普通模式下按 : 进入
    • :w 保存文件
    • :q 退出
    • :wq 保存并退出
    • :q! 不保存强制退出
    • :set number 显示行号
    • :/ 搜索词,向下搜索
    • :? 搜索词,向上搜索

Nano 编辑器常用快捷键

  • Ctrl + O 保存文件,然后按 Enter 确认
  • Ctrl + X 退出,如果有未保存的修改会提示保存
  • Ctrl + K 剪切当前行
  • Ctrl + U 粘贴
  • Ctrl + W 搜索
  • Ctrl + \ 替换
  • Ctrl + G 打开帮助
  • Alt + U 撤销
  • Alt + E 重做

2.3

为确认 /var/log 目录下日志文件是否占用过多磁盘空间,小李需要编写一个 Shell 脚本,统计该目录下所有日志文件的总大小(以 MB 为单位),并将结果输出到文件 logsize.txt 中请完成该脚本编写

bash
#!/bin/bash
size=$(find /var/log -type f -name "*.log" -exec du -ch {} + | awk '/total$/{print $1}')
echo "${size:-0}" > logsize.txt

2.4

根据供应商给出的价格计算两台新服务器的总费用,编写一个 Shell 脚本,提示用户输入两台新服务器的价格(单位:元),然后计算并显示这两台服务器的总价

bash
#!/bin/bash

# 获取第一台服务器价格
read -p "请输入第一台服务器的价格(元): " a

# 获取第二台服务器价格
read -p "请输入第二台服务器的价格(元): " b

# 计算总价
total=$(echo "$a+ $b")

# 显示结果
echo "总价格: ${total}元"

第三大题

3.1

为统一实验室文档格式,小李需编写一个 Shell 脚本,将 /home/students/documents 目录下所有扩展名为 .txt 的文件重命名为扩展名为 .md 的文件,请完成脚本编写。

bash
#!/bin/bash
# 批量重命名.txt为.md的脚本
cd /home/students/documents

# 进入目录并执行重命名
for f in *.txt;
do
    mv -v "$f" "${f%.txt}.md"
done

3.2

新学期 10 名新生加入实验室,小李要为他们创建账号并分配到 group1 组。编写一个 Shell 脚本,创建名为 group1 的新组,然后创建 10 个属于这个组的用户账号,用户名格式为 stu01stu10

bash
#!/bin/bash
# 创建组
groupadd group1

# 创建10个用户
for i in {01..10};
do
    useradd -g group1 "stu$i"
done

3.3

为帮助新生熟悉 Linux 命令行,小李打算开发一个猜数字游戏。编写一个 shell 脚本实现计算机随机生成一个 1 到 10 之间的整数,用户输入猜测的数字,程序提示 猜大了猜小了猜对了,直到用户猜对为止。

bash
#!/bin/bash
n=$((RANDOM%10+1))
while read -p "猜1-10的数: " g;
do
    ((g==n)) && echo "对了!" && break
    echo $((g>n?"大了":"小了"))
done

第四大题

4.1

为在“Linux 编程新星挑战赛”中完成任务,需要编写一个名为 sy.c 的源程序,实现九九乘法口诀表功能,请完成该源程序编写。

c
#include <stdio.h>

void main() {
    int i, j;
    // 外层循环控制行数 (1-9)
    for (i = 1; i <= 9; i++) {
        // 内层循环控制每行的列数 (1-i)
        for (j = 1; j <= i; j++) {
            // 格式化输出乘法算式,%-2d 保证对齐
            printf("%d×%d=%-2d ", j, i, i * j);
        }

        // 每行结束后换行
        printf("\n");
    }
}

4.2

在竞赛要求下,小杨使用 GCC 编译源文件生成可执行程序时,需经历 4 个阶段。请写出各阶段名称及对应的 GCC 命令。

  1. 预处理(Preprocessing)

    gcc -E source.c -o source.i

  2. 编译(Compilation)

    gcc -S source.i -o source.s

  3. 汇编(Assembly)

    gcc -c source.s -o source.o

  4. 链接(Linking)

    gcc source.o -o executable

4.3

依据竞赛中 GDB 调试程序的任务,小杨在调试 sy.c 程序时,需要用到一些 GDB 内部命令,请完成以下填空。

启动 GDB 调试程序的命令格式是:gdb 可执行文件 查看当前所有断点和监视点信息的命令:info breakpoints 运行程序的命令是:run 继续执行到下一个断点的命令是:continue 给变量设置一个监视点:watch 变量名 在 GDB 中设置断点的命令是:break 行号或函数名

4.4

按照竞赛项目管理要求,小杨需要根据 sy.c 源码编写 Makefile 文件,通过执行 make 命令生成可执行文件,并在生成后删除 sy.o 过程文件。请完成 Makefile 文件编写。

bash
sy:sy.c
    gcc sy.c -o sy

clean:
    rm -f sy.o

总结

贡献者

The avatar of contributor named as LI SIR LI SIR

页面历史