ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

deepin 25 实战:Linux 技术视频制作与 11 则核心命令教程

deepin 25 实战:Linux 技术视频制作与 11 则核心命令教程

我最近花了大概两周时间,在 deepin 25 上做完了一套 Linux 技术视频系列,一共 11 则。做这套视频的初衷其实很朴素:身边不少刚接触 Linux 的朋友,不是缺资料,而是缺一份能照着敲、能复现、还能讲清楚“为什么”的入门内容。所以我把选题范围收窄到日常使用和排查里最常出现的操作,每次只讲透一个点,用真实终端演示完整过程。

这套视频不是在念 PPT,而是命令怎么敲、服务怎么写、日志怎么看、报错怎么查,都在 deepin 25 的桌面环境里跑了一遍。下面这篇文章,主要想把背后的选题思路、录制工具链、逐条导读和制作过程中的共性坑整理出来。如果你也想在 Linux 上做类似的视频教程,或者单纯想系统过一遍这些技术点,可以直接照着我这套流程走。

1. 为什么我选择在 deepin 25 上录制这套 Linux 技术视频

很多人都以为选录制平台无所谓,随便一个能跑终端的系统都行。实际上差别很大。我一开始同时装了另外两款发行版,一款是滚动更新节奏很快的系统,另一款是极度精简的服务器版,最后都放弃了,把 deepin 25 留在主力机上完成了全部 11 则视频的录制。

deepin 25 在我这台设备上做到了开箱即用:网卡、显卡、声卡都不用额外折腾,录屏需要的 OBS、剪辑用的 Kdenlive、处理人声的 Audacity,都能从官方软件仓库稳定安装。做技术视频最怕的就是,观众跟着你操作时,第一步不是敲命令而是装驱动、补依赖。平台越“干净”,反而越容易让教程变成环境搭建教程。deepin 25 作为桌面发行版,默认带齐了日常办公和开发需要的软件包,很多依赖问题天然就不存在了。

第二个原因是版本节奏稳定。滚动更新的发行版适合尝鲜,但不适合录教程,录完一周后命令输出长不一样了,观众照做会对不上。deepin 25 有一套相对收敛的版本节奏,录制期间系统组件基本保持不变,这样我录出来的 systemd 服务写法、日志格式、网络命令输出,过段时间依然能复现。

1.1 稳定可复现的演示环境,是教程的生命线

录制技术视频最怕环境不一致。我早期做过几期内容,用的是精简系统,录到一半发现缺依赖,于是要现场安装依赖。安装命令本身没有错,但观众并不知道我的系统里缺什么,也不知道为什么需要装,最后得到的反馈大多是“我的报错跟你不一样”。

这次我提前把 deepin 25 的环境固定下来,写清每一则视频用到的软件版本范围。演示时我不再现场装依赖,所有命令录之前都在同一台机器上跑过至少两遍。这样讲出来的东西是可复现的实验,而不是运气好才能通过的脚本。观众如果在相同环境里操作,结果应该和视频里完全一致。

1.2 从 30 个候选主题里筛出 11 则,我的判断标准

最初备选主题列了 30 个,从内核编译到桌面美化都有。最终剩下 11 则,主要依赖三条筛选标准:演示过程是否直观、观众能否在自己机器上照做、单个知识点能否在 10 分钟左右讲完。

候选主题是否保留原因
终端效率工具保留高频、演示直观、一次一个点
find/rg/fd 文件搜索保留几乎天天用,踩坑多
管道与重定向保留理解“组合命令”的敲门砖
systemd 服务管理保留服务起不来是高频问题
定时任务与备份保留能立刻解决实际问题
磁盘空间排查保留df/du/lsblk 是必会命令
快照与回滚保留和数据安全强相关
容器入门保留现在很多项目都有容器交付
网络排查保留命令不多,效果直观
性能异常定位保留培养排查思路
桌面配置与 dotfiles保留贴近 deepin 25 的实际使用
内核模块编译淘汰步骤长、依赖内核头文件、观众难复现
桌面特效美化淘汰主观性强、受显卡影响大
深入网络协议细节淘汰偏理论,演示感弱

这些被淘汰的选题不是没有价值,只是不适合短平快的视频教程。内核编译更适合写成深度图文,网络协议更适合配合抓包软件做长专题。做系列内容要克制,一期的目标不是讲得多,而是让观众看完能立刻用上。

1.3 这套视频到底适合谁看

我默认的观众画像是两类人。一类是从 Windows 或 macOS 转过来,刚把 deepin 25 装好,想知道终端到底该怎么开始用;另一类是自己已经会 cd、ls、mkdir 了,但遇到服务起不来、磁盘满了、网不通就完全没思路。两类人都适合看这套视频。

我在编排时尽量做到“零基础能跟、有基础有收获”。比如讲 systemd 服务,我不会先背概念,而是直接写一个最简服务单元,让它跑起来,再故意让它启动失败,一步步看日志。观众跟着做一遍,比听十分钟理论有效得多。

2. 在 deepin 25 上搭一套可复用的录屏剪辑流水线

确定平台后,我就开始折腾录屏和剪辑工具链。整套流程全部跑在 deepin 25 里,没有用到任何外部硬件编码设备。对于经常做 Linux 教程的人来说,这套方法有一个最大的好处:录完一期,下一期只需要换演示脚本和视频内容,工程配置完全复用。

2.1 录屏工具与参数:OBS 加 MKV 中间格式

录屏我选择 OBS,参数固定为 1920×1080、30fps,视频编码 x264,码率不用 VBR 拉满,crf 控制在 18 到 20 之间。需要注意的是,我不会直接录成 MP4,而是录制为 MKV 容器。

MKV 最大的优势是抗崩溃。录制过程中如果 OBS 因为某些原因出错退出,MKV 里已经写好的片段不会丢,MP4 则很容易变成“文件损坏”。我输出的文件名统一带日期和集数,比如video-04-systemd.mkv,方便后续剪辑时对号入座。人声单独用 Audacity 录成 48kHz 的 WAV,不和画面轨迹纠缠在一起,后期降噪会从容很多。

2.2 音频降噪、字幕与最终压制

人声的后期处理,我的习惯是:先截取视频里 2 秒左右的无人声环境噪声,在 Audacity 里做一次 noise profile,再对全轨做降噪,降噪幅度控制在 12 到 18dB。低于 12dB,风扇和空调底噪还在;超过 18dB,人声会发闷,听起来像隔着一层被子。

剪辑使用 Kdenlive,字幕先在文稿里写好,再按句子拆进字幕轨道。导出最终 MP4 时,我用 ffmpeg 把画面和人声合成,并按平台需求写入元信息:

ffmpeg -i video-04.mkv -i voice-04.wav \ -map 0:v -map 1:a \ -c:v libx264 -crf 20 -preset slow \ -c:a aac -b:a 160k \ -movflags +faststart \ final-04.mp4 ffmpeg -i final-04.mp4 -map 0 -c copy \ -metadata title="Linux技术视频 04 - systemd服务管理" \ -metadata comment="deepin 25 平台制作" \ final-04-tagged.mp4

如果系统里的 ffmpeg 缺少 libx264 库,可以先用软件包管理器补装,或者把输出编码换成兼容性更好的 libx265。不过我最终保留 H.264 MP4,主要是为了在绝大多数播放器和视频平台上兼容性最好。

2.3 录制过程中最容易翻车的三个地方

第一是 Wayland 与 X11 会话下的窗口采集差异。deepin 25 可以选择不同显示协议,OBS 在 X11 会话下抓窗口最稳定,能直接选中终端窗口。切到 Wayland 会话后,窗口采集要经过桌面门户协议,偶尔会有窗口列表不出现或画面黑屏的情况。我最终为了省事,全套视频都在 X11 会话下录制。

第二是黑屏问题。即便在 X11 下,某些启用了 GPU 加速的应用也可能在窗口采集里显示为黑块。遇到这种情况,要么临时把应用切到软件渲染,要么改用 OBS 的显示采集再裁剪。我在录制前会先测半小时,确保所有要演示的窗口都能正常捕获,不能录到一半才发现画面黑屏。

第三是终端的可读性。笔记本屏幕上的终端默认字号太小,导出压缩后很难看清。我把终端字体调到 16 到 18pt,窗口固定为 120×30 字符左右,光标放大到默认两倍,并且把快捷键提示放在画面下方,不遮住命令区域。这样观众即使暂停看细节,也不会满屏马赛克。

3. 11 则视频逐条导读:每个主题背后的技术要点

下面把这 11 则视频按关联度分成四组,逐条说明讲了什么、为什么选中它、以及里面我特别强调的坑。这部分内容不是简单列目录,而是把每则视频里我认为最重要的“硬核点”拿出来,方便你在看视频前先建立框架。

3.1 终端与文件:视频 1 到 3,建立命令行手感

视频 1:别名、历史与提示符——把终端用成自己的工具。这一则从最基础的~/.bashrc改起,介绍别名、Ctrl+R 搜索历史、fzf 模糊查找和自定义命令提示符。很多人改完配置文件后忘了执行source ~/.bashrc,或者把 PS1 里的转义字符写错,导致终端输出了大段乱码。我在视频里给了一个最小可用的 PS1 模板:PS1='\u@\h:\w\$ ',并且演示了echo $PS1查看当前值,避免观众靠猜来排错。

视频 2:find、rg 与 fd——找文件是 Linux 使用频率最高的动作之一。核心是 find 的基础条件组合,-name、-mtime、-size,以及配合-exec和xargs的安全姿势。最大的坑是文件名里的空格和换行:直接写find . -type f | xargs ls,一个含空格的文件名会被拆成两个参数,导致误操作。正确做法是find . -type f -print0 | xargs -0 ls。视频里我还对比了 rg 和 fd,它们上手更简单,输出更人性化,但对老命令的掌握仍然有必要。

视频 3:管道与重定向——用几个小命令拼出完整任务。管道是 Linux 的审美核心。我以grep "ERROR" server.log | wc -l这类统计日志的场景切入,重点讲解 stdout 和 stderr 的区别。很多人在命令行里把2>&1写错了位置,却完全意识不到。我在视频里演示了cmd > log 2>&1和cmd 2>&1 > log的差异:前者 stdout 和 stderr 都进文件,后者只有 stderr 进文件,stdout 仍然打印在屏幕上。对刚学重定向的人来说,这是最容易踩但也是最值得弄明白的一个点。

3.2 systemd 与任务自动化:视频 4 到 5,把服务管明白

视频 4:写一个 systemd 服务——从开机自启到日志排查。这则视频从零开始写一个最小服务单元,用 Python 自带的模块在本地跑一个 HTTP 服务,然后把它交给 systemd 管理。服务单元长这样:

[Unit] Description=My demo http server After=network.target [Service] ExecStart=/usr/bin/python3 -m http.server 8080 --directory /srv/demo Restart=on-failure [Install] WantedBy=multi-user.target

写完单元后要执行systemctl daemon-reload,再systemctl enable --now mydemo。这一则最重要的部分是“失败演示”:我故意把 ExecStart 写成一个不存在的路径,然后通过systemctl status mydemo和journalctl -u mydemo -f一层层查日志,找出错误原因。对新手来说,看懂 failed 状态怎么排查,比记住成功配置更重要。

视频 5:定时任务——用 cron 和 systemd timer 做自动备份。很多教程只讲 crontab,但这则视频把 systemd timer 也讲透了。timer 的一个明显优势是可以在错过执行时间后补跑,还能加随机延迟避免多台机器同时备份打爆网络。我给的例子是每天凌晨三点备份数据目录:

[Unit] Description=Backup data every night [Timer] OnCalendar=*-*-* 03:00:00 RandomizedDelaySec=600 Persistent=true [Install] WantedBy=timers.target

备份动作用rsync -av --delete /home/user/data /backup/data完成。视频末尾演示了systemctl list-timers确认定时任务是否生效。这一则内容可以直接套进自己的备份方案,不依赖任何第三方服务。

3.3 磁盘、快照与容器:视频 6 到 8,关注数据安全

视频 6:磁盘空间去哪了——分区、挂载与文件系统。演示顺序是先用lsblk -f看设备和文件系统,再用df -hT看空间使用率,最后用du -sh或 ncdu 定位大目录。视频里我特别强调:不要用/dev/sda这类设备名直接写进/etc/fstab,因为设备名会随插入顺序变化,上一块硬盘还在,下一块硬盘插上后名字可能就乱了。fstab 里应该用UUID=xxxx或 LABEL 引用分区,这样挂载关系才稳定。

视频 7:快照与回滚——给系统上一道保险。Timeshift 是 deepin 这类桌面发行版上非常直觉化的快照工具,它有两种模式:rsync 模式适合传统文件系统,Btrfs 模式依赖文件系统本身的子卷快照。我在视频里演示了 btrfs 快照的基本操作:

sudo btrfs subvolume snapshot / /data/btrfs-snapshots/snapshot-$(date +%F_%H%M)

之后讲解系统损坏时如何从快照恢复,以及快照和定期备份的关系。很多人误以为有了快照就不需要备份,这则视频专门纠正了这个误解:快照防的是误操作和系统更新翻车,备份防的是硬盘损坏和误删文件。

视频 8:容器入门——用 Podman 快速复现一个环境。我选用 Podman 是因为它默认支持 rootless 模式,对桌面用户更友好,而且命令风格和主流容器工具保持一致。视频里演示了拉取镜像、启动容器、进入容器查看进程、停止并移除容器的完整流程:

podman run --rm -d -p 8080:80 --name web nginx:alpine podman exec -it web /bin/sh podman logs -f web podman stop web

我还用一句话区分了容器和虚拟机:虚拟机模拟硬件,隔离的是整个系统;容器共享宿主机内核,隔离的是进程和文件系统视图。这个区别理解了,后面的网络端口、存储卷配置才不会乱。

3.4 网络、性能与桌面:视频 9 到 11,进入真实排障现场

视频 9:网络排查四板斧——ping、ip、ss、tcpdump。遇到“联不上”的问题,先ping看基础通不通,再用ip -br addr看地址,用ss -tulnp查看监听端口。如果这些都没问题,才上抓包工具看真正在传输什么:

ip -br addr ss -tulnp | grep 8080 sudo tcpdump -i lo port 8080 -nn -c 20

tcpdump 需要权限,我强调了两点:抓包数据不要长期保留,生产环境抓包前先确认数据合规;临时需要降权时可以使用-Z选项,让抓包进程以非特权身份运行。这一则的难度比前面高,但网络问题是最容易让人手足无措的,早一点学会看 ss 和 tcpdump,能省大量时间。

视频 10:性能异常时先看哪几个指标。不会分析性能的人通常一上来就抓某个进程,或者干脆重装系统。这则视频给了固定顺序:先看uptime的负载均值,再用vmstat 1看 CPU 和内存曲线的变化,用iostat -xz 1看磁盘 IO。之后才用类似 btop 的工具按 CPU 或内存排序找出嫌疑进程,必要时用strace -p <PID>跟踪系统调用。

我在视频里特意说明,strace 可能带来明显的运行开销,不要一开始就在生产环境对全进程挂上。先用 top 缩小目标,再用 strace 做更细的跟踪,这个顺序才是安全高效的。

视频 11:deepin 25 桌面调优——快捷键、会话与 dotfiles。这一则回到桌面本身。视频里展示了如何在系统设置里自定义常用快捷键,如何在不同会话之间切换以测试录屏兼容性,以及为什么建议把所有点文件交给版本管理工具。用 GNU stow 管理点文件时,把配置仓库放到用户目录再执行stow bash,就能把.bashrc软链接到正确位置:

cd ~/dotfiles && stow bash

重装系统后,拉下仓库、执行一条命令,终端习惯立刻回来。很多桌面用户觉得 Linux 配置麻烦,其实麻烦的从来不是配置本身,而是没有一套可持续的配置管理方式。

4. 制作这套视频时的三个共性误区与我的强制审视清单

11 则视频录完后,我发现有几个问题几乎贯穿全程,也是做 Linux 教程最容易犯的通病。把这些误区写出来,比单纯列视频目录更有用。

4.1 只演示成功路径,会让观众误以为命令一次就能成功

真实世界里,命令第一次就可能拼错路径、缺少参数、权限不够。如果教程只展示成功输出,观众照做失败时会怀疑自己操作有问题,而不是认识到失败本身就是学习过程。

我给自己定的规矩是:每一条视频必须要有一段失败演示。比如 systemd 服务启动失败时,屏幕上显示 failed,然后我用 journalctl 逐步查看日志;再比如容器端口被占用时,我用 ss 找出谁占了端口,再决定停掉旧容器还是换端口。失败演示看起来多花了三分钟,但对真正解决问题的观众来说,这三分钟才是黄金内容。

4.2 “看得清”是第一需求,其次才是讲得深

Linux 教学视频最大的敌人从来不是讲得不够深入,而是观众根本看不清终端输出。我的调整手段是:终端字号拉到 18pt,窗口宽度固定,光标放大;输出结果在画面上停留至少 3 秒,给观众留出暂停和抄录的时间;字幕位置放在画面下方三分之一,不盖住命令区域。

回放检查的时候,我会专门用窗口缩放把画面调到 50% 大小,看关键命令的输出是否仍然可读。如果 50% 缩放后字糊成一团,就必须重新录制或调整字号。经验是:宁可多花时间调整画面,也不要事后被无数条“看不清”淹没。

4.3 “能复现”比“炫技”更重要,配套文档不能省

观众暂停视频抄命令,是 Linux 教程里最普遍的动作。与其让他们抄错,不如直接给一份可复制的命令清单。每期视频我都在配套文档里放一个 .md 文件,内容包括所有命令、参数含义、常见报错和回滚方法。演示脚本则单独放在 scripts 目录,方便有基础的人直接跑通整个流程。

这套做法其实拉高了我的制作成本,但也让视频的生命周期变长了。半年后有人看到视频,还能顺着配套文档完成环境复现,这才是可沉淀的内容。

5. 这套视频做完之后,deepin 25 工作台还留下了什么

11 则视频做完,闲置的不只有素材文件,还有一套已经跑通的经验。我给这套工作流整理了一个固定的目录结构,下次再做 Linux 技术视频,直接把旧工程模板复制一份就能开工:

linux-video-11/ ├── scenes/ # OBS 场景配置 ├── screen/ # MKV 原始录制文件 ├── audio/ # 录音 WAV 与 Audacity 工程 ├── clips/ # Kdenlive 剪辑工程 ├── scripts/ # 每期演示脚本 ├── docs/ # 每期配套命令文档 └── final/ # 最终压制 MP4

我自己的使用体会是,把文字稿、命令文档、演示脚本和原始录屏放在同一个工程目录里,会让后期修改、补录和重做变得非常轻松。好记性不如烂笔头,烂笔头不如一个能直接执行的脚本。

录制期间沉淀的几份速查表我也保留了下来:systemd 常用子命令、网络端口排查流程、rsync 参数记忆表、btrfs 快照操作清单。以后重装系统或换设备,我第一个恢复的不是桌面美化,而是这些文档和脚本。它们比任何“神器”都重要。

最后再分享一点给想做类似内容的朋友的建议。第一,先录一期 3 分钟的测试视频,专门校准声音和窗口布局,别一上来就录正式内容。第二,一期只讲一个点,宁可拆成三期,也不要挤在一期里变成流水账。第三,讲解时先说“我在做什么”,再说“为什么这么做”,最后才演示命令,观众跟起来不会慌。这条系列做完后,deepin 25 对我来说已经不只是一个录制平台,它成了我日常查资料、写脚本、跑容器的默认工作台。你也完全可以从自己最常用的三五个命令开始,录完自己回看一遍,再迭代下一期。这是最稳的起步方式。

RELATED READING

延伸阅读

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