学习linux一般会都会经历从入门到深入再到精通的几个阶段,这里分别说下各阶段需要学习的内容,大家可以对照看自己在哪个阶段,然后决定接下来该学习什么。
第一阶段:没有任何经验
Linux是基础层或者说操作系统的内核,就像Ubuntu或Debian经常被称为GNU/Linux操作系统。就这一点而言,即使是Android也是运行在Linux之上的。正是GNU的覆盖给了Linux一个华丽的GUI。
刚入门阶段的你需要坚持使用linux,即使是非编程任务。尝试学习基本的bash编程并学习如何有效地使用终端。
终端是你访问数据库的地方,你可以使用命令来执行此操作。你需要学习各种命令,你可以从学习如何处理文件开始——在目录中进出,创建、复制和删除。你可以转而编写更复杂的命令。以及如何将这些命令放在一起,我们称之为shell脚本,然后通过它来执行一些任务。
为了学习这些基本命令等,你可以参考:http://www.unixguide.net/linux/linuxshortcuts.shtml
- 实用程序命令,如,重新启动,关闭,终止,ps,日期等
- 模式匹配命令,如sed、grep、find、awk
这些命令将非常有用。
这里有一个快速参考:
除此之外,还有终端中运行的实用程序或应用程序 - 但你需要下载大部分应用程序或应用程序,一些应用程序已预先安装。接下来,你可以学习的是从终端安装应用程序 - 也可以使用命令。
第二阶段:有一点经验
在这个阶段,你已经了解了的各种组件的完整linux发行版的基本内容,如:
1)XServer
2)音响系统
3)桌面管理器
4)桌面环境
等等。
在了解 Linux的基本用法后,你需要学习Linux上的软件开发。这也将取决于你想要在哪个领域进行软件开发,比如web开发、网络编程、基于GUI的桌面应用程序等。一般的方法是:
-
要了解补充shell使用知识并获得shell的真正功能,首先需要学习shell脚本。你可以从这里的Bash编程开始。记住,不要一次性学习所有的Bash,主要是因为你需要实际的使用案例来练习,你可以从基础开始。
-
了解大多数用于Linux的构建系统,以及不同的开源包是如何配置、构建和安装的。你需要在系统上构建并安装几个开源包。
-
对于web开发或任何使用平台独立环境的应用程序开发来说,底层平台是什么并不重要(至少对初学者来说是如此),因此这只适用于编程语言,特别是C、c++等。你需要知道你的应用程序可用的工具链。然后是Linux中可用的api来执行不同的操作。了解文件系统api(文件操作打开、读取、写入、关闭、ioctl)、网络api(套接字)、线程(pthreads)、日期/时间管理api、信号、队列、消息、管道(所有这些都是IPC) api,这些几乎是所有应用程序中都需要的基础。
-
你还需要了解用于执行不同任务的不同开放源码库(例如,HTTP客户端的libcurl),库的选择可能会受到许可证和开发状态等的影响。
-
对于基于GUI的应用程序开发,需要了解Linux中可用的不同窗口管理系统和库。可以首先查看基于GTK+2 或Qt的GUI应用程序。
第三阶段 :进阶
一般来说,完整的Linux发行版包含3个主要部分:
1)引导加载程序(Bootloader)
2)Linux内核
3)文件系统。大多数文件系统定义了发行版。为了做Linux系统开发,你需要确定你想要进入哪个部分。
- 启动加载程序。
在固件之后运行的第一个软件是启动加载程序。 对于Linux来说,使用的大多数启动加载程序是x86的GRUB和ARM的U-boot。 固件加载启动加载程序,启动加载程序加载内核。 如果你的目标是构建Linux系统,可以忽略这一点。除了要制作多引导系统,大多数情况下在x86平台上不需要此配置。但是在ARM或其他平台(如MIPS)中还需要进行一些更改。
- Linux内核
使Linux成为“Linux”的核心系统。 也许你需要更多地了解Linux内核的历史,它的创始人和所有活跃的开发社区都在致力于这个大型的分布式开发项目。在开源和Linux内核上,可以参考纪录片Revolution OS。 首先建议你在你的开发机器上下载,配置,构建和引导你自己的linux内核。适用于所有人的一般方法。 在步骤5和步骤6之间的这种方法中,可能需要执行“update-grub”。 Ubuntu方法(只有当你使用Ubuntu发行版时),本质上它将执行第一种方法,但也保持自己的环境同步。要成功引导,需要了解引导加载程序,内核和文件系统之间的接口(连接)。 建议在虚拟机上执行这个任务。
现在可以从内核模块编程开始的Linux内核编程。推荐Linux设备驱动程序第3版。
它适用于内核版本2.6,你可能正在使用内核版本> 4.0,所以有些东西可能不会像你在阅读后所期待的那样,但前几章会给你足够的知识让你自己开始。
- Root文件系统。
内核初始化后,它会启动第一个用户空间应用程序(/ sbin / init,/ bin / init,/ usr / bin / init等),你可以用自己的脚本覆盖内核启动参数。大多数情况下,这个第一个应用程序被称为初始化管理器(upstart,systemd,SysV Init等),然后该init进程加载其他所有内容,这就是为什么它也在Linux PID = 1的所有进程中被称为parent 进程。此根文件系统定义了发行版,具有软件包管理器,办公实用程序,默认shell程序,默认初始化以及其他。你也可以构建和使用你自己的。你可以从头开始构建或创建现有分布的克隆,关于使用现有分发创建克隆的更多信息。Linux from Scratch项目可以提供很好的指导。这将构建整个系统,而不仅仅是Root文件系统。Yocto Project是构建基于Linux的发行版的另一个非常好的项目,现在很多公司都是基于Yocto项目创建自己的发行版。
难度低一点的发行版有:
deepinKorora
中等难度的发行版包括:
更具挑战性的发行版(建议先将它们安装到虚拟机(VM),然后再将它们安装到你的实际机器上,以确保你可以处理它们):
第四阶段:动手操作
一般来说,你需要有一个可以练习的简单用例。
这里提供一个家庭网络实验室的例子。
创建一个基于Linux的路由器,两个接口具有不同的网络,两个网络可以相互通信,也可以访问互联网。你的Linux机器也有一个无线网卡,创建你的机器的接入点(即第三接口 - 所以3个网络)。这里使用的大多数Linux实用程序将是iptables,route,hostapd,dnsmasq等。因此,如果你没有网络概念,那么你将很难使用这些实用程序。还可以查看OpenWRT发行版,该发行版提供了许多网络相关实用程序,许多低成本无线交换机和调制解调器使用此发行版。
Linux完整学习路径:https://www.shiyanlou.com/paths/linuxsys
更多趣味实验可以直接访问实验楼,在线实验环境操作方便,为大家定期更新最佳实验!(●'◡'●)
扫一扫课程咨询,欢迎添加班主任微信:
扫一扫
网友评论