# 一本免费书，帮 FDE 应对没有图形界面的客户服务器

> William Shotts 的《The Linux Command Line》从零讲起，覆盖管道、进程、Vim 和脚本，是和客户连线排障的基本功。

原文: https://fdetimes.net/zh/books-courses/linux-command-line-shotts-shell-for-fdes/

设想这样一个场景：你通过 SSH 登录客户的虚拟机，排查一条数据管道为什么停了。手边没有 IDE，也没有用惯的 alias，客户那边还有人在电话会议上等着。

这次会话的头几分钟顺不顺，取决于你对 shell 有多熟。William Shotts 的《The Linux Command Line》教的正是这套基本功，PDF 可以在作者的网站 LinuxCommand.org 免费下载。

## 一本写给零基础读者的书

Linux Pro Magazine 的一篇书评指出，这本书不要求读者有任何基础。书评认为，它可能是这一主题下最好读的书，同时在广度和深度上都讲得足够。

出版方的说法更进一步：这是一门讲透 Linux 实际如何运作的完整课程。书中内容包括文件系统导航、管道、进程、Vim 和 shell 脚本。

边界最好一开始就弄清楚。Shotts 明确表示，配套的《Adventures with the Linux Command Line》不是系统管理手册，只是一组有趣主题的合集，比如 Midnight Commander、终端复用器、AWK、Vim 和 SQL。

对前线部署工程师（FDE）来说，看日志、挪文件、跑任务是第一位的；深入的服务器运维以后可以从别的资料里学。

## 合上书后值得保留的四个习惯

**用串联命令代替点鼠标。** *Learning the Shell* 教程开篇就说，图形界面适合很多任务，但不是所有任务。到了客户现场，这一点会变得非常具体。

举个假设的例子：客户反馈磁盘满了。你先敲 `df -h` 找出哪个分区满了，再用 `du -sh /var/log/* | sort -h | tail -5` 列出最大的五个日志目录。两条命令，电话还没挂，答案就有了。

**先预览 shell 会把命令变成什么。** I/O Redirection 和 Expansion 是教程十个章节中的两个，在别人的机器上，这两项都可能酿成代价高昂的失误。要把日志发给同事，`command > output.txt 2>&1` 会把输出和错误写进同一个文件；少了 `2>&1`，你发出去的文件可能恰好缺了报错的那一行。

扩展的风险更大。在客户机器上用通配符执行 `rm` 之前，先用同样的通配符执行 `echo`，看看它会展开成哪些文件。

**要点:** 在别人的服务器上，先预览命令会做什么，再让它真正执行。

**申请 sudo 之前先看文件权限。** Permissions 也是教程的一个章节。在客户的数据目录里遇到“Permission denied”时，先用 `ls -l` 看清文件属于哪个用户和组，再去找客户；问对问题，更能赢得对方 IT 团队的尊重。

**SSH 断开时让进程继续运行。** 导入任务跑到一半、SSH 会话断开时，Job Control 能救你。最稳妥的做法是一开始就让任务脱离会话，比如 `nohup ./import.sh > import.log 2>&1 &`，再用 `tail -f import.log` 跟踪进度。

如果已经在前台启动了，按 Ctrl+Z，输入 `bg`，再输入 `disown`。对于要跑几个小时的任务，开工前先打开 `tmux` 是个好习惯；终端复用器也是《Adventures》里的主题之一。

## 应该按什么顺序读？

刚接触命令行的人，或者习惯在 macOS 和 IDE 里工作的工程师，应该从 *Learning the Shell* 的十个章节开始。在一台干净的虚拟机上把每条命令都亲手敲一遍，不要只看不练。

然后读这本书补足深度，《Adventures》留到最后，等基础命令已经成了条件反射再看。如果你每天都在写 bash 脚本，快速翻一遍即可，只在自己敲键盘仍会犹豫的章节停下来。

至于求职：看 FDE 招聘启事时，留意岗位是否需要在客户的基础设施上工作；如果需要，熟练使用 shell 就值得展示出来。与其在简历上写“精通 Linux”，不如描述一次具体事件：谁的机器、你敲了什么、花了多长时间。

## 你准备好 SSH 登录客户的机器了吗？

先试着回答下面三道题，再看答案，然后在虚拟机上实际跑一遍。

第一题：`command 2>&1 > out.txt` 和 `command > out.txt 2>&1` 有什么区别？答案：shell 从左到右解析重定向。第一种写法中，错误被指向此刻输出所指的地方，也就是屏幕，所以文件里只有输出；只有第二种写法会把两者都收进文件。

第二题：在一个包含 `a.tmp`、`b.tmp` 和 `config.yaml` 的目录里，`echo rm *.tmp` 会打印什么？答案：`rm a.tmp b.tmp`。如果打印出来的那一行里有你不想丢的文件，你就刚刚避免了一次事故。

第三题：一个脚本已经在前台跑了 40 分钟，网络又不稳定。怎样做才能在 SSH 会话断开时不丢掉这个任务？答案：Ctrl+Z、`bg`、`disown`。最常见的错误是条件反射地按下 Ctrl+C，40 分钟的工作就白费了。

如果三道题都能毫不犹豫地答出来，你就具备了这本书承诺的基本功。如果卡住了，就回到教程中对应的章节。

## 下载或购买之前

LinuxCommand.org 上的免费版本是第七版互联网版（Seventh Internet Edition），共 596 页，以 Creative Commons BY-NC-ND 许可发布。No Starch Press 的第三版纸质书共 544 页，ISBN 9781718504523，出版方称其中有近 40 页新内容。

不同格式的发布日期不同：Apple Books 上电子书的日期是 2026 年 2 月 17 日，Penguin Australia 上平装本的日期是 2026 年 3 月 3 日。哪个版本都可以，关键是先在虚拟机上把命令敲熟，再到客户的机器上去敲。

**本周动手试试:**

- 在 LinuxCommand.org 上学完 Learning the Shell 教程的全部十个章节，在一台没有你个人 dotfiles 的干净 Linux 虚拟机上运行每一条命令。
- 不看答案，先回答上面三道自测题，再到虚拟机上验证自己是否答对。
- 改写简历上的一条要点，描述一次你在不属于自己的 Linux 环境中通过 SSH 处理过的事件。

## 信源

- [LinuxCommand.org - The Linux Command Line](https://linuxcommand.org/tlcl.php)

- [The Linux Command Line, 3rd Edition - Penguin Books Australia](https://www.penguin.com.au/books/the-linux-command-line-3rd-edition-9781718504523)

- [The Linux Command Line, 3rd Edition (Apple Books)](https://books.apple.com/fr/book/the-linux-command-line-3rd-edition/id6745158323)

- [LinuxCommand.org - Learning the Shell](https://linuxcommand.org/lc3_learning_the_shell.php)

- [LinuxCommand.org - Adventures with the Linux Command Line](https://linuxcommand.org/lc3_adventures.php)

- [Book Review: The Linux Command Line](https://www.linuxpromagazine.com/index.php/layout/set/print/Online/Features/Book-Review-The-Linux-Command-Line)
