Linux 学习路线指南

本贴最后更新于 2052 天前,其中的信息可能已经时移世易

很多同学接触 Linux 不多,对 Linux 平台的开发更是一无所知。而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机 IT 行业从业人员,掌握 Linux 是一种很重要的谋生资源与手段。下来我将会结合自己的几年的个人开发经验,及对 Linux,更是类 UNIX 系统,及开源软件文化,谈谈 Linux 的学习方法与学习中应该注意的一些事。

就如同刚才说的,很多同学以前可能连 Linux 是什么都不知道,对 UNIX 更是一无所知。所以我们从最基础的讲起,对于 Linux 及 UNIX 的历史我们不做多谈,直接进入入门的学习。

Linux 入门是很简单的,问题是你是否有耐心,是否爱折腾,是否不排斥重装一类的大修。没折腾可以说是学不好 Linux 的,鸟哥说过,要真正了解 Linux 的分区机制,对 LVM 使用相当熟练,没有 20 次以上的 Linux 装机经验是积累不起来的,所以一定不要怕折腾。

由于大家之前都使用 Windows,所以我也尽可能照顾这些“菜鸟”。我的推荐,如果你第一次接触 Linux,那么首先在虚拟机中尝试它。虚拟机我推荐 Virtual Box,我并不主张使用 VM,原因是 VM 是闭源的,并且是收费的,我不希望推动盗版。当然如果你的 Money 足够多,可以尝试 VM,但我要说的是即使是 VM,不一定就一定好。付费的软件不一定好。首先,Virtual Box 很小巧,Windows 平台下安装包在 80MB 左右,而 VM 动辄 600MB,虽然功能强大,但资源消耗也多,何况你的需求 Virtual Box 完全能够满足。所以,还是自己选。如何使用虚拟机,是你的事,这个我不教你,因为很简单,不会的话 Google 或 Baidu 都可以,英文好的可以直接看官方文档。

现在介绍 Linux 发行版的知识。正如你所见,Linux 发行版并非 Linux,Linux 仅是指操作系统的内核,作为科班出生的你不要让我解释,我也没时间。我推荐的发行版如下:

  • UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新应用,相对来说不太喜欢折腾的开发者。
  • Debian,相对 UBUNTU 难很多的发行版,突出特点是稳定与容易使用的包管理系统,缺点是企业支持不足,为社区开发驱动。
  • Arch,追逐时尚的开发者的首选,优点是包更新相当快,无缝升级,一次安装基本可以一直运作下去,没有如 UBUNTU 那样的版本概念,说的专业点叫滚动升级,保持你的系统一定是最新的。缺点显然易见,不稳定。同时安装配置相对 Debian 再麻烦点。
  • Gentoo,相对 Arch 再难点,考验使用者的综合水平,从系统安装到微调,内核编译都亲历亲为,是高手及黑客显示自己技术手段,按需配置符合自己要求的系统的首选。
  • Slackware 与 Gentoo 类似。
  • CentOS,社区维护的 RedHat 的复刻版本,完全使用 RedHat 的源码重新编译生成,与 RedHat 的兼容性在理论上来说是最好的。如果你专注于 Linux 服务器,如网络管理,架站,那么 CentOS 是你的选择。
  • LFS,终极黑客显摆工具,完全从源代码安装,编译系统。安装前你得到的只有一份文档,你要做的就是照文档你的说明,一步步,一条条命令,一个个软件包的去构建你的 Linux,完全由你自己控制,想要什么就是什么。如果你做出了 LFS,证明你的 Linux 功底已经相当不错,如果你能拿 LFS 文档活学活用,再将 Linux 从源代码开始移植到嵌入式系统,我敢说中国的企业你可以混的很好。

你得挑一个适合你的系统,然后在虚拟机安装它,开始使用它。如果你想快速学会 Linux,我有一个建议就是忘记图形界面,不要想图形界面能不能提供你问题的答案,而是满世界的去找,去问,如何用命令行解决你的问题。在这个过程中,你最好能将 Linux 的命令掌握的不错,起码常用的命令得知道,同时建立了自己的知识库,里面是你积累的各项知识。

再下个阶段,你需要学习的是 Linux 平台的 C/C++ 开发,同时还有 Bash 脚本编程,如果你对 Java 兴趣很深还有 Java。同样,建议你抛弃掉图形界面的 IDE,从 VIM 开始,为什么是 VIM,而不是 Emacs,我无意挑起编辑器大战,但我觉得 VIM 适合初学者,适合手比较笨,脑袋比较慢的开发者。Emacs 的键位太多,太复杂,我很畏惧。然后是 GCC,Make,Eclipse(Java,C++ 或者)。虽然将 C++ 列在了 Eclipse 中,但我并不推荐用 IDE 开发 C++,因为这不是 Linux 的文化,容易让你忽略一些你应该注意的问题。IDE 让你变懒,懒得跟猪一样。如果你对程序调试,测试工作很感兴趣,GDB 也得学的很好,如果不是 GDB 也是必修课。这是开发的第一步,注意我并没有提过一句 Linux 系统 API 的内容,这个阶段也不要关心这个。你要做的就是积累经验,在 Linux 平台的开发经验。我推荐的书如下:C 语言程序设计,谭浩强的也可以。C 语言,白皮书当然更好。C++ 推荐 C++ Primer Plus,Java 我不喜欢,就不推荐了。工具方面推荐 VIM 的官方手册,GCC 中文文档,GDB 中文文档,GNU 开源软件开发指导(电子书),汇编语言程序设计(让你对库,链接,内嵌汇编,编译器优化选项有初步了解,不必深度)。

如果你这个阶段过不了就不必往下做了,这是底线,最基础的基础,否则离开,不要霍霍 Linux 开发。不专业的 Linux 开发者作出的程序是与 Linux 文化或 UNIX 文化相背的,程序是走不远的,不可能像 Bash,VIM 这些神品一样。所以做不好干脆离开。

接下来进入 Linux 系统编程,不二选择,APUE,UNIX 环境高级编程,一遍一遍的看,看 10 遍都嫌少,如果你可以在大学将这本书翻烂,里面的内容都实践过,有作品,你口头表达能力够强,你可以在面试时说服所有的考官。(可能有点夸张,但 APUE 绝对是圣经一般的读物,即使是 Windows 程序员也从其中汲取养分,Google 创始人的案头书籍,扎尔伯克的床头读物。)

这本书看完后你会对 Linux 系统编程有相当的了解,知道 Linux 与 Windows 平台间开发的差异在哪?它们的优缺点在哪?我的总结如下:做 Windows 平台开发,很苦,微软的系统 API 总在扩容,想使用最新潮,最高效的功能,最适合当前流行系统的功能你必须时刻学习。Linux 不是,Linux 系统的核心 API 就 100 来个,记忆力好完全可以背下来。而且经久不变,为什么不变,因为要同 UNIX 兼容,符合 POSIX 标准。所以 Linux 平台的开发大多是专注于底层的或服务器编程。这是其优点,当然图形是 Linux 的软肋,但我站在一个开发者的角度,我无所谓,因为命令行我也可以适应,如果有更好的图形界面我就当作恩赐吧。另外,Windows 闭源,系统做了什么你更本不知道,永远被微软牵着鼻子跑,想想如果微软说 Win8 不支持 QQ,那腾讯不得哭死。而 Linux 完全开源,你不喜欢,可以自己改,只要你技术够。另外,Windows 虽然使用的人多,但使用场合单一,专注与桌面。而 Linux 在各个方面都有发展,尤其在云计算,服务器软件,嵌入式领域,企业级应用上有广大前景,而且兼容性一流,由于支持 POSIX 可以无缝的运行在 UNIX 系统之上,不管是苹果的 Mac 还是 IBM 的 AS400 系列,都是完全支持的。另外,Linux 的开发环境支持也绝对是一流的,不管是 C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就连 C#也支持。而微软除 Visual Stdio 套件以外,都不怎么友好,不是吗?

如果你看完 APUE 的感触有很多,希望验证你的某些想法或经验,推荐 UNIX 程序设计艺术,世界顶级黑客将同你分享他的看法。

现在是时候做分流了。 大体上我分为四个方向:网络,图形,嵌入式,设备驱动。

如果选择网络,再细分,我对其他的不是他熟悉,只说服务器软件编写及高性能的并发程序编写吧。相对来说这是网络编程中技术含量最高的,也是底层的。需要很多的经验,看很多的书,做很多的项目。

我的看法是以下面的顺序来看书:

  1. APUE 再深读 – 尤其是进程,线程,IPC,套接字
  2. 多核程序设计 - Pthread 一定得吃透了,你很 NB
  3. UNIX 网络编程 – 卷一,卷二
  4. TCP/IP 网络详解 – 卷一 再看上面两本书时就该看了
  5. 5.TCP/IP 网络详解 – 卷二 我觉得看到卷二就差不多了,当然卷三看了更好,努力,争取看了
  6. 6.Lighttpd 源代码 - 这个服务器也很有名了
  7. 7.Nginx 源代码 – 相较于 Apache,Nginx 的源码较少,如果能看个大致,很 NB。看源代码主要是要学习里面的套接字编程及并发控制,想想都激动。如果你有这些本事,可以试着往暴雪投简历,为他们写服务器后台,想一想全球的魔兽都运行在你的服务器软件上。
  8. Linux 内核 TCP/IP 协议栈 – 深入了解 TCP/IP 的实现

如果你还喜欢驱动程序设计,可以看看更底层的协议,如链路层的,写什么路由器,网卡,网络设备的驱动及嵌入式系统软件应该也不成问题了。

当然一般的网络公司,就算百度级别的也该毫不犹豫的雇用你。只是看后面这些书需要时间与经验,所以 35 岁以前办到吧!跳槽到给你未来的地方!

图形方向,我觉得图形方向也是很有前途的,以下几个方面。

  1. Opengl 的工业及游戏开发,国外较成熟。
  2. 影视动画特效,如皮克斯,也是国外较成熟。
  3. GPU 计算技术,可以应用在浏览器网页渲染上,GPU 计算资源利用上,由于开源的原因,有很多的文档程序可以参考。如果能进火狐开发,或 google 做浏览器开发,应该会很好 。

嵌入式方向:嵌入式方向没说的,Linux 很重要。

掌握多个架构,不仅 X86 的,ARM 的,单片机什么的也必须得懂。硬件不懂我预见你会死在半路上,我也想走嵌入式方向,但我觉得就学校教授嵌入式的方法,我连学电子的那帮学生都竞争不过。奉劝大家,一定得懂硬件再去做,如果走到嵌入式应用开发,只能祝你好运,不要碰上像 Nokia,Hp 这样的公司,否则你会很惨的。

驱动程序设计:软件开发周期是很长的,硬件不同,很快。每个月诞生那么多的新硬件,如何让他们在 Linux 上工作起来,这是你的工作。由于 Linux 的兼容性很好,如果不是太低层的驱动,基本 C 语言就可以搞定,系统架构的影响不大,因为有系统支持,你可能做些许更改就可以在 ARM 上使用 PC 的硬件了,所以做硬件驱动开发不像嵌入式,对硬件知识的要求很高。可以从事的方向也很多,如家电啊,特别是如索尼,日立,希捷,富士康这样的厂子,很稀缺的。

  1. LDD – Linux 驱动程序设计与内核编程的基础读物
  2. 深入理解 Linux 内核 – 进阶的
  3. Linux 源代码 – 永无止境的

当然你还的看个方面的书,如网络啊什么的。

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    914 引用 • 930 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 381 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 215 回帖 • 160 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    362 引用 • 1212 回帖 • 580 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 21 关注
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖 • 2 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 249 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    18150 引用 • 66978 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 126 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 45 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 552 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    14 引用 • 7 回帖
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    37 引用 • 24 回帖 • 1 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 594 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 284 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 498 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 178 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖 • 1 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 223 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 248 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 402 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 427 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 33 关注