「生活可以更简单, 欢迎来到我的开源世界」
  1. LEVEL0
  2. LEVEL0.5
  3. LEVELn
  4. LEVEL1
  5. LEVEL2
  6. LEVEL2.1
  7. LEVEL3
  8. LEVEL4
  9. LEVEL5
2021-03-06

作者:thuvisioner
https://www.bilibili.com/read/cv10113473?share_medium=android&share_plat=android&share_source=WEIXIN&share_tag=s_i&timestamp=1614996224&unique_k=nE8ofn
出处: bilibili

个人的LINUX学习经验路线:

linux学习是很需要花时间的,如果不是兴趣驱动,你走不了太远。

其中有些课程我也在听,在品,从而作出更好的评价和选择。

经典的薄一些的书,可以尝试读英文。

LINUX的很多知识近30年都没变,非常稳定,所以学习这种稳定的知识体系是很有价值的,它是时间的朋友,能够穿越周期。

LEVEL0

命令行的运用,它不是知识层面,不需要深度的学习,主要是配合实践日常使用。这部分主要零零散散的看一些介绍linux命令的书籍或者网上资料。市面上大部分书为了追求全面(如鸟哥的私房菜),往往很厚,很全,里面很多命令平常用不到。所以这类书一般章节选择自己感兴趣的部分看,把他们当成字典选读。另外网上的一些pdf也不错,如我讲的linux生存指南中用到的http://linux-training.be/这套资料就不错,简洁明快。

另外这块实践中学习是最快的,一个基本方法就是在使用linux过程中,每完成一个任务的时候,要努力去寻找如何用最简单的方式实现,如日常中经常遇到批量重命名,不要一个一个的重命名,要尽可能搜索网上资源,寻找能够实现该任务的简单实现特定功能的命令组合,如利用awk,sed配合管道配合sh可以组合出各种针对批量处理的命令。这种方式成长速度是最快的。随着高效使用的频次增多,运用越熟练。

读者总结:

  • 常用是最好的学习,多在实践和日常中使用
  • 寻找简单高效的方法解决问题,shell脚本、awk、sed等组合可实现高效处理

LEVEL0.5

了解linux的系统的构成。早期我首先尝试的各种发行版,各种桌面环境,系统各种重新安装不下30次,直到非常熟练,并且熟悉每种发行版的理念,如archlinux, ubuntu, debian, gentoo等等。第二步,动手实践一下LFS,http://linuxfromscratch.org/。LFS公认为最好的从零DIY LINUX系统的手册。通过这一顿操作,你会从软件组成的层面上了解到linux kernel, glibc, gcc, binutils, bash, bootloader/grub等等这些东西是什么。包括各种配置文件再其中起到的作用,包括源码编译链接过程,包括经典的autoconf构建的一套流程,有可能还涉及打patch的过程,这部分内容走一遍会成长很快。LFS中也有可选的部分自己DIY桌面环境,这部分看兴趣。主要是CLI的部分搞清楚。这样对linux本身的构成了然于胸。

读者总结:

  • 了解Linux系统构成
  • 熟悉各发行版的理念
  • 实践LFS

LEVELn

UNIX编程艺术。也是经典名作,也是无数人推荐的,必读。里面讲述了贯穿UNIX的整个的思想哲学和设计理念基础。这本书不仅必读,而且可以反复读。所以称为LEVELn。不管你是初学者,还是已经是高手。这本书每次读都会有新的不同的体会。哲学总是这样,内涵很小,外延很大。所以这本书适合每当你的能力对linux的理解更上一层楼的时候,都可以重新翻阅一下,就会发现你新学到的东西也完美的服从这样的理念哲学。能将顶层的设计思想和具体的实践体会深刻的对应起来。也能指导你未来的程序设计。所以这本书适合各个阶段去读,反复体会。由于出版的时间比较早,书中的有些例子比较老,可以选择性的跳过。

必读:Unix编程艺术,理解其思想哲学和设计理念,将顶层的设计思想和具体的实践体会深刻的对应起来

LEVEL1

程序设计范式思想。注意,程序设计范式并不是数据结构,而是定义什么是编程,有哪些模式。神书SICP<>是首推。读完它你对编程本身有了更深入的感受和理解,并能够站在更高的视角上看各种编程范式包括语言特性。而且能看到lisp这种话语体系的内涵。这本书虽然广受争议,但读完能让你思路开阔的无比宽广,触达编程思想和范式的上限。而且能看出很多现代的语言中的特性(如javascript中的闭包,haskell,scala, rust等中的函数式编程思想)都早在这本书诞生的时候就出现了,各种编程范式的老祖宗在这里。而且lisp元编程或者宏编程那块更是如今其他语言所望尘莫及的能力。这本书原来一直都是MIT的神课,直到最近才换成python,但其实损失了不少东西。关于这个课,我找了一个SLIDE版本的视频,比MIT那个版书的课更加清楚一点。而且讲的东西也不完全是书上的,也很精彩。书我看到第三章,课我看一半,后面我会把它看完。强烈推荐。

必读:《计算机程序的构造和解释》,理解程序设计范式思想,深入理解编程

LEVEL2

C语言编程。先一定一定要把C语言搞明白。C是一切的基础,再怎么说都不为过。所有懂编程的人都懂C, 所有懂编程的人都应该知道一本书。C最经典的书不是谭浩强的书(那会拉低格调),而是K&R的传世名作The C Programming Language。其中不光包括了C的语法,还包括了一些coding style/ best practice. 精力足够一定要看英文版,写的很简洁劲道,值得深挖,中文翻译有一定损失。我后面也会出一个课程专门讲它。这本书主要讲语法,不讲C背后的实现。而且并不适合一点都不会编程的人。它适合C的初学者,尤其是上过大学C语言课有一点基础的初学者。

PS. LISP和C是两座巅峰。一个是无限接近天(编程思想的最高峰,无限接近于计算本身)一样的编程语言,一个是无比接近地(到机器码薄如纱,无线接近于计算机本身),出道都很早。后面的很多语言无非是介于他们之间,杂交各种特性而来。是新生各种语言的大哥。编程不是新东西,计算机科学的先贤们很早的时候就把编程这件事用数学和机器表达出来了。后续只是不断的改进而已,无他。SICP和The C都能在很薄的书中把各自最精华的部分浓缩出来,不读枉为计算机人。

掌握编程语言:C 和 Lisp

LEVEL2.1

编译链接[optional]。实际编程中经常会涉及到编译链接的内容。推荐我读过的《程序员的自我修养:链接、装载与库》。这本书讲述了编译链接装载过程,包括相对简单的静态链接和比较复杂的动态链接过程。LINUX下统一的ELF binary 格式也有提及,所有的二进制命令可执行文件,动静态库,.o都是这种格式,另外一种可执行文件格式是脚本格式脚本开头例如#!/bin/bash类似于这种。以及main函数启动之前操作系统都干了哪些事情。感兴趣的同学可以看下。

LEVEL3

计算机系统本身的深入理解。著名的《深入理解计算机系统》书(我还没仔细看),CMU 15213 CSAPP课程(我快听完了)。它会讲到C语言背后的故事。C语言之下的机器指令,缓存,内存,I/O, 网络编程等等。它的前半部分是机器指令的部分,这部分很精彩。后半部分主要是系统编程的部分,有助于理解系统编程system call的一些简单的原理。有助于加深对计算机系统抽象的理解。P13 Linking专门讲编译链接过程,可以单独听。这门课牛的地方在于,它的内容深浅尺度把握的刚刚好,又是充分的考虑了程序员的视角,比较亲民。深入理解计算机在程序员视角中的抽象是进一步学习的基础,不可能跳过。其中提到了另外两本APUE<>和<>。

LEVEL4

系统编程,主要是系统调用层面。APUE(我读过),<>(还没细看)。APUE更像一本经典的比较权威的教科书,也是很多名人推荐的,可被收藏的那种。我看来更像一本syscall大全。会涉及到常用的一些syscall的使用和底层基本原理。看起来很厚,读起来也还好。我粗看The Linux Programming Interface好像写的也还可以挺细致,等我读完了再评价。APUE还有专门讲网络编程的第二卷,可选。(我没读过)

The Linux Programming Interface读起来比较畅通,分上下卷,由浅入深,怎么读都非常合适

APUE和UNP都是非常经典的书,内容事无巨细,非常严谨,适合慢慢研读

我喜欢对照的读,一本书上没看懂,则可以参考另一本书上的描述

LEVEL5

LINUX内核。三本名书必读,由浅入深,LKD<>, LDD<>, ULK<>。大部分书内核版本都比较老,但是内核最精华的一些设计理念和思想其中均有提及。 其中LKD很薄,可以读一下。Linux Kernel’s Big Picture. LDD是内核驱动开发人员视角,主要讲述了kernel API。ULK更深入理解kernel的内部。

Linux 内核领域的“四库全书”:《Linux 内核设计与实现》 《Linux 设备驱动程序》 《深入理解 Linux 内核》和《Linux 内核源代码情景分析》。
原文地址: https://modao.site/Linux/Linux%E5%86%85%E6%A0%B8%E5%9B%9B%E5%BA%93%E5%85%A8%E4%B9%A6/

目前是一本都未看过

<⇧>