Linux 学习路线图:系统概述、命令行基础、文件权限、Shell 编程、网络管理等实战教程帮助你快速掌握 Linux。 (linux 学习路线图)

Linux 操作系统是开源的操作系统,被广泛用于服务器端和嵌入式设备。Linux 操作系统优点是稳定性高,安全性强,易于定制和扩展。学习 Linux 操作系统可以帮助你成为一名高级的系统管理员或开发人员。Linux 学习路径包括几个重要的模块,如系统概述、命令行基础、文件权限、Shell 编程、网络管理等实战教程,本文通过这些模块来帮助你快速掌握 Linux 操作系统。

系统概述

系统概述模块主要包括 Linux 系统的版本、内核、文件系统、硬件要求等方面的知识。通过学习这些基础知识,你能够了解 Linux 操作系统的历史和基本概念,并能更好地理解和使用 Linux 操作系统。在这个模块中,你需要掌握以下内容:

 Linux 系统的基本概念和历史发展;

 Linux 内核和版本的介绍;

 Linux 文件系统的基本结构和组成;

 Linux 硬件要求和系统安装。

命令行基础

Linux 系统被广泛用于服务器端和嵌入式设备,由于 Linux 系统并没有直观的图形界面,因此需要掌握命令行的基本操作。通过学习命令行基础,能够有效地提高 Linux 操作系统的使用效率。在这个模块中,你需要掌握以下内容:

 Linux 命令行的基本操作;

 Linux 文件系统的基本操作;

 Linux 文件编辑器 vi 和 nano 的使用;

 Linux 命令行中通配符,管道和重定向的使用。

文件权限

在 Linux 操作系统中,文件和目录的权限是非常重要的,它可以决定用户对某个文件或目录的操作权限。因此,必须掌握文件和目录权限的相关知识。在这个模块中,你需要掌握以下内容:

 文件和目录的基本权限和属性;

 Linux 中用户,组和权限的关系;

 Linux 文件和目录的权限设置;

 Linux 文件和目录权限的命令行修改。

Shell 编程

Shell 脚本是用来自动化常见的任务或编写数据处理脚本的有效方式。学习 Shell 编程可以帮助你在 Linux 操作系统下自动执行某些任务,同时也能提高你的工作效率。在这个模块中,你需要掌握以下内容:

 Shell 脚本的基本语法和结构;

 Shell 脚本的变量和数组;

 Shell 脚本中的流程控制;

 Shell 脚本中的函数和库使用。

网络管理

Linux 操作系统广泛应用于服务器端和网络设备,因此网络管理是 Linux 系统管理员必须掌握的技能之一。通过学习网络管理,你能够理解 Linux 系统中网络相关的基础知识,并能够管理和配置网络。在这个模块中,你需要掌握以下内容:

 Linux 系统中网络的基础知识;

 Linux 网络配置和调试;

 Linux 系统中的网络服务;

 Linux 系统中的网络安全。

Linux 操作系统是一款稳定,安全,可定制的开源操作系统,广泛用于服务器端和嵌入式设备。本文通过介绍 Linux 学习路径中的系统概述、命令行基础、文件权限、Shell 编程、网络管理等实战教程,帮助初学者快速掌握 Linux 操作系统。学习 Linux 操作系统可以帮助你成为一名高级的系统管理员或开发人员,同时也能提高你的工作效率。

相关问题拓展阅读:

怎么才能学好linux?

学习Linux步骤:

1、先了解了解基础吧,找一本薄一点的,浅一点的书,了解一下什么是linux。有个基本了解即可。不建议马上看《鸟哥的Linux私房菜》,这本书很不错,如果你了解linux基础之后再看,对你可以说是不受益匪浅都不行。没基础看《鸟哥的Linux私房菜》比较痛苦,内容很多。

2、了解之后,在自己电脑上弄个虚拟机,装上linux系统(redhat或ubuntu都行)。专攻《鸟哥的Linux私房菜》。当你把这本书攻下来时,才知道原来命令行并不可怕,自己打着打着就很长啦。

学linux最主要靠实践,不实践,只看书对你没好处的哦。自己在虚拟机上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找资料弄懂,弄懂之后再实践,这才会有收获。

如何才能学好Linux?这是一个困扰很多Linux初学者和爱好者的问题,对于Linux以及其他语言的学习,良好的学习思路和习惯是十分有重要的,往往能够起到事半功倍的效果!

1. 基本功要扎实

学习任何一种语言,必备的基本功是必须要有的,一方面可以提高效率,另一方面可以拓宽思路。

对于Linux基本知识的学习,对一些初学者来说是枯燥乏味的,可以通过理解再背诵的方式先进行代码及语法的学习,然后进行实践操作,必须手动输入命令行,不要借助工具,这样可以更快速有效的掌握Linux。

2. 学以致用

Linux学习的目的是应用,Linux基本知识是一些零散的技术,当没有应用在项目上时,我们无法理解他的真实价值,所以打好基本功之后,最紧迫的是多做几个完整的项目,刚开始可以是功能简单的项目,之后可以选择稍微复杂的项目,勤于动手,敢于实践,一定能学好Linux。

3. 学会使用Linux联机帮助

任何一种教材都不会完全讲述Linux知识,一般讲的都是比较常用的或者是比较有代表性的知识,但是,我们在项目应用中往往有些功能的实现是需要一些生僻知识和技能的,那么,如何查找我们所需的知识呢,推荐查阅Linux帮助文档,主流的Linux都自带详细的帮助文档,很方便解决问题!

4. 在网上找资源

在Linux的学习和应用中,难免会遇到一些没有思路、不知道如何解决的问题,这时就要借助网络力量,可以通过搜索引擎搜索查找,也可以咨询资深技术人员,最终实现问题的解决,这是Linux知识积累的一个重要的途径!

5. 查阅英文技术文档

如果想深入学习Linux,查阅英文技术文档是十分必要的,往往最新的技术都是采用英文文档的方式发布的,而且更全面,因此,对于Linux人员来说,多看一些Linux技术文档,对于掌握前沿技术和加深知识是十分有必要的!

Linux学习是一个需要长期坚持不懈的过程,新的技术不断的产生,要想成为Linux大牛,必须要时刻关注Linux发展动态,掌握最新技术,才能走在行业前列!

1 从基础知识开始学习

2 Linux命令是必须学习的:虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。

3 选择一个适合你的Linux发行版本:目前全球有超过1百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,Redhat Linux 和Debian Linux是网络管理员的理想选择。对于英语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。

4 养成在命令行下工作: 一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统。

5 选择一个适合你的Linux社区:随着Linux应用的扩展,出现了不少Linux社区。

6 勤于实践: 要增加自己Linux 的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个 Linux 发行版本,然后进入精彩的Linux世界。相信对于你自己的 Linux 能力必然大有斩获。此外,人脑不像计算机的硬盘一样,除非硬盘坏掉了或者是资料被你抹掉了,否则储存的资料将永远而且立刻的记忆在硬盘中。在人类记忆的曲线中,你必须要不断的重复练习才会将一件事情记得比较熟。同样的,学习 Linux 也一样,如果你无法经常学习的话,学了后面的,前面的忘了。你对Linux命令熟悉后你可以开始搭建一个小的Linux网络,这是更好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。当然你不需搭建所有服务,可以慢慢来。需要说明的是这个Linux网络对于初学者有两三台计算机即可,其中一台计算机更好安装Windows系统。自己多动手,不要非要等着别人帮你解决问题。

书籍 :鸟哥的私房菜 和《linux就该这么学》

服务器篇 基础篇

debian服务器管理

新手推荐redhat as 4 但是debian 也有必要学

关键:能自主学习英文 看懂英文

看redhat 用ubuntu ? 这两系统根本是不同的架构

简单说 redhat 红旗 fedora 属于同类

ubuntu debian mint 属于同类

简单区别 软件包 后缀 一个是deb 一个是rpm

ubuntu 并不能让你掌握linux

并非说ubuntu 不好 但是shell 过于简单

更debian redhat as 之类的服务器版linux tui mode 相差甚远

如果个人坚决认为个人桌面版跟服务器版 没有区别的话

认为gui 与tui 没有区别的话

PS:简单的操作能提升入门容易度 但是加重了系统运行的负担 不利于让server 跑更多的服务

linux学习路线

之一阶段零基础入门

第二阶段Linux系统管理&shell编程

第三阶段百万级访问量集群实战

第四阶段千万级访问量核心集群实战

第五阶段一切核心技术的底层支持:云计算集群

第六阶段大数据运维

第七阶段Python自动化和毕业指导

学习Linux的步骤是怎样的

之一、抱着良好的心态去学习

学习 Linux 一定要保持一个良好的心态,切忌怀疑自己的学习方向和成果。不要纠结去学习哪个 Linux 发行版,其实从任何一个发行版开始你的学习之旅都是一样的。

第二、合适的学习方式和教材

很多初学者比较倾向于找一些视频教程来看,其实这真是极好的,但是你得找一些质量高、口碑好,更好是一些大型培训机构内部的视频。但是请不要一直依赖视频,毕竟视频除了没有互动之外,跟上课一样的,所以看视频的唯一缺点就是学习成本的增加,这个成本包括了取得费用和时间成本,所以在你什么都不懂而且看书看“懵逼”的时候先看看视频吧。当你把 Linux 基础命令用熟练了,理解简单的服务原理并可以独立配置简单的服务的时候,那么就去看书吧!看书可以大大的节省你的时间、金钱成本,推荐一本Linux入门书籍《Linux就该这么学》。

第三、不要抵触“无聊”的英语

基本上你学习 Linux 或者使用 Linux 一段时间以后,你会发现与其说是学习 Linux 操作系统,还不如说是学习如何阅读英文呢。

随着知识的深入,你可能会需要经常去搜索一些资料,当度娘不能满足你的时候,你还得去找另一个男人—谷歌。

第四、多动手实践

这一段其实真的没必要多说,上面介绍了我自己的 Linux 学习经历和学习方法,这些都是有差异性的,但永恒的不变的是“熟能生巧”这四个字,学好 Linux 绝非一朝一夕之事,时间、知识的积累一定可以将你推上顶峰。

首先,要学Linux编程,你得会用Linux,也就是得在命令行环境下生存下来。什么叫生存下来呢?就是我现在给你一台主机,键盘,显示器啥的,然后给你一个服务器版的Linux系统的光盘或者其他什么安装盘,你去把这台主机用起来。什么叫用起来呢?你平常用Windows电脑干啥,你现在还用这台电脑干啥。新建文件啊,查看文件,编辑文件,保存文件,复制,移动,删除,打包,解压,联网,下载个什么东西啊等等基本操作你得会。还有软件怎么安装,不仅要熟悉apt-get和yum,还有给你源码的软件怎么安装你得会,另外要熟悉Linux下的文件系统,每个目录是干啥的,目录下的文件是干嘛的,插入一个U盘,如何挂载这个U盘,操作U盘下的文件你得会啊。这个看一本书就行了,《鸟哥的Linux私房菜-基础篇》,记得是基础篇,记得安装Linux系统自己操作一遍,还有一本是服务器篇,你既然是要学Linux编程开发,那就不用看服务器架设篇了。做完这一步,你可以开发了。

Linux下开发,两种基本语言,C和C++咯,至于其他人要说Python,Java,Ruby啥的不讨论,因为就讨论Linux下的开发,什么是Linux开发呢?就是利用Linux的API进行开发咯,首先你得会C语言或者C++语言啊,这个去看丹尼斯的《C程序设计语言》,注意是丹尼斯的,C++的就去看《Essential C++》或者《C++ Primer》,然后在Linux下的程序开发,Linux的API是遵循POSIX标准的,自行谷歌什么叫POSIX。Linux下程序开发几大块,文件操作,这个很重要,你要知道Linux下的一个思想叫一切皆文件,可见文件读写多重要了。I/O模型,五大I/O模型,阻塞,非阻塞,复用,信号驱动和异步I/O,环环相扣丝丝相连,概念和操作都要仔细琢磨,最重要的当属复用,就是select,poll和epoll,面试笔试就问这个东西,要知道他们的适用范围和优缺点。进程和线程,包括进程和线程的概念和区别,进程和线程的建立,同步,通信,互斥等等。网络编程,就是socket编程,Linux编程,这个学不好等于啥都没学,这个估计还得了解一下TCP/IP协议,编程方面主要是那几步,申请socket,bind,listen,accept几步,要熟悉种常见的服务器模型,进程池线程池方式的,多进程方式的,复用方式的,最重要的是复用方式的,这部分可以先只写服务器,测试直接用Telnet就好了,加快速度么。其余的就是数据库,这个东西不属于Linux,但是还得会,要不然啥都做不了,看那本《MySQL必知必会》,当然深入的话还得找本专业的书细细看。这个时候就可以真刀真枪的去干点有意思的事了,比如写个终端下的类似于QQ的软件啊,包括服务器和客户端啊,慢慢的增加并发数,比如可以同时支持五千人在线啊,文件传输啊等等。然后学学Qt,熟悉一下图形界面,可以把你的终端下的QQ完全改成图形界面下的。估计到这个时候,你差不多在Linux下进行像样的开发了吧。在这个过程的学习中,相信你已经学会Makefile的编写啊,编译啊,链接啊等等一些细枝末节的东西了,还得反思一下把零散的东西串一串,要系统化。

接下来就是继续深入了,Linux为什么这么多人用,好处在哪里,你得去稍微的看看内核源码啊,内核的进线程调度啊,我告诉你,Linux内核的一个链表都够你研究好几节课的。哦,这个时候,数据结构啥的又得翻出来加强一下了不是,计算机网络啥的也得看看,操作系统原理啥的也得看看呢不是,把这些东西放在这里是合适的,前面让你知其然,知道怎么编程怎么做,现在要知其所以然了不是。

在学习的过程中,要不断积累和了解最新的东西,最起码要知道个概念,比如分布式,大数据,云计算,机器学习,计算机视觉,JIT等等,形成知识链,这样不会导致你最后不知道学啥。有个建议,一定要学一下Python,一定要学一下Python,一定要学一下Python,重要的事情说三遍。它能极大的提高你的工作效率,也能和C/C++结合在一起用,很nice的语言。

最后推荐几本书(前面的包含在内):

《鸟哥的Linux私房菜 基础篇》

《C程序设计语言》 丹尼斯写的

《Linux C编程一站式学习》 宋劲杉写的

《Eensstial C++》

《C++ Primer》

《Effective C++》

《Linux网络编程》 宋劲彬写的

《Unix环境高级编程》

《Unix网络编程》 两部

《Linux高级程序设计》 华清远见的

《MySQL必知必会》

《数据库系统概念》

《大话数据结构》

《算法导论》

《Linux内核情景分析》

《深入理解Linux内核》

《深入理解计算机系统》

《现代操作系统》

《深入理解计算机网络》

《TCP/IP》的三卷经典书

对于Linux的学习,可以分为四个阶段,Linux初级入门阶段→Linux中级进阶→Linux高级进阶→Linux资深方向细化阶段

之一阶段:初级阶段

初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学linux也是需要有一定的路线。

1. Linux基础知识、基本命令;

2. Linux用户及权限基础;

3. Linux系统进程管理进阶;

4. linux高效文本、文件处理命令;

5. shell脚本入门

第二阶段:中级进阶

中级进阶需要在充分了解linux原理和基础知识之后,对上层的应用和服务进行深入学习,其中说到服务肯定涉及到网络的相关知识,是需要花时间学习的。

1. TCP/IP网络基础;

2. Linux企业常用服务;

3. Linux企业级安全原理和防范技巧;

4. 加密/解密原理及数据安全、系统服务访问控制及服务安全基础;

5. iptables安全策略构建;

6. shell脚本进阶;

7. MySQL应用原理及管理入门

第三阶段:Linux高级进阶

1. http服务代理缓存加速;

2. 企业级负载集群;

3. 企业级高可用集群;

4. 运维监控zabbix详解;

5. 运维自动化学习;

第四阶段:Linux资深方向细化

1. 大数据方向;

2. 云计算方向;

3. 运维开发;

4. 自动化运维;

5. 运维架构师

以上是Linux的一个学习方向和路线,对于Linux学习是一个需要坚持的过程,也许通过自学或者培训,3至6个月都可以把基本知识学会,但是重在实践,深入的思考和不断的摸索,你会发现Linux更多的美!

作为一个新人,怎样学习嵌入式Linux

连接:

网页链接

    作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。    回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。如果你是想做应用开发,那么你去把C语言、数据结构、JAVA什么的学好吧。嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。但是基础还是C或JAVA,在此基础上去熟悉它们的接口。你学过VC的话,也是要花时间去了解那些类、控件的。 

    如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?

我只能说凭兴趣,并且驱动和应用并不是截然分开的

我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。 想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该

做应用门槛低,特别是现在的ANDROID,纯JAVA。做应用的发展路径个人认为就是业务纯熟。比如在通信行业、IPTV行业、手机行业,你了解行业的需求。所以,当领导的人,多是做应用的。

做驱动,其实我不想称为“做驱动”,而是想称为“做底层系统”,做好了这是通杀各行业。我工作几年,做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。他们的业务跟我没关系。当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。 做底层的发展方向,个人认为是技术专家。

其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。有了业务经验,你再了解一下底层,很快就可以组成一个团队。   

回到怎么学的问题上。嵌入式Linux底层系统包含哪些东西?不要急,举一个例子你就知道了。

电脑一开机,那些界面是谁显示的?是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。

启动windows的目的是什么?当然是上网聊天什么的了。这些上网、聊天工具在哪?在C盘、D盘上。所以, windows要先识别出C盘、D盘。在Linux下我们称为根文件系统。

windows能识别出C盘、D盘,那么肯定能读写硬盘才行。这涉及的东西称为驱动程序。当然不仅仅是硬盘,还有网卡、USB等等。嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。

先说到这里吧,嵌入式LINUX里含有bootloader, 内核, 驱动程序、根文件系统这4大块。

一、bootloader:

    它就是一个稍微复杂的裸板程序。但是要把这裸板程序看懂写好一点都不容易。Windows下好用的工具弱化了我们的编程能力。

很多人一玩嵌入式就用ADS、KEIL。你能回答这几个问题吗?

一上电,CPU从哪里取指令执行?

答:一般从Flash上指令。

但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?   答:全局变量应该在内存里

那么谁把全局变量放到内存里去?

答:长期用ADS、KEIL的朋友,你能回答吗?这需要”重定位”。在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了。

 你可曾去阅读过?

4.  内存那么大,我怎么知道把”原来存在Flash上的内容”读到内存的”哪个地址去”?   答:这个地址用”链接脚本”决定,在ADS里有scatter文件,KEIL里也有类似的文件。但是,你去研究过吗?

5.  你说重定位是把程序从Flash复制到内存,那么这个程序可以读Flash啊?   答:是的,要能操作Flash。当然不仅仅是这些,还有设置时钟让系统运行得更快等等。

先自问自答到这里吧,bootloader这一个裸板程序,其实有3部分要点:

对硬件的操作

对ARM体系处理器的了解

程序的基本概念:重定位、栈、代码段数据段BSS段什么的。

    对硬件的操作,需要看原理图、芯片手册。这需要一定的硬件知识,不求你能设计硬件,但是至少能看懂; 不求能看懂模拟电路,但是要能看懂数字电路。这方面的能力我是在学校里学到的,微机原理、数字电路这2本书(书名忘了)就足够了。但是我怀疑你有无耐心把这2本书看完。我不知道现在有没有更快捷的书。想速成的话,就先放掉这块吧,不懂就问GOOGLE、发贴。另外,芯片手册是肯定要读的,别去找中文的,就看英文的。开始是非常痛苦,以后就会发现那些语法、词汇一旦熟悉后,读任何芯片手册都很容易。对ARM体系处理器的了解, 看杜春蕾的吧,里面讲有汇编指令,有异常模式、MMU等。也就这3块内容需要你了解。

    程序的基本概念,王道当然是去看编译原理了。可惜,这类书绝对是天书级别的。劝你若非超级天才还是别去看了。就看我写的和第1期视频吧,别担心,不用花钱。照着视频把硬件相关的实验做了,这些概念就清楚了。我还没有发现第2套讲这些概念的书或视频,允许我盲目吹嘘一回。

    对于bootloader,我学习时是先看了,然后自己写程序把各个硬件的实验都做了一遍,比如GPIO、时钟、SDRAM、UART、NAND。把它们都弄清楚了,组台在一起就很容易看懂u-boot了

总结一下,看懂硬件原理图、看芯片手册,这需要你自己去找资料。剩下的,就按和第1期视频的章节目录去学习吧。

 

二、内核:

想速成的人,先跨过内核的学习,直接学习怎么写驱动。想成为高手,内核必须深刻了解。注意,我说的是了解,我没奢望去写出一个内核。要对里面的调度机制、内存管理机制、文件管理机制等等有所了解。推荐两本书:

通读,请看薄的那本(浮燥的社会讲求速度, 呵),

选读, 想了解哪一块就读哪一节

三、驱动:

驱动包含两部分:硬件本身的操作、驱动程序的框架。

又是硬件,还是要看得懂原理图、读得懂芯片手册,多练吧。

说到驱动框架,有一些书介绍一下。LDD3,即,老外写的那本,里面介绍了不少概念,值得一读。但是,它的作用也就限于介绍概念了。我基本上是入门之前用它来熟悉一下概念,入门后就扔掉了。

    驱动方面比较全的介绍,应该是宋宝华的了,老实说我只看过目录,有不少人说好,这里推荐一下。要想深入了解某一块,绝对是超5星级推荐。你别指望把它读完,1800多页,上下两册呢。我是某一块不清楚时,就去翻一下它。任何一部分,这书都可以讲上2、3百页,非常详细。并且是以某个目标来带你分析内核源码。它以linux 2.4为例,但是原理相通,同样适用于其它版本的linux。

    还有没有其他介绍?呵呵,当然有了,韦东山Linux视频第2期。里对驱动讲得不多,不够深入。于是我录制了这期视频。不仅仅教你怎么写怎么改驱动,还教你为什么这样写这样改驱动。

每一个驱动都是现场编写: 

用绘图板画图讲解──相当于学校里老师在黑板上画图讲解,很直观   绝对不是对着PPT念。

用source insight当场写程序,从第1行开始写,每一课都是这样。我讲了20多个驱动,就写了20多个程序。

写完就编译、测试。

很全面,字符设备驱动、块设备、网卡驱动3大类齐全,硬件介绍、驱动框架分析、测试3大类齐全。

    培训机构里教的内容,远不及这期视频丰富。我在多个培训机构讲过课,从没看到哪个老师敢每一课都当场讲解当场编写代码,当场测试,除我之外!也没看到哪个培训机构讲完这些内容──因为时间不够,讲完起码要一个月,但是这部分基本只有2周授课时间。

    把你手上的开发板所涉及的硬件,都去尝试写一个驱动吧。有问题就先”痛苦地思考”,思考的过程中你会把很多不相关的知识串联起来,最终贯通。

四、根文件系统:

    大家有没有想过这2个问题:

对于Linux做出来的产品,有些用作监控、有些做手机、有些做平板。那么内核启动后,挂载根文件系统后,应该启动哪一个应用程序呢? 答:内核不知道也不管应该启动哪一个用户程序。它只启动init这一个应用程序,它对应/in/init。 显然,这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、手册界面、平板界面等等) 这个问题提示我们,文件系统的内容是有一些约定的,比如要有/in/init,要有配置文件

你写的hello,world程序,有没有想过里面用到的printf是谁实现的?   答:这个函数不是你实现的,是库函数实现的。它运行时,得找到库。 这个问题提示我们,文件系统里还要有库。简单的自问自答到这里,要想深入了解,可以看一下busybox的init.c,就可以知道init进程做的事情了。 当然,也可以看里构建根文件系统那章。

说一下我的学习经历吧。

我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。PCB的设计是在实验室里自学的,只设计过2层板,现在忘记得差不多了。但是保留了看原理图、看芯片手册的能力。

选修了软件学位,对软件设计挺感兴趣,但是也只是学了C语言、数据库而已。凭着兴趣做了不少竞赛题。没能力去参加竞赛,但是把C语言练得很扎实。

在实验室、在第1家公司,就是设计些简单的PCI卡,写一下windows的驱动程序

在第2家公司,用51单片机做车载,开始走上纯软件的道路。

开始感到单片机的不足,辞职半年闭门学Linux,从red hat怎么操作开始。步骤就是先看,再自己写裸板程序操作硬件,接着到分析u-boot。同时看,对LINUX框架有所了解。在写裸板时,建议各位加强对中断的理解,内核就是用中断来完成各种功能的。

分析完u-boot,就开始进行简单的驱动编程了,这时候,能力还很弱。7. 开始去中兴上班,工作2年,编写各类驱动、解决各类问题(驱动问题、帮助定位应用问题),能力得到煅炼。   

    总结一下:

硬件方面的书: 微机原理、数字电路,高校里的教材。毕业多年,忘名了。

Linux方面的书:

 

 

,老外写的那本

3. 视频:韦东山Linux视频第1期(基于S3C2440录制): ARM实验,u-boot,文件系统,初级驱动韦东山Linux视频第1期(基于S3C6410录制): 裸板程序

韦东山Linux视频第2期: 高级驱动

韦东山Linux视频第3期:项目实战

韦东山Linux视频第4期:Android驱动

www.100ask.net, 里面有下载地址。

————————————————

版权声明:本文为CSDN博主「韦东山」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

一.起步

首先,应该为自己创造一个学习linux的环境–在电脑上装一个linux或unix

问题1:版本的选择

  北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术更先进的,linux开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。原则是:我们没有必要把时间浪费在”装系统”上而应集中精力学习最有用的东西。

//注:现在觉得RH很死板,AS,ES等用在服务器上或许不错,Personal desktop用mandrake,debian,suse都不错。

如果你并不打算深入学习linux,而是有诸如适应北京市办公平台迁移到linux上这种需要,那么中软,红旗等中文linux是不错的选择

二.进阶

掌握至少50个以上的常用命令;

理解shell管道”|”,文件流重定向”>”及追加”>>”等;

熟悉Gnome/KDE等X-window桌面环境操作;

掌握.tgz.rpm.biz等软件包的常用安装方法;

学习添加外设,安装设备驱动程序(比如modem);

熟悉Grub/Lilo引导器及简单的修复操作;

熟悉系统固有目录的名称及学会用mount命令访问其他文件系统;了解vi,gcc,gdb等常用编辑器,编译器,调试器学习linux环境下的简单组网;

建议:买一本不需要太厚的linux教材,大致可以满足要求。推荐Linux入门书籍《Linux就该这么学》。

三.高级应用

1.英语

即使你不学linux,我也强烈建议你学好英文。因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装。你必须能无障碍的阅读大量的英文技术文档,在搜索引擎找到的英文网站和网页中熟练的检索。更好能有用英文直接交流的能力,摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距

2.shell

shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的.bat但shell比.bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上这也是CS中的一个重要思想。

此外,shell可以实现工作自动化,这个概念也比较重要sed,awk用来处理文本,历来很常用

3.Perl/PHP

漂亮的脚本, CGI的首选,比ASP好,应用面很广

4.C\C++

C、C++是linux/unix的核心语言,系统代码都是C写的

5.A

系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要。要是走核心路线的话,才c\c++,a最重要

6.Java,Python,Tcl,XML

四、深入学习linux

1.C

如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种), 建议再看一下《The C Programming Language》Second Edition这本圣经/*如果想学缓冲区溢出,这点C的功力可能是不够的*/还有,《C陷阱与缺陷》,《C专家编程》,《C\C++深层探索》。反正经典书看多了是没有坏处的

2.a (AT&T语法,保护模式)

保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有80×86 Intel语法的基础就行,有兴趣可以看看Intel的官方白皮书

3.数据结构(离散数学)

计算机专业的核心课程,重要性我就不说了

4.操作系统原理

看懂这个再去读linux吧

5.微机原理/组成原理(数字电路)

底层直接和硬件打交道,所以这个也要

6.了解linux/unix

我想至少你要会操作吧,了解unix的API

关于linux 学习路线图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux 学习路线图:系统概述、命令行基础、文件权限、Shell 编程、网络管理等实战教程帮助你快速掌握 Linux。 (linux 学习路线图)