redhat学习心得
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除
redhat学习心得
篇一:Linux学习心得
Linux学习心得总结
第二事业部Kevin.sun
Linux简介:Linux是一套免费使用和自由传播的类unix 开源操作系统,是自由软件和开源代码的经典范例,由世界各地的成千上万的程序员设计和实现的。
具有开放性、多用户、多任务、出色的速度性能、良好的用户界面、丰富的网络功能、可靠的系统安全、良好的可移植性、标准兼容性等特点,在服务器,嵌入式,工控等方面都有广泛的应用。
目前风靡全球的Android智能系统也是基于Linux内核开发的。
第一次接触Linux是在上大二的时候,一位给我们上课的老师在课间闲聊时用教训的语气给我们说,计算机专业的学生应该去好好学Linux,你要不会Linux都不好意思说自
己是计算机科班毕业的(当然这有点夸张了,这位老师一直
是研究Linux的,对Linux比较狂热),总之他说了一大堆Linux的好处,比如开源啊,稳定性强,支持平台多等等。
其实之前早就对Linux有所耳闻,但觉得这是专业人士才搞的东西,很高深,我离那一步还早着呢,所以当时也没听懂多少,听完过后只觉得Linux是个开源免费的操作系统,在Linux上面开发是比较有档次的,有前途的。
于是,一兴奋,回去就找了个师兄借了张Redhat9.0(Linux一个比较稳定的商业发行版本)的光盘,在自己电脑上装了个Linux系统,在上面装上了QQ,音视频播放器,练了练Linux的命令,编译运行了"helloworld"之类的入门程序,玩了几天后,我发现了一个比较严重的问题,在Linux上没法玩魔兽和cs,兴奋劲一过,我的第一个Linux系统就在我的电脑分区下长眠了。
到后来,学校开了些以Linux为实验平台的课程,于是又把Linux系统拿出来,在上面做老师布置的作业,对Linux 也更了解了,自己也能勉强在那上面做些简单的应用开发,学会了更多的命令,了解了何为gcc,makefile,vi,gdb,知道了怎样调试自己的程序,仅此而已。
大三暑假找了个实习的工作,工作环境也是Linux方面的应用程序开发,实习了两个多月,跟着公司的老员工打杂,逐渐对Linux的应用开发也有了比较深入的了解,真正的产生了兴趣,自己也在Linux 下做了些小东西,用socket+gTK完成了一个类似于QQ
的局域网聊天工具等,当时高兴了好几天。
毕业后的第一份工作也是Linux相关的开发工作,到后来来xx也做Linux,毕业快四年了,真正在Linux上做开发也有四年多,从应用开发到驱动开发,再到研究内核。
做了这么多年来,不敢说有所成,但多少也有所得,有所感悟,回头看看自己学习的过程,也有过迷茫,彷徨甚至痛苦的经历,走过很多弯路,到现在也能勉强摸清Linux脉路了,还算欣慰。
我们部门还有很多Linux高手,我也不敢班门弄斧,在此只是把自己的学习经历和心得总结出来和大家分享,希望对感兴趣的同事有所帮助。
首先就是基础知识,俗话说工欲善其事,必先利其器,Linux下95%以上的代码都是由c语言编写的(还有部分汇编和脚本),所以要想学好Linux,必须要有扎实的c语言基础,c语言看似简单,但要学好并不容易,它绝非我们大学教材
里面讲的那点东西。
而且千万不要认为c语言过时了,它是开源社区,系统开发和嵌入式开发方面的王者,在软件世界
可以预见的未来,c语言将永远不会被淘汰,并将持续不断
的焕发生命力。
要学好c语言,没有别的办法,除了多写,
多练,多看书,多看优秀代码(例如Linux内核代码)。
在此,给大家介绍几本我读过,并且读后觉得效果不错的经典书籍,入门的就不介绍了,大学基本上都学过,这里介绍几本进阶的,《c专家编程》,《c和指针》还有《c语言深度剖析》,
前两本是国外优秀经典教材,国际级hacker的巨作,是c
语言进阶必备书籍,后一本是国内一个高人写的网络书籍,很多地方也参考了前两本,由于是中国人自己写的,并且语言诙谐幽默,读起来比较容易理解,把这几本书吃透,再加上大量的练
习,你基本上就可以大胆的说你精通c语言了。
第二个需要掌握的基础知识就是数据结构和算法,Linux的代码里面运用了大量的链表,队列,堆栈,hash表,排序查找等数据结构和算法,所以把这些基础搞好,在后续的开发学习中会有事半功倍的效果。
这里也没啥好多介绍的,计算机专业的话《数据结构与算法》课程是最重要的基础课,掌握这些是最基本的要求,没学过的话最好也找本书好好研究下。
当然,上面提到的基础知识也不是说要非常精通才能学Linux,c语言和数据结构不是一朝一夕就能学好的,一些东西先了解下,等在后期的学习开发过程中再慢慢补充也行。
学Linux要怎么入手?有哪些方法和路径?我学的时候也在网上参考了很多Linux前辈的学习路径,基本上都大同小异,殊途同归,总结出来由简到难就是使用Linux—〉Linux 系统编程开发—〉驱动开发和分析Linux内核,我也是这样一路走过来的。
要使用Linux,首先你要有思维上的转变,忘掉windows,Linux和windows的设计思想不同,操作方式也有很大的不同,windowws以图形操作为主,而Linux的精
髓在于命令行,基本上所有的Linux高级用户都是以命令操作为主,所以忘掉图形操作吧,把自己变成"命令控",多学一些命令,你会发现一切会变得简单。
然后学习下
gcc,makefile和gdb,这些是Linux编程的编译器和调试器,先知道怎么用就行了,在以后的编程中会大量使用到,到时候自然就熟悉了。
还有就是要学会搭建自己的开发环境,学着配置下samba,tftp之类的网络服务器,在以后都可能用的上的。
现在我们就进入Linux的系统编程,Linux的系统编程主要分为文件操作,进程控制,线程控制,信号处理,Ipc(进程间通信)这几个部分,这些都是Linux编程的基础,必须要掌握。
就文件操作来说,在Linux的内核层,很多系统接口和设备驱动的节点基本上都是以文件的形式映射到上层
文件系统,用户要访
问这些设备都必须通过文件操作来进行。
而且世界上不存在只有内核的操作系统,如果没有系统级的编程,内核就只是束之高阁的玩具,所以就算你的最终目的是驱动,是内核,这些东西也是必学的,在学这些的过程中也能锻炼你的Linux思维,加深功底,有了深厚的功底,后面的东西看起来会变得很简单。
在这个阶段我再推荐两本书,人民邮电出版社的《Linuxc编程实战》,这本书是Linux下系统编程的入门级书籍,虽说是入门,但涵盖了Linux下系统编程的所
有主题,详略得当,也比较容易读懂,很适合初学者。
还有一本就是国外的经典教材《uInx环境高级编程》(AdvancedprogrammingintheunIxenvironment),这本书很
厚(780页),我自己也没看完,讲的比前面那本更深入,更全面,也会更难一些,网上有人评论说在Linux系统编程上遇到的所有问题基本上都能在这本书上找到答案。
如果时间精力允许的话,强烈建议读完此书,并作为案头教材,随时参考,当然如果你暂时没有那么多精力的话,把第一本书看完并吃透,你也可以进入下一阶段---内核!
进入内核,你的思维又得转变下了。
我在这里先声明一个概念,关于Linux操作系统的两种运行级别,在intelcpu 上有Ring0-Ring3四个运行级别(其实不止是intel的cpu,几乎所有的cpu都有不同的运行级别,只是定义不同罢了),不同的级别运行权限不一样,一个低级别运行态不能随便访问高级别运行态的数据。
但在Linux上只用了两种,Ring3级运行用户态,Ring0运行内核态,没有使用Ring1和Ring2。
Ring3状态不能访问Ring0的地址空间,包括代码和数据。
Linux进程被映射到4gb的地址空间,0-3gb是用户态和内核态共享的,3gb-4gb是内核态专用的地址空间,这里存放了整个内核的代码和内核模块,以及内核所维护的数据。
用户的应用程序是运行在用户态的,如果需要访问内核态的数据,比如应用层需要与驱动交互,进行网络数据发送等,则
必须使用open,read/write,ioctl,send等系统调用才能访
问到,系统调用会调用到内核中的代码,这时,必须切换到Ring0,然后进入3gb-4gb的内核地址空间去执行这些内核
代码,完成后,切换回Ring3,回到用户态。
这样,用户态
的程序就不能随意操作内核地址空间,对内核起到一定的安全保护作用。
所以当进入内核编程时,一切也要小心,稍微不注意就会把系统搞挂。
另外还有一个事情提醒下大家,内核态和用户态相当于两个世界了,两个世界两个制度,之前在应用层编程的用的得心应手的c函数库在内核态就不能再用了,之前的很多编程调试技巧在内核里面也不起作用了。
所以,我们又得从"helloworld"开始了。
写一个内核模块程序应该算是内核的"helloworld"了,把这个程序编译并装载进内核运行后,了解其运行机制,你基本上就算进入内核了(当然你也得先了解内核的基本架构,知道怎么编译配置一个内核),但后面的路还很长,相当于
万里长征的第一步。
接下来你就可以研究Linux驱动了,关于驱动的学习,除了Linux自身的驱动原理架构要掌握之外,硬件基础和实践都是很重要的,所以对硬件基础较差的初学者来说这个阶段最好有人带,一个人自学的话往往收效甚微,你自己琢磨一个星期都想不明白的事情,别人可能一句话就能把你点通。
这个阶段不得不推荐的书当然就是Linux驱动开发人员的圣经---oReILLY的《Linux设备驱动程序》(俗
称LDD)了,现已出了第三版,基于Linux2.6内核,这本书理论讲解透彻,包括了Linux驱动开发中常用到的所有技术点,把底层内核提供给驱动的ApI介绍的也比较清楚,而且每个技术点都有相应的例子供你练习,学的时候注意多实践,不要一味的看书,而且不要指望第一遍就能看懂他,我断断续续看了三遍以上,很多地方也还拿不准,这本书对做驱动的人来说,读五遍以上一点都不过分,每读一遍你都会有新的收获,回味无穷。
但这本书对基础较差的人来说起点偏高,不容易看懂,国内也有不少关于Linux驱动的书,但真正能拿的出手的不多,宋宝华的《Linux设备驱动开发详解》还算不错,他很多地方参考了前面那本,虽说比起来还有一定的差距,但对初学者来说更容易看懂,建议两本书交叉着一起看,遇到不懂的可以相互参考,看完这两本书,你基本上就掌握了驱动开发的基础了,剩下的就是实际开发经验。
驱动方面我就不多说了,很多同事都有丰富的经验,每个人的基础不一样,所处的环境不一样(是否有
人带,是否有机会参加实际项目开发),学习的效果也是有很大的差距的。
如果真的没人带的话,最好自己买个arm 开发板,在网上找资料,自己玩板子,没有实际调试,就枉谈驱动开发。
另外在学习的驱动的时候最好能深入研究驱动的实现原理和机制,多思考,比如知道怎么去创建一个字符设备了,但对实现原理不大清楚的话就深入点去看看Linux
设备模型,了解Linux系统的设备管理机制,对整个系统的掌控都会有不小的收获,不要认为把结果调出来完成了工作你就掌握了Linux驱动开发,那样长期以往,你有的只是靠时间累积起来的经验,但如果能深挖内部原理,你的能力将呈指数增长。
知道了怎么用kmalloc()不代表你就懂的Linux的内存管理系统,知道schedule()函数也不代表你知道操作系统的进程调度原理,正如同会说汉语并不能说明你了解中国文化一样,如果你有足够的好奇心,吃的下苦,有足够的时间精力,那就去读Linux内核源码吧,去了解操作系统的核心,内核比较难啃,但能啃下来的话你将收获颇丰。
Linux的内核主要分为五个模块,内存管理,文件系统,进程调度,进程间通信(Ipc)和网络接口。
进程调度控制进程对cpu的访问;内存管理控制进程对内存区域的安全访问,Linux的内存管理还使用了虚拟内存,较为复杂;虚拟文件系统隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,目前Linux提供了数十种的文件系统的支持;进程间通信(Ipc)提供了各个进程之间相互通信的机制;网络接口提供了对各种网络标准的存取和各种网络硬件的支持。
从图可以看到进程调度是最核心的模块,也是整个操作系篇二:Linux操作系统学习心得
Linux操作系统学习心得
Linux操作系统这个名词记得在很早以前就听过,但具
体是什么样的系统却真的不知道,甚至都不知道它是手机系统还是电脑系统,知道的只是它好像比较不易死机,。
对于这个学期选这门公共选修课,很大一部分原因是怀着一颗要了解一种早就想知道的东西的心选的.当然我平时也喜欢玩点电脑什么的,只是停留在用别人设计好的现成的东西。
经过一个学期linux操作系统的学习,在老师在课堂对linux系统的介绍及通过网络的了解下,知道了linux原来是一种和windows差不多的电脑操作系统,windows是图形界面的,linux类似以前的Dos,是文本界面的,如果你运行了图形界面程序x-wInDows后,linux也能显示图形界面,也有开始菜单、桌面、图标等。
windows有ms-Dos方式,在该方式下通过输入Dos命令来操作电脑;而linux与windows类似,也有命令方式,linux启动后如果不执行x-wInDows,就会处于命令方式下,必须发命令才能操作电脑。
另外linux上也有很多的应用软件,安装运行了这些软件后,你就可以在linux上编辑文档、图片,玩游戏、上网、播放多媒体文件等。
当然我们对linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。
它的产生和需要花钱买得windows系统形成了对比,因为linux的核心是免费的,自由使用的,核心源代码是开放的.任何人都可以根据自己的
喜好来编辑创作适合自己的操作系统,linux是抢占式多任
务多用户操作系统,Linux最大的优点在于其作为服务器的
强大功能,同时支持多种应用程序及开发工具,所以linux
操作系统有着广泛的应用空间。
而且在课上随着老师的讲解和自己动手查资料,慢慢的
学习到了更深入的知识,知道了linux的安装:硬盘安装及
光盘安装,清楚了解安装Linux应注意的有关问题。
学习了
linux系统的进入,关闭和重启。
掌握了linux系统的硬件
配置,如显卡,声卡,网卡等,并且通过对linux系统基本
命令的学习,尤其是shell命令语言(亦称命令解释器),
熟悉了系统的基本操作。
当然在学习中发现英文学得好也是
学好linux的关键。
同时还了解了linux对应下的一些常用
软件及这些软件的安装。
因为linux在服务器中广泛的应用,
于是我们进一步学习了linux下接入internet的web服务
器的安装与配置方法。
之后还了解了linux的网络安全,系
统的安全,用户的安全等。
眼看这个学期Linux的课程已经告一段落了,在这段时
间的学习如
果要问我在这门课中学到了什么,我觉得是一种为学的
方法,使我受益非浅。
首先每学一部分内容前必定有很多疑问,想要独立解开
疑问,从网络上找资料我认为是比较好的,现在的网络又这
1121。