笨兔兔的故事(下)
(87) 间歇
只见Totem身后闪出一人,正是GNOME Mplayer。一看这名字您就知道了,这是G帮的人。SMplayer一看见他,顿时也是心里犯嘀咕。为什么呢?您众位大概有所不知,这GNOME Mplayer和SMplayer其实都不过是个图形界面的外壳而已,他们的后台都是Mplayer老大。因此上,这二人本是同门兄弟,只因信仰不同,故而一入G帮,一投K派。即是同门学艺的兄弟,这本领又能差的几何?这SMplayer寻思,纵然自己比GNOME Player勤学苦练,无奈方才刚刚跟Totem大战一场,有要照顾这那lili用户的视频,自己恐难取胜。可那GNOME Player更无废话,上来就超起兵刃比划起来,也是将一件件兵刃轮番耍起来,比刚才totem所耍的还要多上一些。SMplayer只得咬咬牙,再跟GNOME Player拼死一战。只见整个内存中那真是录像与配音齐飞,字幕共长片一色。二人杀的是难解难分。这GNOME Mplayer平时便不服气SMplayer,本是同门学艺,可在江湖上,绿林中,这SMplayer的名号却远远盖过他GNOME Mplayer。今天他就想让别人见识见识,他GNOME Mplayer不比SMmplayer差。因此他论起武艺,虽然与SMplayer差着一点,但是招招都拼尽全力,狠辣异常。斗到一百三十多回合的时候,这SMplayer渐渐支持不住,眼看就要跳帧了。这时候,内存里已然围满了人。有看热闹的,有叫好助威的,有打酱油的,有路过的,还有不明真相的群众。围的是里三层外三层。虽然主人也安装了KDE环境,可是这次开机,进入的是GNOME,因此这内存里围观的基本都是G帮的人,K派的人都在那硬盘里睡觉呢,SMplayer可谓是孤军奋战了。
正在这时,OpenOffice老先生推推眼睛,咳嗽了一声,发话道:“两位请住手!”OO老先生可谓是德高望众,虽然本身是G帮的人,可基本所有的Linux发行版,不管是用GNOME也好,用KDE也罢。都会请他做默认的办公软件,因此上即便是K派的人,也都服气这位老先生。话音刚落,GNOME Mplayer罢手不打,SMplayer自也愿意停下来休息,站在那里直喘粗气。只听OO老先生继续说道:“要我说阿,这机器启动时进入的是GNOME,满内存都是G帮的人,可用户偏偏要叫来人家SMPlayer来播放视频,这已然是人家赢了。更何况两位轮番上阵,不是也没把人家一人打下来么?”后面这句,自然是看着Totem和GNOME Mplayer说的。Totem艺不如人,自觉惭愧。GNOME Mplayer愤愤不平,却也无话可说。本以为一场风波就此平静,忽然,lili发来命令:叫那个EVA起床,我要聊QQ。
(88) 舌战
eva这小子动作麻利,跑进内存里,正要连接服务器,看见一群G帮的人围着smplayer,smplayer在那呼呼喘气。顿时肝火上升,大喊:“你们什么意思?以多欺少是不是?告诉你们,我们K派的个个都是以一当十的好汉,何况现在硬盘里k派的软件可不一定比你们G帮的少。都叫起来,看谁打的过谁。”SMPlayer不愿意再惹事生非,更何况周围都是G帮的人,就算加上个EVA,甭管是初号机还是零号机,那也打不过这么多人,于是连连向EVA摆手,却还没把气喘顺溜,之说:“算,算……”无奈EVA年轻气盛,立时接过去说:“算什么算,不能算!刚才是谁挑头吵架的,出来道歉。”周围G帮帮众本要各自散去,一听EVA如此将火,都过来位自己这边的人站脚助威。大家都望向OO老先生,心说您发个话,我们该怎么着阿?OO老先生又推了推眼睛说道:“我看这也就算了吧,大家都是抬头不见低头见的……”正说道这里,主人那边要打开文档,OO老先生赶紧赶过去,一边走一边回头对众人说:“大家勿动干戈阿~”那老先生毕竟年迈,又向来做事一丝不苟,既然去给主人处理文档,就断然没有气力和精神来管这边的事情了。
老先生一走,大家七嘴八舌的议论开了,有的指责EVA不该没事找事,有的说Totem没错,干什么要道歉?你一言我一语的,EVA想要辩驳,却不知该先反驳谁好,之说出个:“你们,你们……不是……”这时候,又一个声音响起:“大家静一静。”G帮众扭头一看,原来是星际译王,星爷。星爷也是个知识渊博的人,所以也有些威信,大家对他也是很尊敬的,因此众人都安静下来。星爷说:“咱们就这里说说明白。Totem怀才不遇,抱怨了两句,确是他的不该,不过你smplayer说什么本帮软件都不如你派细致之类的话也多少有点不公。这就算扯平了吧。后来你们三人比划了比划,就当是朋友间切磋武艺,也没什么,大家握手言和吧。”SMplayer这时歉然道:“也是我年轻气盛……”还没说完,就被EVA抢过话头:“星爷,您说的我都理解,咱们也不愿伤了和气。不过您说‘G帮软件不如K派界面细致漂亮’这句话有些不公,我却不能认同。咱们有一说一,有二说二,你们G帮的软件哪一个长得比我们K派同类软件好看的,说出来听听?”星爷本想随便说两句,把事情压下去也就得了,谁想到这EVA这么较真,便有几分不悦:“美丑本无定论,还是人们的审美观点不同。本帮软件,向来求简,以简约为美。清心淡雅,简单易用,每个软件,均不求多能,只做好一两件本职工作,深合Unix哲学之美。想那vi,emacs,sed,众位命令行时代的前辈软件,又有哪一个是靠张的好看才获得人们喜爱呢?贵派界面确是细致漂亮,倒也算是另一种美貌,不过角度不同罢了”这话明着说两派软件欣赏角度不同而已,却暗指G帮软件才是深合Unix哲学的正宗。SMplayer怎会不明其中真意?只是不便发作,拱手说道:“星爷教训的是。我派立派虽然早上那么几年,然终究不如贵帮发展的范围广泛,乃至几大发行版都用GNOME为默认环境。我们这界面的问题,也都因为使用了C++作为开发语言。这面向对象,总比面向过程的传统C语言更利于提高开发效率,所以也就有时间创建复杂界面吧。所以,界面,也不是我们的功劳,实在不值一提。”这一下表面上是谦虚,实际上却是说K派历史比G帮悠久,用的C++也比G帮用的C语言高级了。G帮那边的皮筋小弟坐不住了,插话道:“C也未必落后,C++也未必高级,面向对象也不过是个思维模式,C也一样能面向对象,C++也一样能写成面向过程。我就听主人聊天时候跟人家讨论过,C语言的结构体里放上几个函数指针,和C++的class又有多大差别了?只要编程的思想在,用什么语言不是重要的。若是功夫到家,飞花落叶,皆为兵刃。反倒是C语言更加轻巧,效率更高。”EVA马上反驳:“C++乃是一本高深莫测的内功心法,开发效率上面,C语言远远比不上。连个异常都处理不了的语言,毕竟是有些过时了。”“哈哈哈哈”豪爽的鹦鹉螺走了出来,“真是笑话,难道程序员写个程序自己都不知道程序会运行出什么结果?知道哪里会出错就多写些代码做检查嘛,还非要抛出什么异常?!哈哈。可见C++只是给学写程序的小学生用的吧。”这时候从硬盘中走出一人说道:“C++开发方便,理念先进。你们也说了,C++支持面向对象,也一样可以面向过程。正如一口宝兵器,既可以做刀来用,也可以当剑来使,不是更加得心应手么?再说这异常问题,C++中你若是清楚程序会运行到何种状态,不使用异常检测,又有何妨?C++不过是多提供了一些可能性罢了。”大家一看,说话的是KDE的文件管理器,小海豚,他跟鹦鹉螺可谓是针锋相对了。星爷说道:C++提供更多可能性,这本是好意,无奈太过臃肿复杂,虽说是本秘籍,但是练起来,难免让人走火入魔。反倒是C语言,初看只是粗浅武功,但越练越觉得其中内涵,深不可测阿。别的不说,咱们头,Linux内核,难道不是C语言写的么?”说着,扭头望向了我。
(89) 了断
剑
利剑
无形的利剑
唇枪舌剑!
一边是G,一边是K,中间便是这把唇枪舌剑。枪来剑往,远远的,只有我有孤独的身影。我就这么走开么?或许我是应该走开,但就在我还没有做出这个决定的时候,这把剑指向了我!G说:“看!他就是用C,你们敢说C不如C++?”K没有说话,看得出来对我有些忌惮。高手是不必出招的,通过他的气场就可以感觉到,我就是高手!K无话,G也无话。
我走近了他们一步:我该如何停止这场无谓的争端?我该怎样化解这数年来积攒的恩怨?我的对手不是K,也不是G,而是在他们身后,是他们身后深远的文化。我要挑战么?
我又走近他们一步:我该不该出招?我知道我的招数可以凌驾于他们之上,十步一杀!不会有声音,不会有差错。用剑么?笑话,我已很久不拿剑了,剑,就在我心中。
我走出第三步:要帮助G么?我用C,但也用过C++。天下武功,原无不同;要帮助K么?我喜欢Qt的精致,也欣赏Gtk的简约。各有所长;要消灭掉他们所有?Gnome和KDE,都是优秀的。
第四步,站定:就让我结束今天这场争斗吧。不去管历史,不去问将来,一切,留给后人评说。气场大盛,心中剑起——出招!
“都不要吵啦!Init!快过来,没收他们工号,收回他们内存,全都打成僵尸,回硬盘给我睡觉去!”是的,内核就是有这么点特权,想干掉谁就干掉谁。不过这么一折腾,系统就忽然卡了一下,不知道主人有没有发觉。以后您要是用Ubuntu的时候忽然系统卡住或者死掉了,那多半是里面软件们又打起来了。
那天之后,lili就没再来登录过,可能是觉得我不好?长的不好看?不得而知。最近G帮和K派倒是不吵架了,因为每天都很少叫他们起床。你问为啥?因为主人开始研究脚本了,每次启动都不进入图形己面,直接字符操作。你问怎么不启动图形界面?简单,一条命令:sudo update-rc.d -n -f gdm remove
或许是因为那个rubbish176号让主人伤心了吧,从那之后主人就不研究c语言了,这不现在开始研究shell脚本语言了。有人问shell脚本跟C有什么不同呢?这个吧……你说骆驼跟洋葱有什么不同呢?他压根就是俩东西!
(90) shell
说起编程,编程就得有语言。语言有很多种,可以分成两类:编译型和解释型。编译型就是像C语言那样,用C语言写出来的源代码就像图纸,前面说过了,需要GCC施工队来把图纸变成真正能够运行的程序。解释型语言就不需要施工队了,解释型的语言写出来的代码不是一份图纸,倒像是一份任务清单,上面用某种语言写明先做什么,后做什么,最后做什么。写好之后保存成一个脚本文件,随便起个名字,然后赋予可执行权限,就可以直接执行了。有的人怀疑,这个文件写出来就是一个文本嘛,又不是一个程序,他怎么会自己跑到内存里去执行?问的好,脚本文件当然不可能自己跑到内存里运行,除非是闹鬼了。解释型的语言既然是一份任务清单,那么就得有一个可以照着这个列表执行命令的家伙,我们管这个角色叫做解释器。
比如我们说的shell编程,shell有很多种,我这里默认的shell是bash,他就是shell脚本程序的一个解释器。主人随便建一个文件,里面写上:
echo “Hello World!”
然后保存成ttttt文件,赋予可执行权限,然后运行./ttttt。这时候,首先,我会判断这个文件可执行,并且是个一文本文件,那么说明这是个脚本,是个解释型语言的脚本。然后根据当前系统的设置,找到默认的shell,比如我这里默认的shell是bash,于是我叫醒bash,把这个脚本交个他,让他去执行。那如果不想用默认的shell呢?那就在脚本文件的第一行明确写明要用什么shell执行。格式类似这样“#!/bin/bash”,记住,这行必须写在脚本的最开头,这个好理解吧。总不能我打开了这个脚本,叫来了默认的bash执行了一半了,才发现您在中间写着一行:#!/bin/csh,这时候才知道脚本应该叫c shell来执行,你这不捣乱么。所以,一定要在脚本的最开始搞清楚这个脚本是用于哪个shell的。
shell有很多种,比如Bourne Again Shell,C Shell, K Shell,Debian Almquist SHell等等。我们Linux最常用的就是Bourne Again Shell,也就是BASH。关于这个shell的历史,这怕是要追溯倒Unix的年代……
那个时候,最初的UNIX系统的shell,是那个研究铃铛(Bell)的实验室里的一个叫做Ken Thompson发明的,叫做Thompson shell。这个shell是一个很简单的程序,它不过是作为UNIX系统的用户接口而已。(就像现在bash作为linunx系统的命令行接口。用户输入的命令都是由bash来解释和执行的。)那时候的Thompson shell顶多是可以把几条命令一起写在一个文件里来执行,类似批处理,没有流控制,没有变量,没有函数,所以还完全谈不上shell编程。后来觉得有必要加入一些条件判断阿,跳转阿之类的功能,就依靠外部命令实现了。与此同时,铃铛实验室的另一个牛人,Steve Bourne,也设计了一个shell,叫做Bourne shell。(他们都生怕别人不知道程序是谁写的,都以自己的名字命名)这个shell就强大些了,有了基本的流控制源语,if else之类的。这俩人都力挺自己设计的shell,渐渐的两种shell有了各自的追随者。有觉得这个简洁的,有觉得那个好用的。有道是一山不容二虎,到了1970年代末,打起来咯~ 由于两个shell互相不兼容,而一个和平统一的UNIX弄两套shell是不大合适的,(大概是因为那时候他们没有好好学习一国两制的理论)所以必须确定一个UNIX 的标准shell。于是,一场旷日持久的战斗打响了,两派相互争论各自shell的优缺点,您看见K派跟G帮怎么吵架的了么?估计他们也差不多。最终,以Bourne shell的胜出结束,Bourne shell作为默认的shell出现在UNIX 第7版系统中,其二进制程序被命名为sh放在了/bin。直到现在,linux发行版中依然都存在着/bin/sh这个文件,不过现在这个sh一般都只是个链接了,链接倒默认的shell。
那bash呢?那是1987年,一个叫做Brian Fox的家伙(狐狸大脑?汗-_-b)创作的,这个shell兼容Bourne shell,算是对Bourne shell的改进版,于是叫做Bourne Again Shell,简称Bash。这个shell成为了GNU计划默认shell,应用在绝大多数的类UNIX系统中。
(91) 乱七八糟
除了shell以外,我们Linux下还有很多很好用的脚本语言,比如perl就是其中之一。Perl是一种很有名的脚本语言,是由一个叫做LarryWall的人,在1987年设计的。“它也是shell编程么?”不,它不是shell,它是一种脚本语言,shell也是一种(或者说一类)脚本语言,但是脚本语言不一定就是shell。越说越乱了是吧。
什么是shell?是海鲜馆的扇贝?是汽车用的那种润滑油?都不是,shell是一种人机交互的界面,之所以用shell这个词,是用来对立于kernel,也就是我,内核。从根本上来说,计算机的运作就是用户(就像我的主人那样的人类)和我的交流。可是我们是不可能直接交流的,所以,就需要给kernel套上一个可以与人类交流的”壳”,也就是shell。各种各样的shell虽然语法上会有些不同,但是都同样是解释用户的命令,然后向我汇报用户到底想干什么,之后我再去叫醒相应的软件或者我自己亲自去干活。Perl呢,就不负责这种工作,而只是一个脚本语言,你可以用它编程。虽然Perl编出来的程序要不C语言编出来的程序在执行的时候耗费更多的CPU——因为是解释型的嘛。但是编写的过程相对简单而快速,很适合写一些偶尔需要一些简单功能的脚本程序。写Perl脚本跟写shell脚本没什么区别,还是随便找个文本编辑器,按照Perl的语法写成一个脚本文件,在第一行写明#!/usr/bin/perl,说明这是一个Perl脚本,需要/usr/bin/perl程序来解释。
首行的这个指名解释器的写法没什么神秘,只是为了简便而定义的一种写法。如果你不写这行也行,比如你在当前目录下有一个ttttt脚本,是个perl脚本,那么你完全可以运行/usr/bin/perl ./ttttt来执行。如果写了#!/usr/bin/perl这行,那么直接运行./ttttt的时候,其实我也是先读取第一行,发现,哦,原来是一个需要perl程序执行的文件,然后我就会运行/usr/bin/perl ./ttttt命令来执行。效果是一样的,只是省的你打了而已。如果你写#!/bin/cat 呢?语法上也是可以的,运行它的时候,,我还是先读取第一行,发现,哦,原来是一个需要cat程序执行的文件,然后我就会运行/bin/cat ./ttttt。效果?你说呢。
(92)文泉驿
今天说说文泉驿。
文泉驿是个什么呢?用Linux的中国人不知道文泉驿那就白混了。这个文泉驿是一套大名鼎鼎的中文字体。各位要有兴趣,我说说,您听听,在想当初,很久很久以前(对你们人类来说其实也不算久啦,也就6,7年以前),那时候的Linux日趋完善,不少国内的开源同好们,都来尝试安装各种各样的Linux。虽然硬件兼容的越来越多,应用程序的安装越来越便利,但中华儿女们安装了Linux之后无一例外的遇到了中文化的问题——没有一个合适的中文字体。要知道,Linux是自由的,开源的,其中很多是免费的。那么自然不可能在免费的Linux中带有任何需要付费的字体。那Linux上自带的免费字体是从哪来的呢?都是世界各地热心的爱好者们贡献的。爱好者们自己创作一套字体,然后无偿贡献出来,给大家使用。因此,有很多优秀的,免费的英文字体可以用。可为什么其他国家有热心爱好者贡献字体,就没有热心的中国人贡献字体呢?是因为中国人懒?不是。是因为中国人自私?也不是。是因为中国人少?靠,更不是了。答案很简单,因为中国字多!人家做一套英文字体,总共也就二十六个字母的大写加小写,外带十个数字和一些标点符号,加在一起不超过一百个。一个人花一周时间就能做完了。汉字有多少?找本新华字典翻开前言看看——收录汉字一万个左右!这要是让一个人把这一万个汉字都做成电脑中的字体,还不得累吐了血阿。就算是只作常用汉字也得有四千多个,这还不算繁体字和各种数字,标点。那么那时候有没有中文字体呢?当然是有的,否则难道十年以前中国人都不用电脑?可是一般中文字体都是需要收费使用的——这个很合理吧,这么困难的东西,人家一个人(也可能几个人)费了好大劲作出来了,人家也得穿衣吃饭,养家糊口嘛。就算有几个不免费的中文字体,也是有很多问题,丢字阿,显示效果不好阿之类的。所以那个时候,Linux的中文用户就只有忍受着质量差,总丢字的中文字体,或者偷偷的把其他系统下的付费字体复制过来用。说起来偷付费字体这件事,虽然不至于今天偷来用了,明天警察就来敲你家门,可毕竟不算光明正大不是。
直到2004年,中文字体的事情有了转机,带来转机的,是一位美国哈佛大学医学院的博士。这位仁兄倒不是来发扬国际主义精神的,他之所以关注中文字体,是因为他本身是个中国人——房骞骞博士。不知道是不是因为他家房子被拆迁了,所以被逼无奈去美国当博士去了,反正他在接触到Linux的时候,发现缺少中文字体是个很头疼的事情。他也知道要是自己作出整套中文字体一定要吐血的,但是他还知道,积少成多,集腋成裘,众人拾柴火焰高,一个好汉三个帮,一个篱笆三个桩……(此处略去类似俗语若干)他利用网络为平台,创建了“文泉驿”项目,目的是要创作出一套高质量的,免费的中文字体。他自己动手编码,设计网站,简化设计字体的复杂程度,把汉子字体的设计搬到了网页上。这让每一个热心的志愿者都可以按照网站上的指导,完成一个个汉字字体的设计。就这样借助全球草根志愿者的力量,他开始了“万里长征”。经过数年的连续奋战,至今取得一项永留史册的硕果。这就是“文泉驿”汉字库,其中包括点阵和矢量字体。
(93) dropbox
今天,主人又安装了一个软件——dropbox。这家伙也不知道是干啥的,运行起来之后只是在主人的家目录下创建了一个Dorpbox目录,之后就不见动静了。
过了一会,主人往那个Dropbox目录里放了一个叫做小说.odt的文件。我们还没反应过来,dropox就马上湊过去,记录下这个文件的编辑日期,然后打开这个文件,把里面的内容都读取出来,打成一个一个的网络数据包,然后来我这里请求是用网卡。我黑明白他要干什么,毕竟这家伙是主人运行起来的合法良民,他要用网口,我也没有理由不让,于是点了点头。他很快跑到网络那里,把这些数据都从网口发送了出去。
过了一会,主人叫来OO老先生来编辑这个帐本文件,写下了一些文字:
绯红的天空中,一架飞机追逐着那一抹残阳去到地球的另一端。飞机渐渐变小,直到消失不见,夕阳也越发的红润,红的,像她的心,流着的泪。
朋友问,他走了?
恩。
没对你说什么?
他说……再见。
没有一句誓言?
……,再见,也是句誓言吧。
呵呵,看来主人是要开始写小说了。这东西我是不懂阿,毕竟我是个操作系统,只有理性的逻辑思维。根据我的逻辑思维判断,写小说这东西,还是挺费劲的,因为主人就写了这么几个字之后,就让OO老先生保存去了。OO老先生自然是找到我,提出要使用硬盘,经过我的允许后,把这些东西,都存在了硬盘里那个dropbox目录下的小说.odt文件里。刚存好,dropbox又蹦出来了,一看,小说.odt被修改过了,赶紧又用笔记录下修改时间,然后掏出里面刚刚写进去的内容,又打成包,又从网口发送了出去。这家伙怎么让我联想起了电视剧里的国民党特务呢?他到底把主人写的这些东西发到哪里去了呢?我查了一下记录,他似乎每次都是把这些东西发送到同一个ip地址……
之后的几天,主人没有登录进来,不知道去哪疯去了,我们也乐得睡上几天觉。这一天主人终于回来开机了,我按照流程正常启动,看看自动启动的程序清单,比以前增加了dropbox,还得去叫醒他,不知道主人到底想什么呢。dropbox起床后,赶紧出门跑到网上去了,过了一会,报回来一大堆数据包,回来之后赶紧翻出他的小本本,查看这上面的记录。查明了记录后,他打开了那个小说.odt文件,然后一边看着他抱回来的数据包,一边在文件中增加了些内容:
粉红色的纸页,淡淡的透出茉莉花的香气,娟秀的字体,给人很舒服的感觉,像在听一个朋友轻声诉说。不经意间,林夕竟已被它感动了,她抬起头,笑笑对欧阳雯雪说:“你写的真太好了,真羡慕你能有这样的文笔。再见也是句誓言…… 嗯, 最喜欢这句了。有时候,我也有想写东西的欲望,有时候也能写出些我自以为挺好的东西,甚至还想过当作家,呵呵,是不是有点傻?不过像你这样写出整整这么一 本,还都这么有意境的文章,真的不容易。”说着,林夕将记事本合上,递给欧阳雯雪。雯雪接过来说:“呵呵,当作家也好啊。林夕嘛,注定是个有梦的人啊。其 实,每个人都有有话要说,有感要发的时候,写作是一种抒发的方式,每个人,只要有想法都能写出好的东西来。
哇塞!这,这家伙竟然会写小说耶!他,他替主人往下编呢。等等,不对吧,天底下能有这种软件么?他抱回来那堆数据包是干什么的?常言道,内事不明问老婆,外事不明问google。赶紧让狐狸妹妹找狗狗哥问问吧。
(94) 墙
原来,这家伙是一个能够通过网络同步文件夹数据的软件。凡是放在那个dropbox目录下的东西,他都会备份一份到网络上,可不是到处乱备份阿,那样的话就该出XX门了。他是备份到一个指定的专门给主人用的地方。因为主人之前去dropbox网站申请了帐户,所以会有一块空间供主人专用。dropbox在首次启动的时候已经问过了主人用户名密码,所以可以直接去访问那块专用空间。这样,主人在我这太电脑上做的工作,保存的文件,可以很轻松的在另一太电脑上看到。就像这个小说.odt文件,主人在我这里写了个开头,换到另一台同样装了dropbox的电脑上,打开那台电脑的那个dropbox目录,就能看到在我这里写进去的内容。他之所以总是记录文件被修改的时间,是为了确认哪台电脑上的数据是最新的,这样才好决定是用网上的内容更新掉当前机器上的内容,还是反过来。
这样的软件,确实是挺有用的,不过前提自然是需要有那个网站的支持。这年头都流行依赖网络的软件,就像超级牛力,没有那些软件源,超级牛力也不比一头牛有用多少。dropbox每隔一会都要向我申请是用网络,好查看有没有新的内容需要更新,他总是很着急的样子,获得许可之后马上一百米跑的速度冲出网口,这一次也不例外,我刚说:用去吧。便听得耳边生风,呼的一下,dropbox就飞出了网口,之后听外面噹的一声,然后是稀里哗啦的动静,最后看见dropbox捂着鼻子会来了。我赶紧过去问:怎么了这是?装上英菲迪尼啦?对方逃逸了么? dropbox一脸苦像:哪阿,撞墙了。我无奈的摇摇头:你说你,也太不小心了,再着急走路也得看着点阿。这路你这两天也跑了n多趟了,应该挺熟了阿。dropbox诉苦:路是没问题阿,我当然没走错,可是不知道什么时候,那突然立起一堵墙。我也感觉很蹊跷,只好安慰他说:没事,先去休息休息,过一阵子再去看看。怎么会有这么道德的人在这垒墙呢,肯定是非法建筑,估计过两天城管就得把他拆了。到时候你再去就行了。
话虽这么说,可是日子一天一天的过去了,那堵墙依然屹立不倒。dropbox没法连接到网络,变得垂头丧气,郁郁寡欢,整天念叨着:强阿,墙阿,抢阿,哎……我还有什么用阿,我还有什么用阿。 哎,说来也是,不能连到那个网站,dropbox确实一点作用也发挥不了了。主人似乎也很理解他,虽然没用了,虽然不再让他自动启动了,但始终没有删除这可怜的家伙,似乎,在等待着有一天能够出现新的希望。
(95) 地址
然而没有不透风的墙,也没有走不通的路。表面上走不过去,想想办法,总还是有绕过去的方法的。我们软件往互联网上发包,其实和你们人类送信,邮包裹,发快递是一样道理的。
我们要发数据给另一台电脑,这电脑可能是服务器,可能就是个个人电脑,不管对方是什么,首先要把数据打成数据包,就像你们寄信要把信纸叠好封在信封,发快递也要把东西装在盒子里封好一样。你不能抓一把黄豆往那一扔就愣让邮局给你寄到四川去。人家说了,要寄也行,您在每个黄豆上贴好邮票写好地址先。你没点微雕的功夫还真没戏。那么把数据打包是为了什么呢?为了写地址。信封上,得写上地址,邮局才能给你送,不写地址,就光在信封上写个:XXX亲启,那这信只能找个坟头烧了。我们这数据包也一样,打好包,得在包头写上目标地址,也就是这个包要寄到那里。信的地址,无非就是xx省xx市xx区xx大街xx号。而我们数据包的目标地址呢,就是大家熟悉的对方的IP地址: xxx.xxx.xxx.xxx
可是IP地址并不易于被人类记忆。比如让狐狸妹妹访问搜狐的主页,按说狐狸妹妹必须写一封信,上面写着:亲爱的搜狐你好,我想获取你主页的信息。我的地址是xxx.xxx.xxx.xxx,请发过来。(这个地址就是主人电脑的IP地址。)然后把这封信打好包,在信封上写上目标地址:61.135.179.160 然后才能从网口寄出去。搜狐那边看见这封信,就把主页的数据打成数据包——多半不是一个包,而是很多个。然后每个包都贴上狐狸妹妹发过去的地址,寄到主人的电脑中,狐狸再把这些包拆开,翻译成漂亮的网页,显示给主人看。可是主人向狐狸发命令的时候,决不会告诉狐狸:我要看那个 61.135.179.160那个网站。因为他肯定记不住这么多数字,他只能是告诉狐狸,我要看那个www.sohu.com那个网站。这个www.sohu.com是什么呢?是域名。
域名是一个用来给人类看的,易于记忆的名字。什么www.sohu.com,www.google.com,www.baidu.com.sb,都是,就不用我再举例了吧。用域名,这就好记多了。就像我跟你说北京市宣武区宣武门西大街57号,你不知道是哪,我跟你说新华社,你就明白了。 这么一来人类倒是爽了,可我们软件不能在数据包上写上域名阿。你写信光在信封上写:劲丰汽车维修公司。哪给你找去阿!你还是得写:贵州省 贵阳市 南明区 花溪大道北段262号。这才能寄到。同样,往网络上发的数据包,必须得写IP地址,才能发到目的地。于是就需要一个把域名翻译成IP地址的角色,这个角色就是DNS——域名解析系统。
(96) 绕路
DNS,就跟114查号台似的,只不过查的不是电话号码,而是域名对应的IP地址。在网络连接里设置的DNS服务器,就是干这个用的。有了DNS,狐狸妹妹再要访问网站,过程就是这个样子的:主人说,要访问www.sohu.com,然后狐狸妹妹先根据网络连接里设置的DNS地址,比如是8.8.8.8吧,写一封信,内容是:请告诉我www.sohu.com的地址。然后信封上写好收信人地址8.8.8.8,就从网口寄出去了。之后会得到8.8.8.8的回信,内容大约是:www.sohu.com 的地址是 61.135.179.160。之后,狐狸妹妹再往 61.135.179.160发信说需要获取主页信息等等,就跟咱之前说的一样了。这里,DNS就扮演了一个专业指路的角色,每个人要出门,去什么有名的地方,都要先问问DNS,笑脸相迎的过去问上一句:呵呵,大爷,劳驾打听一下,火葬场怎么走?
DNS这个专业指路的多数情况下是靠普的,可也有少数情况,DNS会被黑帮利用。比如某个饭馆最近没交保护费,于是就有黑帮老大,戴着墨镜挂着链子身上还纹着带鱼的那种,找到DNS,跟他说:告诉你,要有人问你那“坠落之箱”饭馆怎么走,不许告诉他!听见没有! DNS无奈,只得点头称是。再有慕名而来的人,问DNS:听说有个坠落之箱饭馆,那里的筒布鸡不错,您知道在哪么? DNS只好说:这个……不知道,没这个地方。 或者就是瞎指,人家站在天安门广场问:这个前门大街怎么走阿?DNS给人往北一指:那边,出了村过了河就到了。 再赶上那哥们实诚点,回头前门大街没看见,倒看见松花江了。也有的时候,黑帮们不在DNS上下功夫,而是直接在路上劫着你。还比如那个坠落之箱饭馆,你问DNS怎么走,DNS告诉你:往东走,在那个点七零路上就是了。这个地址实际没错,但是你走过去会发现,点七零路上站了一排黑西服黑墨镜的人,整的跟黑客帝国似的,你要过去,他告诉你前方施工,不许往前走了,省得溅一身血。(这是施工么这个……)于是你只好无功而返。
针对以上的情况,该怎么办呢?想想,你每次出门都要问路么?当然不是了,多数情况下你可以记住你要去的地方的地址。我们这里也一样,我们linux系统也是可以在本地查询域名对应的地址的。这些内容被记录在/etc/hosts文件中。当需要查域名的时候,我们会首先翻开这个文件,看这里面有没有记录,如果有的话就不必去问DNS了,直接在文件中查到IP就好了。如果这个文件里没有相应的记录我们才去问DNS。这样,上面的情况就好解决了,DNS他不告诉你没关系,你自己记录下你要去的地方的地址,写在hosts文件中,自己去就好了。如果遇到第二种,黑帮拦路的情况,也有办法。一般大一点的地方,可能都不是一个地址。比如那个坠落之箱饭馆,走点七零路可以到,但不是唯一的路,其实从点七一路也可以过去,到达那饭馆的后门。黑帮只封了点零七路不要紧,绕过去就是了。可是你要去问DNS,他肯定会告诉你走点七零路,因为点零七路是正门,而且他也不知道那条路被封了嘛。所以就不问DNS,自己在hosts文件中记录下:去坠落之箱饭馆,走点七一路。就可以了。
(97) 邮局
话说这域名并不是网络上的每一台计算机都有的,只是一些网站,或者各种提供公共服务的计算机才有域名,而一般个人的计算机只有个IP地址就够了。就好比你开个饭馆,总得起个名字,叫什么八千里烤饼,小酸梨泡菜之类的。但是如果你只是有个房子自己住,自然就不用起名字了,起了也没人知道。你走大街上跟人家问:同志,请问全聚德怎么走,人家就能告诉你,可你要是问:同志,我们家怎么走。估计人家就直接把你送精神病院去了。这个DNS解析的过程——也就是这个问路的过程,很多时候也不是一次完成的。比如你的电脑在一个公司的内网里,你要访问你们公司的邮件服务器,比如是email.meipu.com吧。你的电脑就会问你们公司的DNS服务器,这个DNS就可以告诉你。可是你如果要访问www.google.com呢?你们公司的服务器不可能记录着全世界的域名和IP地址吧。很有可能这个www.google.com的地址,你公司的DNS并不知道,那怎么办?很简单,他再去问别人呗。DNS跟黑社会一样,也是有等级的。比如公司的网络是电信的,那么公司的DNS不知道www.google.com的ip是什么,就去问电信的DNS,电信的DNS多半就知道了。如果还不知道,就再往上一级问,直到问到根服务器。这个根服务器,分布在世界各地,一共有13个“根服务器系统”。之所以说根服务器系统,是因为他们并不只是13台电脑而已,而是在每一个地点,有数十台到上百台的服务器,一起组成了一个根服务器系统。目的自然是为了提高安全性和性能。这13个服务器系统的大致地点是公开的,比如美国太空总署(NASA) 有1台,这个是公开的,但是具体在位置哪里,是在A座还是B座,1楼还是5楼,厕所对面还是车库底下,都不知道。这13个DNS 的根服务系统,管理着全世界的域名和IP地址的对应关系,可以说是个世界网络域名地址超级无敌大黄页~。
除了DNS,设置网络链接的时候,还有一个需要设置的服务器就是gateway——网关了。网关又是干什么用的呢?咱还哪寄信说事阿,话说你的信在DNS的帮助下写好了地址,现在要寄出去了。往哪寄呢?这得看收信人的地址是那里。比如收信人就住你家对门,那就好办了,不用麻烦邮递员叔叔,也可以省下几张邮票了,直接塞进他家门缝就行了。就算再远一点,只要不出本小区,基本都可以这样解决。如果是本市的,那就得出门,出了小区口向右拐走100米看见一个信筒子,把信塞进去就好了。之后会有邮递员叔叔来取信,统一送回本市邮局,然后再送到目的地。如果是外地的信呢,比如你从北京,要寄信到上海市南京路xx号。那么北京市邮政局取回你的信,发现是寄倒上海的,那就找人把信送给上海市邮政局,之后就不管了。再由上海邮局把信送到具体的地点。这个路由,就相当于邮局的角色。一个数据包打好了,发给谁呢?有人说了,你都知道地址了,直接送给那个IP地址的机器呀?我问你,你从北京往四川写信也是自己亲自送去呀?累死你。刚才说了,也就距离比较近的,比如在一个小区内,才可以直接送过去。当然我们软件是不计较物理距离的,我们关心的是对方那个地址是不是根我们这台计算机的地址在一个网段。比如说IP是192.168.1.34,子网掩码是255.255.255.0 的这个地址就和IP是192.168.1.78,子网掩码是255.255.255.0的地址在同一个网段,也就相当于在一个小区内。这样的地址,就可以直接把数据包发给对方计算机。那如果不是在同一个网段呢?这时候就该路由出场了。凡是目标地址不在一个网断,你不知道该往哪发的数据包,就交给路由,就像你把信交给邮局一样。你的路由不一定真的知道这个目标地址在哪,就像北京邮局不一定知道上海市的南京路在哪一样,但是没关系,你的路由会把这封信交给其他的他认识的路由,就像北京邮局把信交给上海邮局。
(98) 端口
一个数据包经过了N个路由的转发,终于到达了目标计算机,然后发生了什么呢?
一封信经过邮局来到了你家。如果是挂号信,肯定是邮递员敲开你家的门,问:“郭海春在么?您的挂号信。” 如果是平信的话,信会被扔进你家的信箱,然后你家有人开邮箱把信取来,看看是谁的,如果是寄给自己的,拆开看;如果是寄给老婆的,拆开看;如果是寄给儿子的,拆开看。(咳咳,个人隐私要尊重啊。)呵呵,好吧,准确的说以上做法不正确,应该是,写给谁的,谁拆开看。这里要说的就是这个收信人的问题,信封上除了要写明地址,还需要写明收信人,毕竟一个地址指示的那一间房子里,多数情况下有不止一个人。同样,一个数据包上虽然写着目标机的IP地址,但是拥有那个IP的计算机上也肯定运行着不止一个程序,那么这个数据包到了这个计算机中,应该给谁呢?是狐狸妹妹的,还是皮筋的呢?(gedit你就不要闹了,你又不是网络程序,肯定不是给你的,乖~啊)所以,数据包也像信件一样,要写收信人,不过不是写程序的名字,而是写端口号。
所谓端口,就是一个系统给所有需要使用网络进行通信的程序分配的一个专门的号码,用处就是用来区分收到的数据包属于哪个程序的。比如狐狸要上网,就要来向我申请,我就会给他一个端口号,比如是38246吧,然后狐狸就用这个端口进行通信了。要看网页,比如要访问www.google.com.hk,咱说了这个访问DNS的流程了,最终获得了这个域名的IP:64.233.189.104 ,然后就打个数据包,写上64.233.189.104,80端口收。就像你在信封上写北京市丰台区造假村28号村长收,一样。并且还要在数据包里写明自己的IP的自己的端口号:58246。信封上不是也得写上寄信人地址么。这样,对方哪个计算机收到数据包后,做出响应,把要求的数据打成数据包,写好地址和端口,发送回来。数据包到达我这台电脑,我首先要看,是不是给我的,因为有时候发到我这里的数据包不一定真的就是给我的。一对IP,果然,没错,是发给我这的。然后再看端口号,是58246,一查,哦,这是我刚分给狐狸妹妹的,那就把这个数据包交给她了。可不能给错人,这倒不是为了什么个人隐私,而是因为不同程序的数据包内容是不一样的格式的,你把狐狸的数据包给了皮筋,他也看不懂,肯定会认为数据包在邮递过程中损坏了。
这个端口也不是乱分配的,也是有一定规矩的。比如刚才说的,狐狸要看网页,怎么就知道给对方的80端口发呢?因为这个80端口是固定用于提供http服务的。端口号从0到65535,其中从0到1023,是公认端口。这个号段的端口都有固定的用途,比如看网页,就要访问对方的80端口;要连接对方的ftp,就要给对方的21端口发请求;要连接对方的ssh,就要找22端口,等等。然后从1024到49151是注册端口,这些端口使用起来相对随意一些,不过一般也都是用来提供服务。比如8080端口,经常被用来提供http代理服务;3389经常被用来入侵查皮。注册端口没有严格的规定,只是各软件自行使用,但是一般都是用来提供服务。最后就是动态或者私有端口,从49152到65535。这些端口就是随便给任何需要连接网络的软件使用了,狐狸妹妹要上网,分一个;奔流要下载,再分一个。动态分配,用完回收,二次利用,可持续发展。
(99) 云山雾罩
经过几番波折,dropbox终于正常工作了。主人的文件可以再两台电脑之间不知不觉的同步,感觉相当先进,这就是现代化的便捷啊。如今的计算机已经不是一个人在战斗,不是一台机在工作,有了互联网,就有了一切。现在不是都在炒云计算么?
说起来,我作为一个操作系统,还真不大知道这个云计算到底是个什么概念,或许,他也仅仅是个概念而已。云计算的核心理念就是简化终端机,把所用的东西都放到网络上来进行。过去传统的互联网,根本上来说只是使电脑之间建立物理的数据连接,然后各个计算机(大的,小的,服务器,个人电脑等等)之间,互相共享存储的数据而已。网页,就是一个html文件,上网就是网站的服务器根据一个协议,把存在他那里的html文件共享给你阅读,你想想是不是这样?其他的什么视频啊,音乐啊,不管是在线的还是打包下载的,说到底都是存储空间的共享,数据文件的共享。然而一台电脑的资源不只是存储资源而已,还包括内存,CPU,声卡,等等各种硬件,这些东西能不能放在网上共享呢?能。
“共享CPU?我把老CPU放到淘宝上卖了算共享么?”不算,你那叫卖,不叫共享,送给我才叫共享——哈哈,这是开玩笑。我说的共享不是这样的。想象一下这种情况:你的电脑是奔腾3,主频1GHz,上面装了Blender软件来制作3D动画。(拿这么个电脑做3D,不知道怎么想的-_-b)场景什么的都建好了,准备开始渲染,可是您想想这配置,也能知道这速度得多慢,一渲染,得4天才能完成。这肯定等不了,是吧,那怎么办?旁边还有一台电脑,8核CPU、8G内存、8T硬盘、8显卡交火,80寸大屏放了8个,IPv8的光纤接了8条……总之很牛,我们暂时不去追究为什么不用这台做3D,假设情况就是这样了,怎么能够利用其这台大三八的电脑呢?可以在上面装上blender,然后把文件拷贝到那台电脑再渲染,肯定很快,不过还是有些麻烦。最好是我这台小三电脑(小小的奔三的电脑)直接能够使用那台三八电脑的CPU去计算,那就好了。类似这样的情况,可能不?可能。
话说有个发行版叫做贱兔,和我们笨兔一样是个很优秀的发行版。他最大的特点就是所有软件都是从源码编译的。您听了别害怕,虽然都是编译的,但是不用您亲自去configure,make, make install。他的编译都是全自动的,他那里也有一个像超级牛力一样的软件管理器,叫做一墨迹(emerge)。别看这名字墨迹,干活可不墨迹。墨迹跟超级牛力一样,负责上网下载软件,不过超级牛力下载来的都是二进制的,直接就可以用的软件,而墨迹下载来的都是软件的源代码,下载来之后墨迹会叫来tar啊,gcc啊,make啊之类的同志们,按照那个软件的编译方法,自动编译软件,最后安装到系统中。这样,每一个软件都是针对这台电脑进行过优化的,所以运行起来速度会比较快。然而编译时一个很耗费CPU的工作,也难怪有人觉得这么装软件很墨迹了。正因为如此,贱兔就提供了一个软件叫做distcc,这个软件可以让电脑A用电脑B上的CPU来编译软件,然后装到电脑A上,听起来很神奇吧。当然,电脑A,B需要都安装这个软件,并且有相同的Gcc版本才行。这样就实现的在两台电脑之间共享运算资源。
回来再说这个云,云的根本意图就是让网络可以提供除了存储资源外的其他资源,比如运算。以后,你的电脑也许就不需要多么强大的CPU了,一切的一切都放到网络上去运算。其实现在的网络中,已经不知不觉的有了这样的服务。比如狗狗大哥提供的狗狗文档,就是这么个东西。你的计算机上不用安装office,把文件放到网上去,用网页来编辑。这不就是利用狗狗哥的服务器运算资源来进行文档处理么。还有各种各样的WebOS,打开一个网页,里面就什么都有了,游戏也好,文档处理也好,音乐也好,都有,可谓是:页中自由黄金屋,页中自有千钟粟。浏览器就是操作系统的概念,已经被狗狗进一步诠释成了一个操作系统,叫做ChromeOS。你看着名字,跟他家浏览器一样,装上这个系统就会发现,这系统啥也没有,就是一个浏览器,可是这浏览器里面干啥都行。处理文档?有狗狗文档,在线处理。聊天?gtalk也好,msn也好,qq也好,都有网页版啊。看片?除了为了高清,现在有几个下载来看的,不都是在什么地瓜啦,油兔啦的网站上看么。游戏?网页版的网游,够了。音乐?视频都在线了,还怕没音乐么。总之,日常应用都差不多可以支持,只是一些专业性质的工作,比如视频编辑啦,编程啦,这些个还没发在网上进行。但相信不久的未来也会出现类似的网络应用的,现在很多在线共享照片的网站不就提供一些简单的照片处理功能么。
(100) 记忆
今天狐狸休假,皮筋赖床,内存里一干人等全都不在,只有OO老先生一个人响应主人号召出来工作。主人噼里啪啦絮絮叨叨的跟老先生说着什么,老先生也不答腔,只是尽职尽责的把主人说的话记录下来。
“那是2008年了,那时候公司的项目做得很不爽,好好的做到一半就被上边砍了。理由大约是干了一年了没有挣来钱。哎,这作项目又不是种麦子,一年就能有收成。之前您也没接触过这个行业,从什么也不懂就开始做,一年就非得见到利润?怎么可能。于是项目被砍,整天上班没有事情作,就开始上网,动看看,西转转,学习学习先进的Linux编程技术。学烦了,就去找些杂七杂八的东西来看,反正领导也不管,倒是也很自在。” 看来有个好领导很重要阿,不知道我这个内核在别人眼里,或者说别的软件眼里,算不算是个好领导呢?
“那时候看到了天涯上的一个帖子,《如果这是宋史》,现在好像已经成书了。自从明月写了明朝那些事儿以后,很多人开始用通俗的语言讲历史,倒也写的很有趣。上学的时候对历史不感兴趣,老师说,历史好阿,里面都是故事,好记,比地理好多了。可惜老师并没有把故事讲得生动,于是我的成绩也就一般。但当看到《宋史》那帖子之后,就觉得这种感觉不错(虽然明朝那些事儿名气更大,但我却是先看到的宋史),枯燥的东西,谈笑间变得跃然纸上,叫人印象深刻。于是跟着帖子一篇篇的看,看了没两天,杯具了——网被封了……”哎,不知道网络不通对主人意味着什么,反正对于我,网络断了,就意味这可以收拾收拾回硬盘睡觉了。网络一断,超级牛力,狐狸,皮筋,全都歇菜,星爷不能在线查辞,Totem不能在线视频,连个桌面上的天气预报都显示不了了,我这系统还活个什么劲阿。
“网络被封当然不是因为我看宋史,而是据说有某个同志上网看了些不该看的东西,说了些不该说的话,于是大家就都别上了。离开网络的日子很清苦,然而好在邮箱还可以用,于是让我女朋友把宋史的网页复制到邮件里发过来,就这样继续跟帖。在此感谢我那时候的女友对我的不务正业所给予的大力支持。^_^ 宋史那楼主要知道有我这么坚强的粉丝估计得感动死,呵呵。后来看多了,觉得光看不过瘾了,就突发奇想:我也可以把枯燥的东西,生动的写出来嘛!”
Oo老先生推推眼镜,继续记录着。
“历史我是不会写的,一来没学好,再说写的人太多了,不新鲜。要写,总得写点自己了解的东西不是。那时候家里电脑上的主要操作系统早已变成了Linux,WindowsXP只在需要和同志们联魔兽的时候才会出场。想来最早接触Linux应该是2004年左右了,那时候在笔记本上装了红旗Linux,倒是挺顺利,但也只是装装而已,很少真的用。后来工作了,在外边住,为强迫自己学习,笔记本上只装了一个系统——Mandrake Linux 用了一阵子,还是很无奈的被换掉了。之后体验了Magic Linux,国内做得,确实很方便,装好之后很多东西都配置好了,可是毕竟有些小众,有了问题,不好解决。再然后,就是Gentoo,这主要是在工作中做了一次LFS,学到了不少东西,觉得还不算难。既然LFS都搞定了,Gentoo应该也不在话下。装了之后,用了很长时间,在这过程中,渐渐的习惯了用Linux来生活。Gentoo的运行效率,无缝升级,以及辛苦的配置过程都使得我没有什么理由换掉他。也就是那个时候,我有了现在的ID,并想以后就一直使用这个系统。” 为啥还没看到我们Ubuntu出场…………
“然而我总归是个喜欢尝鲜的人,随着Ubuntu的名气越来越大,总想装来试试。等到我的笔记本已经实在跟不上历史的潮流,不得不换了一台配置好一点的台式机的时候,终于有机会尝试一下新的系统了。gentoo初期的配置实在很麻烦,不想再重复一边了,于是就在新机器上装了Ubuntu,一开始还是7.10呢,就已经很方便,装上之后不需要太多的配置(跟Gentoo比),速度,由于电脑比较强大,速度忽略不计。后来重装为8.04,没太大变化,一直用下去。” 哈哈,看见我出场啦。
“那是11月1号,一个周六,晚上看着我的Ubuntu 8.04,忽然想到,对,就写它吧。用的时间长了,有感情,有了解,就把自己当作这个操作系统,用第一人称的角度,去讲述操作系统自己的故事。写了一点,贴到了论坛上,似乎还不错,很多网友用各种表情表示了支持。于是得到动力,继续写下去。写的也没什么章法,想到哪说哪,以基本知识和概念为主,读者竟也一点点多起来。甚至后来还有论坛上的童鞋帮我排版整理成pdf版,以至发展为创建了专门的网页,而且还不止一个,真的是受宠若惊,非常感谢这些童鞋们的支持。”童鞋?在我的数据库里童鞋似乎是一种用于保护人类幼崽双脚以便于行动的物品,为啥主人要感谢他们呢?
“由于要上班,而且单位离家里很远,那时候从家到单位需要将近2小时的车程,现在地铁通了,也得一个半小时,所以能够静下心来写字的时间几乎就没有了,只能够周末写一写,不像人家专业爬格子的,每天都在创作。每一段也就一千字左右,开始的时候少些,7,8百,后来写熟了,能有一千多。但一周才写一千多字,实在是供应不上爱好者们,也不之以这样蜗牛的速度,要写到什么时候。记得有人在坛子里问过什么时候写退房,呵呵,那时我说,争取写到下一个LTS,算是给自己的目标吧。现在10.04已经发布,总算是没有半途而废。其实我机器上的8.04早就‘退房’了,只是还不打算让文中的笨兔兔搬出去,就这样继续住着吧。”没看懂,反正,好像,没我什么事哈。
(101) 浏览器的战争
狐狸妹妹算是我这里工作最辛苦,出镜率最高的人了。但是一直也没有好好介绍过她,今天就讲讲她的身世吧。
当年,有点软公司的Windows 95获得成功的那个年代,网络网络浏览器这个东西还不是很被人重视。那年头互联网还不是很普及,电脑基本上好都是单机应用。有点软公司的老大,盖子大叔觉得,网络这个东西是没太大前途的,不就是能在电脑间传递一些数据么?也就看看新闻,发发邮件什么的,普通家庭用户是不会关注这些的。普通用户还是更多的会被漂亮强大的软件吸引,所以还是要专注于本机的应用。那时候比较有名的浏览器叫做NetScape,创造他的公司就叫做NetScape公司。本来两家相安无事,一个做系统,一个做浏览器,各干个的。然而随着互联网的飞速发展,盖子大叔发现,自己的判断好像有点问题,这互联网是越来越厉害阿,看来新一轮的圈地运动就要开始了。于是,赶紧想办法培养自己`的浏览器,拉拢网络浏览器的用户,这就是IE。Windows 95后来的版本里面就有IE,只是作为一种不常用的专业工具,深深的埋藏在了系统目录下,并没有在开始菜单里出现。现在赶紧找来稚嫩的IE ,努力培养,教会他各种本领,以便成为能够面向普通用户的浏览器。
但是市场这个东西向来是只有第一,没有第二。谁最先抢占市场,谁就成功。NetScape的浏览器已经在市场上获得了很好的口碑和很大的占有率。区区一个IE,如果没有绝对的优势是不可能抢回NetScape的市场的。要想混出点名堂来,总得有真本事。要么浏览速度快,要么占用资源少,要么操作方便,人性化,有点软公司的IE有什么绝对优势么?很遗憾,个方面都没有明显的优势。IE的老爹有点软这会改了有点急了,天天教育IE:你看看你哥哥,Windows,都是你爹我调教出来的,人家怎么那么厉害,你怎么这么不争气呢?我们还想着让你跟那NetScape火拼一下,好歹打个平手也好,可你呢?干什么什么不行。你说说,你自己说你比那个NetScape哪点强了?除了你老爸比他老爸强多了,还哪点强了?除了你有一哥,你还比NetScape哪点强了?——等等,对呀!IE的优势就是有个有钱的老爸,还有个强大的哥!你见过卖汽车送轮胎的吧?你见过卖房子送车位的吧?那我卖个Windows送个IE不算过分吧?得!就这么着了。
于是,从Windows 98开始,Windows就开始带着他的小弟IE一同出现在各个电脑的显示器上了。这一下给NetScape打击可相当大,IE虽然那里都不必NetScape强多少,可是哪里也不必NetScape弱多少。Windows的市场占有量那么大,系统里既然自带了一个和NetScape差不多的软件,自然也就很少会有人花钱去另买NetScape了。(软件是要买的,不是5块一张的那种)于是,自此以后,NetScape的市场份额是与日具减,直到整个公司被人收购。
(102) 狐狸出世
NetScape浏览器被有大哥和老爸撑腰的IE打败了,并且一败涂地。原本自己的地盘被IE抢去了,NetScape浏览器的老爸NetScpe公司被美国在线收购,一切似乎应该就这样结束了。然而在离开儿子的前夕,老爹将NetScape叫倒了跟前,语重心长的对他说:孩子,不是你不优秀,是你的对手太狡猾。以后我不能再照顾你了,剩下的路你要自己去走。我送给你一件东西,希望凭着他,你能重拾往日的辉煌。这个东西,就叫做“开源”。你拿着它,去找一个叫做社区的地方,在那里,会有人将你培养成最优秀的浏览器。NetScape收下了礼物,并默默的点了点头。同时,NetScape的老爹还叫来了跟随自己多年的亲信,让他们成立了一个组织,专门负责培养NetScape,这个组织,叫做Mozilla.org 。老爹从新东家那里获得了许可,每年播一定的资金来支持Mozilla.org组织。于是NetScape在Mozilla.org组织的帮助下,开始了自己的试炼之途。NetScape很快找到了社区,并拿出了父亲给他的开源。这个东西将NetScape的全身照亮,可以看清楚身体里面每一个细小的结构。社区中隐藏着各种高手,纷纷来找NetScape,指出他的不足,帮助他变得更加强大。由于有了开源的帮助,社区高手们可以很容易的发现 NetScape身体中的问题,并由Mozilla.org组织加以调整。数年之后,NetScape身体中原有的代码几乎全部被替换了一遍。此时的他已经不再是那个简单的浏览器NetScape。而是一个包含了浏览器,电子邮件,IRC,网页编译于一体的套件。他们给它起了新的名字,叫做Mozilla Application Suite,简称Mozilla。在社区的帮助下,Mozilla终于开始拿起自己的武器,去夺回自己曾经失去的一切。
然而事情的发展,总是不乏转折。有点软公司看出的现在的Mozilla可能会是将来IE最强劲的对手,于是跟当年收购NetScape的美国在线谈判,并最终说服美国在线,停止了对Mozilla.org组织的资助并将其解散。这一下可算是断了Mozilla的后路。Mozilla就这么结束了么?没有,他们忽略了一个重要的东西——开源。有了这个东西,就可以号召起最广大的社区力量。不久,Mozilla基金会成立了,这是一个非盈利性质的组织,他的目的,就是继续培养Mozilla,让他成为一个优秀的浏览器。然而或许是求胜心切,欲速不达,Mozilla虽然很用功,学了很多的东西,但这反而使得他变得有些臃肿,虽然强大,但是缺少了灵活性。这反而让他在夺回市场的战斗中处于不利地位。这个时候,一个少女出现在人们的视线里。她天真可爱,活泼机灵,总是看着Mozilla练功,时不时的还跟着比划两下。这一切,被戴夫·海厄特与布雷克·罗斯看在眼里。他们意识到,Mozilla太过臃肿,或许这将导致Mozilla的失败,但是又不能太过于大胆的砍掉Mozilla的各项功能,毕竟未来的事情谁也说不清楚,谁能保证砍掉之后就一定能成功呢?于是他们把目光放到了这个少女身上,他们按照培养Mozilla的方式来培养她,但是只专注的教给她浏览器的功夫,让她代替NetScape回到最初的起点——做一个优秀的浏览器,仅仅做一个优秀的浏览器。同时,也为了让她有可能能够胜任更多的事情,为她预留的很多接口,这样就可以在需要扩展功能的时候通过安装扩展插件的方法来实现各种功能。很快,她通过了训练,成为了一个合格的浏览器,并且开始试着开疆扩图,要打出自己的一片天地。她就像一只鸟儿般灵巧,她代替 NetScape在烈火中重生,于是人们给他起名字,叫做“phoenix”——凤凰。人们也把它亲切的叫做凤妹。可是谁都要长大,如果以后她成长了,岂不是要变成“凤姐”?!所以为了避免未来的尴尬,人们给她换了很多名字,最终确定,叫做Mozilla Firefox,这Firefox原本是小熊猫的意思,不过或许是考虑到广大不明真相的群众的第一反应,采用了一只狐狸作为图标,也就是今天的狐狸妹妹。
(103) 群雄并起
当狐狸妹妹走上硝烟弥漫的浏览器战场的时候,IE还是当年那个IE,但战场,已注定不再是当年那个战场。
随着当年NetScape的销声匿迹,IE无疑成为了浏览器战场上一家独大的胜利者。胜利后的IE,开始不思进取,整日沉浸在胜利的喜悦中。虽然他也在不断更新自己的版本,但是跟他的老哥Windows一样,他也开始变得缓慢而臃肿,并且很少考虑使用者的感受。反倒是很多其他厂商开发出来的是用IE内核的浏览器外壳很受欢迎。像什么Maxthon也就是傲游,还有那个疼殉公司的套套浏览器,还有世界痔疮,等等。这些说起来叫浏览器,实际上他们都是调用IE 来渲染网页,他们做的只是一个外壳而已。然而就是这些是用方便,功能强大的外壳,比IE更加受使用者欢迎。这从一个侧面说明了IE那时候的易用性确实不能够令使用者满意。同时,IE也并不排斥这些外壳型浏览器,因为这些外壳都是基于他的嘛,没了IE这些所谓的浏览器统统都得挂掉,所以这并不影响IE的主导地位。而时候狐狸妹妹的出世,却让用户们眼前一亮,他们忽然意识到,原来世界上,还有IE之外的浏览器。更何况,Firefox是开源的,免费的软件,下载下来尝试一下又没有花费,何乐而不为呢?
狐狸的这种免费模式,渐渐获得了成功,于是,更多的后来者,纷纷涌现出来。
先是来自挪威的Opera小姐。这姐姐速度快,易用性好。尤其在易用性上,下了不少功夫。开了很多网页还没看完,忽然有事情出去需要关电脑?直接关闭 opera,没问题,下次再打开时还是这些网页。先在的狐狸妹妹也会这一招了,不过是跟Opera学的。打开一个空白页,再点书签,选择要去的网站?太麻烦了,Opera直接整个快速拨号,空白页上直接列出最长去的9个地方。(当然要事先设置好)一点就进去了。后来狐狸妹妹也有扩展可以实现这样的功能,自然也是跟Opera学的。(这也说明了狐狸妹妹+扩展的强大性,想要什么新功能,不用等着升级新版本,装扩展都能实现。)Opera虽然也免费,但是不开源,不像狐狸妹妹,一切都是开放的。所以,虽然Opera也有扩展插件,但只能由Opera的公司自己开发,其他人是不能参与的。而狐狸妹妹的一切都是开放的,他的扩展都是全世界的爱好者们开发的,种类多不说,开发速度也快。在这点上,opera算是稍逊一筹。
再有,就是狗狗公司的Chrome浏览器了。这家伙最大的特点就一个字——不走寻常路。别的浏览器都有地址栏,搜索栏,菜单,底下有状态栏。Chrome 觉得这么多乱七八糟的东西太麻烦,搜索栏跟地址栏整到一起,菜单栏干掉,状态栏取消。状态改成在网页底部动态显示。于是一个很有创新意味的界面诞生了。 Chrome以他与众不同的面貌登山了浏览器的战场。出了界面简洁以外,Chrome还有个特点就是速度快,那真是刷刷的。通过查看进程可以发现,狐狸妹妹和Opera都是一个进程,也就是干活的时候只有一个狐狸妹妹或者Opera姐姐在忙活。而Chrome这家伙,是一堆进程!一起动,这家伙跑进内存后,先把自己复制4分,也就是有四个Chrome在内存里忙活,以后,每开一个网页,内存里就会多一个Chrome。这也许就是他速度快的奥秘吧。这样的好处就是万一哪个Chrome挂掉了,顶多一个网页挂掉,其他的不受影响。坏处呢?自然就是导致工作间里太乱拉!!
(104) 门派
说什么来什么,前两天刚说了Chrome,这不今天主人就让狐狸妹妹去下载了一个chrome的deb包给装上了。我也有幸见到了这帮小子工作的场景。这家伙果然善于分身,他刚进内存,我只觉得眼前一花(本来他就挺花哨的),一下子变成好几个,并且麻利的向图形界面申请窗口,同时绘制默认页面,同时准备好显示界面上的各种元素,像按钮阿,图标阿之类的。这些事情是同时进行的,怪不得用户会感觉他快。狐狸妹妹就比较本分,一步一步进行。先向图形部门申请绘制窗口,窗口批下来之后再在窗口里绘制好各种文字,菜单,按钮之类的。这之后再根据用户设置的主页,上网申请数据,数据来了再显示给用户。有插件的话,在这之前还要加载各种插件,难怪让人觉得有点慢呢。
Chrome们似乎看出了我再想什么,他们其中一个跟我说:别以为我们只是靠并行处理提高速度哦,我们渲染网页的基本功也不差。一边说着,一边已经打开了默认的主页——自然是www.google.com了。我一看他们渲染网页的身手,立刻看出来,他们是Webkit派的。
浏览器渲染网页的方法有很多种,各家实现的方式不一样,于是就形成了几大派系,就像什么武当派,昆仑派似的,专业点讲就是不同的内核。Trident派,占据浏览器大半的江山,该派创派祖师就是IE4,有一个徒弟IE5,徒孙就是IE6,再下一代就是IE7……总之就IE他们家的派。Gecko派,祖师爷就是我们说过的NetScape,后来的故事大家都知道了,这一派现在由狐狸妹妹继承。Presto派,创始人是挪威的Opera7。这派的功夫特点就是快,有道是“天下武功,无坚不摧,唯快不破”。不过在快的同时,也牺牲掉了一些兼容性。KHTML派,是从KDE2开始就有的网页排版引擎,该派也比较重视速度,同时还注意兼容性,可以兼容标准网页自不必不说,由于那时候IE声势浩大,KHTML无奈也尽量的支持部分IE专属的语法。但代价就是对语法错误的容忍度要比Gecko派小。再有就是Webkit派,开山鼻祖是苹果公司的Safari。Safari学习了KDE的KHTML和KJS两大功夫,并且加入自己的创新,创造了WebCore排版和JavaScripCore解析引擎两大武功,开创了Webkit派。由于继承自KHTML,而KHTML是LGPL授权,因此WebKit派的武功也是开源的,广大民众可以随意学习。所以目前WebKit派的徒众甚多,很多手机上的浏览器也是WebKit派的。顺便说一下,狐狸的Gecko派自然也是开源的,但是由于代码结构不够明晰,学习和维护起来不如WebKit方便,因此应用范围不广,主要只是靠Firefox支撑派内事务,还有几个MadFox,RedFox,都是狐狸的同宗。
Chrome正是WebKit派的,因此也继承了自KHTML那里就带来的速度,和兼容性。所以他们说并不是靠并行处理提高速度。不过具体影响速度的主要是什么,也是见仁见智了。只从主人的使用感受来说,应该是Chrome快一些。不过这话可别让狐狸妹妹听见,要不又该不高兴了,定然要吵个不休,和Chrome比上一场。
(105) 任天堂
主人今天想休闲一下,可惜最近没什么片子可看,上网也没什么意思,想了想决定——玩会游戏吧。
可能有人一听说玩游戏会发出无奈的疑问:Linux还能玩游戏??哎,说起来很惭愧,在我们LInux的世界里,确实没有魔兽世界,确实没有极品飞车,确实没有三国志,确实没有仙剑奇侠传……总之,世面上看得见的游戏在我这都看不见。可没游戏也不能怪我阿,谁叫那些开发游戏的公司不开发Linux版的呢。不过虽然没有这些大型游戏,小的益智游戏还是不少的,效果比较好的也有。除此之外,还有更通用的游戏解决方案,就是模拟器。
这里说的模拟器就是在PC机上模拟各种游戏机环境的软件。游戏机大家应该都不陌生,当年的FC红白机器半随着很多80后的孩子们成长起来。当年任天堂的FC游戏机使用摩托罗拉6502芯片,只有1.79MHz的运算频率,别说跟先在的手机比了,恐怕比你家空调机里面那控制温度的芯片的频率都低一些。内存只有2k,显存也之后2k,写一空白word文档就沾满了。显示分辨率只有256X240,最大支持52种颜色,但能够同时显示在屏幕上的只有16色,游戏卡的容量最大也只有32k。就这么一个弱智的机器,曾经给多少人的带来了多彩的童年,我的主人看来也是其中之一。主人想要回味一下当年那些经典的游戏,这些游戏,说来其实也就是一个小的程序。那时候这个程序是住在游戏卡里面的,游戏卡里面没什么神奇的东西,就是一写用来存储数据的ROM芯片,游戏程序就住在这些芯片里。那现在想要在我这里运行这些游戏程序有没有可能呢?直接运行肯定是不行的,他们这些游戏程序的智商和我们是没法比的。我们这些软件如果相当于人的话,他们也就相当于鸡。他们只会是用那种装用的1.79M的小芯片来运算,别的一概不会。所以,要让他们运行,就得模拟出游戏机的那种硬件环境出来,就像VBox能够模拟出一台计算机一样,需要一种软件在我们工作间里模拟出那种简陋的小FC游戏机,这样,就可以让这些游戏软件运行在虚拟的FC游戏己里面,就好像搭个鸡窝鸡似的。那我们这有没有这种会养鸡的软件呢?当然有,还不少呢。像Fceu, SMYNes,Nestopia等等,都是养鸡专业户。
主人在超级牛力的指导下,安装了fceu,然后又牵着狐狸妹妹找了个 rom文件,叫做mario.nes。然后主人在菜单里找fceu,发现竟然没有。不过不用着急,我家主人还是比较有经验的,赶快打开了终端,输入fceu,果然有这个程序。(废话,刚装上的,能没有么。有的人就是不相信超级牛力,装了软件竟然说找不到。其实就算菜单上没有,运行一下whereis xxx。或者直接问新力得,都可以。)结果运行fceu一看,竟然是个字符界面的程序。主人很不爽,上网打听以下,好在还有gfceu,是fceu的图形界面,于是主人赶紧又装了gfceu,这才满意了。其实要我说,字符界面怎么了,键盘操作才最快捷,字符界面才是我们Linux的精髓。
(106) 敲敲打打本正理,补补全全是便捷
早在电脑刚刚被发明出来的时候,键盘就已经是每一台电脑所必备的输入设备。作为从那个字符界面的时代走过来的Linux系统,自然充分考虑的通过键盘操作整个系统的便捷和效率问题。直到现在,使用键盘操作linux都会拥有意想不到的高效率和成就感。
有的用户就不喜欢键盘,不喜欢打字。我以前很不明白,命令键盘可以发送上百个命令,用起来应该很方便才对,为什么人类就那么喜欢那个只能发送:向上,向下,向左,向右,左键,右键 。这六个命令的鼠标呢?(当然,现在的鼠标还多了滚轮,还有的鼠标有更多的按键,但是那也比键盘少阿。)后来见多识广的OOo老先生给我解释,我才明白,原来是因为人类记忆力不行,没有我们软件这么可靠。记不住那么多个键,于是只好用那只能发送六个命令的鼠标了。其实说起来通过键盘和我交流还是挺方便的,只是很多人不大熟悉如何交流而已,都以为用键盘和我交流跟用键盘和那个剁死系统交流一样麻烦呢。其实我已经很人性化了,就因为键盘上有个键——Tab
看一个人的键盘,就可以猜测出他平时用电脑干什么。如果W,A,S,D,U,I,J,K严重磨损,说明这哥们玩拳皇的;如果A,Shift,Ctrl,1,2,3,4……9,0严重磨损,说明是个玩即时战略的,星际魔兽之类;如果ALT,S或Ctrl,Enter磨损,大概是天天聊QQ;如果Tab键严重磨损,那估计就是个Linux高手了。在Linux的命令行下,Tab键起着命令补全的作用。比如说,你要运行ifconfig命令,你可以不用完全输入这8个字母,只要输入ifc,然后按Tab键,我就知道了,因为所有可以运行的命令里面以ifc开头的就只有ifconfig,所以当你按下Tab键的时候,我就会替你写出完整的命令:ifconfig. 这都因为在你按下Tab键的时候,我会去PATH变量所设置的所有目录里遍历一遍,检查了里面所有的有x权限的文件,查到了ifconfig文件。(命令其实就是个可执行文件)之所以这么快,是因为我早就把这些重要的东西缓冲进内存了,所以下次就别抱怨我动不动就把你内存占满了哦。那如果你再少写个字母呢?比如你只写了if,然后就按Tab键,我遍历了一边PATH中的路径后发现,有4个命令是以if开头的,所以我不知道你要的是哪个命令,于是就不做任何动作。这时候如果你再按一下Tab,我就会提示你:以if开头的命令有if ifconfig ifup ifdown。然后你自己看需要的是哪个,照着输入就行了,很交互吧。这样除了减少按键次数以外,还有一个好处就是你可以不必完全记住整个命令,能够记住前几个字母就可以通过Tab把整个命令回忆出来。除了命令,命令的参数也可以用tab补全。比如用超级牛力装软件,输入sudo apt-get i然后按Tab,就可以补全install,之后的软件包名也一样是可以用Tab补全的。
(107) 往事如烟千般忆,一令似关万物分
有了Tab,就让用户输入新命令的时候省事了不少,还有一个history功能,可以让用户重复以前输入过的命令的时候省心。如果你想输入上一次输入的命令,就按一下向上箭头,就看到了;如果想要再上一次的命令,就再按一下;如果想要再再上一次的命令,就再再按一下;如果想要再再再上一次的命令,就再再再按一下;如果想……如果想写作文的时候凑字数,你就跟我学。好了,总之是可以通过方向键选择以前运行过的命令,如果想查看很久远以前的命令呢?也可以,输入history。这是一个命令,可以显示之前运行过的n条命令,默认情况下n=1000,现在图形界面越来越发达,输入命令的机会越来越少,估计1000条都能把去年的命令显示出来了。说起来history命令也没啥神奇,他之所以能够显示曾经运行过的命令,不是因为他有啥水晶球,而是负责解释主人命令的shell会把每一条命令记录下载,就写在~/.bash_history文件中。history只不过是把这个文件打开,显示出里面的内容罢了。
我们Linux下面的命令,都是Unix哲学的优秀继承者,每个命令秉承着简单专一高效的宗旨。每个命令只实现一个功能,但通过各种命令的组合可以实现几乎各种功能。咱就说这个grep命令吧,这家伙就是个筛子,他的作用就是让该漏的漏过去,不该漏的挡住。咱就比如刚才说的history命令,一运行出来好几百条命令,我相知道我都通过命令行装过什么软件,也就是从命令历史中找到所有apt-get install命令,这个怎么办?很简单,只要运行history|grep “apt-get install”,就可以了。中间那个竖杠就是”\”键上面那个符号,叫做管道符,用过那个剁死系统的人可能知道。所谓管道符,简单地说就是把前面命令的输出传给后面命令做输入,就想象|号就是一个大水管子,history命令输出的那些个字符就像一大堆泔水一样哗啦啦的都浇倒grep头上了。(可怜的grep阿……)不过不用为grep难过,咱不是说了么,他的工作就是——过滤。跟据命令里写的”apt-get install”,grep会把所有带有这个字符串的行都过滤并显示出来,还可以将要找的字符串突出显示。就好像一大桶泔水通过管道浇下来,grep就是一个大筛子,把泔水里面的菜叶阿,豆腐阿啥的都给拦住了,只让剩下的地沟油通过,人家就可以捞回去炸油条用了……(城管快来阿,先把grep逮捕)除了通过管道符过滤命令输出之外,grep也可以单独使用,用于查找文本文件中的行。比如我想查看一下/etc/fstab文件中关于home分区的那一行,看看挂载参数怎么写的,那就可以运行grep "home" /etc/fstab,前面是要查的内容,后面是文件名。
(108) 片片云烟过眼 页页细审在目
介绍完了grep,再来说个经常在命令行下出场的家伙——more
还用history举例子吧,你运行了history命令,可能一下子显示出好几百条命令,咱不是说了么,最多能1000条呢。好几百条命令一屏是显示不下的,除非你家是32寸液晶显示器,那还得竖着放。显示不下了,后面的内容就会把前面的内容“顶”上去,“楼主”固然是看不见了,什么“沙发”,“板凳”,”地板”,”下水道”的也一样没希望,只能看到最后那几十条。那想看前面的怎么办?虽然可以用shift+page up来向上翻页,但一来向上翻的页数有限,二来这也麻烦,一般人都是习惯从上往下看的,倒着往上翻就别扭了。那怎么办呢?这时候more就该出场了。more的功能就是分页显示,把所有要输出的内容先显示出一屏来,等着用户按回车,之后再显示第二屏,直到显示完全部内容。当然,用户也可以不等显示完全部就中途按q退出。那怎么用呢?就比如咱刚才说的情况,那就运行history|more。|符号眼熟吧,根grep一样,more也是支持通过管道输入数据流。history命令输出的那些个字符就像一大堆泔水一样哗啦啦的都流倒 more 这里了(怎么又是泔水……),more就把这些东西都先整的大桶缓存起来,然后先盛出一碗来给你看,“您看有没有想吃的?”,你看完了之后,他再去盛第二碗,第三碗……直到你把整个一大桶泔水都检阅完了,more才结束工作。(当然,你要是坚持不到最后就吐了,那就按q退出)
有了more就满足了么?不,还有他的死对头,less。
less实现的功能和more基本一样,也是用来分屏输出的,同行是冤家嘛。不同的是,more只能一页一页往下看,看完了就退出。less可以上下翻页,看过去的东西可以按向上键或者page up键翻回去看。比起more更人性一点,另外,都看完了之后less是不会自动退出的,一定要按q退出。顺便说一下,more和less跟grep一样,不光可以通过管道将其他命令的输出当作输入,同时也可以直接查看文件。只要more /<路径>/文件名 或者 less /<路径>/文件名 就可以查看文件内容,当然,只能是文本文件(里面是文本就行,不一定非得以.txt为扩展名)。
通过这两个命令,您大概可以感受到我们Linux系统和有点软公司的系统的不同理念。用过剁死系统的都知道里面有个DIR命令,和我们的ls一样,都是显示文件用的。当文件很多的时候,dir命令有专门的参数可以实现分屏显示,而ls命令就没有,只能一下子显示出来。为什么?因为分屏显示的事情是由more 和 less负责的,完全可以通过ls|more 这样的组合实现分屏显示。linux的理念每个程序只专注于一种功能的实现,而通过多个程序的组合可以实现任何功能。试想如果没有more和less,ls要负责分屏显示的话,那history命令是不是也要处理分屏显示的问题呢?那么所有输出行比较多的命令都要自己负责分屏显示,这些命令的源代码中都要有负责分屏显示的部分,这是一种无谓的重复劳动,而且各自分别实现分屏显示,效果多半也不一样,可能有的命令是按空格显示下一行,有的是按n显示下一行等等。与其这样不如把相同的功能独立出来,成为一个统一的,单独的命令。
(109) 众里寻他千百度
再来介绍下一位吧,find。
一听这名字就知道干啥的了,找文件的嘛。find俨然就是一位能力超强的图书馆管理员,只要你想在Linux下找任何文件,无论你的要求多么苛刻,find都能给你找到。你按照文件名找,没问题;你按照创建的日期找,也没问题;按用户查找,还是没问题;按照各种复杂的组合方式查找都没有问题,可以说,只有想不到,没有找不到。如果仅仅是找到那倒也没什么强大之处,最关键的是,他除了找到文件,还能帮你叫人来处理文件。咱从最简单的说吧,按文件的名字查找:find <路径> -name <文件名> 比如在当前目录下找名字叫作test.c的文件,那就是find ./ -name test.c 。如果你要找3天前创建的文件可以用-ctime参数,比如find ./ -name \*.c -ctime +3,意思就是在当前目录查找3天前创建的所有.c文件。+3就是3天前的意思,如果是-3那就是3天内。要是你想找所有的链接文件,可以依靠-type参数来根据文件类型来查找。还有根据 用户 -user,根据组-group,根据大小 -size,等等查找方式。不过这些都是些粗浅功夫,最重要的是-exec——对查找到的文件进行处理。
比如你想找/usr/bin下的所有链接文件,想看看他们都链接到了哪里,怎么办?那首先得先找到,按照类型找,find /usr/bin/ -type l,这样就找到了所有的链接文件了,可是怎么看他们链接到哪了呢?find命令是看不了,可是ls 能看阿。Ls -l就可以查看文件的详细信息,如果是链接文件就显示出连接到的地方。这时候就需要让find在找到文件之后去调用ls命令,这就用到exec了。只要这样find /usr/bin/ -type l -exec ls -l {} \; 前面不用解释,-exec 后面就是对找到的文件执行的命令,这里就是ls -l 。{}括号的位置就是用找到的文件替换的位置。比如find找到了/usr/bin/pkill,是个链接,那么-exec ls -l {}就是要执行 ls -l /usr/bin/pkill,如果写-exec ls {} -l呢,那自然就是执行ls /usr/bin/pkill -l了。这样,所有被find找到的链接文件就都会被ls一遍,就显示出了他们连接到的位置。可是/usr/bin下的链接文件很多,一屏现实不下怎么办?哈哈,自然是less或more出场了。 find /usr/bin/ -type l -exec ls -l {} \;|less怎么样,看似复杂的命令,其实也很简单吧。
很多人在Linux下听MP3的时候都遇到了标签乱码的问题,这主要是编码不统一造成的。用mid3iconv命令就可以改变mp3标签的编码。(得先安装,sudo apt-get install python-mutagen),但是一个一个的转换肯定会累死人,这时候就可以用find命令:find . -name "*.mp3" -execdir mid3iconv -e gbk {} \; 网上搜索mp3标签问题多半会搜索到这么一条命令,可能很多人执行过。这里的-execdir和-exec差不多,只不过-exec是在当前目录下执行,而-execdir是在所找到的那个文件的目录下执行。
(110) 山高无路阻佳音,途中逢友传鸿雁
这一天,狐狸接到命令要去访问一个网站。她一如既往的把请求网页的数据包打好,装进信封里封装好,然后写上收信人的IP地址(自然是根DNS那里查到的啦),就从网口扔出去了。要是平常,很快就会得到对方网站的响应数据包,拆开了拼好了就能给主人显示了。可是这回,邮件却被邮局退回来了,上面盖着章——查无此地,原件退回!
狐狸很纳闷的挠挠头,这个地址是刚刚从DNS那里查倒的阿,应该没有错。这时候一只chrome蹿过来说,狐狸姐,这个你就不知道了?狐狸说,我确实不知道阿。chrome说,好,那我给你解释解释。这时候其他的chrome喊:快过来,活还没干完呢。这只chrome答应一声,好嘞。然后念动咒语,刷的一下,由分出一个进程。这个新的进程跑去干活,而原来这个chrome继续给狐狸讲解:你知道给咱们送信的是哪个邮局么?狐狸说这我知道阿,是朝天通邮局。chrome神秘的笑笑说,呵呵,这只是表面。表面上我们有很多家邮局可以选择,朝天通,朝天动,朝天信,等等。其实他们都归朝天邮局管辖。这个朝天邮局比较霸道,他看着不顺眼的地方不给送信,直接告诉你查无此地,我怀疑可能是由于那地方没给他交保护费,但具体为什么,我也说不清楚。总之呢,遇到这种情况,邮局看着不顺眼的地方,就愣告诉你查无此地。狐狸点点头,哦,原来这样,你怎么知道的这么多?chrome得意的说,那倒是也没什么,主要是因为我的东家,就是你经常去找的狗狗哥那里,就有很多这样的地方。这些地方归狗狗哥管,但是朝天邮局就是不想去,所以咱们不能给那边发信。
狐狸一边听chrome说,一边赶紧向主人汇报了目的地无法到达的噩耗,汇报之后又转过来问chrome:那有什么别的办法呢?chrome说,办法有很多,比如其中有一项你就会。狐狸惊讶道,我会?chrome说是啊,是个浏览器都应该会,就是代理。
狐狸恍然大悟,哦……明白了。狐狸是明白了,您可能还不明白,没关系,咱慢慢的说。
这个代理是怎么个事情呢?其实说起来也简单,就是代为转交书信。比如说狐狸想给狗狗哥那网站写信,请求数据,正常的流程是把信交给邮局,邮局在把信送到狗狗哥那里。但是有时候邮局送不到,那就可以用代理。代理就是狐狸不给狗狗哥写信,而是找个中间人,比如说叫做小马哥。当然,这个小马哥的地址,必须是邮局可以送到的。狐狸接到主人访问狗狗哥的命令后,先给小马哥写信,信的内容是:请提供狗狗网站的主页信息。小马哥收到信后,要拆开信,看信的内容,一看,明白了,狐狸想要狗狗的数据,于是小马哥以自己的名义,写信给狗狗,说明要获取主页信息。狗狗收到信之后就像收到一个普通浏览器的请求一样,把数据打包发给小马哥。小马哥收到信,拆开,拿出里面的数据之后再次封进信封,以自己的名义发给狐狸。于是狐狸就得到个狗狗哥主页的信息。听起来小马哥做的事情根邮局差不多,都是中专邮件。但是他们有着本质的区别。首先,邮局是不会拆信件的,狐狸写给狗狗哥的信,发信人,收信人,都写的明白,不会改的。而小马哥不同,他收到信要拆开,看里面的内容,看了内容才知道狐狸想让她做什么,然后他还要把信重新封好,把发信人改成自己,收信人写狗狗,然后发出去(小马哥那里的邮局必须能寄倒狗狗那里)。其次,通过邮局寄信的时候,收信人和发信人是相互知道的。甭管信件在邮局的手里经过的多么复杂的流程,狗狗知道狐狸要请求数据,狐狸也知道数据狗狗回的。而通过小马哥就不同了,狗狗根本不知道狐狸的存在,他只以为小马哥要请求数据。同样,狐狸不知道狗狗的地址,她并不会去DNS那里查看狗狗的地址,而只是把请求信送给小马哥,查狗狗地址的事情由小马哥来承担。(当然,这时候狐狸唯一必须知道的就是小马哥的地址。)再有,通过邮局发信,只需要整个系统里做统一的设置。把网关,DNS什么的设置好了,所有上网的软件都可以这么用,也都必须这么用。不可能这个软件通过朝天通邮局发信,另一个软件通过向地通邮局发信,除非系统里有多个网卡。而通过代理呢,就需要每个软件分别设置。狐狸可能去找小马哥代理,同时chrome可以去找大骡子弟弟代理,皮筋去找青蛤蟆大婶代理。(到了动物园了-_-b)而且,每一个代理人,他们的能力还有区别。比如小马哥可能只会读写http格式的信。所以要让他代理http的请求,就可以,你要写个https格式的信,他可能就看不懂。
(111) 笔走龙蛇书妙体,顿开金锁走蛟龙
除了狐狸妹妹,我这里的很多人都可以使用代理。然而这么一个个都分别给小马哥写信也比较麻烦,再说也不符合我们Linux软件“只做一件事,但要做到最好”的哲学理念。所以,这个带里,是可以在我这个系统这里进行全局设置的。设置起来其实也很简单,就是一个全局变量而已,只要export http_proxy=http://xxx.xxx.xxx.xxx:yyyy 就好了,xxx是代理服务器的地址,yyy是端口号。这样设置了之后,所有使用http协议的网络软件就都可以通过代理上网了。不过要注意,如果你是在终端中设置的,那么只对在当前终端里启动的软件有效。
会给人代写书信的“小马哥”也分为很多种,其中有一种是基于有点软公司的操作系统的,叫做ISA,如果要是遇到他,可就有点麻烦了。
别人代写书信,有来者不拒型的,凡是友情求发过去他都会提供服务;也有需要身份验证的,信里面要写上接头暗号,什么天王盖地虎,锄禾日当午之类的。暗号对了才能给你做书信代理。可是ISA对暗号的时候(当然,也可以配置成不需要暗号的),不是你把暗号写对就行,还要验笔迹,字写的好看的,他才愿意给你代理,字写的难看的他理都不理。他用了这么一套方法对暗号进行加密,就导致我这个从小不好好上学,字迹不公正的系统不能够直接链上他的代理。就像刚才说的,通过全局变量设置代理,如果这个代理是ISA做的,那设了也是白设,连不上。不过我们这里也有人能够用他的代理,谁呢?狐狸妹妹就行,狐狸的字迹工整漂亮,符合ISA对字迹的要求,所以狐狸可以链接ISA的代理。其他的浏览器,像Opera,Chrome都可以,哎,看来把字练好真的是很重要阿。可是他们虽然自己可以链接倒ISA代理,但是他们不能帮别人写信阿。比如超级牛里要想通过代理来上网安装软件,如果是别的代理的话就像刚才我说的那样设置一下就可以了,或者在/etc/apt/apt.conf里设置也可以,这么设置就不是全局了,就是只设置超级牛力的代理。不管怎么设,都是连不上ISA的,就是说无论我还是超级牛力,那个字迹都跟大猩猩拿左手写出来的似的。那如果就遇到了费用ISA代理不可的情况怎么办呢?也有办法。
找个字迹好的还能代写书信的不就行了么。那么有这样的人么?当然有,ntlmaps就是这样的软件。
ntlmaps就是一个在本地代写书信,并且是专门给ISA写信的家伙。说简单了,就是个二级代理。有了他之后,把全局变量的代理设置成http://127.0.0.1:5865(ntlmaps默认的端口),也就是说,无论谁要上网,都写书信给ntlmaps,再由ntlmaps抄写一份给那个ISA代理,这样,有了ntlmaps优雅的笔迹,ISA就不会拒绝他的请求,于是所有的软件就都可以畅游网际了。
(112) 小熊猫下小熊猫,游戏者装游戏者
今儿个主人让狐狸下载来一个新的家伙,这家伙叫做Ailurus。我让星爷一查,感情是小熊猫的意思。这个firefox其实也是指小熊猫,只不过大家先入为主的,看见fox就都管他叫狐狸。和着狐狸妹妹下载来一个自己的同类!?这只小熊猫又会干些什么呢?难道也是个浏览器?下载完成之后,主人立刻叫来超级牛力安装,超级牛力把这家伙从DEB盒子里面拎出来,大家一看,长相倒还可以,不过跟狐狸一点也不象。而且,怎么看也不是个浏览器阿?他到底是干嘛的呢?
主人还真是个急性子,装完了之后立刻把小熊猫叫起来干活。小熊猫一爬起来就赶快热情的跟主人打招呼:来了您内!一位里边请~~客官,您来点啥?您是打尖阿还是住店阿?哦不对,您是打算来俩软件尝尝阿,还是想改改设置装修系统呢?
主人问道:“你这都有什么软件阿?”
小熊猫说:“要说这软件可就多了去啦。什么山中走兽云中燕,陆地牛羊海底鲜,猴头眼窝鲨鱼翅,熊掌干贝鹿尾尖,这些东西我们这阿……”
“全有?”
“厄,全没有”
“没有你说他干嘛阿。”
“我这是给您打个比方,再说这写个东西他也不是软件阿。我们这是挑软件的地方。各门各类的软件都有,什么浏览器,发邮件,文件共享一大片,刻CD,不算慢,媒体播放把片看,博客聊天笑哈哈,绘图排版有专家,编程工具很有用,集成开发得靠他……”
“还真不少”
“那可不是,我这把每个软件都说全了,那咱就得年底见了”
“我想玩游戏,你给介绍俩游戏吧”
“好勒~你看咱这有益智的,即时战略的,FPS的,还有棋牌类的,什么都有。您来个益智的泡泡龙尝尝?”
“行阿,这不大吧。”
“不大,这顶多算个凉菜,您再点个热的。”
“你这里头还有热的?”
“那是阿,你看这Warzone 2100,战争题材,全是枪林弹雨点火爆炸的,能不热么”
“还真是,那再来个这个吧。”
“还要点比的不要?”
“不要了,先来这俩,好吃再来”
“得勒~ frozen-bubble一只,warzone 2100一套~~~”
内存里安静了3秒钟,他又喊:“frozen-bubble一只,warzone 2100一套~~~”大家你看看我,我看看你,还是不知道他什么意思。结果他忍不住了,一指超级牛力:“说你那!赶快装去阿!”超级牛力这才醒悟过来:和着是喊我呢阿,拿我当厨子使唤了。可是这也算是主人的命令阿,不能不执行,于是超级牛力赶紧去给装这俩软件。一会装完了,告诉小熊猫,小熊猫扭脸跟主人说:您的菜齐了,给搁在您应用程序菜单里面了,您自个找去吧。
(113) 忠勇智计三千人,三千宠爱在一身
这小熊猫一来,新力得可就麻烦了。原本是他超级牛力的图形界面嘛,主人要是想用图形界面装软件,那必然得找他,再由他把主人的意图转达给超级牛力。现在这小熊猫以一来,这不是把他的饭碗给抢了么。可是新立得也没啥可说的,人家小熊猫真的是态度热情,服务周到,未语先笑,还带介绍。主人愿意用小熊猫,他新立得也管不了阿。
濒临失业的新立得垂头丧气的站在一边,看着主人继续跟那个小熊猫玩。主人发现小熊猫除了可以装软件以外,还可以干好多事情。他点了下系统设置,小熊猫立刻满面春风的又迎来上来:“客观,您有来啦~您赶紧看看这系统里哪块不顺眼,我给您收拾去。”
主人说:“我觉得我这4G的内存足够大了,我想尽量少用swap,多用内存。”
小熊猫一伸手,不知道从哪变出一个电子表式的东西,原来上面写的是60,他使劲一拧,把上面的数字调成了0:“好勒~您放心,冲您这么大内存,swap里以后再也不用写东西了。”
主人微笑着点点头,可内存里边,gedit心里不是滋味了。要说改这么个设置其实很简单,就是一个配置文件的事情,要搁往常,主人一定是叫来gedit去改,可这熊猫以来,俨然自己的生意也被抢了。他扭头看看被冷落在一旁的新立得,顿时有一种同时天涯沦落人的感觉,于是不自觉的想新立得靠近了几步。
这时候主人又说了:“还有阿,这开机时候的声音不大好听,你把他关了吧”
小熊猫随手打了个响指,之后说道“好,已经搞定了。”
Gnome工作组管理声音的那哥们顿时一身冷汗,这设置Gnome声音应该找他阿。他看看在一起窃窃私语的gedit和新立得,也凑了过去。
主人又有要求:“还有阿,桌面上没有回收站有些别扭,给弄一个出来把。”
小熊猫听了赶快说:“没问题~”一边说一边风风火火的跑出去,转眼回来,手里拿着一个纸篓,放在了桌面上。这一下gconf-editor也坐不住了,改这种系统设置原本非他莫属阿,他号称Gnome下的注册表,就这么轻易的被一个猫科哺乳动物超越了?赶紧跟那失业的哥仨交流心得去……
没过多一会,Gnome工作组里管桌面的,管登录窗口的,管屏保的,纷纷受到了小熊猫的威胁。这还不算完,主人随后问了一句:“你看我这机器里还有什么不顺眼的么?”小熊猫说:“我看那些Ubuntu-docs的文档您也不看,还不如把这个报删掉,能节省270M的空间。”主人一听:“好!”小熊猫赶紧跟超级牛力说:“快把那个ubuntu-docs包删了,打扫干净空间好让主人干别的用。”事业不顺的软件们顿时慌了——这就开始裁员了阿!
(114) 一寸光阴一寸金 寸金难买寸光阴
当这帮软件们人心惶惶的担心裁员的时候,OO老先生站了出来。要说还是OO老先生有经验,赶紧以专家的身份出来辟谣:你们好歹也是Linux下的知名软件,怎么这个道理都想不通呢?那个小熊猫强在方便,强在善于于主人交流。但他的功能虽多,却不专一,其实是个不符合我们Linux精神的软件,只不过是为了方便大众而已。要说装软件,他就只能装那么几个软件,很多都是需要添加第三方软件源,然后再安装的,如果用你新力得的话,其实也能装,就是麻烦点。可除了这些比较常用又装起来麻烦的软件以外,其他文件他不管装,还得你新力得来。配置Gnome也是,虽然他能对Gnome进行一些配置,但那只是常用的几个,要真需要更详细的配置,不还得你gconf-editor来么。 众软件一听,互相看看,顿时豁然开朗,都松了一口气,看来这工作还能继续,饭碗还没什么问题。
转过天来,主人启动电脑,我们如往常般起床并投入工作,可是主人不知道是不是心情不好,还是遇到什么事情,总觉得我们起床比往常慢了许多,自言自语的说到:这Ubuntu也跟Windows似的越用越慢阿。这一下可把我们工作间里的软件们气坏了,怎么能拿我们根那个查皮相提并论呢?当然,查皮也有很强大的地方,但就他这随着使用时间增长速度越来越慢的坏毛病是一直被人们诟病的。其实说来这也不怪查皮,主要是他们那里的软件都比较封闭,比较私自,做事情不考虑别人。你看我们这的软件,有什么库什么的都放在一起,相互共享。而查皮那的软件各自有自己的小天地,每个软件都封闭在自己那个目录里。很多软件为了自己的一些目的都会要求在系统启动项里增加自己的一些内容。你要说QQ要求启动是自动启动他,那还友情可原,毕竟主人确实需要经常用他。像RealOne这样的软件也要求在启动的时候要启动他的一个小进程,而这个进程只是为了监视主人有没有更改rmvb文件的默认播放器,如果一旦改了,他马上给改回来,也就是说一定要保证RealOne是唯一合理合法的Rmvb文件的默认播放软件。你说这不是霸道么,人家愿意用什么播是人家的事,你看我们这里的SMplayer和Totem他们打的再热闹,也是绝对遵守主人的命令,主人说用谁就是用谁,也没听说过谁为了显示自己的能力就去修改默认播放器设置的。查皮那的那些个软件如此不管他人的感受,每个软件都要 申请的启动项,那当然随着软件装的越来越多,查皮起床就越来越慢了。
可是我们这里的软件可没有这么私自的人阿,怎么可能越用越慢呢?主人这么说我们,太伤自尊了~~ 不多久,主人就叫来超级牛力,让他去找一个叫做bootchart的软件。等装上了一看,这家伙是个计时员,专门记录Linux系统启动的时间,这回我们可找着说理的人了,哈哈。
果然,在装好了bootchart之后,主人就马上重启的计算机。
计算机重新启动,在我这个内核起床之后,bootchart最先跑进内存里(往常是init最先),并且拿出秒表,静静的准备开始着。由于init是每次最先起床的进程,所以bootchart是以init启动作为计时基准,他要等倒init跑进内存再开始计时。很快,随着init跑进内存里并喊一声,init启动!bootchart果断的按下秒表的计时键并高喊:“计时开始!紧张而激烈的Ubuntu系统的启动过程随着刚刚init的一声呐喊,终于开始啦!也许有的观众刚刚打开电梯还不知道怎么回事,我们正在进行的是ubuntu一日一度甚至一日数度的启动过程。只见各种内核进程以及自启动进程纷纷开始运行。udev,udev,udev突破啦!他不顾前面的追兵,跑进了内存。哦,udev把启动过程传给了modprobe,modprobe跑到内存中场,他像马一样的翱翔速度……哦,他停下了,他是在等待硬盘工作。就在这千钧一发不可收拾的关头中,rc上场。他的主要任务就是叫醒那些设置好的启动项。这时候,好,modprobe已经读完了硬盘,他完成的他的工作,终于成功啦,总共用了1.38秒,突破了他自己创造的1.37妙的记录-_-b,哦等一下……呃……好吧咱们再看rc,只见他在后场38公里处以70码的一脚远射把启动的接力棒传给了network,这时候network被rc撞醒啦,没有被撞死,rc把速度掌握的恰倒好处。network醒来去配置网络,好,他配置好了网络,network立功啦~~Linus生日快乐~~~然后是sh,哦,gdm也来了,大家齐心协力,共抗非典……”
别看bootchart这家伙说的挺乱呼,可他记录的却是井井有条。当系统完全启动之后,bootchart以图片的形式写了一份报告,向主人汇报了各个软件启动所用的时间,哪些时间用在等待其他进程上,哪些时间用在等待硬件响应上,写的非常详细。主人看了之后,终于觉得,我们的启动速度,并没有因为使用时间的增长而变慢。
(115) 集腋成裘,拼小为大
今天我们的屋子扩建了。
早上一起床,做硬件扫描的时候发现PCI-E总线上比往常多了一个设备,是一块RAID卡!主人从哪里弄来了这东西阿。难道要把我们这台电脑升级为服务器?我们Ubuntu的服务器版和桌面版确实基本没有啥区别,只是默认安装的软件和使用的内核不大一样。服务器版自然用的是服务器的内核,注重稳定,并且预装的是服务器相关的软件,没有图形环境。服务器版变为桌面版只要安装上桌面版的那些东西就可以,反过来也是一样。不过主人这台家用的电脑,整成服务器有什么用呢?要是不整成服务器,又为什么要装RAID卡呢?
说了这么半天,您可能还不知道这个RAID是个什么玩意。RAID,就是Redundant Array of Inexpensive Disks的缩写,中文翻译过来叫做“廉价冗余磁盘阵列”。有人可能问了:“这个RAID卡我买过,怎么也得几千块钱,加上上面接的硬盘,整个价钱能顶上一整台普通的家用电脑了,这个廉价二字从何谈起阿?”这个事情,还得从头说。RAID这个技术诞生在1987年,那时候的硬盘不像现在这么大,而且那时候的硬盘是容量越大单价越贵。比如现在,500G 的硬盘要是卖400块钱,那1T的硬盘绝对不到800块钱,道理很简单——否则谁买1T的阿,插上俩500G的好不好。而当年那个时候不是这样,那时候比如50M的硬盘卖500块钱,那100M的硬盘能卖1500。那有人说了,谁还买100M的阿,买俩50M的插上不好么?(好像就是刚刚我说的-_-b)可是有的情况不允许这么做的,比如说我有个数据库,数据量很大,可能会达到70M。那我就必须装一个大于70M的硬盘才能装的下,你装俩50M的硬盘,我这数据库文件总不能切碎了放吧。这个时候,RAID作为一项省钱的技术出现了。(虽然他现在已经俨然成为一种费钱的技术)
最初的RAID的功能很简单,就是把几块硬盘连接到一块RAID卡上,然后RAID卡把他们拼接在一起(逻辑上拼接,可不是拿刀切碎了当七巧板玩阿。),作为一整块大硬盘来用,这样就节约了购买大容量磁盘的成本,所以才号称“廉价”。RAID卡工作的时候也不许要什么运算,只是向上报告自己是一个硬盘控制器,上面接了一块100M的硬盘,然后上层的软件信以为真。当有数据写的时候,RAID卡就要实现自己的谎言(这话听着都矛盾……),真的向上层提供100M的完整的存储空间——他也确实可能提供,因为有俩50M的硬盘呢吗。他会先写其中一块硬盘,写满之后再写另外一块。当然具体怎么写的细节,这些上层软件是不知道的,他们只以为这就是一个100M的硬盘。
(116) 容量速度和安全,阵列级别零一五
这种简单的扩大容量的阵列,也就相当于把两个屋子盖成里外屋,从正门进外屋,外屋里面还有个门,就是里屋。(如果是更多的硬盘,那就还有里里屋,里里里屋……)往里面放东西的时候,先往里屋放,放满了再放外屋。可这种结构,也只不过是增加容量而已,慢慢的人们就研究进一步开发这种磁盘阵列的潜能。首先想提高的,就是阵列的读写速度。长期以来,内存,cpu的容量的速度都成倍数的增长,而硬盘的读写速度却因为受到机械性能的限制而一直没有跟上其他硬件的发展。而作为这种磁盘阵列,既然由2块以上的硬盘组成,那么理论上就可以实现读写速度提高两倍以上。于是就有了RAID0。这种级别的磁盘阵列,可以提高阵列的读写性能,简单地说就是有数据往里面写的时候,就是所有的硬盘一起写,当然速度就提高了。就好像还是两间屋子,这回把两个屋子并排挨着盖在一起,然后两个屋子的门也和成一个更宽的门,这样里面的容量自然还是两个屋子的容纳量,而往里搬东西的时候,由于门宽了,速度就快了。
再有呢,就是RAID1,这个是为了安全性设计的。原理就是两个屋子,东屋和西屋。里面容量一样,放的东西也一模一样。专门有人看着,看往东屋里放了什么东西,就去买个一模一样的也往西屋里放一个。这样,万一那天地震把东屋震坏了,把里面东西都砸坏了,西屋里的东西还照样能用。缺点也显而易见,浪费了一个屋子嘛。明明两个屋子,就只能放一个屋子的东西。
再有,就是最最神奇最最有技术含量RAID5了。这是怎么个意思呢?这就需要三间以上的屋子,咱就拿3间来说吧。有左中右三间屋子,一样大小,本来是分着的,每个屋子有一个门。(就是三块普通的容量相同的硬盘啦)然后来个包工队,高工头姓哈。哈工头带着他的包工队噼里啪啦的一通改造,三间屋子整合倒了一起,一看容量,咦?变成两间的容量了,再看门,也只是两个原来大门的宽度。您一定怀疑哈工头把那一间屋子的砖都拉出去卖了当回扣了吧。不过别急,看看这个改造过的屋子的神奇之处吧。往里面放东西的时候,由于门是两倍的门宽,所以速度肯定是提高的两倍。里面的容量也确实是2个屋子的容量。你可以试着往里面放点东西,然后扔一颗手雷,炸掉半边屋子,同时也炸掉了里面的东西。然后之间哈工头拿出一个小棍,挥了几挥,念句什么后轱辘追不上前轱辘什么的咒语,然后就发现第三间屋子出现了,里面好好的放着刚刚被炸掉的那间屋子里面的内容。后来听说那包工头不是姓哈,人家复姓哈利,名叫波特……
(117) 喜得广厦千万间,挂载之后方欢颜
说了半天,还没说明白我们的屋子到底怎么扩建了呢。主人装好了那块RAID卡的驱动后,接上了2块硬盘,做了一个RAID0,就是那种能够提高读写性能的方式。这种方式虽然速度快了,不过风险也同样高了,因为数据是同时写进两个硬盘的,一边写一半,所以其中任何一块硬盘出现问题,所有的数据就都丢失了。不过一帮家庭用户倒是不必太担心这个,但也要记得尽量不要放太重要的东西。主人接的两个硬盘每个有250G,作成RAID0后成了一个500G的大房间。那么这个房间怎么接进我们的房间里来呢?
咱之前说过,一个存储空间要想接入到我们的哦自立来,需要mount,也就是挂载。咱还说过,挂载的过程,就是给这个屋子起个名字,就像是挂个牌子。像U盘阿,移动硬盘阿,这样临时接入的设备,在接入的时候挂载一下还可以,其实我都是自动帮主人挂载倒media下的。而像今天加进来这个RAID0设备,肯定不是临时加进来一下,应该是以后长期存在的。那么这个空间应该挂载到哪呢?这个问题,就得看主人想拿他来干什么了,我们是决定不了的。主人要想指定这个空间被长期挂载的某个地方,就要修改fstab文件。
这个fstab文件是主人用来告诉我整个文件系统如何挂载的配置文件,每次起床后我都要查看一下,里面记录着,那个屋子是厨房,哪个屋子是客厅。有人说,你这家伙脑子是不是有点问题?难道每次睡觉醒来连哪屋是厨房都不及的了么?那要是半夜起夜的时候你还就不知道哪个是厕所了?哎,我是软件,再次重申。fstab里面的格式大概是这样子:
# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
# / was on /dev/sda1 during installation
UUID=90f8ca7a-fd04-4bde-8247-ae939b559147 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda6 during installation
UUID=08da5802-2a80-4a4e-8da4-c922e4e75ef0 none swap sw 0 0
/dev/scd1 /media/cdrom2 udf,iso9660 user,noauto,exec,utf8 0 0
里面带#的是注释,这些行都是给人类看的,我看不懂,掠过不管,其余的行就是有用的了。每一行描述了一个磁盘分区的挂载。每行的最前面是file system,是说明本行描述的是那个分区,也就是那间屋子。我们Ubuntu用来区别屋子的,是使用每个屋子的UUID。这个UUID就是通用唯一识别码的意思,每个屋子都会有一个,而且互相都不一样,我们就是用这个来去别各各屋子的。过去的Linux有的使用sda1,sdb1这样的设备名来区别每个屋子,但是这样会有问题。比如原来机器上只在第二通道接了一个硬盘,那么这个硬盘肯定是sda,这个硬盘的第一个分区就是sda1。然后fstab就写把sda1当作/分区。如果后来又在第一通道插入了另一块硬盘,那么后插入的硬盘由于在第一通道,可能就成为sda了,原来的sda变成了sdb了。fstab还要把sda1当作/来用,就出问题了。像我们这样用UUID来区分分区,就不会有这样的问题了。每行的第二部分就是这个分区要挂载到的位置mount point,也就是这个房间要挂的牌子,什么/阿,/home阿什么的,我也不用多介绍了。再后面就是这个分区的文件格式type,这个也不用多说。之后的options就是挂载时候的选项,比如ro,说明这个分区挂载为只读;user,允许普通用户操作这个分区;sync,不对这个分区的写操作进行缓冲。一般没什么特殊的要求的话,这个就写defaults就可以了。后面那个dump,是用来给dump软件看的,根据这个数据在决定是否要对这个分区进行备份,是1就备份,0就不备份,反正一般我们的系统里也没有dump,所以这里写0就好。最后一个pass是用来说明是否需要在启动时对这个分区进行检查,如果是1或者2就要检查一下,如果是0就掠过不检查。要注意的是/分区很重要,因此/分区对应的pass值必须是1,而其他的分区可以是0,一般没什么可查的。如果你想查以下,就写2。
介绍这么多,主人已经叫来gedit来修改fstab了。首先主人添加了一个UUID= 1478d8d-2a80-4a4e-8da4-c922e8a8e8d7e 的一行,这个UUID估计就是新添加的那个RAID0了。哦,对了,忘了介绍怎么得到这个UUID了,其实很简单,就ls -l /dev/disk/by-uuid/就可以看到了,里面每一个文件都是一个软链接,软连接的名字就是UUID,链接到的设备就是这个UUID对应的真正的设备。或者sudo blkid也可以,更正规一些。之后,看到主人在fstab里写着把这个设备挂载到了/home。看来是主人觉得存放个人物品的空间不够大,想扩充一下。可是,那原来里面的东西怎么办呢?
(118) 硬盘扩建无忧虑 文件共享有三八
很简单,拷过去!
主人改好了fstab后,我只是眼睁睁的看着,没有作任何动作,这是规矩,fstab只在启动的时候起作用,不重启是不会生效的。主人也很明白这个道理,存好了fstab后,又去把那个raid0的磁盘Mount到了/media/raid0下(当然,在这之前创建好了raid0这个目录),然后cp ~/* /media/raid0 -a,这就把他的家目录下的所有东西,包括那些文档阿,照片阿,视频阿,以及所有软件的配置文件都拷贝过去了。完成之后,主人就重启了。
经过一番折腾,我们的屋子总算是扩建完成了。/home目录挂载到了RAID0磁盘上,容量高达一个T!原来那些堆满半个屋子的东西放到这里之后只占据一个小角落而已。不知道空着的那一大片里,主人想存点啥,存软件和游戏?咱Linux系统下哪有过这么大这么多的游戏可存呢?存电影?恩……这个靠谱,只是主人这512K的ADSL小猫要拖到什么时候才能拖满啊,这可要辛苦咱家奔流了,呵呵。
转过天来,超级牛力奔跑着冲向网口,高喊着:“本APT有活干啦,有软件装啦……还有超级牛力啦~~~”我赶紧问一句:“去装什么软件?”网口外传来超级牛力悠扬的声音:“大~三~~八~~~”狐狸妹妹凑过来问:“他说的是我经常在论坛上看到的那个狐狸头么?”我解释道:“不是的,他说的大三八,大概是三八。”狐狸怒道:“您这不是废话么。”我赶忙给她写出来:是Samba,不是三八。
Samba是一个用于局域网中的计算机间文件共享的软件,这么说您大概还摸不着头脑,那么网上邻居您听说过吧?对,Samba就是干这个的。当年那个有点软公司设计了一套局域网计算机间的文件共享协议,起名叫做SMB,就是Server Message Block的缩写。当时所有的Windows系统就都集成这种协议,因此这个协议在局域网系统中的影响还比较大。后来,国际互联网,也就是Internet逐渐流行了起来,有点软公司希望他们的这个协议能够一个用在Internet上,因此对其进行的整理,更名为CIFS,也就是Common Internet File System。从名字可以看出,他们的期望是很高的,不过实际呢……反正,你现在用网上邻居上搜狐么?当然,不管怎样,CIFS或者说SMB协议在局域网中传输文件还是非常方便的。当然,我们Linux系统之间也有很好的局域网共享文件的协议,叫做NFS,网络文件系统的缩写。但无奈那该死的查皮不支持这个协议嘛,所以要想网络上的查皮和我之间能共享文件的话,要么我这里有人能懂CIFS协议,要么查皮那里有软件能解析NFS协议。然而毕竟还是我这里的软件大度一些,所以就有了用于支持SMB协议的软件——Samba。(其实主要是因为我们Linux比较小众啦)
(119) 通讯靠吼
Samba软件包很快被超级牛力装好了,包里面出了一些工作必需品外,主要包括两个程序:smbd,nmbd。这两个家伙总是一起合作来实现文件共享的工作,就好像小区里开了一个小卖部,需要有人给小卖部做宣传,也需要有人卖东西送货。
nmbd这家伙负责计算机名称的解释,他负责让别的计算机能够找到我们这台电脑,也就是说nmbd就是个负责给小卖部做宣传的。当然,各行各业都有规矩,要饭的还得分地盘拜码头呢,搞宣传的也得按着道儿上的规矩来。那么这个道儿上有什么规矩呢?这个统一的规矩就是NetBIOS。有同学可能要提问了,这是个什么协议阿?好,我来解释一下:咳咳,NetBIOS协议是由IBM公司开发的,主要用于数十台计算机的小型局域网。NetBIOS协议是一种让在局域网上的程序可以使用的应用程序编程接口(API),他为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能,系统可以利用WINS服务、广播及Lmhost文件等多种模式将 NetBIOS名解析为相应IP地址,实现信息通讯,所以在局域网内部使用NetBIOS协议可以方便地实现消息通信及资源的共享。好,以上是搜来的。nmbd这个家伙就是按照NetBIOS规定的方式和流程,在小区范围内(也就是局域网的全网段啦)向大家宣传本小卖部。首先,当nmbd起床,也就是服务启动的时候,nmbd会抄起大喇叭向全小区广播:懒蜗牛小卖部开张啦~懒蜗牛小卖部开张啦~ 他会喊上6倒10遍,确认没人反对,我们这个小卖部就可以正式叫做懒蜗牛小卖部了。难道还会有人反对么?有,因为小区里可能会有别的小卖部,人家可能也叫懒蜗牛小卖部,那就重名了,这是不允许的。如果有别的小卖部听到了nmbd的广播,就会回应:我们已经宣布对懒蜗牛小卖部名称拥有主权,懒蜗牛自古以来就是我们小卖部不可分割的名称,任何试图抢夺我们名称的行为我们都要强烈抗议!之后nmbd就知道了,赶紧再改名,再广播:懒乌龟小卖部开张啦,懒乌龟小卖部开张啦……直到最终没人对名字提出异议为止。当nmbd服务停止的时候,nmbd也会向全小区广播:懒蜗牛小卖部倒闭啦~懒蜗牛小卖部倒闭啦~ (还真快) 当然,开张有人管你,倒闭的时候就不会有人提出异议了,nmbd广播的目的是告诉大家,懒蜗牛这个名字我们已经不使用了,谁要用可以用了。除了启动和关闭时候的工作之外,nmbd的主要工作就是让别人找到我们小卖部。比如有人想从我们这里拷贝文件,他怎么知道这个“懒蜗牛小卖部”在哪呢?如果当小卖部开张的时候他听到了nmbd的广播并且记住了小卖部的位置(就是IP)的话,他就可以直接去了。如果小卖部开张的时候他还没起,或者起了但是没听见(广播包不能保证发到每个终端)怎么办呢?很简单,他喊。他可以喊:小区里都有什么小卖部,快快报上名来!然后每个小卖部再报告一次自己的名字和地址,他再决定要访问哪个。这就是你在查皮打开网上邻居时候的过程。他也可能喊:懒蜗牛小卖部你在哪里?在哪里? nmbd听见就回应:他刚离去,他刚离去……哦,不对不对,我们就在这里,在这里!然后这个家伙就可以直接来这里要东西了,这就是你在查皮里直接通过计算机名访问另一台电脑的时候发生的事情。总之,在NetBIOS的小区里,通讯基本靠吼,nmbd就是负责吼的,吼倒客户来到小卖部,他的职责就结束了,就该smbd出场了。
(120) 认证张口
smbd的任务就是给来到小卖部的客户提供他们想要的东西,但可不是谁来都给的,当然,也不是说要给钱,而是需要进行认证。要看看来的人有没有权利获取某一个文件。这个权限,包括两部分,一部分是smbd管理的Samba权限,一部分是由我管理的系统的权限。权限认证的过程就像这样:一个网络用户来到我们的懒蜗牛小卖部,对接待他的smbd说:给我来二斤照片,就那边那个。这时候smbd会很有礼貌的说:您好,请您出示用户名和密码。然后那个人自报家门:我叫张二嘎,密码是46243712,smbd拿出自己存在硬盘里的用户密码对照表,仔细检查一遍,确认这人确实是张二嘎,然后再找到他要的那二斤照片,叫什么瘦瘦的,可能是根瘦身有关。然后再看看自己的共享记录,就是/etc/smb.conf,看张二嘎能不能访问瘦瘦,这里检查的共享权限是看他能不能访问这个共享。一看,瘦瘦有档期可以访问,然后就把瘦瘦交给张二嘎?不能!手续还没完呢,想看瘦瘦没这么容易。之后smbd还要向我报告,说头儿阿,有个张二嘎要访问瘦瘦文件,你看看他有权限不?然后再由我检查权限,这会检查的是文件权限,也就是ls -l的时候可以看到的那种rwx的权限。如果共享权限过不了,只是说明张儿嘎不能通过网络访问瘦瘦这个共享(但是可能人家可以本地访问这个文件),如果我这里的文件权限过不了,说明张二嘎压根就不能访问瘦瘦文件,这两个权限是有区别的。所有权限都通过了之后,smbd才把瘦瘦文件真的读取出来,然后按照cifs协议打好包,递给张二嘎,完成一次文件的分享。
以上说的只是常见的,也是默认的权限管理状况。其实smbd有4种安全级别,刚才说的user级别,这种级别下,smbd根据本机上存的smbpasswd文件来判断来访问的人是不是张二嘎。另外三种级别分别是share,server,domain。在server级别,你可以给smbd指定一个认证服务器,比如另外一个小卖部,也就是另外一个装了samba的机器,去那台机器上认证。这种情况下,用户来了,说我叫张二嘎,smbd不用去找什么smbpasswd文件,直接扭头问隔壁的一片云小卖部:哎,你看丫是张二嘎么?一片云小卖部的人点点头:恩,就是他。这就算认证通过了。那么在domain级别呢?其实跟server差不多,smbd也不用自己做认证,但是这回不是链接其他的samba服务器了,而是链接倒windows的domain服务器上做验证。就像是用户来了,说叫张二嘎,smbd不查文件,也不问隔壁的一片云,直接拿起电话打110:你好,我们这有个人说是你们通缉的张二嘎,你们过来看看是不是。最后这个share级别呢?这个级别就是根本不管你是谁,一视同仁。人家来了说:我是张…… smbd直接拦住:行了,甭跟我说你是谁,不就要瘦瘦么,拿走拿走。
(121) SMB初具规模 NFS虎视眈眈
主人装好了大三八之后,马上开始编辑/etc/samba/smb.conf文件,将主人家目录下的一个视频目录共享了出去,为懒蜗牛小卖部提供了店面场地。之后,启动了samba服务,smbd和nmbd两位跑进工作间开始干活,小卖部的员工也有了。这目录里面本来就有不少的视频文件,算是有些存货吧,不过肯定远远不够,要知道现在这里目录已经是在主人新加的1T的RAID0分区上了,这才哪到哪啊,所以还得有个负责进货的,那自然非奔流莫数了。于是咱这懒蜗牛小卖部真的就开张了。
开张之后的一段时间,一直没有客人来。nmbd每天都卖力的给小卖部做宣传,不过喊是喊够了,但是有没有人听到就不知道了。奔流也是兢兢业业的给小卖部备货,库存的片子是越来越多。只有smbd似乎一直没什么事情。这一天终于有个客户上门了,由于主人把samba配置成了共享模式,所以smbd也没问对方是谁,只知道好像是来自一台windows系统的电脑,smbd也没多问就把东西给他了。这个给东西的过程说来容易,其实也挺麻烦的。因为是网络共享嘛,所有的文件都是要通过网口送到对方手里的。人家来买东西只是通过网口把话带到:我是谁谁谁(共享模式当然就不管他是谁了),我地址是xxx(ip地址),我想要你那个YYY文件,赶快送过来。然后人家可就在家等着去了,这边smbd就忙上了,找到那个文件,剁碎了,剁成小块(别着急,都标着号呢,到那边人家还能拼上),然后一块一块的打成小包从网口递出去。这过程倒是有点象开网店了。这位刚走,一会又来了一位客人,好象也是从一个Linux系统上来的。smbd看到了亲切的面孔很是兴奋,刚想上去打个招呼,没想到来的这位客人冷冷的说:“哟,怎么是个Ubuntu系统阿,好好的两台Llinux间传文件用的哪门子samba呀,CIFS协议可不是给linux准备的,用NFS多好,还省我的事。”smbd听得这叫一个不舒服,samba怎么就不许两台Linux用了?我们图省事,节约资源少开一个NFS服务不行么。不过毕竟人家是顾客,顾客就是上帝嘛,于是smbd也没说别的,只是问他:“您要点什么?”那个客户说:“就要那个盗梦空间那个文件,快点阿。我回去等着去了。”smbd一赌气,把这个文件剁的异常的零碎:哼,让她拼去!
那这个NFS是个什么呢?为什么smbd听了不爽呢?说来也难怪,这个NFS呢,是我们Linux,以及Unix用来通过网络共享文件的一种协议,全称是Network File System网络文件系统。它和Samba的这个协议的作用差不多,都是给局域网的计算机之间共享文件用的。人家smbd就是专业负责实现Samba协议的,你当着人家面说samba协议怎么怎么不好,不如NFS,那他能高兴么。就像你去麦当劳问肯德基怎么走一样会被人打出来。说起来也确实NFS这个协议才是我们Linux的原生产品。linux之间传输东西的话用它会更好一些。首先就是传输速度,可以比Samba快些,因为NFS是可以基于UDP协议,也可以基于TCP协议,可视网络情况来选择,那基于UDP协议的时候自然就快些。再有呢,NFS可以支持我们Linux文件系统上的文件权限的设置。比如说有两台机器,A和B。A机器上有个用户叫多拉梦,多拉梦在A机器上有个文件叫做竹豆娘。当多拉梦用户在B机器上登录,并想通过网络访问A机器上的竹豆娘的时候,如果是用NFS协议,就不需要额外设置什么权限,只要用多拉梦用户去登录就可以访问了。(当然,NFS也可以根据IP限制权限,A机器必须没有限制B机器的IP访问)可如果用samba协议的话,Samba的权限和机器上系统的权限是不同的,所以必须再次设置一下竹豆娘所在的共享目录允许多拉梦用户访问才行。
(122) 某年某月某日 某时某分某秒
自从我们这台机器被装好的samba服务,关机的时间越来越少了,经常是一天24小时的开着,同志们很高兴,可以有更多的时间跑到内存里玩了,呵呵。当人,咱们软件是不知倒累的,只要还有电,我们就能把活干。不过我们虽然能24小时活动了,但主人似乎并不像我们这样活跃,他每天至少有八个小时在睡觉,白天还要去上班,真正坐在电脑前指导我们工作的时间也就几个小时。那他不在的时候,没有人发号施令,我们这一帮软件在内存里,干点什么呢?嘿嘿,别着急,主人在酒设计好了。
跟随我来的诸多经典字符界面程序之中,有这么一位称职的管家,他能够根据用户的意图,安排好每天,每月的日常工作,虽然我们都觉得他挺麻烦的,但是他那种严格认真一丝不苟的工作作风确实是别的软件比不了的,这个人就是cron。
我们主人在离开之前,早就将一天的工作计划写成了计划文件,叫做crontabs,存在了/etc/目录下,交给了cron。cron拿着这个计划书,来回在内存里转悠,没事就跟软件们唠叨:“下一个任务,凌晨三点,三点阿,三点钟的时候avast应该起床来杀毒啦,杀那个raid0那个分区,对对,就是那个samba共享了的那个。smbd你别瞪眼,你们这个小卖部是窗口行业,最容易感染病毒了,谁知道奔流运来的货干净不干净阿,再说来买东西的顾客也可能有带病毒的,给你们杀毒是为了你们好,当然了,主要还是为了隔壁的查皮。记着阿,avast,别别,现在别忙,现在刚晚上8点,主人正验货呢,这会你查毒不是影响性能么。那个还有阿,明天就10月11号了阿,明天下午2点开始,wget听好了阿。明天下午2点开始去下载Ubuntu 10.10 desktop版,记着阿,到时候我会提醒你。可别晚了阿,这样2点开始下,主人下班回家的时候差不多正好下完,就可以试用了。”他这么一只唠叨着,直到主人设定好的时间,他会以手雷爆炸级别的声音去叫醒软件:“3点啦!!!AVAST快起床杀毒啦!!!!”整个硬盘随之一震,avast直接被振倒内存里来,开始杀毒。
cron这家伙记性还特别好,不光能够记住主人安排的一次性工作,还可以记住周期性的,比如,某个月的第二天去做什么什么,某个小时的第一分钟的第一秒开始播放音频。(音频的内容大约是:叮咚~三点啦!)除了时间,它还可以控制执行程序的用户的身份,比如说,以root的身份在每天的凌晨三点进行杀毒;(否则万一查出来病毒却没有删除权限就白折腾了。)以lanwoniu用户的身份每天中午去下电影。总之,主人虽然不在了,但是有cron这个监工在,谁也别想偷懒
(123) 长江后浪推前浪,一代新兔胜旧兔
最近又一批Ubuntu学弟学妹们从学校毕业了,这批是10.10。忽然间发现我们8.04已经出来2个半年头了,虽然还不到我寿终正寝的时候,不过也算是人过中年了。看看这些后辈的同学们,已经在不知不觉中比我有了不小的进步。这回的10.10也一样是在细小的地方默默的进步着。比如安装系统,以往我们都是让用户在安装之前先设置好各种安装的参数。比如选择语言,选择时区,键盘布局等等。全都设置好了才开始安装。而10.10很聪明,为了节约时间,他在用户进行设置的时候就已经开始安装了。只要设置好安装的分区,就开始把文件往硬盘里拷贝,一边拷贝,一边让用户慢慢的选择时区啦,语言啦这些东西,节约的用户的时间。后生可畏阿。
可能是看到10.10的飞速发展吧,主人今天下载了一个10.10的iso文件。于是我们默默的,看着这个文件,想到了可能发生的事情。狐狸妹妹说:咱们一起合作了两年多了,工作的时候我可能有些任性,脾气比较大,希望大家不要生我的气。10.10里的狐狸,比我的版本高,性能应该比我强大不少吧。一旁的GIMP点点头说:好在Firefox这个名字还能够在新的系统里,好在还是默认的浏览器,你也应该欣慰了。哪像我……呵呵。我就是太过自负了,觉得自己本是挺大,什么事情都按着我自己的想法来,不懂得照顾用户的感受,结果……从10.04起,光盘里就再也看不到GIMP的影子了。我赶紧过去安慰说:别伤心,主人有那么多照片要处理,少不了你的。这方面在Linux下谁能比你强你呢?就算你的后辈们不在安装光盘里了,主人也会让超级牛力把他们从网上拖回硬盘的。超级牛力也过来说:是阿,还有皮筋,你也不用伤心,主人用惯了你的界面,估计就算装了新的10.10后,还得装个新的皮筋来用。QQ for linux也跑来跟我说:头儿,我向你坦白,那次是我乱用内存,把机器搞死的,怕你们大家说我,就没敢告诉你。先在主人也不爱用我了,你们的后辈都还能在新的系统里发挥能量,我连个后辈都没有(疼殉公司不开发了嘛),我,哎…… 我赶紧安慰他说:好了好了,都是过去的事情了,就不要提了。
就在工作间中大家互相道别,互留遗言的时候(咋听着这么别扭),虚拟终端过来报告:主人,主人打开了虚拟终端,要输入命令了。我们一听,难道,真的要把我们整个系统删除了重装了么……咦?不对阿,重装的话就刻盘安装就好了,还删什么阿。到时候直接用10.10的光盘启动,格掉/分区,保留好home分区,并且还挂载到/home,然后就安装就行了,主人私人的东西也都还在,不需要运行命令阿,主人打开终端这是要干什么呢?只见主人输入了命令sudo apt-get dist-upgrade 靠,原来他是想版本升级阿!哎,俺天真的主人阿,这都跨了多少个版本了,您想升级到10.10??做梦。说起来版本升级这个事情确实有点我们Ubuntu系统的软肋的意思,一般来说,相邻版本间是可以在线升级的,比如从8.04到8.10,从8.10到9.04这样。不过在线升级的危险系数不亚于在打擂的天气里抱着跟铁棍站在空旷的广场上。升级之后能正常进入图形界面就算很运气了。这一点上确实不如他们gentoo,arch这样一直滚动升级的发行版了。相邻的版本是这样,而跨版本就跟本不能升级,比如9.04要想升级到10.04,是不可能的,顶多只能先升级到9.10,然后在升级到10.04。但是冒着两次在线升级的危险,成功率可想而知。这里有一个特里,就是像我这样的LTS版本,是可以升级的临近的LTS版的。比如我8.04,是可以直接升级到10.04的,这不算跨版本,因为我们是相邻的两个lts版。而主人竟然想直接升到10.10,那就根本不可能了。一般要想升级,最好的办法还是保存好/home目录,然后重新安装系统,这样最保险。
(124) 伤情最是晚凉天,升级坎坷不堪言
随着窗外的秋叶一片片的飘落,主人终于在那文件中写入了最后的一个字母。这是一个感人的决定,内存里的软件们默默伫立,等待这即将到来的,未知的命运。
就在几个小时前,狐狸妹妹刚刚含着眼泪告诉了主人跨版本在线升级的高风险,以及重新安装系统的便利性。她没有隐瞒,虽然我们都非常不希望主人格掉整个硬盘上的这个温暖的家庭,但还是如实的劝说主人重新安装系统,因为那样风险很小。主人沉默了许久,终于还是发问:那具体……怎么跨版本升级呢?狐狸妹妹一惊,难道主人还是要冒着风险升级吗?这,这…… 这眼泪已经不自主的掉了下来。超级牛力紧锁眉头,含泪说道:“主人,你,你真傻,干嘛要升级,就看不出重装多么省事嘛!”狐狸妹妹疯狂的冲过来抓住超级牛力喊:“你难道不明白吗?主人不想删除我们阿,他不想亲手删掉陪伴他两年的我们这些软件们,所以才愿意冒着这么大的风险。你,你怎么还能说出这种话来!?你,你,你无情,冷酷,无理取闹!”超级牛力又如何不了解主人的想法?他冲着狐狸大喊:“你才无情,冷酷,无理取闹!”“我哪里无情,哪里冷酷,哪里无理取闹!”“你哪里不无情,哪里不冷酷,哪里不无理取闹!”“好~~~就算我无情,冷酷,无理取闹!”“你本来就无情,冷酷,无理取闹!”“我要是无情,冷酷,无理取闹!也不会比你更无情,冷酷,无理取闹!”“哼!你最无情,冷酷,无理取闹!”星爷在一旁双手合十,口尊佛号:“阿弥陀佛,施主,你还是格了这冷酷,无情,无理取闹的系统吧。阿门……”
总之,大家都十分感动主人冒着电脑挂掉的风险来升级系统。主人打开超级牛力的配置文件/etc/apt/sources.list,把里面所有非官方的源,比如为装各种不在官方源的软件而添加的ppa源这样的,都注释掉,并且把源的地址都改成了10.04的地址,保存好。之后,叫来正跟狐狸对台词的超级牛力,运行sudo apt-get update,这是修改过软件源后的必备命令嘛。然后再sudo apt-get dist-upgrade,这句就是要升级了。这时候我们这些软件,包括我这个内核在内,都静静的注视这超级牛力,成功与否,就看他了。只见超级牛力头一次默默的忙进忙出(平时干活的时候都不忘说自己有超级牛力嘛),他把屋里的大大小小的文件彻彻底底的换了一遍,包括狐狸妹妹,OO先生,甚至我这个内核,也都被他一条胳膊一条腿的慢慢替换成新的版本。经过了漫长的等待,超级牛力终于长出一口气,向主人汇报:完成!主人不放心,还执行了:sudo apt-get -f install。这是告诉超级牛力,检查一下软件的相互关系和依赖,有什么不对的地方修复一下。又一段时间后,超级牛力再次完成,主人平静了一下心情,轻轻的下达了这个至关重要的命令:重启。
再次醒来的时候,我看到了胳膊腿装的很扭曲的图形界面的哥几个,看到了死死的躺在硬盘里的狐狸妹妹,看到了一个漆黑的屏幕,以及几行凌乱的英文——升级失败了……
(125) 惨淡天空,又见光明
在黑暗中,一个声音传出来:我……我还活着,我还活着……
空气中飘浮着黑色的尘土,大地上平静的如同死寂。远处,似乎有细微的脚步声,急躁的频率听得出那声音的心切。越来越近,越来越响。站定!他茫然四顾,看着这个他原本熟悉的陌生世界。他乎喊着那些他熟悉的名字,但是没有回应——心坠谷底。他拿起了手中的光盘:难道,真的要彻底删掉这个曾经那么熟悉,带给我无数欣喜的世界吗……忽然,他听到了那个黑暗的深处传来的声音:我还活着…… 他猛然惊醒!这是内核!内核还活着!对呀,这个世界是靠内核的意念支撑的,我能来到这个世界,说明内核肯定还活着。 他开始狂奔,向着那个微弱的呼救。
终于找到了,内核抬起受伤的手臂,指着一片混沌与黑暗说:他们……都还在。去找他们……陪你重建这个世界。他握着内核的手,含泪点点头,起身要走,却发现已经有一斑人马站在了他的身后。他们是听到内核的呼喊赶来的,他们是最可靠的战友,他们相互之间配合默契,从上古时期就开始一起并肩战斗,完成着一个个可能和不可能的任务。他看着他们,叫着他们的名字:ifconfig,iwconfig,vim,find,ls,rm,mv,cp,apt-get,w3m,mplayer,wget。你们12个和我一起,去结束这个世界的黑暗!恢复这个世界的光明!!为了你们的荣誉,为了内核,为了世界的美好,一起战斗吧!12个人立刻分头行动。首先由iwconfig撑起的无线网卡设备,于路由取得了联系。之后ifocnfig大显身手,进一步设置好了网络端口,让这个黑暗的世界可以与外界交流信息。ls和grep努力在废墟中寻找着可能出现问题的文件,ls把文件一个一个全都挖出来,由grep去挨个检查过滤。同时find也在做着同样的事情。网络恢复之后,w3m迅速跑到外面世界去求救,询问有没有哪里有过类似的经验。mplayer在一旁翻找着原本存放歌曲的目录,终于找到一个能够鼓舞士气振奋人心的歌曲,于是,黑暗中回荡起一个激昂的声音:两只老虎~两只老虎~跑滴快…………
忽然w3m大叫:找到拉找到拉,我好到了打破这黑暗世界的方法。大家聚拢过来,听他说:我们的世界,只所以陷入黑暗,主要是因为,灯泡憋了。众人恍然大悟,原来是灯泡坏了阿。只听w3m继续说道:那个灯泡叫做显卡驱动,我们这里原本是有的,工作也正常。但是由于系统升级,原来的220v电力系统升级为380v了,所以就烧了。apt-get抢先窜出去说:我记得那里有驱动,我去删掉他!w3m说,除了源里面的驱动,我记得主人还手动安装了,不记得是哪个起作用了。rm马上出发说:我去删主人手动安装的驱动,一定删的干干净净。wget说到:坏灯泡清理干净了还不够,我去找个好的来。于是wget去到网络上又下载了新的驱动,mv把这个驱动放到合适的地方,并且让他们的领导把驱动安装上去。最后vim把配置文件根据目前的情况修改了一下,结束了战斗,然而战斗的结果,要等reboot命令执行过之后,才能看到。
结果怎样呢?灯亮了!
(126) 三个和尚没水喝,两个内核没图形
我叫Ubuntu,有人叫我“笨兔”,我可不笨,与那种长耳短尾的动物也没关系,我是个系统,我是一内核,我是Ubuntu。
在2010年4月,我从学校毕业,并由毕业月份得到了自己的代号——10.04。当然,和我同一天毕业的人不少,我只是其中一个。人家毕了业都找到了工作,有坐光盘走的,有坐U盘去的。就我,直到昨天才有人把我从网络拉回家。不是我笨,是我背。
-----------------------------------------------------------------
看到熟悉的图形界面,主人终于长出了一口气,熟悉的环境,熟悉的软件们,又回来了。经过一次曲折而痛苦的升级过程,主人应该学到了很多关于我们系统的知识,至少,对xorg应该更加了解了吧。今天起床,看到我身边赫然躺着一个长得跟我很像的家伙,吓了我一跳。还以为自己灵魂出窍了呢,仔细一想才明白——升级到10.04了嘛,肯定会有个新内核的。门房的G大叔现在启动的时候都给主人多了个选项:是叫醒老兔兔,还是叫醒新兔兔?这次主人显然是叫醒了我,这倒不是主人恋旧,而是听说躺在我身边的这个新手跟图形部门的人不大对付。
-----------------------------------------------------------------
人要倒霉起来干什么都不顺!今儿第一次启动就现眼了,跟那帮搞图形界面的吵了一架。我拿过显卡驱动,刚要设置分辨率,xorg说着设置显卡模式这事应该归他们管。我擦,这都哪年的黄历了,你们那8.04时期的内核定下的规矩难道我也要遵守?我没好气的跟他说:你们那老兔子不会操作显卡,才轮着你们设分辨率。我自己会弄,就不用你们了。xorg显然很不爽,但我是老大,他敢说个不字?哼!结果,这TM机器是N卡,玩不转!这才想起,学校里教的,要是遇到N卡就只能交给xorg。靠!难道我以来就跟他们低头认错?咱丢不起这个面子。我玩不转,那就谁也别玩,字符界面凑合着吧。
-------------------------------------------------------------------
听说新的内核会控制显卡了,用了一种叫做kms的技术。不知道这技术是不是来自昆明市。以前操作显卡都是图形部门的事情,我这个内核是不管的。有人问了,不是所有硬件访问都得通过你么?驱动不也是在你那么?是的,多数硬件我都直接操作,不过显卡是个例外。显卡驱动是归我管,但是我只负责找到显卡,并且操作显卡,但是具体怎么操作,是图形部门说了算。他们说发什么命令,我就发什么命令,说把分辨率设成啥,我就设成啥。具体为什么这么设,我是不知道的。然而他们新的支持kms的内核就不一样了,他们可以自主的控制显卡,自己检测应该把分辨率啦,色彩啦设置成多少合适。这样做的好处就是从内核一启动就把显卡模式设置好,启动过程中屏幕不用再闪来闪去的,从图形界面切换到控制台也流畅了,因为没有分辨率的切换。
(127) 为体验换装KDE,要易用开发新界面
可能是新的内核没有给主人留下好的印象,所以被打入冷宫,虽然一直可以看到他躺在那里,但是基本上都没有叫他起来过。于是我这挂8.04时代的老车,继续走我的老辙。
其实新内核也没什么不好的,那个kms是个创新,但是还不太成熟,让主人有了不好的印象。其实要关闭它也简单,只要修改/etc/default/grub文件,在里面的内核参数里,加上nomodeset就可以了。(内核参数,也就是kernel啥的那一行,一般后面有ro splash之类的参数。)
新的版本并没有给主人带来太多新鲜的感觉。只有10.04中新的默认主题让主人能够有些许的慰寄,总算是能看出升级了。然而主题不过是一层皮而已,经典的Gnome布局和桌面已经让主人的眼睛产生了疲劳,于是,主人想换换了,喜新厌旧一回吧。听说有个叫KDE的桌面环境很华丽,而且主人已经有了很多k系的软件,像smplayer,eva之类的,用着都还不错,所以也就对kde有那么点悠然神往的好感。那就决定了,装上试试。
安装kde很方便,可以只安装这个桌面环境,也可以安装整套的软件。主人选择了后者,运行:sudo apt-get install kUbuntu-desktop。这样装完了之后,我们这个ubuntu就变成了kubuntu了。当然,原来的东西都还在,想换回gnome随时都可以,不用着急。安装成功以后,登出当前桌面环境,在登录界面里选“会话”就会看见多出了kde的选项,选择这个登录进去就好了。
KDE这个家伙是1996年在德国诞生的。他的全名叫作k desktop environment,也就是K桌面环境的意思。但是为什么叫K桌面环境,不叫M,不叫S,偏偏叫K呢?这个问题恐怕只有他的创始人Mathias Ettrich知道了。Mathias Ettrich当时也是个开源软件的爱好者。他发现Unix系统很好很强大,但是其图形界面很丑很悲催。而且图形界面使用起来非常不顺手,难以配置。(很可能他看到Unix的图形界面后拍着鼠标大喊一声“靠!”于是就决定叫“K” desktop environment了)于是他燃气雄心壮志,要创造一个美观的,方便使用,方便配置,方便开发的图形环境,这就是KDE了。虽然KDE一开始就是开源软件,但KDE所基于的Qt程序库,最初却是非自由的。所以很多人质疑使用KDE的保障性——万一哪天你宣布qt要收费,我们还能继续使用KDE么?(也就是由于这种质疑,产生了Gnome项目)值得庆幸地是,1998年11月,Qt‎程序库所属的公司发布了第一个以开放源许可的Qt‎程序库授权(QPL‎)。这算是稍微让一部分人放心了一点,不过QPL协议还是不想GPL协议那样的开放,仍然保留了一些权利,所以不少人依然不敢贸然进军KDE。这很容易理解,虽然你拍着胸脯说你炸的鸡块没有使用地沟油,但是你保留了给这些鸡喂苏丹红的权利,那我一样不敢放心吃啊。直到2000年9月,一个以GPL‎发布的UNIX‎版本的Qt‎程序库发布后,大部分用户才对KDE‎产生信心。
(128) 我不知道叫什么题目好了
爱简单,爱短发
爱GB18030,也爱UTF-8
偶尔也爱发发小脾气,骂两句乱码。
不是什么大明星,
也不是他们眼里装酷的假小子
我就是我自己,我是——Kate。
随着这间500G硬盘的一阵规律的悸动,一个硕大的机械手臂移动到正在熟睡的我的上空,毫不犹豫的一抓,一转,一放,已经把我放到了那条写着SATA的快速传送带上。这种SATA结构的传送带,要比过去那种IDE的快的多,转瞬间已经把我丢进一间宽敞的内存中。是啊,我这么小的分量,对它实在是微不足道的。传送带把我丢出的那一刻,正在做着已经不知是哪个梦的我,感觉到了重力加速度的存在,于是在我的双脚稳稳的落在工作间地面的时候,我已经在清醒的整理我的短发了。
这是我的一次再也普通不过的启动。和其他KUbuntu 10.04里面的kate不同,我是从网络上下载到这个系统中的。系统里原本就已经有了ubuntu的软件包,用户大概只是想尝尝鲜,就安装了kubnutu。于是这个系统里很多类型的软件都是双份的了。文本编辑,就是我,和一个叫做gedit的家伙。好了,不提那么多,启动了,就要干活去。
我先是走到内核那里向老大报道,这跟上班要打卡一样重要。内核会给我后背上贴上一张卡片,上面详细的写着我的一些信息,在我工作的时候,这些内容还会不断的修改,咱们到时候再说。现在,这上面最重要的就是我的名字,我爹的名字。就是父进程,你懂的。我看了看,今天我爹是dash。除此外,就是我的工号——也就是进程号PID。有个这个号,我才正式的成为了一名光荣的正在工作的进程。是的,躺在硬盘里睡觉的我只是个程序,只有在内存里工作的时候才是个进程。这个卡片就是用来让内核方便管理我们这些进程的,相当于我的胸卡,或者,工牌?不过内核愿意管他叫做PCB——Process Control Block。
有了工号的我开始工作。工作需要用工具,文官纸笔安天下,武将刀马定乾坤,而我要用的工具呢,是CPU。这东西在我们这可精贵了,我们这条件算比较好的,好几千个进程,共用俩cpu。其实是一个cpu里面的两个核心啦,不过对我们来说跟俩cpu没有区别。大家都要用怎么办?排队!于是我跟在amarok的后面,等待使用CPU。一进入等待使用CPU的队伍,一束激光就迅速的扫过我的PCB胸卡,在上面的状态一栏里写上了:ready,就绪。这就像你去银行办理业务拿号一样,有了这个ready状态的进程,就是正在排队等着使用CPU的进程了。前面的队伍走的很快,几个微秒后轮到我用CPU了。手握CPU的那一刹那,顿时感到有无数条信息的涓流,淌进我的身体,感觉自己与这个世界已浑然一体,有一种顿开茅塞的感觉。这时要想思考,千言万语瞬思而成;这时要运算,乘除开方一蹴可就;这时候要交流,上达天听下悉洞府,总之,基本上是想干什么干什么。一握上CPU,内核的那道激光又来了,把我胸卡上的状态从ready改成了running,这就说明我正在使用CPU。我手握CPU向内核发话:我要申请内存!然后跟kwin(也就是我们kde的窗口管理器)说:我要一个xx宽,yy高的窗口,然后还要……内核打断了我:“好了,你的时间片用完了,下一个!” 切,真小气。
(129) 人生自古谁无死 留洒芳香满内存
主人点了Open file键,那是让我去打开文件了。得到了这个信息之后,从等待状态进入就绪状态的我,赶紧又去CPU那排队去了——工作,就这样在等CPU和用CPU之间轮转着。
又一次拿到CPU后,赶紧操作CPU通知图形界面,去开个窗口,问问主人到底要打开哪一个文件。图形界面他们要跟主人交互,自然也是需要是用CPU的,我在等待图形界面给我答复的过程中没有事情可做,于是自然又被内核踢开,并且我的PCB上面又被打上了等待状态。不多时,图形界面的同志们把文件路径汇报给我,于是我又告诉内核,让他把那个文件放到我申请的内存里,之后就又变等待了。内核操纵起CPU(谁离开CPU也活不了,内核也不例外),在硬盘里面查找这个文件,并且通过那条SATA传送带,把那个文件传送到工作间中,准确的放置在我刚刚申请的内存区域内——就像我起床时他把我抓来的过程一样。我赶紧展开那个文件,按照约定的,默认的UTF-8编码显示给主人看。当然,这个其中自然是包含了我排队等CPU,使用CPU的n个轮回,我就不细说了,我可不像那兔子那么贫嘴。
简单的说吧,用户打开文件修改了一写内容,我再内存里做了操作,然后他点保存,我自然告诉内核去把这段内存里修改后的数据放回硬盘里,之后,意料之中的,用户终于点击了关闭按钮……
已经保存好数据,处在等待状态的我,看着xorg又找到kwin说:主人又在xx,yy坐标点了一下,你赶紧看看这回点哪了?kwin一查,愣了一下,扭头看看我,虽然只有瞬间就又底下头转身去找内核了,不过我一眼看到了,一个惋惜的眼神。我隐约的,感觉到了,一种寒冷的气息。kwin和内核说了两句后,内核走到我这里来,对我说:你的时间……到了。我已经预料到了这样的结果——既然文件改好了,存完了,自然就要把我这个文本编辑器关闭了。我们这些文本编辑器基本都是这样短命的,不像firefox姐姐那样能够长时间待在工作间里,有时候能够一直等到系统要关闭的时候才退出。我来之前,这编辑文本的任务主要是一个叫做gedit的家伙干的,记得又一次有人说我们两个有些相似,倒是很般配。那时候,我很不屑的瞥过头去说:“我可不是他那么简单的软件,还般配?呸。哼~” 不过现在,想想我们都是同样短命的编辑器,倒有了种“同是天涯沦落人”的感觉。内核来给我发送死亡的请柬,我就该欣然接受,因为服从命令是软件的本分嘛。虽然有的软件也会不听从内核发出的退出指令,但是最终,内核总是会强制他退出的,没有例外。所以,主动的接受退出命令,还可以有时间作些准备,留恋一下这个世界。如果等内核强制kill掉你,那就是就地正法了。我冷静的对内核说:好,我去准备一下。然后到内存里,收拾起我的东西,把我需要存回硬盘,最后一次看了一眼这繁忙有序的世界,心里想:下次再醒来,就不知道是什么时候了。可能是马上,可能是明天,可能……是永远。收拾停当,我告诉内核,我准备好了。内核点点头,伸出手,问了一句:你还有孩子么?我知道,如果我有子进程,他会一并打死的。我笑着摇摇头:没。内核再次点头,眼神里透出坚毅的光芒,对我说出最后的一句话:你放心的去吧。音尤在耳,胸前猛然感到一下重击,之后世界便一片漆黑了。
“……我气运在掌,熟练的一掌拍出。kate应声向后倒去。她的眼睛,平和的闭着,嘴角带着无法查觉的微笑与希望,那并不算飘逸的短发,渐渐飞扬,凌乱,却依然柔美。身体向着地面轻轻的飘落,像是在轻舞,衣袖间,洒出丝丝眷恋的气流。这个操作,我一天不知道要做多少边,但这次竟然没有马上收回拍出去的手。终于——尘埃落定,她僵尸了。”
-----完------
随着Ubuntu 10.04的发布,笨兔兔推出新版故事,新的故事以pdf版发布,内容的编排上,以ubuntu 10.04为基础,以系统的安装,配置,应用,过程为主线,在叙述故事的同时指导新手安装和配置ubuntu系统。内容与原版将有部分重复,是原版故事的重新编排和修改,并添加一些新的的内容。新版故事旨在增强故事对新手的指导作用,提高实用性。新版下载地址http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=267518
再次感谢作者懒蜗牛Gentoo ,笨兔兔,ubuntu社区,及其排版者的默默奉献……