为什么要掌握 Linux
熟悉 Linux 环境有几个显而易见的好处:
- 加深对操作系统/IO处理/网络编程的理解,对编程和程序架构都有非常大的助力;
- 让 Linux 成为你强力的工作助手,提升工作效率和解决问题的能力;
- 熟悉 Linux 也是很多软件岗位的必备技能,更是某些岗位的加分项目;
一旦选择成为软件工程师,Linux 和命令行环境都会伴随着你的职业生涯,甚至比职业生涯还长久,你会喜欢上这些的。
如果你在这个方面走的更深入一些,有良好的系统编程能力,职业选择亦会宽广许多。
从什么地方开始
亲自动手装一台 Linux 个人开发机器是最佳的开始,不建议你在个人办公设备或者虚拟机中尝试。这个过程痛苦和乐趣并存,并将学到比你想象中要多的知识,最关键的是不会再恐惧。
如果你所在的处境网络状况非常不错,可以考虑从云服务商采购基础的入门云服务器(放在网上的虚拟计算机,通过 ssh 远程连接)来学习,对学生党来说,攒一台树莓派或开发版来折腾更好。
安装 ArchLinux 作为个人开发环境
ArchLinux 是一个轻量级、灵活、社区维护的 Linux® 发行版本,它足够简单且与时俱进,商业诉求和历史包袱很少,社区文档非常清晰(中文翻译覆盖率高),是非常好的学习资料。
第一步的目标很简单,就是在你的设备安装 ArchLinux 操作系统,这个过程需要搞定的事情:

折腾的目标:
- 学会使用镜像安装操作系统,理解基本的计算机硬件知识,磁盘格式/分区规划/启动等等;
- 理解操作系统启动的整个流程:硬件探测、引导加载、内核加载、systemd init 流程等;
- 学习一些非常基础的终端命令和 Shell 基础,至少达到能在命令行操作的程度;
- 了解窗口管理器及桌面环境的发展,自己搞定显卡驱动、选择一个桌面环境进行安装、配置;
- 搞定网络连接,网卡配置、防火墙、DNS,某些情况可以考虑增加网络代理的设置;
- 学习用户与权限的基础概念,用 sudo 创建一个管理员账户,学会使用 ssh 远程登录计算机;
- 学会如何在命令行管理文件,就行用鼠标和界面来操作那样;
- 学会如何进行软件包安装和更新卸载,包括服务的管理;
- 日常维护的操作:错误定位、漏洞修复、数据备份等等;
在你拥有了一个基础的 Linux 环境之后,就可以根据后续的学习计划,自行配置完整的开发环境。
必备的基础知识
📌 新手提示
Linux 终端的基本命令(ls、cp、rm 等等)都是 GNU coreutils 工具包提供的,这个网站是对该工具包的详细介绍,逐一分析其中近100个工具的内部实现。

Decoded: GNU coreutils – MaiZure's Projects
1)命令行文本编辑器 Vim or Emacs
开发者的工作基本都是在文本编辑器下进行的,在命令行下有些编辑器的基础你需要了解一些,并不是说你要掌握所有的编辑器使用,不过我非常建议你在自己的设备上面安装 Vim 和 Emacs,不用看任何教程,花一两个小时熟悉一下这两个编辑器自带的教程是必要的,软件工具层面有非常多的争吵和论战,至于你未来站在那一边,与你自己的喜好和工作环境会有很大关系。
在桌面环境下也有非常不错的免费、强大的编辑器(IDE):
- Sublime Text
- Visual Studio Code
- Atom
- Notepad++ etc.
2) 网络编程 Network Programming
现在在地球上有无数台个人计算机和移动设备,这个设备如何通过网络连接在一起达到资源共享和通信的目的,程序之间的数据如何传输?即使你未来并不会做相关的工作,理解清楚这些理论知识也是必须的。必须要掌握的知识点:
Life and Death of a Linux Process
- 网络分层模型和 TCP&IP 协议栈,应用层协议;
- 套接字编程实践(高级套接字);
- IO 模型 (poll(), select(), signal-driven I/O, epoll);
- 与网络相关的命令和软件工具使用(:netstat and tcpdump);
如果你对网络层及应用层非常感兴趣,可以拓展了解一下:
3)Linux Shell 脚本能力
有一定的 Bash 及 Python 编程能力会让你能解决很多工作中的自动化或者数据处理问题,包括解决问题的方式和途径也会增加不少。
有很多强大的文本处理命令可以在工作过程中遇到了,再逐步扩充学习。
接触到这步,你肯定也会学习不少其他 shell 的使用,比如 zsh,用它来打造称心的终端环境。
进阶知识
1)容器、Docker 与 k8s
不必慌张,这些概念并没有听起来那么吓人,你只需要多花点时间了解一些概念,这些技术也更偏运维和部署发布的环境。
极客时间有个付费课程把这块讲的非常清晰,你可以通过这个课程学习(非广告):
深入剖析Kubernetes容器K8s-极客时间
2)服务器安全和监控
运维方向需要熟悉很多企业级服务的部署和维护(现场环境往往更复杂,集群灾备,混合云等等),以及安全和监控(zibbix、prometheus)领域方向的必备知识。
3)设备驱动开发、嵌入式开发方向
不太熟悉,感兴趣的同学可以自行搜索。
最关键的是: