ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux环境安装配置:从虚拟机、软件源到DNS与开发环境

Linux环境安装配置:从虚拟机、软件源到DNS与开发环境 简介这份资源是西南科技大学Linux课程的环境安装配置实验报告面向正在学习Linux操作系统、需要完成软件安装管理实验的高校学生。内容围绕字符界面下的软件安装展开涵盖二进制包与源代码包的安装卸载、yum与apt-get配置互联网源远程安装、本地tar.gz包编译安装三条主线并以fping、emacs、jupyter、wput、Linuxer客户端等为例记录完整实验过程附有.tar.gz包卸载方式、rpm与yum依赖关系、远程安装wput等实验思考与体会可作为实验复盘、报告撰写与期末复习的参考材料。资源包内含1个docx文档约7.06MB图文排版完整便于直接查阅与打印。目前已有1294人学习下载适合刚接触Linux命令、希望掌握包管理与依赖处理思路的初学者对照练习。1. 从一份 Linux 实验报告说开真正卡住人的从来不是安装很多人把「Linux 环境安装配置」理解成一次性的装机动作找镜像、开虚拟机、一路下一步、看到登录提示符就截图收工。真到要交实验报告或者后面要跑编译、连数据库、部署服务的时候才发现卡住人的从来不是安装本身而是安装之后那一堆配置——软件源指不到、DNS 解析不出来、新建用户没有 sudo、中文文件名一解压全是乱码。西南科技大学的 Linux 实验课把「环境安装配置」单列成报告抓的正是这个点装系统只是入口把环境配置成可复现、可交接的状态才是目的。接下来的顺序和你动手的顺序一致先讲虚拟机里怎么装、分区和网络模式怎么挑再讲装完必须做的源、DNS、用户、编码配置接着落到 Python、Node.js、Git 这类开发环境的搭建最后给一套自检和排错的方法让报告里的每一步都写成别人能照着复现的样子。2. 虚拟机安装 Linux 系统镜像、分区与网络模式怎么选实验报告的第一张截图通常就是安装界面但这一步真正决定后面顺不顺的是三个选择装哪个发行版、虚拟机给多少资源、网络用哪种模式。这三个选错了后面配源、连 SSH、跑服务都会反复折腾报告也写不干净。2.1 发行版与镜像实验环境优先选 LTS课程实验和后续开发环境优先选长期支持版本别追最新滚动版。滚动更新会带来软件版本漂移今天能编译过的代码下周 apt upgrade 之后可能报错实验报告要的是可复现不是尝鲜。发行版包管理适合场景注意点Ubuntu LTSapt / dpkg课程实验、新手入门文档最多社区回答好找Debian stableapt / dpkg长期不动的基础环境软件版本偏旧部分新工具要自行编译Rocky / Alma Linuxdnf / rpm想练 RHEL 系命令部分第三方源需要额外导入Kaliapt安全方向课程默认预装组件多不适合当通用开发机镜像来源建议用官网或国内开源镜像站清华 TUNA、中科大 USTC、阿里云等。不要用来路不明的「精简版」镜像这类镜像常被裁剪过签名和包缓存装包时报 GPG 错误排错成本远高于省下的下载时间。2.2 虚拟机资源分配与网络模式取舍资源分配上2 核 CPU、2 GB 内存是能跑起来的下限桌面版建议 4 GB 内存、2 核以上、40 GB 磁盘服务器版无图形界面2 GB 内存、20 GB 磁盘就够。磁盘建议用「动态分配」但要在虚拟机设置里开启 CPU 虚拟化加速否则编译大型项目时明显拖慢。网络模式是最容易被忽略的一环三种模式差别很大模式虚拟机能否上网宿主机能否访问虚拟机同网段其他机器能否访问典型用途NAT能需端口转发不能只上网、做本地实验桥接能能能需要被局域网访问、模拟真实服务器仅主机不能能不能纯离线实验、隔离测试实验报告里如果只截图了「能上网」但没写用的是哪种模式后面同学照着复现就会出现「我这 ping 不通」的问题。选桥接时记得把虚拟机的 IP 固定下来DHCP 每次换地址会让 SSH 连接反复失效。2.3 分区方案与安装过程关键选项手动分区不是必须的但报告里写清楚分区结构是加分项。常见的最小方案是/根分区swap交换分区服务器场景可再加/home。下面用命令行创建一台实验虚拟机便于记录每一步参数# 创建名为 linux-lab 的虚拟机类型 Ubuntu 64 位 VBoxManage createvm --name linux-lab --ostype Ubuntu_64 --register # 分配 4096 MB 内存开启 IO-APIC 与 PAE VBoxManage modifyvm linux-lab --memory 4096 --cpus 2 --ioapic on --pae on # 设置网络为桥接模式桥接到宿主机物理网卡 VBoxManage modifyvm linux-lab --nic1 bridged --bridgeadapter1 eth0 # 创建 40 GB 动态分配磁盘 VBoxManage createhd --filename ~/VirtualBoxVMs/linux-lab/linux-lab.vdi --size 40960 --variant Standard # 挂载 SATA 控制器并挂上磁盘 VBoxManage storagectl linux-lab --name SATA --add sata --controller IntelAhci VBoxManage storageattach linux-lab --storagectl SATA --port 0 --device 0 --type hdd \ --medium ~/VirtualBoxVMs/linux-lab/linux-lab.vdi # 挂载 ISO 镜像到光驱并设置启动顺序 VBoxManage storagectl linux-lab --name IDE --add ide VBoxManage storageattach linux-lab --storagectl IDE --port 0 --device 0 --type dvddrive \ --medium ~/Downloads/ubuntu-lts.iso VBoxManage modifyvm linux-lab --boot1 dvd --boot2 disk逻辑说明这段命令等价于图形界面里新建虚拟机的每一步好处是参数全部落在命令行里写实验报告时可以直接粘贴别人改一下路径就能复现。--bridgeadapter1要替换成宿主机真实的物理网卡名Windows 上是「以太网」或「Wi-Fi」对应的设备名Linux 上通常是eth0、enp3s0或wlan0。--memory和--cpus不宜超过宿主机实际可用资源的一半否则宿主机自身会变卡。--boot1 dvd保证第一次从安装镜像启动装完后可以改回--boot1 disk。安装过程中几个值得在报告里说明的选项语言选 English 还是中文影响的是安装界面和默认 locale进系统后可以改「最小安装」还是「完整安装」前者省资源但缺编译工具后者占磁盘但省得后续补装是否勾选「安装第三方驱动」如果宿主机显卡或网卡比较新勾上能省去装完没网的麻烦。2.4 首次启动后的三项确认装完重启进入系统后别急着配源先确认三件事内核和系统版本、网卡是否拿到地址、磁盘分区是否符合预期。这三项是后面所有配置的前提。# 查看内核与发行版版本报告里需要写清楚 uname -r cat /etc/os-release # 简洁查看所有网卡及地址确认网卡已启动并拿到 IP ip -br addr # 查看块设备与分区结构核对根分区、swap 是否就位 lsblk -funame -r输出的是运行中的内核版本/etc/os-release给出发行版名称和版本号两者要一起写进报告因为后续装包遇到的兼容问题往往跟这两个版本挂钩。ip -br addr是ip addr的精简输出-br表示 brief只显示关键字段能一眼看出网卡是 UP 还是 DOWN、有没有拿到 IPv4 地址。lsblk -f的-f会额外显示文件系统类型和挂载点用来确认/和swap是否按分区方案落地。如果网卡是 DOWN 状态先检查虚拟机网络模式设置再考虑系统内的网卡配置顺序不要反。3. Linux 装完必做的环境配置源、DNS、用户与中文编码系统能开机不等于环境能用。这一章的四件事做完才算有一台能正常干活的 Linux软件源指得对、DNS 解析得通、有独立用户和权限、中文不乱码。实验报告里这四步基本都会被要求截图。3.1 软件源替换apt 与 dnf 两条线默认源在境外装一个包等半天还容易超时。换成国内镜像站后装包速度提升明显也减少实验中途卡住的情况。不同发行版的源文件位置不同发行版源文件路径包管理命令Ubuntu / Debian/etc/apt/sources.list及/etc/apt/sources.list.d/apt update / apt installRocky / Alma/etc/yum.repos.d/*.repodnf makecache / dnf install新版 Ubuntu/etc/apt/sources.list.d/ubuntu.sourcesapt update# 备份原源文件出问题能一键还原这步别省 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 用 sed 把官方域名整体替换为镜像站域名 sudo sed -i s|http://archive.ubuntu.com|https://mirrors.example.edu|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.example.edu|g /etc/apt/sources.list # 更新索引确认源可用且无 GPG 报错 sudo apt update逻辑说明sed -i是原地修改文件s|旧|新|g表示把每行里所有匹配的旧域名换成新域名用竖线做分隔符是为了避免和 URL 里的斜杠冲突。mirrors.example.edu要替换成你自己选定的镜像站地址不同站点路径可能带发行版代号替换后如果apt update报 404多数是路径写错了对照站点上的说明改一下即可。提示Ubuntu 24.04 之后源配置搬到了ubuntu.sources老教程里的sources.list替换对它无效报告里最好把发行版版本和对应源文件路径一并写清楚。3.2 DNS 配置与网络连通性排查源换好了仍然连不上八成是 DNS 的问题。表现是ping 8.8.8.8通但ping example.com不通或者apt update卡在解析域名。排查顺序是先看当前 DNS 配置再测解析最后改配置。# 查看当前生效的 DNS 服务器 cat /etc/resolv.conf # 测试解析与连通性区分是 DNS 问题还是链路问题 ping -c 2 8.8.8.8 ping -c 2 www.example.com nslookup www.example.comping 8.8.8.8用 IP 直连通了说明链路没问题ping www.example.com不通说明卡在域名解析。新版 Ubuntu 用systemd-resolved托管 DNS直接改/etc/resolv.conf重启后会被覆盖正确做法是编辑/etc/systemd/resolved.conf里的DNS行然后sudo systemctl restart systemd-resolved。用 NetworkManager 管理网络的可以用nmcli con mod 连接名 ipv4.dns 223.5.5.5 119.29.29.29再nmcli con up 连接名生效。报告里把「我改了哪里、为什么这么改、重启后是否还生效」写清楚比只贴一张 ping 通的截图有价值得多。3.3 新建用户、sudo 权限与 SSH 登录一直用 root 操作不是好习惯也不符合权限最小化。实验环境里建一个普通用户需要提权时走 sudo是标准做法。# 新建用户并自动创建家目录指定默认 shell 为 bash sudo useradd -m -s /bin/bash student # 设置密码 sudo passwd student # 把用户加入 sudo 组注意这是附加组不要用 -G 覆盖原有组 sudo usermod -aG sudo student # 验证切换到新用户执行提权命令 su - student sudo whoamiuseradd -m才会创建家目录不加-m登录后连.bashrc都没有。-s /bin/bash指定默认 shell不指定的话可能是/bin/sh补全和提示符都会很别扭。usermod -aG里的-a是 append漏掉它会把用户从其他组里踢出去只保留新加的组这是新手常踩的坑。sudo whoami返回root说明 sudo 权限生效。需要远程登录时装好并启动 SSH 服务sudo apt install openssh-server然后sudo systemctl enable --now ssh。用systemctl status ssh确认是 active (running)。连接时用ssh student虚拟机IP第一次会提示确认主机指纹输入 yes 即可。虚拟机是 NAT 模式时要在虚拟机设置里做端口转发才能从宿主机连进来。3.4 locale 与时区顺手解决解压文件乱码中文环境下最烦的就是 Windows 传过来的压缩包解压后文件名全是乱码。根因是编码不一致Windows 的 zip 常用 GBK 编码存文件名Linux 默认按 UTF-8 解读自然对不上。# 查看当前语言环境 locale # 生成中文 UTF-8 语言环境 sudo locale-gen zh_CN.UTF-8 # 设为系统默认并更新 sudo update-locale LANGzh_CN.UTF-8 # 查看并设置时区 timedatectl sudo timedatectl set-timezone Asia/Shanghai用unzip -O GBK 文件名.zip可以在解压时指定源编码解决临时需求。想改默认行为可以在/etc/environment里加UNZIP-O GBK和ZIPINFO-O GBK。如果系统里还没装 unzipsudo apt install unzip补上。timedatectl set-timezone不用重启就能生效报告的实验时间和截图时间对不上时往往就是时区没设。4. 开发环境搭建Python、Node.js、Git 与编译工具链基础环境配好接下来是课程和项目都要用到的开发工具。这一步的坑集中在「装在哪、谁来管、版本怎么切」三个问题上。4.1 编译工具链与 Git 安装配置很多 Python 包和 Node 原生模块需要本地编译缺gcc、make、python3-dev会直接装不上。先把工具链补齐# Ubuntu 系一条命令装齐编译工具和头文件 sudo apt update sudo apt install -y build-essential git curl wget vim # 配置 Git 身份全局配置写进 ~/.gitconfig git config --global user.name Your Name git config --global user.email youexample.com # 检查配置结果 git config --global --listbuild-essential是一个元包会自动带上gcc、g、make、libc6-dev等比一个个装省事。git config --global写入的是当前用户的家目录配置不加--global只对当前仓库生效。如果后续用 SSH 方式拉代码还要生成密钥ssh-keygen -t ed25519 -C youexample.com然后把~/.ssh/id_ed25519.pub的内容添加到代码托管平台的公钥设置里。这一步报告里截图git config --global --list的输出就够了别把公钥私钥全贴进去。4.2 Python 环境安装与虚拟环境隔离系统自带的 Python 不要动也不要用sudo pip install往系统环境里塞包容易把系统工具依赖搞坏。正确路线是系统 Python 只做基础项目依赖全放虚拟环境。# 安装 Python3、pip 和虚拟环境模块 sudo apt install -y python3 python3-pip python3-venv # 验证版本 python3 --version pip3 --version # 在项目目录下创建虚拟环境 mkdir -p ~/projects/demo cd ~/projects/demo python3 -m venv venv # 激活虚拟环境提示符前会出现 (venv) source venv/bin/activate # 配置 pip 使用镜像站写入用户级配置 pip config set global.index-url https://mirrors.example.edu/pypi/simple # 装包并导出依赖清单 pip install requests pip freeze requirements.txt # 退出虚拟环境 deactivatepython3 -m venv venv会在当前目录建一个名为venv的目录里面是独立的 Python 解释器和包目录和系统环境完全隔离。source venv/bin/activate激活后python和pip都指向这个隔离环境此时装包不会污染系统。pip freeze requirements.txt把当前环境的包及版本导出别人用pip install -r requirements.txt就能装出一样的环境这一步是实验报告里体现「可复现」的关键。如果python3 -m venv报错多半是没装python3-venv这个包而不是 Python 本身有问题。4.3 Node.js 安装及环境配置nvm 还是系统包Node.js 的安装有两条路选哪条取决于你是否需要多版本切换路线安装方式优点缺点系统包管理apt install nodejs npm简单一条命令版本偏旧难切换nvm 版本管理脚本安装 nvm 后nvm install多版本自由切换需要配 shell 初始化做前端或需要跟项目 Node 版本对齐的建议用 nvm# 安装 nvm版本号以官方最新为准 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 重新加载 shell 配置让 nvm 命令生效 source ~/.bashrc # 验证 nvm nvm --version # 安装并使用当前 LTS 版本 nvm install --lts nvm use --lts nvm alias default lts/* # 验证 node 与 npm node -v npm -vnvm install --lts装的是当前长期支持版本避免用最新版踩兼容坑nvm alias default lts/*把默认版本固定下来新开终端不用每次手动nvm use。node -v和npm -v的输出要一起写进报告说明 Node 和自带的包管理器都可用。npm 装包慢可以换镜像npm config set registry https://mirrors.example.edu/npm/配置写入~/.npmrc。用系统包管理装 Node 的话卸载和版本切换都很麻烦报告里如果写「我用 nvm 是因为要跟项目指定的 Node 版本对齐」理由比单纯「教程这么写」充分得多。5. 环境自检与排错把实验报告写出可复现的细节配置做完最后一件事是自检。一份好的环境安装配置实验报告标准不是截图多而是别人照着你的步骤能装出一样能用的系统。这一章给一套自检脚本和一张常见报错对照表。把下面脚本存成check_env.sh每次配完环境跑一遍输出直接贴进报告的「结果验证」部分#!/usr/bin/env bash # Linux 环境自检脚本一次性输出关键配置项 echo 系统信息 cat /etc/os-release | grep -E ^(NAME|VERSION) uname -r echo 网络与 DNS ip -br addr | grep -v LOOPBACK cat /etc/resolv.conf | grep -E ^nameserver echo 用户与权限 id sudo -n true 2/dev/null echo sudo: 可用 || echo sudo: 需密码或不可用 echo 语言与时区 locale | grep -E LANG|LC_ALL timedatectl | grep Time zone echo 开发环境 for cmd in gcc git python3 node npm; do if command -v $cmd /dev/null 21; then printf %-8s %s\n $cmd $($cmd --version 21 | head -n1) else printf %-8s 未安装\n $cmd fi done逻辑说明脚本按「系统、网络、权限、本地化、开发环境」五块输出每块对应报告里一个截图点比零散截图更整齐。command -v判断命令是否存在存在才执行版本查询避免未安装时报「command not found」干扰输出。sudo -n true里的-n表示非交互能直接判断当前用户是否有免密 sudo 权限。head -n1是因为某些工具的--version会输出多行只取第一行保持整洁。常见报错和对应排查方向现象大概率原因排查命令apt update 报 GPG 错误源签名导入不全或镜像站点未同步apt-key list、换回官方源测试ping IP 通、域名不通DNS 配置被覆盖或未生效cat /etc/resolv.conf、systemd-resolve --status新建用户无法 sudo未加入 sudo 组或 usermod 漏了 -agroups 用户名解压后文件名乱码压缩包源编码为 GBKunzip -O GBK 文件.zip虚拟环境激活后 pip 仍报外网pip 镜像未写入用户配置pip config list虚拟机重启后 IP 变化导致 SSH 断NAT DHCP 未固定地址改用桥接并配静态 IP报告里把「现象—原因—验证命令—解决动作」写成这样的四段式比只写一句「已解决」有说服力。最后留一个小技巧配环境前先在虚拟机管理软件里拍一张快照命名成「装完系统待配置」每做完一章配置再拍一张。万一某一步把系统搞坏了回滚到上一个快照比重装系统快得多报告里也能顺带体现你有环境版本管理的意识。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进