学习路线篇:如何学习 Linux?
作者:沉默王二 发布时间:2022-07-12T13:49:50.382+0800
球友们好,《Java 面试指南》专栏又更新了:新增如何学习 Linux?
内容收录在星球专栏《Java 面试指南》的《学习路线篇》中,专栏托管在语雀平台上(更方便你沉浸式阅读和做笔记),访问地址和密码:https://t.zsxq.com/6iuzn6I
以下是全部内容:
为什么学 Linux
Linux 也称:GNU/Linux,而其中 GNU 的全称又是:Gnu’s Not Unix。也就是说,Linux 本质来源不是 Unix,但是借鉴了 Unix 的设计思想,所以业界把这种和 Unix 是一致设计思想的系统归为:类 Unix 系统。
Linux 本质是指 Linux 内核,而称 GNU/Linux 则代表这是一个系统,但是确实有点不好念和记忆,所以大家直接称作 Linux。
通常情况下,Linux 被打包成供个人计算机和服务器使用的 Linux 发行版,一些流行的主流 Linux 发布版,包括 Debian(及其派生版本 Ubuntu、Linux Mint)、Fedora(及其相关版本 Red Hat Enterprise Linux、CentOS)和 openSUSE、ArchLinux(这个是我补充的)等。
根据用途可以再总结:
- Fedora(CentOS、RHEL)系,是在国内外,作为企业服务器的系统最多,没有之一
- Debian 系,一般用于桌面,移动端,TV这一类
- ArchLinux 系,很轻量的Linux,适合有一定Linux基础,并且爱折腾的人使用,用它做桌面或是服务器都行。
- OpenSuse 系,嘛,嗯…人气相对比较差,不提也罢。
为什么要用 Linux 系统呢?大家常看到的说法是这样的:
Linux 是一个开源的,有潜力,安全,免费的操作系统
这说得比较虚,在我看来,Linux 之所以被推崇是因为它可以加快的你生产效率,提高产能,针对我们开发人员来说,我推荐 Linux 就是因为它适合常见的编程语言做开发环境。
这就等于说,如果你是某种语言的开发者,你从事这个行业,不管你怎么学习下去,Linux 永远绕不开。从简单的各种语言开发,到后期的服务器部署,分布式,集群环境,数据库相关等,Linux 都在等着你。
安装 Linux 及周边
学习 Linux 之前,必须先把 Linux 安装起来,否则没有任何学习的环境,对吧?
虚拟机安装
Ubuntu 安装 ,Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu"一词,意思是“人性”“我的存在是因为大家的存在",是非洲传统的一种价值观。
CentOS 6 安装 ,CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。
购买云服务器
或者直接购买云服务器(阿里云、腾讯云、华为云、百度云都有提供购买渠道)。
在线 Linux
或者直接通过在线 Linux 来学习。
Vim
Vim 安装和配置、优化 ,Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 Vim的第一个版本由布莱姆·米勒在1991年发布。
Oh My Zsh
oh-my-zsh 安装与配置 ,Oh My Zsh 是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能。Zsh 是一款强大的虚拟终端,既是一个系统的虚拟终端,也可以作为一个脚本语言的交互解析器。
SSH 连接工具
Tabby ,Tabby 是一个高度可定制化的 跨平台的终端工具,支持 Windows、macOS 和 Linux,自带 SFTP 功能,能与 Linux 服务器轻松传输文件,支持多种主题,界面炫酷,插件丰富。
XShell ,Xshell是Netsarang Computer推出的的Secure Shell、Telnet和Rlogin虚拟终端。Xshell可以为每个主机创建单独的会话,用户可以通过标签查看每个会话,方便同时操作和管理与主机的会话。
Warp ,一个超级牛叉的 terminal,号称是 21 世纪的终端,还未正式发布,就获得了两千三百万美元的融资。
MobaXterm ,分开源版和收费版,Windows 平台上比较强大的终端工具。
FinalShell ,一款免费的国产的集SSH工具、服务器管理、远程桌面加速的良心软件,同时支持Windows,macOS,Linux。
Putty ,Windows 平台上的一个免费 SSH 客户端。
iterm2 ,macOS 原生终端 terminal 的替代品。
其他远程链接工具还有:secureCRT、Aechoterm、WindTerm、termius等等。
Linux 学习路线
这是我画的一幅 Linux 学习路线图,大家可以按此路线循序渐进地学习。
需要说明的是:第五项驱动开发和第六项嵌入式系统开发是并列的,也就是说,学习完内核之后,你可以选择从事不同的领域,当然嵌入式开发有时会包含驱动开发。
还有就是嵌入式开发包括硬件,软件和系统开发,假如只做硬件的话,你没有必要按照上述路线进行,系统级开发的话,前面的是必备。
详细地拆分一下:
熟悉文件系统,shell 脚本以及常用命令
早期的 Linux 使用 Ext2 文件系统格式,CentOS 5.x 默认使用 Ext3,CentOS 6.x 默认使用 Ext4,而目前最新的 CentOS 7.x 默认使用 xfs 格式。
shell脚本(shell script),是一种为shell编写的脚本程序。
列一些我自己用过的命令:
- cat /proc/cpuinfo 查看 CPU 信息
- top 查看系统使用情况
- df 查看磁盘使用情况
- free 显示系统内存情况
- sudo 以管理员身份执行
- ssh 远程连接
- cd 切换目录
- ls 查看目录列表
- tree 打印目录树
- mkdir 创建目录
- rm 删除目录
- touch 新建文件
- cp 复制文件
- mv 移动文件
- find 搜索文件
- whereis 查看可执行文件路径
- chmod 设置目录权限
- cat / more / less 查看文件
- zip / tar / gzip 压缩文件
- unzip / tar / gunzip 解压文件
- grep / sed / awk 文本处理
- crontab 计划任务
- nohup 后台运行程序
- ps 查看进程
- kill 杀死进程
- rpm / yum / apt / apt-get / dpkg 软件包管理
- service / systemctl 服务管理
- ifconfig 查看网络属性
- netstat 查看网络状态
- date 显示系统时间
- rpm 安装用RPM来打包的软件
- yum 基于rpm的软件包管理器,能够从指定的服务器自动下载RPM包并且安装
了解程序开发过程
学会使用文本编辑工具 Vim。
学会使用编译工具 gcc, as, 连接工具 ld, 调试工具 gdb, make 工具,会写 makefile。
学会安装配置常用的软件,以及服务搭建,比如说 FTP、MySQL、Nginx、Redis、日志服务 等等。
尝试系统编程
试着在 Linux 上用 C 语言进行系统编程,其中需要调用 Linux 系统库函数 (API)。例如,实现一个需要进行网络通信、操作文件的多线程/进程程序。以此深入了解 Linux 系统运行机制。
推荐这份 Linux 系统编程(中文版),非常 nice。球友可以直接在知识星球的置顶帖 里获取网盘下载地址/或者直接从知识星球里获取。
学习 Linux 内核
Linux® 内核是 Linux 操作系统(OS)的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。
之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件(无论是电话、笔记本电脑、服务器,还是任何其他类型的计算机)的所有主要功能。
内核有 4 项工作:
- 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
- 进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间
- 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
- 系统调用和安全防护:从流程接受服务请求
这一部分内容比较深,能把它学透的基本就是大牛了,写个 OS 就不在话下。
linux内核学习资料:200+经典内核文章,100+内核论文,50+内核项目,500+内核面试题,80+内核视频
驱动开发和嵌入式系统开发
驱动开发不是必学的。
嵌入式开发包括很多方向,有硬件、软件,以及系统级别。
硬件要学单片机,ARM、MIPS,DSP 等各种 MCU,Verilog, RTL, 具体就不多说了,跟 Linux 关系不太大。
软件的话,需要了解交叉编译,以及嵌入式环境下 C 语言的特殊用法,例如 volatile、 位操作、寄存器操作、大小端、程序跳转等。
系统级,要了解 Linux 内核裁剪、移植、编译、调试,还有 Bootloader 、设备驱动等。
Linux 学习建议
多动手实践,建议自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境。
一定要自己从 0 开始手敲命令安装软件、部署服务,熟悉整个项目的上线流程。
每个命令至少要跟着敲一遍,了解它们的作用,并通过自然地练习,熟悉常用的 Linux 命令。
记不住没关系,用文档查就行了。
先会用,再理解。
时间不多的话,可以通过面试题来了解一些 Linux 设计思想,而不是直接去深入学习内核,虽说学会了的确大有裨益,但性价比不高。
Linux 学习资源
首先推荐韩顺平老师的一周学会Linux:
B 站地址:https://www.bilibili.com/video/BV1Sv411r7vd
其次是狂神说的 Linux 教程:
https://www.bilibili.com/video/BV187411y7hF
阿里云的这个Linux运维学习路线也不错:
书籍的话:
- 《鸟哥的 Linux 私房菜 —— 基础篇 》
- 《深入理解Linux网络: 修炼底层内功,掌握高性能原理》
- 《深入理解LINUX内核(第三版)》
- 《Linux是怎样工作的》
- 《Linux内核完全剖析》
参考资料:
- https://github.com/judasn/Linux-Tutorial
- https://zhuanlan.zhihu.com/p/26859197
- https://gitee.com/liyupi/code-roadmap
- https://www.redhat.com/zh/topics/linux/what-is-the-linux-kernel
球友们好,《Java 面试指南》专栏又更新了:新增如何学习 Linux?
内容收录在星球专栏《Java 面试指南》的《学习路线篇》中,专栏托管在语雀平台上(更方便你沉浸式阅读和做笔记),访问地址和密码:https://t.zsxq.com/6iuzn6I
以下是全部内容:
为什么学 Linux
Linux 也称:GNU/Linux,而其中 GNU 的全称又是:Gnu’s Not Unix。也就是说,Linux 本质来源不是 Unix,但是借鉴了 Unix 的设计思想,所以业界把这种和 Unix 是一致设计思想的系统归为:类 Unix 系统。
Linux 本质是指 Linux 内核,而称 GNU/Linux 则代表这是一个系统,但是确实有点不好念和记忆,所以大家直接称作 Linux。
通常情况下,Linux 被打包成供个人计算机和服务器使用的 Linux 发行版,一些流行的主流 Linux 发布版,包括 Debian(及其派生版本 Ubuntu、Linux Mint)、Fedora(及其相关版本 Red Hat Enterprise Linux、CentOS)和 openSUSE、ArchLinux(这个是我补充的)等。
根据用途可以再总结:
- Fedora(CentOS、RHEL)系,是在国内外,作为企业服务器的系统最多,没有之一
- Debian 系,一般用于桌面,移动端,TV这一类
- ArchLinux 系,很轻量的Linux,适合有一定Linux基础,并且爱折腾的人使用,用它做桌面或是服务器都行。
- OpenSuse 系,嘛,嗯…人气相对比较差,不提也罢。
为什么要用 Linux 系统呢?大家常看到的说法是这样的:
Linux 是一个开源的,有潜力,安全,免费的操作系统
这说得比较虚,在我看来,Linux 之所以被推崇是因为它可以加快的你生产效率,提高产能,针对我们开发人员来说,我推荐 Linux 就是因为它适合常见的编程语言做开发环境。
这就等于说,如果你是某种语言的开发者,你从事这个行业,不管你怎么学习下去,Linux 永远绕不开。从简单的各种语言开发,到后期的服务器部署,分布式,集群环境,数据库相关等,Linux 都在等着你。
安装 Linux 及周边
学习 Linux 之前,必须先把 Linux 安装起来,否则没有任何学习的环境,对吧?
虚拟机安装
Ubuntu 安装 ,Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu"一词,意思是“人性”“我的存在是因为大家的存在",是非洲传统的一种价值观。
CentOS 6 安装 ,CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。
购买云服务器
或者直接购买云服务器(阿里云、腾讯云、华为云、百度云都有提供购买渠道)。
在线 Linux
或者直接通过在线 Linux 来学习。
Vim
Vim 安装和配置、优化 ,Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 Vim的第一个版本由布莱姆·米勒在1991年发布。
Oh My Zsh
oh-my-zsh 安装与配置 ,Oh My Zsh 是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能。Zsh 是一款强大的虚拟终端,既是一个系统的虚拟终端,也可以作为一个脚本语言的交互解析器。
SSH 连接工具
Tabby ,Tabby 是一个高度可定制化的 跨平台的终端工具,支持 Windows、macOS 和 Linux,自带 SFTP 功能,能与 Linux 服务器轻松传输文件,支持多种主题,界面炫酷,插件丰富。
XShell ,Xshell是Netsarang Computer推出的的Secure Shell、Telnet和Rlogin虚拟终端。Xshell可以为每个主机创建单独的会话,用户可以通过标签查看每个会话,方便同时操作和管理与主机的会话。
Warp ,一个超级牛叉的 terminal,号称是 21 世纪的终端,还未正式发布,就获得了两千三百万美元的融资。
MobaXterm ,分开源版和收费版,Windows 平台上比较强大的终端工具。
FinalShell ,一款免费的国产的集SSH工具、服务器管理、远程桌面加速的良心软件,同时支持Windows,macOS,Linux。
Putty ,Windows 平台上的一个免费 SSH 客户端。
iterm2 ,macOS 原生终端 terminal 的替代品。
其他远程链接工具还有:secureCRT、Aechoterm、WindTerm、termius等等。
Linux 学习路线
这是我画的一幅 Linux 学习路线图,大家可以按此路线循序渐进地学习。
需要说明的是:第五项驱动开发和第六项嵌入式系统开发是并列的,也就是说,学习完内核之后,你可以选择从事不同的领域,当然嵌入式开发有时会包含驱动开发。
还有就是嵌入式开发包括硬件,软件和系统开发,假如只做硬件的话,你没有必要按照上述路线进行,系统级开发的话,前面的是必备。
详细地拆分一下:
熟悉文件系统,shell 脚本以及常用命令
早期的 Linux 使用 Ext2 文件系统格式,CentOS 5.x 默认使用 Ext3,CentOS 6.x 默认使用 Ext4,而目前最新的 CentOS 7.x 默认使用 xfs 格式。
shell脚本(shell script),是一种为shell编写的脚本程序。
列一些我自己用过的命令:
- cat /proc/cpuinfo 查看 CPU 信息
- top 查看系统使用情况
- df 查看磁盘使用情况
- free 显示系统内存情况
- sudo 以管理员身份执行
- ssh 远程连接
- cd 切换目录
- ls 查看目录列表
- tree 打印目录树
- mkdir 创建目录
- rm 删除目录
- touch 新建文件
- cp 复制文件
- mv 移动文件
- find 搜索文件
- whereis 查看可执行文件路径
- chmod 设置目录权限
- cat / more / less 查看文件
- zip / tar / gzip 压缩文件
- unzip / tar / gunzip 解压文件
- grep / sed / awk 文本处理
- crontab 计划任务
- nohup 后台运行程序
- ps 查看进程
- kill 杀死进程
- rpm / yum / apt / apt-get / dpkg 软件包管理
- service / systemctl 服务管理
- ifconfig 查看网络属性
- netstat 查看网络状态
- date 显示系统时间
- rpm 安装用RPM来打包的软件
- yum 基于rpm的软件包管理器,能够从指定的服务器自动下载RPM包并且安装
了解程序开发过程
学会使用文本编辑工具 Vim。
学会使用编译工具 gcc, as, 连接工具 ld, 调试工具 gdb, make 工具,会写 makefile。
学会安装配置常用的软件,以及服务搭建,比如说 FTP、MySQL、Nginx、Redis、日志服务 等等。
尝试系统编程
试着在 Linux 上用 C 语言进行系统编程,其中需要调用 Linux 系统库函数 (API)。例如,实现一个需要进行网络通信、操作文件的多线程/进程程序。以此深入了解 Linux 系统运行机制。
推荐这份 Linux 系统编程(中文版),非常 nice。球友可以直接在知识星球的置顶帖 里获取网盘下载地址/或者直接从知识星球里获取。
学习 Linux 内核
Linux® 内核是 Linux 操作系统(OS)的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。
之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件(无论是电话、笔记本电脑、服务器,还是任何其他类型的计算机)的所有主要功能。
内核有 4 项工作:
- 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
- 进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间
- 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
- 系统调用和安全防护:从流程接受服务请求
这一部分内容比较深,能把它学透的基本就是大牛了,写个 OS 就不在话下。
linux内核学习资料:200+经典内核文章,100+内核论文,50+内核项目,500+内核面试题,80+内核视频
驱动开发和嵌入式系统开发
驱动开发不是必学的。
嵌入式开发包括很多方向,有硬件、软件,以及系统级别。
硬件要学单片机,ARM、MIPS,DSP 等各种 MCU,Verilog, RTL, 具体就不多说了,跟 Linux 关系不太大。
软件的话,需要了解交叉编译,以及嵌入式环境下 C 语言的特殊用法,例如 volatile、 位操作、寄存器操作、大小端、程序跳转等。
系统级,要了解 Linux 内核裁剪、移植、编译、调试,还有 Bootloader 、设备驱动等。
Linux 学习建议
多动手实践,建议自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境。
一定要自己从 0 开始手敲命令安装软件、部署服务,熟悉整个项目的上线流程。
每个命令至少要跟着敲一遍,了解它们的作用,并通过自然地练习,熟悉常用的 Linux 命令。
记不住没关系,用文档查就行了。
先会用,再理解。
时间不多的话,可以通过面试题来了解一些 Linux 设计思想,而不是直接去深入学习内核,虽说学会了的确大有裨益,但性价比不高。
Linux 学习资源
首先推荐韩顺平老师的一周学会Linux:
B 站地址:https://www.bilibili.com/video/BV1Sv411r7vd
其次是狂神说的 Linux 教程:
https://www.bilibili.com/video/BV187411y7hF
阿里云的这个Linux运维学习路线也不错:
书籍的话:
- 《鸟哥的 Linux 私房菜 —— 基础篇 》
- 《深入理解Linux网络: 修炼底层内功,掌握高性能原理》
- 《深入理解LINUX内核(第三版)》
- 《Linux是怎样工作的》
- 《Linux内核完全剖析》
参考资料:
- https://github.com/judasn/Linux-Tutorial
- https://zhuanlan.zhihu.com/p/26859197
- https://gitee.com/liyupi/code-roadmap
- https://www.redhat.com/zh/topics/linux/what-is-the-linux-kernel
球友们好,《Java 面试指南》专栏又更新了:新增如何学习 Linux?
内容收录在星球专栏《Java 面试指南》的《学习路线篇》中,专栏托管在语雀平台上(更方便你沉浸式阅读和做笔记),访问地址和密码:https://t.zsxq.com/6iuzn6I
以下是全部内容:
为什么学 Linux
Linux 也称:GNU/Linux,而其中 GNU 的全称又是:Gnu’s Not Unix。也就是说,Linux 本质来源不是 Unix,但是借鉴了 Unix 的设计思想,所以业界把这种和 Unix 是一致设计思想的系统归为:类 Unix 系统。
Linux 本质是指 Linux 内核,而称 GNU/Linux 则代表这是一个系统,但是确实有点不好念和记忆,所以大家直接称作 Linux。
通常情况下,Linux 被打包成供个人计算机和服务器使用的 Linux 发行版,一些流行的主流 Linux 发布版,包括 Debian(及其派生版本 Ubuntu、Linux Mint)、Fedora(及其相关版本 Red Hat Enterprise Linux、CentOS)和 openSUSE、ArchLinux(这个是我补充的)等。
根据用途可以再总结:
- Fedora(CentOS、RHEL)系,是在国内外,作为企业服务器的系统最多,没有之一
- Debian 系,一般用于桌面,移动端,TV这一类
- ArchLinux 系,很轻量的Linux,适合有一定Linux基础,并且爱折腾的人使用,用它做桌面或是服务器都行。
- OpenSuse 系,嘛,嗯…人气相对比较差,不提也罢。
为什么要用 Linux 系统呢?大家常看到的说法是这样的:
Linux 是一个开源的,有潜力,安全,免费的操作系统
这说得比较虚,在我看来,Linux 之所以被推崇是因为它可以加快的你生产效率,提高产能,针对我们开发人员来说,我推荐 Linux 就是因为它适合常见的编程语言做开发环境。
这就等于说,如果你是某种语言的开发者,你从事这个行业,不管你怎么学习下去,Linux 永远绕不开。从简单的各种语言开发,到后期的服务器部署,分布式,集群环境,数据库相关等,Linux 都在等着你。
安装 Linux 及周边
学习 Linux 之前,必须先把 Linux 安装起来,否则没有任何学习的环境,对吧?
虚拟机安装
Ubuntu 安装 ,Ubuntu是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu"一词,意思是“人性”“我的存在是因为大家的存在",是非洲传统的一种价值观。
CentOS 6 安装 ,CentOS是免费的、开源的、可以重新分发的开源操作系统,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。
购买云服务器
或者直接购买云服务器(阿里云、腾讯云、华为云、百度云都有提供购买渠道)。
在线 Linux
或者直接通过在线 Linux 来学习。
Vim
Vim 安装和配置、优化 ,Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 Vim的第一个版本由布莱姆·米勒在1991年发布。
Oh My Zsh
oh-my-zsh 安装与配置 ,Oh My Zsh 是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能。Zsh 是一款强大的虚拟终端,既是一个系统的虚拟终端,也可以作为一个脚本语言的交互解析器。
SSH 连接工具
Tabby ,Tabby 是一个高度可定制化的 跨平台的终端工具,支持 Windows、macOS 和 Linux,自带 SFTP 功能,能与 Linux 服务器轻松传输文件,支持多种主题,界面炫酷,插件丰富。
XShell ,Xshell是Netsarang Computer推出的的Secure Shell、Telnet和Rlogin虚拟终端。Xshell可以为每个主机创建单独的会话,用户可以通过标签查看每个会话,方便同时操作和管理与主机的会话。
Warp ,一个超级牛叉的 terminal,号称是 21 世纪的终端,还未正式发布,就获得了两千三百万美元的融资。
MobaXterm ,分开源版和收费版,Windows 平台上比较强大的终端工具。
FinalShell ,一款免费的国产的集SSH工具、服务器管理、远程桌面加速的良心软件,同时支持Windows,macOS,Linux。
Putty ,Windows 平台上的一个免费 SSH 客户端。
iterm2 ,macOS 原生终端 terminal 的替代品。
其他远程链接工具还有:secureCRT、Aechoterm、WindTerm、termius等等。
Linux 学习路线
这是我画的一幅 Linux 学习路线图,大家可以按此路线循序渐进地学习。
需要说明的是:第五项驱动开发和第六项嵌入式系统开发是并列的,也就是说,学习完内核之后,你可以选择从事不同的领域,当然嵌入式开发有时会包含驱动开发。
还有就是嵌入式开发包括硬件,软件和系统开发,假如只做硬件的话,你没有必要按照上述路线进行,系统级开发的话,前面的是必备。
详细地拆分一下:
熟悉文件系统,shell 脚本以及常用命令
早期的 Linux 使用 Ext2 文件系统格式,CentOS 5.x 默认使用 Ext3,CentOS 6.x 默认使用 Ext4,而目前最新的 CentOS 7.x 默认使用 xfs 格式。
shell脚本(shell script),是一种为shell编写的脚本程序。
列一些我自己用过的命令:
- cat /proc/cpuinfo 查看 CPU 信息
- top 查看系统使用情况
- df 查看磁盘使用情况
- free 显示系统内存情况
- sudo 以管理员身份执行
- ssh 远程连接
- cd 切换目录
- ls 查看目录列表
- tree 打印目录树
- mkdir 创建目录
- rm 删除目录
- touch 新建文件
- cp 复制文件
- mv 移动文件
- find 搜索文件
- whereis 查看可执行文件路径
- chmod 设置目录权限
- cat / more / less 查看文件
- zip / tar / gzip 压缩文件
- unzip / tar / gunzip 解压文件
- grep / sed / awk 文本处理
- crontab 计划任务
- nohup 后台运行程序
- ps 查看进程
- kill 杀死进程
- rpm / yum / apt / apt-get / dpkg 软件包管理
- service / systemctl 服务管理
- ifconfig 查看网络属性
- netstat 查看网络状态
- date 显示系统时间
- rpm 安装用RPM来打包的软件
- yum 基于rpm的软件包管理器,能够从指定的服务器自动下载RPM包并且安装
了解程序开发过程
学会使用文本编辑工具 Vim。
学会使用编译工具 gcc, as, 连接工具 ld, 调试工具 gdb, make 工具,会写 makefile。
学会安装配置常用的软件,以及服务搭建,比如说 FTP、MySQL、Nginx、Redis、日志服务 等等。
尝试系统编程
试着在 Linux 上用 C 语言进行系统编程,其中需要调用 Linux 系统库函数 (API)。例如,实现一个需要进行网络通信、操作文件的多线程/进程程序。以此深入了解 Linux 系统运行机制。
推荐这份 Linux 系统编程(中文版),非常 nice。球友可以直接在知识星球的置顶帖 里获取网盘下载地址/或者直接从知识星球里获取。
学习 Linux 内核
Linux® 内核是 Linux 操作系统(OS)的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。
之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件(无论是电话、笔记本电脑、服务器,还是任何其他类型的计算机)的所有主要功能。
内核有 4 项工作:
- 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
- 进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间
- 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
- 系统调用和安全防护:从流程接受服务请求
这一部分内容比较深,能把它学透的基本就是大牛了,写个 OS 就不在话下。
linux内核学习资料:200+经典内核文章,100+内核论文,50+内核项目,500+内核面试题,80+内核视频
驱动开发和嵌入式系统开发
驱动开发不是必学的。
嵌入式开发包括很多方向,有硬件、软件,以及系统级别。
硬件要学单片机,ARM、MIPS,DSP 等各种 MCU,Verilog, RTL, 具体就不多说了,跟 Linux 关系不太大。
软件的话,需要了解交叉编译,以及嵌入式环境下 C 语言的特殊用法,例如 volatile、 位操作、寄存器操作、大小端、程序跳转等。
系统级,要了解 Linux 内核裁剪、移植、编译、调试,还有 Bootloader 、设备驱动等。
Linux 学习建议
多动手实践,建议自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境。
一定要自己从 0 开始手敲命令安装软件、部署服务,熟悉整个项目的上线流程。
每个命令至少要跟着敲一遍,了解它们的作用,并通过自然地练习,熟悉常用的 Linux 命令。
记不住没关系,用文档查就行了。
先会用,再理解。
时间不多的话,可以通过面试题来了解一些 Linux 设计思想,而不是直接去深入学习内核,虽说学会了的确大有裨益,但性价比不高。
Linux 学习资源
首先推荐韩顺平老师的一周学会Linux:
B 站地址:https://www.bilibili.com/video/BV1Sv411r7vd
其次是狂神说的 Linux 教程:
https://www.bilibili.com/video/BV187411y7hF
阿里云的这个Linux运维学习路线也不错:
书籍的话:
- 《鸟哥的 Linux 私房菜 —— 基础篇 》
- 《深入理解Linux网络: 修炼底层内功,掌握高性能原理》
- 《深入理解LINUX内核(第三版)》
- 《Linux是怎样工作的》
- 《Linux内核完全剖析》
参考资料:
-
https://www.redhat.com/zh/topics/linux/what-is-the-linux-kernel
知识星球 扫码加入星球 查看更多优质内容 https://wx.zsxq.com/mweb/views/joingroup/join_group.html?group_id=15522885221412