学习linux 的方法(个人总结)


     我想应该写一篇这样的文章, 网友包括现在的学生都在问这样的一个问题。 可能你是刚刚接触linux 操作系统, 方法应当是有的。
     04年我是第一次接触linux 操作系统, 使用的版本是 redhat 7.0 , 一直在使用redhat 系列的操作系统, 包括 fedora  centos 以及suse linux 。 这时候就需要分类, 我想分类是大家很清楚的一种方式,很小的时候, 你就知道分类, 比如这个是白菜, 那个是黄瓜, 分类是对我们学习很重要的一个方面, 这有利于比较出其中的不同。  就是相同系列的版本的linux 也会有不同, 例如fedora  与redhat , 一种支持更新一种不支持更新, redhat 还是比较专业。 
     我第一次装redhat 是在我的486 thinkpad的 390e笔记本上, 属于上一个世纪的产品, 最初的驱动不全, 中文支持不好, 还是用的2.4 的内核, 但是已经顺利的运行起来图形界面, 这个图形界面很庞大, 大部分的工作是切换到文本界面去完成, 所以现在使用shell 很顺手。 首先你得解决现有的问题, 例如当第一次安装redhat 的时候, 花了我12 个小时, 由于光驱太差劲, 而且是 7 张光盘。  不知道该安装什么不该安装什么, 索性全部安装了。  运行起来就出问题, 一个是慢, 这个还能理解, 再有一个是没有办法上网, 虽然网卡已经可以驱动起来, 但是没有adsl 的上网软件。 也就是拨号软件, 为了能够让红帽子上网, 咨询了联通公司的技术人员, linux ? redhat? 这是什么东西没有听说过, 好家伙, 04年linux 才进入中国三年, 并没有多少人知道。  所以只能靠查找资料,  这些资料往往是英文的, 每天查找一点, 每天积累一点, 那些命令也就都会了, 后来终于找到了拨号的软件, 安装上去, 可以上网了。 
     首先你能让你的linux 机器运行起来, 能够工作这是最重要的, 现在的linux操作系统没有那么复杂, 安装起来没有那么多步骤, 例如分区, 以前的linux操作系统分区是十分复杂的事情, 由于现在支持傻瓜的安装, 所以估计大部分现在学习linux 的人都不知道有一个分区叫做swap 分区, 这个分区可以调整系统的性能, 主流的ubuntu 也是可以。   普遍的在虚拟机当中装一个ubuntu 操作系统, 非常的慢, 但是你有没有想法去改变这个状况呢? 你需要采取一些设置, 禁止一些服务, 那么这些你可以百度一下或者google 一下。  google 对于学习技术的人搜索到的资料还是比较靠谱的, 由于google 退出中国, 现在服务器不稳定, 所以只好忍痛割爱使用百度。 
    下面是让linux 做一些事情的时候了, 你会学习到GCC G++ Java 或者Qt GTK 的编程。 有些事情我们不得不说, linux 上的包的依赖关系一直是头疼的问题, 所以在安装一些软件之前最好读一读所谓的readme 文档, 这些文档一般都会放在源码包中。  提起源码包, 有时候你会发现,  当编译的过程中会有很多错误出现, 因为是依赖关系, 在编译过程中会耗费很长时间。 举个例子吧, 常用的嵌入式当中需要编译内核,  这时候往往需要选择支持的驱动, 有一种文本格式的, 效率很低, 但是需要的依赖库很少, 有一种是xwindows 支持的, 如果不是人品问题, 那么这种方式肯定能通过, 最后是需要一种图形界面的, 需要Qt 的库文件的支持, 所以需要安装Qt 的底层库, 这个你看它给你的提示就知道缺少什么库了。就是你安装了Qt 的库文件, 往往还有个 ncursor 的库的支持, 这时候你就需要安装ncursor 了。 你说我怎么知道这个过程的, 我是因为碰壁才知道这个过程的, 所以你需要多练习才能找到错误, 寻求到解决的方法。
    有一些朋友是做idc 业务的, 这个业务现在说起来是饱和的市场了。 基本上都是大吃小强吞弱, 不断增加自己的实例。 idc 业务中服务器市场web 主要是apache 占据, 如果需要很好的稳定性, 还需要linux 操作系统的支持。 有时候我们很陌生, 对于这些服务不知道是从什么地方来的, 比如 samba 干吗的, nfs 干吗的, wu-ftp 是什么软件等, 还有一些其他的服务, 比如说你得使用mysql 作为数据库吧, 要用php 来作为脚本吧, 包括一些加速的模块。那么你需要了解一下这些服务的具体配置, 其实不难, 困难的是, 由于不同的linux 操作系统的版本造成了配置有一些差异, 这时候你就需要跑到文章开头, 给他们做一个分类。  apache 服务你需要了解到apache能够做什么, 它能够支持什么, 效率,并发, 跟一些网络相关的东西, 这就远了, 比如说什么叫nat 映射, 比如说http 协议, 怎么通过套接字传输的, 怎么去建立虚拟主机, 怎样才能让自己的域名正确到解析到虚拟主机上。  总是感觉, 不要拿到一个东西就认为功能简单, 我们试图要通过一连串的方式来学习, 对提升自己的技术水平非常有帮助。
    当你掌握了一部分技术之后, 最好保持一种好奇心, 或者坏小子的想法。 你尝试一下我不这样配置会发生什么情况, 或者说测试一下软件的极限, 让他按照不可能异想天开的方式去运行。 这对于我们处理一些突发问题有帮助,软件的编写其实也是这样 , 除了可以让程序做一些事情, 也可以让程序运行起来破坏一些事情。 很多公司不是要求内存检测么, 很多东西你需要自己去了解, 例如缓冲区溢出,为什么会存在缓冲区溢出, 为什么会有病毒, 病毒怎么传播的, 为什么一个无名的程序能够拿到root 权限, 而不需要通知你, 也不需要知道你的密码。  

   上面所说的可能已经带你走回入魔了, 不过这对于你深刻了解你手头上面的事情非常重要, 例如你的朋友开发了一个程序, 非要设置一个密码, 你有没有办法破解他,例如你朋友设计了一个软件, 你是否能够通过你自己的知识让这个程序不能运行起来, 当然有人回到说, 可以啊, 只要删除了这个软件它就不能运行了, 我还想说呢, 你关了机器什么软件都运行不起来。 软件本身有自己的逻辑, 这种逻辑往往会让人经脉错乱, 因为我们的头脑总是希望能够从一个时间一块空间中完成所有的事情, 当代码体积变大, 就变得没有办法调试。  所以我们借用一下孩提时代的想法, 程序本身就是拍积木, 划分成几个模块使得思路更加清晰, 或者说你自己先将思路写下来, 分析好结构后,  声明跟是先做到彼此独立。 这看上去会增加代码的数量, 但是习惯的培养也就是从不辞辛苦开始的。 

   工科的学生发现不够人性化, 侧重于功能的实现。 例如你开发的软件需要让人感觉到非常的美观, 从第一眼看上去就爱上这个软件, 我想这样的要求是在太难了, 包括我在内, 因为我们还是没有读过美学的人。  还是希望博览群书, 能够在技术上找到点共性,所谓共性,也就是触摸到艺术的一点了, 那么你做的东西会有更多的人喜欢。 学习软件设计的, 很少有是做ps 设计或者cowdraw 设计的, 所以软件界面一塌糊涂。
   我们继续往前走, 我在授课的时候, 碰到高级编程这部分, 实在叫人吃力, 因为大部分的人并不是学过操作系统的原理, 起码你该知道系统调用, 进程调度, 时间片分配这些内容吧,这有利于了解程序运行过程中的一些底层知识, 对于编程来说大有裨益。 我还是很推荐一个视频叫做《操作系统的革命》 说的操作系统的过去跟未来, 所产生的影响。 
   大部分的时间还需要自己去摸索,  提出问题解决问题, 慢慢的你会跟linux感觉很亲切, 只要在windows 上可以完成的事情linux 也可以完成。 甚至有更多的开源软件可以使用。 开源软件在教育方面, 尤其在启蒙教育方面有很多。
   个人的一些想法跟感受, 希望对大家受用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章