1.1 Linux是什么

1.1.1 Linux是什么?操作系统/应用程序?

Linux 是操作系统,不是应用程序。 严格来说,Linux 指的就是「核心(Kernel)+ 系统调用接口」这两层,上面跑的应用程序都不算 Linux。

  • 核心与硬件关系极强:1991 年 Torvalds 写的最初版核心只能「驱动 386 的所有硬件」,装完就是一台等待指令输入的裸机。
  • 不同硬件架构(如 Intel x86 与 IBM Power CPU)功能函数不同,同一套 OS 无法直接跨平台运行。参考硬件规格修改 OS 代码使其能在另一平台跑,这个动作叫软件移植
  • 经典例题:Windows 能不能装在 Mac 上?2006 年以前 Mac 用 IBM Power CPU → 不行;2006 年后苹果改用 Intel x86 → 硬件架构相同,就”可能”可以了。

💡 Linux 是开源的,代码可以改,所以可移植性是它的天然优势——从超算到路由器到手机都能跑。而 Windows 闭源,只能绑死在 x86 上。“操作系统 = 绑定硬件架构的软件”这个视角,是理解后面所有移植、驱动、嵌入式话题的地基。

1.1.2 Linux之前,Unix的历史

一条时间线看懂 Unix → Linux 的血脉(每个节点都在解决上一个节点的痛点):

年份事件意义
1960sMIT 开发 CTSS 相容分时系统近代 OS 始祖:多个终端机分时共用一台主机
1965Bell + MIT + GE 启动 Multics 计划目标 300+ 终端,太复杂,贝尔 1969 退出
1969Ken Thompson 用汇编在 PDP-7 上写出 Unics 原型趁妻儿探亲,四周写成;初衷竟是想移植游戏”太空旅游”
1973Dennis Ritchie 发明 C 语言,与 Thompson 用 C 重写核心Unix 正式诞生;C 是高阶语言,Unix 从此可移植
1977Berkeley 的 Bill Joy 改出 BSDUnix 最重要分支;Bill Joy 后来创办 Sun
1979AT&T 推出 System V 第七版首次支持 x86 个人计算机;但版权收紧:“不可对学生提供源代码”
1984①谭宁邦教授自写 Minix 教学系统不看 Unix 源码避免版权纠纷;随磁带附源码,但定位教育、不肯加功能
1984②Stallman 发起 GNU 计划、成立 FSF目标”自由的 Unix”;先产出 Emacs、GCC、glibc、Bash
1985GNU 草拟 GPL 授权(copyleft)防止自由软件被拿去做成专利软件
1988XFree86 计划成立X Window System + Free + x86;1994 整合进 Linux 1.0
1991芬兰大学生 Torvalds 在 BBS 发布小核心用 GNU 的 bash/gcc 写成,Linux 登场

Thompson 文件系统的两个概念直接塑造了 Linux 哲学:

  1. 所有的程序或系统设备都是文件
  2. 每个程序只做一件事,且有效完成目标

💡 纯种 Unix 只有 System V 和 BSD 两套。而 1979 年那纸”不给学生看源码”的禁令是整个故事的转折点——没有它就没有 Minix,没有 Minix 就没有 Linux。GNU 有了全套工具却难产核心(hurd 太严谨一直跳票),Torvalds 有核心却没工具,两者一拍即合。所以 Stallman 坚持叫 GNU/Linux 不是没道理的。

1.1.3 关于GNU计划、自由软件与开放源代码

Free 的真谛“free speech, not free beer” ——自由软件的 free 指自由权力,不是免费。使用者可以自由地:执行、复制、再发行、学习、修改与强化软件。

GPL 授权的规则

可以不可以
取得软件与源代码修改授权(GPL 软件改完还必须是 GPL——传染性)
自由复制单纯贩卖软件本身
修改源码适应自己需求
再发行修改版
(应该)回馈社群
  • 自由软件的商业模式 = 卖服务(售后、手册、咨询、升级),不是卖软件。Red Hat 们就是这样活的,软件本体网站照样能下载。
  • GPL 对作者的好处:全世界帮你查代码 → 安全性佳、性能佳、除错快、贡献的代码永远留名。
  • 版本现况:已有 GPLv3,但用得最广的还是 GPLv2(Linux 核心就是 GPLv2)。

Open Source(开放源代码):1998 年 OSI(开放源代码促进会)提出,为了消除 free 一词的歧义、让商业公司放心投入。要求:公布源码可修改、允许再散布与衍生作品、不可限制特定人群/领域/产品使用、无排他条款。

  • GPL vs 宽松开源授权的核心差别:GPL 有传染性(用了 GPL 代码,整个软件必须 GPL);BSD / Apache / MIT 等允许衍生软件用不同授权发布,甚至闭源商用——这是商业公司拥抱它们的原因。
  • 选授权的思路:允许商业闭源用 → BSD 系;希望保持自由 → GPLv2。

容易混淆的概念

名词含义陷阱
Close source专属软件,只给二进制有专人维护但灵活度差,漏洞修复慢
Freeware免费软件 ≠ 自由软件不一定开源;有些借免费之名窃取用户数据
Shareware共享软件试用期后要付费

💡 四个词一句话区分:Free Software 讲自由(开源+可改+传染),Open Source 讲开发模式(开源但授权可宽松),Freeware 只是不要钱(可能闭源),Shareware 是先尝后买。日常口语”免费软件”混用这四者,但授权差异天壤之别。

1.2 Torvalds的Linux发展

1.2.1 与Minix之间

  • Torvalds(1969 年生)外祖父是赫尔辛基大学统计学家,从小玩微计算机、接触汇编语言
  • 1988 年入赫尔辛基大学计算机系,全校只有一台 Unix 主机、16 个终端机,排队等到崩溃 →“我何不自己搞一部 Unix 来玩?”
  • 买了 386 装 Minix,靠随附源码学到大量核心设计概念。

1.2.2 对386硬件的多任务测试

多任务原理:CPU 一个时间点只能跑一个程序,靠在程序间高速切换(1GHz 的 CPU 一秒可切换百万次)制造”同时运行”的错觉。

  • 切换本身也耗 CPU 时间——这就是为什么同时开两个文件比一个一个开还慢,也是多核 CPU 和服务器多 CPU 的存在理由。
  • 386 大幅改善了 x86 孱弱的多任务能力,Torvalds 贷款买了一台。
  • 经典实验:写三个小程序——一个狂输出 A、一个狂输出 B、一个负责切换。同时执行看到屏幕打出 ABABAB…… → 多任务测试成功!

💡 书里的记者会比喻很传神:CPU 是主持人,程序是举手的记者,每人限时发言(CPU 时间片),超时就丢回队列等下一轮。整个进程调度的本质就这一句话。

1.2.3 初次释出Linux 0.02

  • Minix 定位教育、谭宁邦拒绝加功能 → 工程师们欲求不满 → Torvalds 决定自己写。
  • 开发工具全靠 GNU:bash 工作环境 + gcc 编译器
  • 1991 年 BBS 贴文原话:“just a hobby, won’t be big and professional like gnu”(只是个爱好,不会像 GNU 那么大那么专业)——史上最强 flag。
  • 名字由来:他上传核心的 FTP 目录叫 Linux,第一版编号 0.02
  • 关键决策:Unix 软件在 Linux 上跑不动时,他选择修改 Linux 去符合规范而不是修改软件 → 遵循 POSIX 标准(IEEE 制定的可携式操作系统接口,规范核心与应用程序之间的接口)。

💡 POSIX 是 Linux 起步就”体质优良”的核心原因:只要核心按 POSIX 写,Unix 世界几十年积累的软件几乎无痛移植过来。Linux 赢在没有从零建生态,而是直接继承了 Unix 生态。

1.2.4 Linux 的发展:虚拟团队的产生

三个阶段:

  1. 单人维护:核心放 FTP,用户回报问题,Torvalds 快速修。
  2. 骇客志工加入:“这硬件我有,驱动我来写”——开源让志工能跟随架构写出相容代码。Torvalds 的务实哲学:先求有且能跑,再求改良(用户要虚拟内存,不到一周新版就有了)。
  3. 分层负责:功能太多后,Alan Cox、Stephen Tweedie 等副手先测试筛选志工的补丁,Torvalds 只做最终整并。

配套演化:

  • 模块化:功能独立于核心外、需要时才载入(可理解为”驱动程序”)——换个显卡不必重装系统。
  • 虚拟团队素未谋面、散布全球,为传输数据成立了 kernel.org
  • 里程碑:1994 年 1.0 版(整合 X Window)→ 1996 年 2.0 → 2011 年 3.0 → 2015 年 4.0。
  • 吉祥物企鹅(Tux):因为 Torvalds 小时候在动物园被企鹅咬过一口,念念不忘 😄
  • 1994 年后被移植到各种硬件,如今树莓派、Android 手机等 ARM 设备大多跑的都是 Linux 核心。

1.2.5 Linux的核心版本

版本号格式:3.10.0-123.el7.x86_64 = 主版本.次版本.释出版本-修改版本

  • 2.6.x 以前:奇偶数规则——主、次版本奇数 = 开发中版(如 2.5.xx),偶数 = 稳定版(如 2.6.xx)。
  • 3.0 起废除奇偶规则,改为**主线版本(MainLine)**机制:约 2~3 个月推一个新主线(3.9 → 3.10)。旧版本两种归宿:
    • EOL(End of Life):停止维护
    • Longterm 长期维护版:持续修 bug(如 3.10)——拿 Linux 做产品要选这种
  • 查自己的核心版本:uname -r,对照 kernel.org/releases.html 判断是否长期版。
  • 重要观念:核心版本 ≠ distribution 版本。“我的 Linux 是 7.x 版”是错误说法——那是 CentOS 的版本;核心版本当时最新才 4.0。发问时要说”我用 CentOS 7.x”。

1.2.6 Linux distributions

Linux distribution = Linux Kernel + Softwares + Tools + 可完整安装程序。中文叫”可完整安装套件/发布商套件”——解决”核心是骇客写的,普通人装不起来”的问题。

各家 distro 大同小异,因为:

  • 核心都来自 kernel.org
  • 选用的软件重复度极高(Apache、Postfix、Samba……)
  • 都遵守 LSB(Linux Standard Base)标准与 FHS(文件系统层级标准)

真正的差异在套件管理方式,两大阵营:

RPM 系DPKG 系其他
商业公司RHEL(Red Hat)、SuSEUbuntu(Canonical)
社群单位Fedora、CentOS、OpenSuSEDebian、B2DGentoo

选择建议:

  • 企业环境 → 商业版(RHEL / SuSE),买的是客服与低风险
  • 个人/教学服务器CentOS(抓 RHEL 源码重编译的社群版,号称完全相容,改版幅度小)
  • 个人桌面尝鲜 → Fedora / Ubuntu / OpenSuSE
  • 只想看看 → Live CD(KNOPPIX,光盘开机免安装)
  • 社群版软件新但可能有 bug;商业版等软件在社群版磨合稳定后才收录(Fedora 就是 RHEL 的试验田)

💡 更多 distro 信息看 distrowatch.com。初学选台湾使用者多的 RPM 系(出问题好找答案),追求严谨玩 Debian,性能至上玩 Gentoo——但各版本本质差异不大,精通一个,其他都通。

1.3 Linux当前应用的角色

1.3.1 企业环境的利用

  • 网络服务器(最热门):WWW、Mail、File Server——承袭 Unix 稳定传统,服务器软件几乎都是自由软件。硬件大厂(Dell/HP/IBM)都特别标注支持的 distro,企业采购看大厂支持度(Red Hat 与 SuSE 最广)。
  • 关键任务应用:金融业把最核心的数据库业务跑在 Linux 上(x86 便宜 + 相容 Unix 软件标准)。
  • 学术高性能运算:GCC 编译环境 + 集群(Cluster)平行运算——把工作拆给多台主机算完再汇总,气象预报就靠这个。

1.3.2 个人环境的使用

  • 桌面电脑:KDE/GNOME 窗口 + LibreOffice/OpenOffice + Firefox + Thunderbird,办公够用。
  • 手机Android 就是 Linux 核心的分支(针对 ARM 设计)!2013 年起 Android 已是全球最多人用的手机系统——谁说 Linux 没人用?你天天都在用。(手机设置里的”内核版本 3.4.x”就是 Linux 版本号)
  • 嵌入式系统:路由器、IP 分享器、交换器、NAS、家电微控制器……操作系统直接嵌在产品里。

1.3.3 云端运用

“天下大势,分久必合、合久必分”:大型主机+终端机(合)→ PC 单机运算(分)→ 云端集中(又合)。

  • 云程序:虚拟化技术让一台实体主机模拟出多台逻辑独立的虚拟机。阿里巴巴机房 2 万台主机,底层统一用 Linux 管理;公有云上跑的虚拟机也多是 Linux。
  • 端设备:运算都在云里,终端越来越轻——智能手机、平板,以及不到 50 美元的树莓派 / 香蕉派(加上键鼠屏幕就是一台小电脑)。

1.4 Linux 该如何学习

为什么建议抛弃 X Window 学命令行?

  • X Window 只是 Linux 里的”一套软件”,不是核心——它挂了 Linux 未必受影响
  • 服务器根本不装图形界面(浪费资源),网卡都抓不到时拿什么图形界面救?
  • 远程管理场景(人在台南、服务器在台北),开个账号命令行连上去是唯一现实解

1.4.1 从头学习Linux基础

鸟哥的八步学习路线图(本书的结构就按这个走):

  1. 计算机概论与硬件知识——有概念即可(第 0 章)
  2. Linux 安装与指令——没有环境怎么学
  3. 基础技能——使用者/群组、权限、程序的概念
  4. vi 编辑器——必学!所有 Unix like 系统都有,很多软件会调用它
  5. Shell 与 Shell Script——正则表达式、管线命令、数据流重导向
  6. 软件管理员——Tarball / RPM / DPKG / YUM / APT
  7. 网络基础——IP 概念、路由概念
  8. 架站——前面都通了,这步”太简单啦”

1.4.2 选择一本易读的工具书

读基础书的重点是掌握 keyword——没有关键词,你连 Google 都不知道搜什么。市面书籍多强调速成和架站,缺基础管理,这正是本书的定位。

1.4.3 实作再实作

  • “老师,听你的课几次才能学会?”——“你永远学不会!因为你是用听的。
  • 人脑不是硬盘,记忆靠不断重复练习;不常摸,学了后面忘前面。
  • 鸟哥写私房菜网站的初衷就是自己忘性大 😄

1.4.4 发生问题怎么处理啊?建议流程是这样…

四步问题处理流程(顺序很重要):

  1. 查文档:本机 /usr/share/doc、TLDP(tldp.org)、CLDP 中文文档 + Google 关键词
  2. 自行 debug:看屏幕错误信息(如 ls: /vbird: No such file or directory 已经说得很明白了);网络服务问题查 /var/log/ 日志——这两招能解决大部分问题
  3. 发问:先读**《提问的智慧》**,整理好错误信息再发帖;不要同一问题多个论坛重复发(回答的熟手就那几个人)
  4. Netman 的习惯建议养成做记录的习惯——错误信息、引发状况、解决方法,归类定期整理;好文章留 copy 存档;“作为使用者,人要迁就机器;作为开发者,要机器迁就人”

1.4.5 鸟哥的建议(重点在solution的学习)

学习的两大原动力:兴趣 + 成就感

  • 培养兴趣:挑一个有趣的课题深入玩
  • 创造成就感:写心得分享(被认同的快乐会上瘾)、回答别人的问题(教会别人比自己学会难得多,也深入得多)、参与技术讨论(对错都是成长)
  • 眼光放远:企业要的不是”修好一台主机”,而是 Total Solution——整体环境的解决方案
  • 不要有门户之见:别说 MS 的东西不好;“不同环境下解决问题的方法有很多种,行得通就是好方法”

💡 这节表面是鸡汤,实际是方法论:输出倒逼输入(写分享、答问题),是学习任何技术的最快路径。鸟哥自己就是最好的例证——私房菜网站成就了他对 Linux 的理解深度。

关键命令

命令用途
uname -r查看当前 Linux 核心版本(对照 kernel.org/releases.html 判断是否长期维护版)