这周,我们小组的第一周周报终于整理出来了。怕拖久了自己都忘了当初踩过哪些坑,干脆把内容公开写成一篇长文——既是给自己人复盘的存档,也顺手分享给正在组织 Linux 学习小组、或者刚准备认真入门 Linux 的朋友。小组的内部代号就叫 XiyouLinux Group,其实就是一群水平参差不齐、但都愿意折腾的人凑在一起,定下两个很朴素的长期目标:第一,把 Linux 从“听说过”变成“能拿来干活”;第二,互相拽着往前走,避免又是三分钟热度。
第一周我们没做什么惊天动地的事,就是把环境装好、把基础命令练熟、把 Git 协作流程跑通,顺带踩了一堆系统级的坑。文章里我会把当初定的路线、具体操作、遇到的问题排查过程都摊开讲,重点不是“展示成果”,而是把决定为什么这么做、以及哪些操作可以照抄的部分讲清楚。如果你是零基础,可以直接把这篇文章当一份小组起步的参考;如果你已经有一定经验,也可以跳过前半部分,直接看“问题排查”那一节。
1. 第一周定了什么路线:从“想玩”到“能跑”
1.1 建组动机与目标:不想让新人从“装系统”就被劝退
小组最初的想法很直接:很多对 Linux 感兴趣的朋友,不是不想学,而是不知道从哪儿下手。装个系统,可能第一步就卡在分区上;装好了,又不知道打开终端该敲什么;问别人,得到的回答不是“这个很基础”就是“你搜一下”。这种体验非常消耗热情,尤其对零基础的人来说,第一周如果只是丢给他一本六百页的书,基本等于劝退。
所以我们的第一周目标不是“学完多少章”,而是让每个人拥有一台“能放心折腾的 Linux 环境”,并且能在终端里完成最简单的日常操作。这里的“放心折腾”很重要:不管你是用虚拟机、云服务器还是旧电脑,环境坏了能重来,命令敲错不会把重要数据干掉。有了这个安全垫,新人胆子才会大,才敢去试。
1.2 第一周的任务边界:环境、命令、协作,三线并进
我们给第一周划了三项具体任务,每项都很小:
- 环境可用:每个人手上至少有一个能登录的 Linux 终端,可以装软件、跑命令、出问题能恢复。
- 命令上手:掌握文件、目录、权限、进程、网络五大类里最常用的操作,能独立完成一个小任务。
- 协作跑通:会用 Git 把作业和随笔提交到小组仓库,会写一份最简单的周报。
这三条线对应的是三个完全不同的能力方向:环境解决“有没有得玩”,命令解决“玩不玩得动”,协作解决“能不能一起玩”。很多学习小组只抓命令,忽略环境和协作,结果就是大家各学各的,交流不起来,最后变成少数人的独角戏。我们特意把三条线放在同一周,为的是从第一步就养成“东西要能跑起来、要能被别人看到”的习惯。
1.3 为什么路线要先行,而不是搞兴奋式杂谈
还有一点是我坚持的:第一次活动不搞自由发挥。不是说“大家随便聊聊感兴趣的方向”,而是直接抛出一份明确的路线图,哪怕它不完美。原因是,零基础阶段最怕的不是内容难,而是方向乱。今天有人讲桌面美化,明天有人讲内核编译,听着都很有意思,但对新人没有任何积累。先统一走一条最保守的路:命令行基础 → Shell 脚本 → 日常服务部署 → 按兴趣分流。第一周只走第一步,任何人中途加入都能接得上。
2. 环境搭建那几天:发行版、虚拟机与基础配置
2.1 发行版选择:为什么默认走 Debian/Ubuntu 系
第一周结束前,我们要求大家统一到 Debian/Ubuntu 系发行版上。这不是说其他发行版不好,而是为了降低沟通成本。Debian/Ubuntu 系有几个很现实的好处:资料押坑多,遇到问题搜出来的答案基本能直接用;软件包管理模式一致,都是 apt;默认配置相对保守,不容易一上来就弄坏系统。Arch 这种滚动发行版适合已经知道自己在干什么的人,不适合第一周。
如果你担心统一之后失去“学习深度”,完全不必要。发行版只是一个入口,Shell、权限、进程、网络这些核心概念在哪个发行版上都是相通的。等基础牢固了,再去尝试其他发行版,你会发现切换成本很低。第一周最重要的不是证明自己能搞定多冷门的系统,而是有一个稳定的环境支撑后续学习。
2.2 虚拟机、WSL 还是真机:三种方案怎么选
我们当时内部做过一次小调查,大家的电脑配置、系统情况差别很大。有人用 Windows 笔记本,有人用 macOS,还有人手里只有一台老旧的台式机。综合考虑后,我们给了三种方案供选择:
| 方案 | 适合场景 | 优点 | 需要注意 |
|---|---|---|---|
| 虚拟机安装 Linux | 主力机是 Windows,且内存不低于 8GB | 隔离性好,系统玩坏了直接删掉重建,不影响日常使用 | 占用磁盘和内存较多,老机器会卡 |
| WSL2 | 日常只用 Windows,又想快速体验命令行 | 启动快,资源占用低,和 Windows 文件互通方便 | 图形界面支持有限,某些软件存在兼容问题 |
| 独立安装/旧电脑装 Linux | 手里有空闲电脑,或想长期使用 | 性能最好,最能模拟真实服务器环境 | 分区、驱动、U盘启动等环节容易劝退新人 |
我个人在指导时建议的顺序是:有旧电脑的用真机,没有旧电脑的、内存够的用虚拟机,内存很紧张就 WSL2。不建议第一周就搞双系统,因为分区和引导恢复对一个零基础的人来说太容易崩,而且一旦崩了连着主机数据一起担惊受怕,体验很差。
虚拟机分配方面,我给了个参照:至少 2 个处理器核心、4GB 内存、40GB 动态磁盘。注意这里 40GB 是虚拟磁盘上限,不是立刻占用 40GB,动态扩展模式下用多少占多少。如果电脑只有 8GB 内存,虚拟机开到 4GB 已经是极限,再大主机就会开始卡。把这些数字写进要求里,是为了避免有人把内存拉到 8GB,导致整机卡到没法用。
2.3 刚装完系统,先改镜像源再干别的
装完系统第一步,我强烈建议先检查软件源。默认源大多在国外,国内访问速度很慢,尤其执行 apt update 的时候,动不动就超时。换成合适的镜像源之后,速度会快很多,后续装软件才不会烦躁。
以 Debian 系为例,基本操作是把 /etc/apt/sources.list 里的地址替换成可用的镜像地址。不同版本对应的源不同,我是这样做的:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|deb.debian.org|mirrors.example.com/debian|g' /etc/apt/sources.list sudo apt update注意 sed 那行里的 mirrors.example.com 只是示意,真实环境里要换成你所选镜像站的地址。这里最关键的点是“先备份再做修改”,宁可把文件备份在那里吃灰,也不要裸奔着改。改完之后如果遇到签名失效问题,先检查系统时间,这个坑我在后面第 5 节详细说。
另外一个新装的系统上很容易忽略的操作:创建普通用户,而不是用 root 登录。虽然虚拟机里用 root 一时爽,但长期会把权限观念给磨没了。真实的生产环境里几乎不会让你直接拿 root 去操作,前期养成好习惯,后面写脚本、部署服务都会少踩很多坑。
3. 第一周的命令行训练:我们练了什么、怎么打卡
3.1 分组任务清单:按使用频率筛选最常用命令
第一天整理命令清单时,我很怕列出来的东西变成一本命令字典,没人看得完。所以最终我们没有按字母排序,而是按“最容易用上”的场景分组。每一组只留核心命令,并且要求不是“看一遍”,而是“动手跑一遍”。
- 文件与目录:ls、cd、pwd、mkdir、rm、cp、mv、find、tree、du、df
- 文件查看与处理:cat、less、head、tail、grep、sort、uniq、wc、cut、awk
- 权限相关:whoami、id、chmod、chown、su、sudo、umask
- 进程相关:ps、top、htop、kill、pkill、jobs、fg、bg
- 网络相关:ip、ping、ss、curl、wget、ssh、scp
- 归档与压缩:tar、zip、unzip
- 系统信息:uname、lscpu、free、uptime、history
每个新人每天挑一组,在终端里至少跑 15 分钟,然后把输出截图或直接贴到仓库的练习日志里。我们不要求一天练完,但要求一周内至少把前三组操作练熟。前三天最容易出现的问题是“看着例子都懂,关掉教程就忘”,所以任务设计上刻意加了需要“自己编参数”的小题目。
3.2 练手场景:分析日志文件算出 Top10
光说“练命令”还是有点虚,所以第一周我布置了一个所有人必须独立完成的小任务:自己生成一个模拟的日志文件,然后统计出现次数最多的前 10 个 IP,统计每种响应状态码的数量。这个任务不需要真实服务器,用一段脚本就能造数据。
造数据可以用 for 循环加随机数,简单版本大概是:
for i in $(seq 1 200); do ip="192.168.$((RANDOM % 255)).$((RANDOM % 255))" status=$((200 + RANDOM % 4)) echo "$ip [$(date +%H:%M:%S)] status=$status url_path=/test$i" done > access.log然后统计:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -n 10 grep -o 'status=[0-9]*' access.log | sort | uniq -c第一次看到这条管道的人可能会慌,实际上拆开就三件事:awk 负责把第一列取出来,sort 让相同的 IP 排到一起,uniq -c 负责计数并输出“次数 IP”,最后再用 sort -rn 按数字倒序排,head 取前 10 个。整个过程的精髓在于“一个命令只做一件事,然后用管道接起来”,这是 Linux 命令行里最值得养成的思维习惯。
第一周结束后的统计显示,有超过一半的同学已经能独立解释这条管道里每一段在干什么。能做到这一点,比背二十个命令都管用。
3.3 编辑器:Vim 第一课只教六个操作
编辑器是一个绕不开的话题。我们用过的方案其实是:不给新人自由选编辑器的权利。第一周统一要求碰 Vim,但不要求精通,只要求能完成六个操作:i 进入插入模式、Esc 回到普通模式、:wq 保存退出、dd 删除当前行、yy 复制当前行、p 粘贴。配合 vimtutor 每天过一遍,十分钟就够了。
为什么只教这么少?因为编辑器的学习曲线太陡,第一周如果真从移动光标、翻页、复制粘贴全学一遍,新人会疯掉。先给最少的可用集,让他在终端里能改文件、能退出来就够了。等第二周接触 Shell 脚本时,再逐步补充快速定位、批量替换等高级操作,那时候他有刚需,学起来才有动力。
3.4 打卡机制:盯提交,不盯时长
每天的练习怎么监督?我们的答案是“不监督,看提交”。仓库里每个人建一个以自己昵称命名的目录,里面放学习日志。当天练了什么、卡在哪条命令上、有没有解决,只用几句话写清楚。重点不是写多长,而是“提交本身就是一种承诺”。第一周我们就遇到过有人连续两天只写“学了 ls、cd、pwd”,这种流水账其实说明他没深入进去。单独聊了之后才知道是想练 find 卡住了,没好意思问。所以周报和打卡不只是监督工具,也是我们发现学习情绪的窗口。
4. 协作工具这条线:Git、仓库与周报模板
4.1 仓库目录结构:先约定,再提交
因为我们要公开提交作业和问题,第一天就搭了一个小组仓库。仓库结构很简单,没有搞复杂的多分支流程,所有东西先放 main 分支上:
xiyoulinux-group-wiki/ ├── README.md ├── docs/ │ ├── 环境搭建指南.md │ └── 学习路线图.md ├── members/ │ ├── alice/ │ ├── bob/ │ └── carol/ └── weekly/ ├── 2026-week1/ │ ├── alice.md │ ├── bob.md │ └── carol.md └── 2026-week2/members 下面每个人的目录里放自我介绍和练习记录,weekly 下面按周放周报。为什么把周报和周计划分开?因为过去踩过坑:全部堆在 README 里,越改越乱,后期根本没人愿意碰。分开目录之后,每个人只需要关注自己的文件夹,合并冲突的概率大大降低,维护成本也低。
4.2 Git 新手操作流程:记住“改、看、存、提”四步
第一周教 Git,我一律用最死板的操作流程:先 git status 看看有哪些改动,再 git diff 查看内容,确认没问题之后 git add 指定文件,然后 git commit,最后 git push。按这个顺序来,新人不容易把不想提交的文件夹带进去。
git status git diff git add weekly/2026-week1/alice.md git commit -m "docs(weekly): 提交第一周周报" git push origin main这里有一个高频问题:commit 消息怎么写。我们不要求写成标准规范,但要求说清楚“这一提交干了什么”。比如“docs(weekly): 提交第一周周报”比“update”要好得多。第一周人员少,怎么乱都没关系,但好习惯还是得从第一行命令开始养成。
4.3 周报模板:逼着每个人写“能用的内容”
周报模板也是直接定死的,避免出现“这周我学习了 Linux”这种废话。模板长这样:
# 第x周周报 - 昵称 ## 本周完成 - 完成了哪个练习,产出了什么可运行的结果 - 学会了哪个具体命令,能解决什么问题 ## 遇到的问题 - 问题描述 - 排查过程 - 是否解决,怎么解决的 ## 下周计划 - 准备学习什么主题 - 本周有没有遗留问题我在第一周反复强调:写周报不是写给组长看的,是写给两周后的自己看的。很多东西当时觉得记住了,过两周肯定忘。如果你不写下来,就等于没经历过。所以格式简陋没关系,关键要包含“可运行的结果”和“问题排查过程”。一个新人如果能在周报里写出完整的排查链路,那他的进步速度会比单纯刷命令快很多。
5. 问题排查实录:第一周遇到的典型坑
5.1 系统时间不对,导致 apt 更新和 HTTPS 全部失败
第一周最典型的故障报错长得一模一样:执行 sudo apt update 后,给出签名校验失败或仓库信息验证失败之类的提示,甚至浏览器访问页面都会出现证书错误。一开始很多人以为是源写错了,检查一遍发现没问题。后来我提醒大家看一眼系统时间,两分钟后聊天区里一片惊呼:虚拟机的时间停在几个月前。
原因很简单:新装的虚拟机如果没有联网自动同步时间,系统时间会和真实时间偏差很大,而 apt 下载的包索引文件带有时间戳和数字签名,时间对不上就会校验失败。解决方式:
sudo timedatectl set-ntp true sudo apt update如果时间偏差实在太大,可以先手动校准一次。这个坑很小,但特别容易浪费半小时。以后凡是遇到“签名无效”“证书无效”“验证失败”之类的问题,第一反应先看时间,这是我在生产环境踩过无数次之后养成的条件反射。
5.2 虚拟机磁盘写满,系统直接进入奇怪状态
另一个折腾人的问题是磁盘空间不够。有同学给虚拟机分了 20GB 磁盘,装完系统时还剩一半,结果装了几轮软件和依赖包之后,空间迅速见底,表现是系统越来越卡、某些服务自动停止,甚至命令提示符敲下去半天没反应。
排查命令就两条:
df -h du -sh ~/* --exclude=proc 2>/dev/null | sort -hr | head -n 20df 看整体磁盘占用,du 定位大目录。最后发现多数是 apt 缓存和日志文件在作怪。清理方式也很常规:
sudo apt clean sudo journalctl --vacuum-time=7d这件事告诉我们,装系统时磁盘不要抠得太死,40GB 不算奢侈。更重要的是,环境里要保留至少 10% 到 20% 的余量,不然系统会进入“活着但什么也干不了”的奇怪状态。
5.3 虚拟机里上不了网:先查“虚拟网卡”再查系统
第一周还有人反馈虚拟机里 ping 不通外网,系统里怎么配置都没用。排查顺序是:先确认虚拟机软件的虚拟网络设置是否选了 NAT 模式,再确认宿主机的网络是不是正常,最后才能去虚拟机内部折腾 ip 和路由。如果虚拟网络设备根本没启用,你就是在里面改一百遍网卡配置文件都没意义。
这一步特别容易犯的错是一上来就改 /etc/network/interfaces 或 NetworkManager,结果越改越乱。正确的动作是先在虚拟机软件的“网络设置”面板里把它切成 NAT,然后回到系统里执行 dhclient 重新获取地址。遇到网络问题,我们要遵守“从外层到内层、从硬件到软件”的排查顺序,否则很容易原地打转。
5.4 权限被拒绝:chmod 之前先想清楚
“Permission denied”是第一周出现频率最高的英文。新手第一反应是给文件 chmod 777,这其实是危险的习惯。我专门用一个晚上讲了文件权限的三个部分:读、写、执行对文件和对目录的含义完全不同。比如,某文件明明有读权限,但所在的目录没有执行权限,你还是不能访问;反过来,目录可执行但不可读,你能进去却列不出文件名。
第一周我们只需要掌握最基础的两招:用 chmod 的符号模式给当前用户加执行权限,想清楚是谁要访问这个文件。不要看见失败就无脑 777。很多时候 Permission denied 是因为你想写的文件本来就属于 root,此时正确解法是 sudo,而不是改权限。顺便说一句,第一周统一用 sudo,后续学到用户和权限模型时再慢慢放开,这个过渡相对自然。
5.5 第一周问题速查表
| 症状 | 优先排查思路 | 常用命令 |
|---|---|---|
| apt update 报错/签名失效 | 系统时间和源配置 | timedatectl、apt update |
| 系统卡顿、服务异常 | 磁盘空间和内存使用 | df -h、free -h、top |
| 虚拟机连不上网 | 虚拟网络模式、宿主机网络 | ip addr、dhclient |
| 无法写入文件/无法执行 | 权限、所有者、sudo | ls -l、id、sudo |
| 命令找不到 | PATH 或是否安装软件 | which、command -v |
这张表是我让每个新人存进本地笔记的第一份排查索引。不是让他们背下来,而是遇到问题先按“从外层到内层”的顺序猜一轮,别一上来就乱试。
6. 复盘与后续:第一周过后,我们修正了什么
6.1 下周学习主线:Shell 脚本与日常服务
第一周最后半天我们做了一次简单的复盘,把每个人的周报过了一遍,发现不少人的问题还集中在“写不出周报”,不是没做,而是不知道怎么写清楚。所以第二周的学习主线定成 Shell 脚本,因为脚本能让每个操作都有输入和输出,比敲单个命令更容易沉淀成文档。我们计划让每个人都写一个“一键初始化环境”的脚本,把安装软件、创建目录、配置环境变量这类操作用变量和函数组织起来。有了这个脚本,他们第一周手动做的事就能被自动化,成就感会很直接。
6.2 小组组织形式上的三个调整
第一周下来,我们根据实际情况做了三个小调整,都是非常细节的东西:
- 每周三加一次半小时的线上答疑,而不是全部堆到周五。周报提交的时间仍然是周五,但周三答疑可以把问题提前消化一部分。
- 每两个人结成一个“互相检查”的搭档,提交前先让对方看一眼,避免过于简单或过于流水账的周报直接进仓库。
- 把环境搭建文档更新到仓库的 docs 目录里。当时有新人没参加第一次线下活动,完全靠自己看文档装系统,遇到的坑和文档里写的情况不一样。因此文档必须持续补充“别人踩过的变体问题”,而不是写一遍就束之高阁。
6.3 给想办 Linux 学习小组的人几条实在建议
如果你也想组织一个类似的小组,我从这一周的经验里提炼出几条建议,供参考:
- 起步别贪大:第一周只做“环境能用、命令能跑、协作能通”三件事,足够折腾一周。
- 把任务做成“可提交的成果”,不要只定“学习内容”。“学完常用命令”没法检查,“统计日志 Top10”才有办法验收。
- 文档一定要跟着走:环境搭建、常见问题、每个人的练习日志,全部进仓库,否则两周后重新开始,一切归零。
- 允许进度不一致:有人一周练完基础命令,有人还在装系统,这很正常。重点是要在周报里真实记录卡点,而不是伪装成“一切都好”。
- 不要只靠热情维持:热情一定会消退,靠得住的排名、结构和习惯。前两周哪怕生硬一点,也要把流程固定下来。
这几条单独看都很朴素,但真正做到的小组并不多。第一周我们最大收获不是技术本身,而是“流程真的能跑起来”:环境有人装完、命令有人练完、周报有人按时提交。哪怕只有六个人,这种真实的正反馈比什么动员都有效。
我个人在实际操作中的体会是,Linux 小组最怕的不是“没人愿意学”,而是“带的人太想一次教会”。第一周最重要的不是让每个人把命令背熟,而是让他们每个人都能在终端里完成一次完整的、由自己控制的操作。哪怕只是从 ls 开始,然后 cd 到一个目录,再 cat 一个文件,这个闭环一旦建立,后面所有内容都会顺起来。如果你也准备搞类似的小组,别急着把计划排满,先让每个人都敢在终端里敲下第一条命令,你就已经赢了一半。