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 的血脉(每个节点都在解决上一个节点的痛点):
| 年份 | 事件 | 意义 |
|---|---|---|
| 1960s | MIT 开发 CTSS 相容分时系统 | 近代 OS 始祖:多个终端机分时共用一台主机 |
| 1965 | Bell + MIT + GE 启动 Multics 计划 | 目标 300+ 终端,太复杂,贝尔 1969 退出 |
| 1969 | Ken Thompson 用汇编在 PDP-7 上写出 Unics 原型 | 趁妻儿探亲,四周写成;初衷竟是想移植游戏”太空旅游” |
| 1973 | Dennis Ritchie 发明 C 语言,与 Thompson 用 C 重写核心 | Unix 正式诞生;C 是高阶语言,Unix 从此可移植 |
| 1977 | Berkeley 的 Bill Joy 改出 BSD | Unix 最重要分支;Bill Joy 后来创办 Sun |
| 1979 | AT&T 推出 System V 第七版 | 首次支持 x86 个人计算机;但版权收紧:“不可对学生提供源代码” |
| 1984① | 谭宁邦教授自写 Minix 教学系统 | 不看 Unix 源码避免版权纠纷;随磁带附源码,但定位教育、不肯加功能 |
| 1984② | Stallman 发起 GNU 计划、成立 FSF | 目标”自由的 Unix”;先产出 Emacs、GCC、glibc、Bash |
| 1985 | GNU 草拟 GPL 授权(copyleft) | 防止自由软件被拿去做成专利软件 |
| 1988 | XFree86 计划成立 | X Window System + Free + x86;1994 整合进 Linux 1.0 |
| 1991 | 芬兰大学生 Torvalds 在 BBS 发布小核心 | 用 GNU 的 bash/gcc 写成,Linux 登场 |
Thompson 文件系统的两个概念直接塑造了 Linux 哲学:
- 所有的程序或系统设备都是文件
- 每个程序只做一件事,且有效完成目标
💡 纯种 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 的发展:虚拟团队的产生
三个阶段:
- 单人维护:核心放 FTP,用户回报问题,Torvalds 快速修。
- 骇客志工加入:“这硬件我有,驱动我来写”——开源让志工能跟随架构写出相容代码。Torvalds 的务实哲学:先求有且能跑,再求改良(用户要虚拟内存,不到一周新版就有了)。
- 分层负责:功能太多后,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)、SuSE | Ubuntu(Canonical) | |
| 社群单位 | Fedora、CentOS、OpenSuSE | Debian、B2D | Gentoo |
选择建议:
- 企业环境 → 商业版(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基础
鸟哥的八步学习路线图(本书的结构就按这个走):
- 计算机概论与硬件知识——有概念即可(第 0 章)
- Linux 安装与指令——没有环境怎么学
- 基础技能——使用者/群组、权限、程序的概念
- vi 编辑器——必学!所有 Unix like 系统都有,很多软件会调用它
- Shell 与 Shell Script——正则表达式、管线命令、数据流重导向
- 软件管理员——Tarball / RPM / DPKG / YUM / APT
- 网络基础——IP 概念、路由概念
- 架站——前面都通了,这步”太简单啦”
1.4.2 选择一本易读的工具书
读基础书的重点是掌握 keyword——没有关键词,你连 Google 都不知道搜什么。市面书籍多强调速成和架站,缺基础管理,这正是本书的定位。
1.4.3 实作再实作
- “老师,听你的课几次才能学会?”——“你永远学不会!因为你是用听的。”
- 人脑不是硬盘,记忆靠不断重复练习;不常摸,学了后面忘前面。
- 鸟哥写私房菜网站的初衷就是自己忘性大 😄
1.4.4 发生问题怎么处理啊?建议流程是这样…
四步问题处理流程(顺序很重要):
- 查文档:本机
/usr/share/doc、TLDP(tldp.org)、CLDP 中文文档 + Google 关键词 - 自行 debug:看屏幕错误信息(如
ls: /vbird: No such file or directory已经说得很明白了);网络服务问题查/var/log/日志——这两招能解决大部分问题 - 发问:先读**《提问的智慧》**,整理好错误信息再发帖;不要同一问题多个论坛重复发(回答的熟手就那几个人)
- Netman 的习惯建议:养成做记录的习惯——错误信息、引发状况、解决方法,归类定期整理;好文章留 copy 存档;“作为使用者,人要迁就机器;作为开发者,要机器迁就人”
1.4.5 鸟哥的建议(重点在solution的学习)
学习的两大原动力:兴趣 + 成就感。
- 培养兴趣:挑一个有趣的课题深入玩
- 创造成就感:写心得分享(被认同的快乐会上瘾)、回答别人的问题(教会别人比自己学会难得多,也深入得多)、参与技术讨论(对错都是成长)
- 眼光放远:企业要的不是”修好一台主机”,而是 Total Solution——整体环境的解决方案
- 不要有门户之见:别说 MS 的东西不好;“不同环境下解决问题的方法有很多种,行得通就是好方法”
💡 这节表面是鸡汤,实际是方法论:输出倒逼输入(写分享、答问题),是学习任何技术的最快路径。鸟哥自己就是最好的例证——私房菜网站成就了他对 Linux 的理解深度。
关键命令
| 命令 | 用途 |
|---|---|
uname -r | 查看当前 Linux 核心版本(对照 kernel.org/releases.html 判断是否长期维护版) |