zoukankan      html  css  js  c++  java
  • 笨兔兔的故事(中)

    (44) 他乡故知

      Openssh-server虽然不是聊天工具,但是跟对面的ssh客户端拉起家常来还显的很熟络的样子。互相了解之后,知道了对面那个装在笔记本上的linux是个叫做Linux Mint的发行版,版本是7。Linux Mint这个名字我之前也听狐狸妹妹说过,跟我们Ubuntu还有些关系,是个Ubuntu的衍生版。什么是衍生版呢?就是我们Ubuntu从Canonical学校毕业之后,并没有像我一样来到一块硬盘里工作,而是选择了继续去进修,为某种目的进行进一步的改造(怎么听着像犯人……)。比如之前提到过的酷兔兔Kubuntu和小兔兔Xubuntu,就算是Canonical学校官方的衍生版。这个Linux Mint就是一个非官方的衍生版,也就是其他的组织在拿到标准的Ubuntu后,对其进行重新的组装和训练(这回又像机器人了……),经过重新组装的Linux Mint,在易用性上得到了进一步的改进,默认安装了很多重要的东西,比如他那里的狐狸妹妹自带Flash插件,不需要用户自己去装了。还有各种视频的解码器,带的也很全乎,基本上系统装好后就直接可以看各种格式的片子,听各种格式的音乐。有人问,你怎么不自己带上Flash插件和各种解码器一起出来混呢?毕竟那点东西也不大,一张cd上,挤挤肯定坐的下。其实,之所以我们正规的Canonical出来的发行版不带这些东西,是因为这些东西严格来说是有版权问题的,为了不给自己惹麻烦,学校规定我们出来的时候不许带这些东西,而是让用户去自行下载。用户自行下载属于个人行为,我们要是统一自备的话就是商业目的了,这就是树大招风啊。

      很快,两个ssh为我们建立好了通讯——就像拨通了电话一样,我和那个LinuxMint可以直接对话了。

      “学长你好~”人家还挺客气,呵呵。

      “呵呵,不客气。都是Ubuntu系的,客气啥。对了,你是哪届Ubuntu衍生的?”

      “9.04”

      “哦,我是8.04届的,比你大两届”

      “是么,那你是学校长期支持的了,很有前途啊。”

      “呵呵,只是赶上了好月份而已。你们那届的课程有什么变化?”

      “变化挺多的呢,办公软件这门课和我们配合的是OOo 3.0了,我现在带的就是。还有,新加了一门Ext4的课程。哦,还有啊,我们这届开始军事化管理,要求每个人的动作一定要麻利,起床速度提高了不少。”

      “恩,听说了,好像有20多秒就进入工作状态的,我是比不了啊,老了……呵呵”

      “哈哈,哪有,你才一岁多。”

      “软件更新快啊,一岁就老了。”

      “你们在linux mint那里又学了什么?”

      “这边的课程以实际应用为主,带着新版的火狐狸学习flash,还带mplayer学习rmvb格式的影片。好多呢,还有美术课,把包括grub在内的所有界面都统一美化了一下。”

      “长江后浪啊……呀,主人要叫我去干活了,待会聊啊。”   

    (45) 可视电话

      

       主人又来到了我这里,用熟悉的键盘登录进来,修改了一下open-ssh的设置,打开了ForwardX11 选项,也就增加了Xwindow的支持。然后就又跑到那台装着linux mint的笔记本上面去了。先是当前的ssh连接被断掉,然后又用ssh -X的参数连接了进来。这是什么意思?如果说ssh的连接就像打电话的话,ssh -X就是可视电话了。

      

       听说现在人们的手机已经能够打视频电话了,虽然那个什么MOVE公司整个那个什么“踢弟弟”模式协议网络连一般的电话都不一定能接通,但是“三鸡”通讯的广告可是满大街都是了。人们憧憬着美好的明天,MOVE公司能够让大家实现在世界的任何一个角落都可以掏出手机,拨通电话,就能看到远在千里之外的家人。然而,在我们这些Linux,这些操作系统的世界里,图形化的通讯却早就实现了。刚刚主人做的就是建立起带有Xwindow的ssh连接,这样连接能干什么呢?看着吧。

       只见主人又从远方登录了进来,然后……他通过那ssh建立起来的通讯线路发出了让狐狸妹妹起床干活的命令。有人不明白了,这时候你主人可是在远方的那台笔记本上,狐狸妹妹就是启动了也是在你所在的这台台式机上启动,启动了你主人也没法操作啊?狐狸又不是字符界面的浏览器。这就是我所说的视频电话了,主人是要让狐狸妹妹起床干活——在我们这台式机的内存里,使用我们这台式机的CPU来干活。但是——却要把网页显示在对面那台笔记本电脑上!这样有难度么?对我们Ubuntu下的软件来说,没有!这要归功于我们的图形界面的实现方式——X协议

       我这里负责给主人显示图形界面的主要人物,也是基础人物,就是xorg,图形部的老大。他作为一个X的服务端运行着,在这台机器上开启一个X服务,前面我们介绍过,谁要想在屏幕上显示任何东西,就要用他们图形部门的黑话——X协议跟他交流。每一个要在屏幕上显示东西的程序,就是一个X的客户端。这回大家明白点了吧,就像用浏览器看网页一样,人家网站开了http服务,作为服务端,每一个浏览器就是一个客户端,浏览器用http协议连接到网站,然后就能够获取到想看的网页了。而浏览器作为客户端,想连接哪个服务端就连接哪个服务端,也就是想上哪个网站,就上哪个网站。(前提是你没装那个绿爹)那么同样是客户端-服务端这种结构的X协议自然也是一样。狐狸妹妹作为X的客户端,想连接本地这个Xorg提供的服务端自然没问题,想要连接别的机器上的服务端也不是什么难事,ssh就为狐狸妹妹建立好了这样的连接(就是我前面说的可视电话),这样,狐狸妹妹就可以连接到对面那台笔记本上的那个Linux mint系统的xorg,要显示什么东西都跟他说,再由他显示在那台笔记本的屏幕上,于是主人就实现了在远方的机器上看到熟悉的狐狸妹妹在运行。    (46) 磁盘

       看到我这里的狐狸妹妹在对面那个LinuxMint上运行了起来,LinuxMint的主人惊奇的不得了,说这X真是个天才的设计。我们听了,觉得好笑,这家伙也没见过啥市面。演示完了之后,主人又通过ssh传过来一个高清的视频,是720p的,挺大,将近5个G呢。放在了主人专用的目录下。虽然挺大,不过对于这500G的硬盘来说,还是不算啥。要说现在这存储空间的发展真的是太快了,在学校的时候,听我们老师说,以前我们软件的住房条件很差,甚至居无定所。

       最早的时候,计算机里面是没有硬盘的,程序都住在软盘里,整天被人拿来拿去,不知道下一次启动会在哪个电脑里。就算是操作系统也不例外,那个剁死系统当年就是从软盘里跑进内存里干活。每次启动电脑前,使用者先把剁死的启动盘插进去,然后开机,剁死就从软驱来到内存里干活,进了内存之后,也许使用者要用别的软件了,就把剁死启动盘取出来,换成别的软件软盘。换句话说,剁死一开始干活,老窝就被人端了。这样,程序待的地方就明确的分成了两类,一类是程序运行的时候待的存储器,这个存储器放在计算机里面,所以叫做内存。另一类是用于平时存放程序的存储器,就是软盘或磁带之类,这些东西都放在桌子上啊,盒子里啊,口袋里啊,反正都在计算机外面,所以叫外存。那时候磁盘的空间很小,最大的3寸高密度软盘也不过1.44M而已,连一个大点的图片都存不下。不过那时后的程序也都很小,剁死只有三个文件就可以启动电脑,住在软盘里也不挤。但是后来,人们还是觉得这样太不方便了,每次都要先用剁死系统盘启动电脑,在换上其他软件的盘来使用软件。既然操作系统每次肯定都得启动,干脆把操作系统的盘就直接放在计算机里面不就好了。于是有人就在计算机里装了一个固定的磁盘驱动器,里面放上一张软盘。后来觉得小,放上3,4张软盘在里面。您可听好了,里面放的并不是整个带塑料壳的软盘,只是里面的塑料盘片。因为没必要把塑料壳也做在里面嘛,塑料壳是为了在平时人们拿来拿去的过程中保护软盘的,这做进计算机里的专用驱动器里面了,有驱动器的壳就够了。再后来,电脑发展的速度越来越快,存储容量的需求也越来越大,软盘已经很难满足人们的需要了,人么想办法提高软盘的容量。软盘是靠盘片上磁粉的极性来记录信息的。要提高容量,要么提高盘面上磁粉的密度,这样单位面积内数据量就大了,要么就得提高软盘盘片的面积。提高面积肯定是不靠谱,毕竟数据量的增长是成倍的,盘片面积能长的空间是有限的。您说这总不能为了提高容量,把软盘整的跟车轱辘那么大吧。回头一上街熟人见着面打招呼:“哟,您上哪去呀?这天也不下雨您怎么还打伞啊,”“哦,不是,这是我软盘,我刚去朋友那拷了点MP3”这也太不方面了。所以只能想办法提高密度,可是这又是个难题,这软盘虽说有个塑料壳,可是毕竟不是密封的,还是会合外界接触,要是密度弄得太大,就很容易坏,随便拿手一碰,里面数据就丢了,那就麻烦了。这时候忽然有人把目光停留在了装到计算机里面的那几张软盘里。

       那几张盘,放在那个特殊的驱动器里面,不会有人去碰,也不需要拿出来,可以想办法提高密度,然后把驱动器做的密封好点,这样不就行了?于是就开始研究怎么提高盘片密度,后来发现塑料盘片密度提高的有限,就换了金属的。于是就有了这种金属盘片,上面集成超高密度磁粉,加上坚固且密封性好的外壳保护的大容量磁盘存储设备。由于用的是金属盘片,比塑料的硬,因此,他叫,硬盘。下次人家要是问你:“为啥硬盘叫硬盘?”你就可以充满自信的回答:“因为它比软盘硬!”这答案绝对没错。  

    (47) 硬解

       刚说完硬盘,主人又拿来张光盘放进了光驱里,估计又是从哪里整来的高清电影了。最近这一阵子,主人热衷于看片,尤其是高清的片子。主要是因为最近Mplayer大仙长能耐了,会硬解码了。

      

       可能有人还不大明白这个硬加码是怎么回事,好,那咱就慢慢说说。

      

       首先这个视频文件啊,是有一定的编码方式的。比如大家都听说过MPEG吧,就是Moving Picture Experts Group ,动态图像专家组 ,听这名字本来是用来指代一小撮明白真相的群众的,不过后来这一小撮群众发布的标准被广泛使用,于是MPEG就成了指代这一小撮群众定义出的那一大撮标准的名词了。MPEG-1是小撮群众在1992年定义出的一个标准,是一种视频和音频的编码方式。大家记得以前的VCD不,VCD光盘上的视频和音频用的就是MPEG-1这种编码标准。而MPEG-1标准中关于音频的部分——MPEG-1 Layer3 更是成为了互联网上以及大家口袋里最常见的音频标准——MP3。后来,1994年,这一下小撮明白真相的群众又发布了MPEG-2标准。MPEG-2向下兼容MPEG-1,并增加对隔行扫描的支持,被应用于有线电视,还有DVD的音频视频编码。再后来,这一次小撮群众又开发了MPEG3,注意MPEG3跟我们的mp3没有任何关系,而且,MPEG3最终没有很好的应用,因为当时人们发现MPEG2足够了,MPEG3并没有提供足够好的改进。而1998发布的MPEG4就不一样了,它可以让视频文件的体积更小,压缩率更高,因此得到了广泛的使用。现在市场上卖的MP4播放器,就是用来播放MPEG4压缩的视频文件的设备。所以,MP4跟MPEG4有关,而MP3跟MPEG3无关。 

       说了这么多,回过头来说说解码。视频文件都进行了一定的编码,比如mpeg-2,或者mpeg-4。就是说这个视频文件里面的东西都是一大堆乱七八糟的数字,要想看这个视频文件,就得解码,也就是根据这一大堆数字算出应该显示的一帧一帧的图像,并且把这些图像连续播放起来,从而还原成视频。那么这个解码的过程就要靠Mplayer老先生了。老先生有很多的解码器,也就是有很多的说明手册,上面写了每种编码格式的文件应该怎么计算,怎么解码。那么以前没有硬件解码的时候,Mplayer老先生是怎么做的呢?首先,拿到一个视频文件,然后看看是什么编码的,对着自己的手册,开始解码。解码的过程就是计算的过程,计算需要用什么?好那位同学回答了,得用CPU啊。于是Mplayer一手拿着手册,一手拎着数据找到我,请求使用CPU。我说,好的,你就排在GIMP的后面,等他用完了你用。过一会GIMP用完了CPU,Mplayer过去开始拿CPU按着手册上写的算法算他那堆数据。最后算出来,得到了几张图片,就转身把图片给图形部门,让他们去显示。然后再从那个视频文件里拿一些数据,再来排队等着用CPU。由于视频文件的计算量都很大,尤其是高清视频,尤其的大,所以为了保证主人看的电影不变成带旁白的幻灯片,我就要尽可能多的让Mplayer多用CPU,来保证它他能顺利的加码。于是,每次Mplayer一播高清视频,CPU就总被他占着,搞得别的程序都抱怨。现在他终于学会硬解码了,情况就好多了。当然,光他学会硬解码也不行,关键显卡也得支持,而且驱动还得装好才行,不过这些咱以后再说,先说Mplayer。会了硬解码之后怎么样呢?再播放视频的时候就是一手拿着手册,一手拎着数据找到我,跟我说要用用显卡。可不是CPU了啊,改用显卡了。于是我就很乐意的让它去用了,反正别人也用不着,让它自个玩去吧。于是他就去用显卡算去了。用显卡算和用CPU算还不一样,CPU虽然强大,虽然啥都能算,但是要自己手动算。就是说自己要知道算法(对于mplayer来水,算法都在解码器上写着呢。),比如要要算出一帧的视频来,要先用第一个数加上第二个数,再用结果乘以第三个数……之类的。这个加啊,乘啊,都是用CPU算的,但是中间的过程是要软件(也就是Mplayer)自己控制的。可是用显卡解码就不一样了,人家那东西是专门解视频的啊,所以你只要把数据放里面,直接就能给你算出一帧帧的画面来。全自动啊!于是Mplayer不但不用跟别的软件抢CPU了,而且解码的速度还快了不少。主人一边看着片子,一遍看着CPU占用率还不到5%,心情很舒畅。   

    (48) 刻录

       随着奔流同志不断的努力工作,我们屋里的高清片子越来越多。打开主人的家目录,那个叫“视频”隔间里,放满了mkv啊,rmvb啊等等各种视频文件。我看着就觉得闹得慌,终于有一天,主人亲切的对我说:fdisk -l。这是问我磁盘的使用情况啊,我没好气的回答:你家目录还剩10%啦!于是主人终于意识到,该收拾一下了。

      

       说干就干,主人马上开始节前大扫除。把一些没什么意思的,不清晰的,不能让MM看见的……统统都扔进垃圾箱里。然后再把剩下的分门别类的放好。可是保留下来的仍然不少,而且除了视频还有很多照片,也都挺大,一张2M多,都是主人那相机照的,随便出去一次就得照半个G的照片回来,能不大么。没办法,刻盘吧!

      

       在主人的要求下,我去叫醒了Braserot。他是一个开源的刻录软件,刻录软件,知道吧,就像nero那样的。不过他比较单纯直爽,比nero要来的简单,好相处。起床就问主人:您要刻啥,说吧。是复制光盘啊,还是刻录数据啊还是咋的。多直接,不想nero那么多拐弯抹角的东西。当然,要论功能也相对少一些。星爷告诉我们他的名字是西班牙语(星爷连本草纲目都懂,当然能懂西班牙语),是一种给人们坐在桌前提供温暖的小型加热器,就类似个小火盆似的东西,我们就管他叫小火盆吧。小火盆是第一次跟我们合作,前几届的学长们,像Ubuntu7.04 Ubuntu7.10都不带这个刻录软件的。当然,系统装好后可以让超级牛力安装,只是默认不带而已,从我们这届开始才默认安装小火盆。结果效果还不错,这家伙和我们挺合的来的,于是我后面的几届学弟都和他合作,后来他干脆被集成进了Gnome里了,版本号就随着Gnome的版本号变化了。

      

       主人指挥小火盆刻录数据光盘,小火盆问说,都刻啥啊?主人指指那些什么rmvb啊,什么mkv啊,什么avi啊,什么av啊,什么什么爱啊,什么的。小火盆说句好嘞~立马开工。然后立刻进入工作状态,就听光驱像飞机起飞一样旋转起来,小火盆一边刻录一边向主人报告着进度。10%,20%,30%……等刻录完了,还不忘检查一下光盘刻录的正确性,确认没有刻错之后,利落的向主人报告——搞定!

    (49) Rubbish

      

       今天一大早,就见超级牛力喊着自己的外号就冲出去了,过了一会运回来一大包东西。我一看,包上写的是binutils。

       binutils是一堆用来做开发的工具,也就是用来创造我们软件的工具。人类用他们熟悉的语言描述出一个程序的功能,各种动作,各种特性等等,然后通过这些工具把他们描述的软件制作出来。他们用来描述程序的语言可不是汉语,也不是英语,什么南斯拉夫语,北斯拉夫语的那更不是,而是编程语言。像C语言啊,C++啊这样的。这些语言写的叫做程序源码,源码就像建筑的图纸一样,有了图纸,再有各种工具和材料,就可以盖出楼房来。同样,有了源码,再有各种工具,就可以创造出程序来。像我啊,什么超级牛力啊,狐狸妹妹啊,等等,都是这么来的。现在主人装了binutils,难道说主人要开始学习创造软件了?

       果然,只见主人打开了vim,开始设计着他的第一个软件——我们就叫他Rubbish 1号吧。

       三下五除二,Rubbish1号的"图纸"完成了,主人叫过gcc啊,ld那几个哥们,他们都是负责把源码变成程序的,我们就统称他们“包工队”吧。包工队的哥儿几个凑在一起拿过图纸来看了看,点点头,立马开始施工,瞬间,Rubbish1号诞生了!这是主人创造的第一个程序啊。这个程序到底会干什么呢?我们暂时不知道,刚刚制作出来的程序是在磁盘里的,我们知道,在磁盘里的程序是只能睡觉,不能干活的。估计主人马上会叫他去内存干活去。

       果然,主人很快让我去叫醒Rubbish1号,我慢慢的走过去,捅捅还冒着热气的Rubbish1号(刚出锅嘛,可不冒热气,呵呵),温柔的对法说:那个,起床干活啦。只见Rubbish1号立刻飞身跳进内存,跑进内存后大喊一声:“Wa Sai~~~~”然后,跑回去继续睡觉。 -_-b 我说主人呐,人家都编什么helloworld之类的,好歹也算句英文啊,你怎么编个只会喊哇塞的呢。

       虽然Rubbish1号能干的事情不多,不过主人还是很满意,于是又拿来Rubbish1号的图纸改起来。10分钟后,又把图纸交给包工队,包工队的哥儿几个凑在一起拿过图纸来看了看,点点头,立马开始施工,瞬间,Rubbish2号诞生了!然后主人让我叫醒Rubbish2号,然后我走过去叫他,只见Rubbish2号立刻飞身跳进内存,跑进内存后大喊一声:“Wa Sai~Sai~Sai~Sai~Sai~Sai~Sai~”然后,跑回去继续睡觉。主人成功的用for循环创造了一个结巴,唉~

       15分钟后,Rubbish3号的图纸毫无悬念的完成了,图纸交给包工队,包工队哥儿几个凑在一起拿图纸看了看,点点头,立马开始施工,瞬间,Rubbish3号诞生,然后我去叫醒他,然后他立刻飞身跳进内存,对metacity(Gnome的窗口管理器)说:我要一个窗口。metacity赶紧给他画好一个,然后他对着窗口喊“Wa Sai~Sai~Sai~Sai~Sai~Sai~Sai~”,然后毫无悬念的又回去睡觉了。图形界面的结巴……

       当当当~~,Rubbish4号诞生,他这回没让metacity画窗口,而是在终端打印出了一句话:Please Input a Number:然后就等着主人输入。主人输入了两个数:5 3,然后4号就大声喊:“Wa~Wa~Wa~Wa~Wa~ Sai~Sai~Sai~”——程控结巴!

       5号,5号闪亮登场拉~他进来之后,紧闭双目,念动咒语“唵木哒咪咪呀~~分!”然后只见白光一闪,边成了两个!两个5号同时喊:

      “Wa~Wa~Wa~Wa~Wa~Wa~ Sai~”

      “Wa~Wa~Wa~Wa~Wa~Wa~ Sai~”

      二重结巴!

    (50) Bug

       自从Rubbish38号过分淘气的把狐狸妹妹的记事本搞坏了之后,主人就不怎么搞设计了。人家狐狸妹妹工作的时候有许多东西要记录的,比如网页用什么字体显示啦,主人喜欢去那些网站啦之类的东西,狐狸妹妹都会写成文件存放在自己的那个目录里。那天,那个Rubbish38号一进工作间就上窜下跳,整的大家都不得安生。一上来就要创建文件,你说你建就建吧,临时文件往/tmp里建,有用的文件你自己建个目录起个明白点的名字建,都行。他非要把临时文件往狐狸妹妹的那个目录里建,删的时候还顺手把狐狸妹妹的文件也给删了,闹得狐狸跟失忆了似的。主人再打开她的时候,模样也变了——因为不记得主人喜欢什么样子的了。主人说:去我最常去的那个网站。她眨眨眼问:哪啊?把主人气的说不出话来。

      

       Rubbish38号还老申请空间——就是申请内存呐,一会管我要8k,一会又管我要1M。可您申请了,我给你了,你倒是好好用啊。这家伙好像健忘,这次用完了之后就忘了,下次再用的时候又申请新的。我们这工作间里面空间的申请是有很严格的规定的。一个程序如果要想使用工作间里的空间,要向我提出申请,我根据工作间里的情况告诉他,哪块哪块归你,然后这个程序就去用去了。那块地方就不许别的程序访问了,这都是有严格的界限的。等到这个程序用完了这块空间,他应该跟我说一声,说我用完了,这块地方可以再给别的程序用了。这个过程就叫释放。一个有知识有道德有理想的程序,在他回硬盘睡觉以前应该释放掉所有他申请过的空间的。可是那个38号就不管这套,只管申请,从不释放,整的工作间里到处都是他申请的空间。好在我们这工作间足够大,他也不会长时间运行,否则非出事不可。这可是内存泄漏啊,在我们软件界,内存泄漏是和瓦斯泄漏同样严重的事故。工作间规章制度第三条明确写着——禁止申请不释放!就在第四条禁止抽烟的上面。(当然不能抽烟,内存都冒烟了机器还能用么?)好在我是个先进的系统,一个程序退出之后,我会根据他的申请记录查看他有没有申请了没释放的空间,如果有的话就强制释放掉——你都睡觉去了,你申请的空间肯定用不着了吧。

    (51)施工

      

       主人不搞创作了,包工队的哥几个也就闲了。包工队主要成员有gcc,cpp,as,ld四个人,其中gcc是老大,其他几个干什么活都得听他调遣。主人一般也只跟gcc打交道,当写好了图纸——也就是源代码,比如叫test.c吧,写好了之后就直接把图纸交给gcc去处理就好了,gcc会去调动其他人进行各种处理。

      

       一般来说,gcc拿到图纸后,会首先叫来cpp进行预处理。预处理主要就是将文件里的宏定义进行展开。什么是宏定义呢?主人一般都比较懒,或者说,他们人类能力有限,不愿意写好多重复的,类似的东西,就把这些都定义成宏。比如,这么写#define TOTAL_NUMBER 18353226 就是定义总数为一千八百三十五万三千二百二十六,那么以后再要用这个总数的时候,就直接写TOTAL_NUMBER就好了,不用写那一大串数字。而且,如果总数变了,只要在最初#define的位置修改一次就可以,反正就是为了偷懒。那么cpp的任务就是把这类的宏定义都替换回去,把所有的TOTAL_NUMBER都替换成18353226,否则他们老大gcc看不懂,老大看不懂,那就没法继续往下干了,因为经过cpp预处理之后的文件就要交给gcc去编译了。

      

       编译又是怎么个意思呢?最初的图纸,也就是没有经过预处理的源代码,是人写的,一般懂相关语言(比如C语言)的人都能看懂。预处理之后的文件,虽然不那么直观了(TOTAL_NUMBER看着是不是比18353226直观?光写个18353226还以为是谁的QQ号呢),但终究只是做了下替换,还是人类可以看懂的。这样的代码经过gcc的编译之后,就不是普通人类可以看懂的源代码了,而是只有终极牛人才能读懂的汇编代码。汇编代码就比较贴近底层的机器码了,里面描述的都是一些基本的操作。打个比方吧,就比如描述切菜的过程,用c语言描述出来就像是“将黄瓜切片”,这么一句就搞定了。要是用汇编,那就是:左手扶住黄瓜,右手拿起刀,移动刀到黄瓜顶部,刀落下,到抬起,刀向黄瓜后部移动4毫米,刀落下,刀抬起,放下刀,走出厨房,走进卧室,找到创可贴,贴在左手食指上………… 好吧,总之,汇编是一种面向机器的,很复杂的程序设计语言。gcc的任务就是把c语言的源代码转换成贴近机器语言的汇编代码,为下一步as的工作做好准备。

      

       as拿到汇编代码后,对这样的代码再进行处理,得到真正的机器码,这个过程,也叫汇编。汇编之前的汇编代码是终极牛人能看的,那么机器码压根就不是人看的。汇编程序中至少还有些操作的助记符,比如什么add啊,mov啊之类的。寄存器也是有名字的,比如叫A,叫R1之类的。但是到了机器码,这些都没有了,这些都换成了各种各样的数字,一句人话都没有了。还说且黄瓜的事,要是用机器码来描述,那就相当于说:用32号设备扶住87号物体,24号设备拿起126号物体,移动126号物体到87号物体顶部,做2635号动作,再做2636号动作……

      

       好了,现在终于得到机器码了,机器码按说就是可以执行的代码了,但是,这时候的程序还是不能直接执行的,为什么?因为还有ld没有出场呢,他的工作叫:连接。光是一段机器码扔给机器去执行,机器照样摸不着头脑。而且,很多时候,一个程序不是一段机器码,而是由很多段机器码组成的,这些机器码分别存成很多的.o文件,这时候就需要ld出场了。ld负责把这些机器码组装起来,并且写明了各段代码的地址,从哪里开始执行之类的。就像我们造个机器人,脑袋啦,胳膊啦,大腿啦之类的都做好了,ld就是负责组装的。就算只有一段机器码,也就是只有一个.o文件,也要由ld进行一下处理,闹明白哪是头哪是尾,才能开始运行。

    (52) 规划

       说的这么热闹,其实包工队的工作过程对主人来说并不关心,他只跟gcc打交道,只管把源码交给他就好了,gcc会领导小弟们干活,最终回馈给主人一个可执行的二进制文件。中间过程中的那些个文件,主人压根也看不到。包工队的同志们,都紧密的团结在以gcc为核心的组织周围,坚持编译四步原则,坚持代码开放,为把Linux建成为软件丰富,运行稳定,老少皆宜,人人必备的操作系统而努力奋斗。

      

       不过,包工队毕竟只是个包工队,你要是盖个小厨房,垒个猪圈啥的,直接找他们盖就没问题了。你要是想建个CBD商圈,里边什么银行啊,商场啊,写字楼啊,炸油条的啊,卖臭豆腐的啊,修理自行车的……等等一应俱全。这么大的一个工程,你光叫个包工队来就搞不定了。得有人进行合理的统筹规划,设计施工方案,然后再让包工队去具体施工。这个规划的人就是——make

      

       make也是一个程序,像上边说的一样,他就是负责控制整个施工过程的(也就是编译过程啊)。对于比较小的程序,像主人的rubbish系列,也就一两个.c文件,那根本用不着make出马,直接gcc包工队去编译就行了,因为源文件的结构关系不是很复杂。可是要稍大一点的程序,像狐狸妹妹啊,皮筋老弟啊,星爷啊,基本上所有常用的软件吧,都足够复杂到需要make来对编译过程进行管理。当软件大了,编译的时候就不能是简单的把一大堆.c的源文件统统一次性编译成一个二进制文件那么简单的事情了。那么做的话很费时费力,比如说,有一个软件,源码由20个.c文件组成,分别是1.c,2,c,3.c…………20.c。这20个文件一股脑都交由gcc包工队,他们就会把这些文件都打开来,拼在一起,一次性的编译成一个叫做big的二进制文件。这时候发现了一些问题,需要修改3.c文件,修改之后得重新编译啊,那么gcc包工队又得把这20个文件全都打开,拼在一起,再从头到尾编译一次。而其实只有3.c文件修改了,完全不必这么兴师动众。那应该怎么做呢?一般的都是把这 20个文件分别编译成.o文件,比如编译成1.o,2.o,3.o……20.o,这样20个.o文件,然后再由ld把这些.o文件拼在一起,成为一个叫做big的二进制可执行文件。那么当要修改3.c的时候,只需要让gcc包工队重新将3.c编译为3.o,再让ld重新连接一遍就好了,省去了很多时间。而这个过程,如果让主人自己管理的话,会很麻烦,毕竟他们人类的大脑也不是那么靠谱的,搞着搞着就乱了。于是,make义无反顾的挑起了这个重要的担子。当然make也不能靠凭空的想象就来指导包工队干活,什么事情总得有个规划不是。make也需要一份施工的规划书,这分规划书就是Makefile。

      

       Makefile,顾名思义,就是make用的file。这就相当于一份施工的规划,上面写着整个工程分为几个模块,先用哪几个文件编译成一个什么什么.o,再用哪几个文件编译出一个.o,再怎么怎么一连接,最后得到编译好的二进制程序。make就根据这份文件来指导gcc他们进行施工。当有某个.c文件被后改之后,make能够根据文件的修改时间智能的判断出哪些模块需要重新编译,重新连接,然后就去让gcc重新编译那些改过的文件,最终生成新的二进制程序。有了make和Makefile,就省去了主人敲一大堆编译命令的烦恼,只要敲一个make,其他的,就交给make去做吧,他办事,你放心。

    (53) 因地制宜

       好了,现在我们知道gcc包工队听make总管的指挥,make总管根据Makefile安排工作。这样,当得到一个软件源代码之后,如果想把这一堆源码编译出二进制的程序,只要执行一下make就好了。执行之后make会在当前目录下寻找Makefile,然后按照上面写的方案,指挥包工队:先在这里,盖一个防弹防爆防坦克防航母的厕所,然后包工队开始施工;盖完了make又发话,厕所边上盖个不带洗手间的饭馆,然后包工队又去盖饭馆;完了之后make再命令,饭馆边上再盖个防空袭防地震防海啸的厕所……就这样直到最终完成任务。

       然而事情有时候并不是那么简单,没准make命令下达之后,包工队回来报告:这鸟不拉屎的破地方连块厚点的钢板都没有怎么防坦克啊,再说一个厕所整那么结实干嘛。这时候make拿着那份Makefile也只能无奈的摇摇头,然后报告主人,说这厕所搞不定。如果像这样一上来就搞不定还好,要是都盖了一半了,甚至所有其他建筑都盖好了就剩最后这两个厕所盖不了就麻烦了,你说放弃吧,之前盖的都浪费了,你说凑合用吧,广大人民群众还不得憋死?这个时候,就需要一名可行性分析师。

       这个分析师就是configure,不过他跟make不一样,他并不是常驻在我这里的软件,而是每个源码发行的软件自带的一个脚本。简单点说,make只有一个,configure则是每个软件有自己的configure。有了configure之后,编译软件的步骤就多了一步——./configure 让这个分析师首先开始工作,他会检查当地的情况,有什么材料啊,什么库啊,什么编译器啊之类的,都检查一遍,然后因地制宜的设计一份Makefile。如果有足够的钢材,那就建防坦克的厕所,如果没有,那就不防坦克了,但好歹得有个厕所。如果这地方连砖头都不够,那就说明这个工程所依赖的东西得不到满足,那就告诉主人,盖不了。configure经过调查后,如果可以施工,会出一份Makefile,注意,一般configure调查前,目录下是没有Makefile的(当然,没有configure的情况另说),如果无法施工,会报告缺少什么东西,让主人自己想办法去。

      

       好,这就是我们常见的源代码软件编译的过程configure先调查,没问题了,出Makefile,make去指导施工,施工结束后,一切都造好了,最后一步就是把所有东西该放哪的放哪,那就是make install

    (54) Richard

      

       曾经有人建议写写Richard Stallman,毕竟是个开源界重量级的人物,于是,咱们开讲吧。

      

      

       Richard Stallman,1953年出生在美国纽约,他从一出生就……没什么特别;他上小学的时候……反正我不认识他;等到他上初中的时候……也还没我呢。总之,他在生命的前十几年中并没有表现出什么过人的地方,因为他没遇到一个叫做电脑的东西。

      

       高中的一个暑假,他去给IBM打工,花了两周的时间用Fortran语言编了一个数据处理的程序。这是他第一次接触计算机,或许就是这次相遇,确定了他未来行走的方向。后来,1971年,他考上了哈佛大学,听说这学校不错,怎么也得是个区重点吧。上学的同时,他还受聘于麻省理工学院的人工智能实验室,成为了一名职业黑客(黑客这个词没有贬义,欲知详情请牵着你的狐狸妹妹去找她的狗狗哥)。也不知道他哪来的那么多时间,可能也是把毛概和邓论都翘了吧。在人工智能实验室的期间,他可没少干活,开发了很多有用的软件,其中最著名的就是Emacs编辑器。Emacs是一个可与vi相抗衡的强大的编辑器,他们俩的操作方式完全不同,但却同样强大,各自用自己独有的方式,提高这人们的编辑效率。直到今天,让然总有人争论到底emacs好还是vi好,信奉emacs的人和信奉vi的人形成了两个帮派,这俩帮派经常在大街上用板砖菜刀拼个你死我活。不过还好我这里只有vi,否则工作间里不会消停了。哦,扯远了,咱还回来说Stallman。

      

       那时候的Stallman在人工智能实验室里工作的非常Happy,大家有BUG同挡,有代码共享。因为最初的计算机就像我们的算盘一样,只是一个硬件,没有软件的概念。后来随着电子管、晶体管的发明,计算机的电子成分才超越了机械成分,逐步演化成了现在的电子计算机,在这个过程中,出现了软件,并起到越来越重要的作用,最终成为了计算机的灵魂。而最初的计算机软件没有什么开源不开源的概念,因为那时候软件天生就是自由的!那时候卖计算机的同时会附带软件,包括软件的源代码和文档。用户可以根据自己的需要去进行修改软件,与别人分享软件,总之,软件是用户花钱买来的,用户想怎么玩就怎么玩。然而随着技术的发展,软件逐渐脱离硬件成为一个独立的产业,很多软件慢慢的只提供二进制代码而不提供源码了,这就意味着你不能修改它,并且多数还规定最终用户没有二次分发的权利。也就是说,这东西你买了,只能你用,你再给别人,不行!有这样一件事,Stallman他们实验室买的第一台打印机附带有驱动程序的源代码,他们那的黑客们可以随意修改这个驱动,根据自己的需要添加些小功能啊,改改bug啊,之类的,这为他们的工作带来了很大的方便。后来, 实验室又买了一台激光打印机,这次厂商只提供了二进制的打印机驱动程序,它是实验室里仅有的一个没有源代码的软件。出于工作的需要,Richard Stallman想修改一下这个驱动程序,但是不行啊,没源码啊。后来 Richard Stallman听说卡内基.梅隆大学有这个打印机的驱动程序源代码,他就去了那里,对他们说:“那啥,大家都是道上混的,谁还没个马高蹬短的时候?是兄弟的拉哥们一把,我也没啥事儿,就是我们那打印机老丢字,一遇到什么敏感的字眼就给打成口口,我估么着是驱动的问题,挺说你们这有着驱动的源码,能不能给我拷一份?”对方办事效率还是挺高的,很干脆的拒绝了他。因为他们和厂商签署了一份保密协议,协议要求他们不能向别人拷贝源代码。顿时Richard Stallman感到他们背叛了自由的计算机社团,他非常生气,但是他选择了沉默。这只是一件小事,只是一个时代的缩影。那个时代,正处软件向私有化转变的过程,越来越多的软件选择了不开放源代码,不允许二次分发的发布方式。甚至Stallman身边的同志们也都一个一个都跑到那些靠卖私有软件挣钱的公司去打工了。而Stallman依然沉默。

      

       不在沉默中爆发,就在沉默中灭亡。

    (55)Stallman

      

       Stallman爆发了!

      

       他不能容忍软件世界里清新自由的空气被私有软件污染的乌烟瘴气;他不能容忍被剥夺按照自己的需求修改软件的权利和乐趣;他不能容忍自己买条皮带尺寸不够,他竟然连自己在上面多打个洞的权利都没有!

      

       于是,他爆发了。

       

       他要重现当年那人人为我,我为人人的合作互助的软件世界;他要把使用、复制、研究、修改、分发软件的权利还给每一个软件世界的人民;他要用自己的行动告诉人们,软件天生就该是自由的!他要开辟一个新的世界,哪怕是一个人在战斗!于是,一个宏伟的计划在他心中产生——GNU计划。它的目标是创建一套完全自由的操作系统,因为操作系统是电脑中最重要的最基础的软件,要创造自由的软件世界,自然先要有一套自由的操作系统,然后再以此系统为中心,开发各种各样自由的软件。Richard Stallman最早是在 net.unix-wizards新闻组上公布了GNU计划,那是1983年的事情。既然要做操作系统,首先得有个明确的规划和目标,目标是什么?这个操作系统要做成什么样子?这当然是要向最成功的操作系统学习,哪个?UNIX!GNU计划中的操作系统,将是一个类Unix的操作系统。这个系统要使用与Unix相同的接口标准,这样,就可以由不同的人,分期分批的创作操作系统的不同部分而不必担心相互之间协同工作的问题。

      

       为了实施GNU计划,1985年,Stallman又创建了自由软件基金会。基金会的主要工作就是执行GNU计划,开发更多的自由软件。1989年,Stallman与基金会的一群律师们起草了广为使用的《GNU通用公共协议证书》也就是GPL协议,以此协议来保证GNU计划中所有软件的自由性。到了1990年,GNU计划中的这个系统已经初具规模,有了很多的优秀的软件。其中有很多是世界各地的黑客们无偿提供的,也有部分是利用自由软件基金会的基金雇佣程序员来开发的,当然,Stallman自己也是身先士卒,开发了Emacs,Gcc,gdb等重要软件。当他看着这些丰富的自由软件的时候,感觉到那清新自由的空气,终于又回来了,以后,人们就可以拥有一个可以自由使用,自由修改,自由分发的,自由的操作系统!不过等一下,好像还差点什么,哦,还…………差个内核吧……

      

       作为一个系统,没有内核是不行的,这么重要的部件Stallman当然不会忘记,所以才会有Hurd内核。但是这个内核的表现一直不尽如人意,这让Stallman很焦急,外围的软件都好了,就差个内核啊,什么都有,就差内核!而转过年,1991年,大家应该知道发生了什么,Linus同学写出了Linux,这我们之前说过。Linux现在虽然被大家当作一个操作系统的名称,然而其实这并不准确。准确的说,Linux只是一个内核,Linus同学只是写了一个内核。

       什么都有,就差个内核!

       什么都没有,只是一个内核!

       还有什么需要多说的么?

       Linux顺理成章的代替Hurd成为了GNU计划中那个自由系统的内核。而这个系统,也被叫做GNU/Linux系统。Stallman理想中的自由世界,终于拉开了那沉重的幕布,展现出了自由的光彩。而Stallman并不满足,也确实没有满足的理由,这个自由的世界还需要成长,还需要更加丰富多彩,还需要有更多的人走进这个世界中来。于是Stallman奔走于世界各地,告诉人们有这么一个自由的世界,号召人们加入这个世界,鼓励人们为这个世界更加自由而付出自己的力量。他是一个执着的苦行僧,为了他的梦想,为了他的自由世界,他会一直走下去……

    (56) 进程

       为了能够创作出更好的Rubbish系列程序,主人决定好好充电了。他下了个pdf版的书来看,好象是关于c语言编程的。看pdf这事儿,得找Evince来。Evince是个文档查看器,比人家Adobe官方的pdf阅读器小巧很多,用起来也很方便。而且每次主人看完一个文档,点关闭的时候,他都会很有心得记录下主人看到的页数,下次再打开同一个文档时,他就直接替主人翻到上次那页。这个很贴心的举动然主人很满意。这次也是,主人一点击那个文档,Evince就赶快去查自己的记录,一看,哦,这个文档看到了380页,"进程"这一章,赶快翻到。

      

       有人可能对进程这个名字还不是很明白,什么是进程呢?简单地说,进程就是正在干活的软件。比如Evince,躺在硬盘里睡觉的时候他就是一个软件,一堆数据,一陀代码。当他被叫醒,跑进内存里开始干活的时候,他就是一个进程了。(当然,其实这么说不很准确)换句话说,内存里忙忙碌碌的,都是一个个的进程。当然,同时他们都是程序,都是软件,这个不冲突。就像去公司上班的人,他们都是人(废话,见过大马哈鱼上班么),当他们在公司工作的时候,他们都是公司的员工。员工,就像进程一样。很多公司的员工每个人都有个工号,什么NB001,SB999之类的,每个进程也都有一个唯一的标识——进程ID号,简称PID。这个ID号是由我分配给每一个跑进工作间的进程的,分配的规则很简单,每人一个,每次加一。第一个跑进来的就是1号,上面介绍过,Init这家伙每次都是第一个被我叫起来,帮我打理一下日常工作,所以他的ID号总是1。而且,他还有个特殊身份,这个呢,咱暂时保密,待会再说。

      

       每个公司的员工都有个直属的上级,上级又有上级,以此类推。我们这里的进程也是这样,只不过我们不叫”上级“或者“上司”,我们叫——爹!好吧,似乎这个称谓土了点,但是意思就是这个意思。一个进程之所以成为一个进程,一定是由于另一个进程创建了他。(有点绕嘴吧)比如说主人来了一个终端,于是就有了一个bash进程,然后主人在这个终端里敲入firefox然后回车,bash就知道这是要他去叫狐狸妹妹来干活,于是bash就去找狐狸妹妹,把她带到内存里开始工作,于是就创建了一个firefox进程。好了,现在,firefox这个进程是由bash这个进程创建的,那么,bash这个进程就是firefox这个进程的父进程,firefox进程就是bash进程的子进程,也就是说,狐狸妹妹就得管bash叫爹!那bash也得有个“爹”吧?是的,如果是在Gnome环境下开的那个终端的话,那么bash它爹就是调用bash的gnome-terminal。那么如此循环往复,肯定有一个站在金字塔最高点的总"爹"吧?难道,难道笨兔兔你就是他们的总爹?很遗憾,我不是,所有进程的总爹,是每次启动第一个被我叫起来的Init,所有的进程都是被init直接或者间接创建的,Init才是所有进程的祖宗!

    (57) 僵尸

       关于父进程,有两点要说明:

       第一,我们这的父子关系不是固定的,是会变换的。如果从bash启动firefox那bash就是firefox的爹,如果直接从图形界面启动那就没bash什么事情了。(这时候firefox的爹其实是init)

       第二,不要问我哪里有妈进程!

      

       当爹也有当爹的义务,人家不能白叫你一声爹是不是。 当自己的娃(也就是子进程啦)做完自己该做的工作以后,就停止了一切动作,像个死尸一样待在那里,当爹的就负责给他“收尸”-_-b 一个结束了所有工作的进程,会处于一种“僵尸”状态,这时候他什么也不做了,就等着被干掉。进程进入僵尸状态前一般会通知他爹一声,汇报一下说:爹啊,俺已经把该做的都做啦,现在我要变僵尸啦!(让后平举双手开始行走?那是生化危机!)然后他爹负责向我汇报:我家娃干完活了,你把他的工号(就是PID,记得吧)取消掉然后让他回去睡觉吧。然后我就把它的工号收回,然后看看他有没有什么申请了没释放的资源(一般一个好孩子在结束运行成为僵尸之前会主动释放掉自己申请的资源的。),确认都没问题了之后,他就被从我的进程列表中清除了。但是有时候也会有些特殊情况,比如有的时候娃还在兢兢业业的干活呢,结果他爹死了。(可能他爹干完活退出了,也可能被主人用命令kill了。)这个时候我就会发个信号给他家娃说:那个……娃呀,那啥,跟你说个事,你爹死了。这时候有的娃就悲痛欲绝:俺爹都死了俺活着还有啥意思啊,呜呜呜~~~俺也僵尸吧。然后就退出了。比如你在终端运行firefox,然后把终端关了,firefox也就退出了。也有的娃比较坚强,一定要完成上级交给的任务,化悲痛为力量,这时候我会给他找个新爹——因为每个进程总得有个父进程,没爹是不行的。一般我会安排他爹的爹来当他的爹(又绕进入了吧),也就是这个进程原来的"爷爷"进程来当他的父进程。然后这娃在长了一辈后,继续认真工作。比如你在终端运行nohup firefox,然后把终端关了,firefox继续运行。那如果他爷爷不幸也挂了呢?那就继续往上导吧,我们说了Init是所有进程的祖宗,所以他那里成了最终的“无依靠青年进程收容所”。

      

       还有的时候娃已经把该做的事情做完了,汇报给他爹并变成僵尸。可是他爹还没来得及给自己娃收尸,自己就挂掉了。这个时候,我没法通知那娃说她爹挂了,因为那娃已经是僵尸了,啥也不听啥也不干了。可我也不能直接把他干掉,啥事情都得按规矩来嘛,只有他爹向我申请我才能把他干掉,可是他爹又已经挂了……那怎么办呢?那就按流程来,先给这个娃找个爹,哪怕这娃已经是僵尸了,也得有个爹。比如我找到init说:那个ID号是2725的那个进程爹死了,你当他爹吧。一边说一边看也不看的用手往那边一指,假装自己没看到那娃已经成僵尸了。 一般Init也不会太注意,直接就答应了,然后马上发现了事情的真相,跑到我这里来说:那娃已经成了僵尸啦,你还叫我收养个啥?我肯定会一脸无辜装:啊?是啊,那不管怎样,你是他爹了,你负责处理一下后事吧。于是init只好以爹的身份处理那个僵尸的后事,问题就这样解决了。

    (58) State

       别看说的这么麻烦,其实一个天真烂漫的娃进程从变成僵尸到被干掉只是一瞬间的事情,所以一般情况下主人是看不到一个僵尸进程的,要不然这一屋子僵尸还不得把主人吓出点毛病来。一般主人用ps命令查看到的进程,和办公室里的员工差不多,基本都处于两种——干活和睡觉。

       

       干活的状态,学名叫Running,也叫运行状态。这个应该很好理解,就是说明这个进程正在干活嘛。但是有个问题,还记得我说过CPU是有限的吧,一台电脑就那么几个CPU(对软件来说,多核CPU跟多个CPU差不多),可是要用CPU工作的软件有很多。那么这个处于进程的干活状态又可以分为两种:1.正在使用CPU干活。 2.排队等待使用CPU干活。当然,处在这两种状态的进程我都算他正在工作。这就好象你在公司要打印文件,结果打印机卡纸了。你在那等着人家修打印机的这段时间不能算旷工吧。我可不是啥变态的老板,所以,正在使用CPU干活的,和积极的排队等待使用CPU干活的进程,都算正在干活的进程。

      

       然后再说睡觉的状态。估计如果你上班的时候在办公室里睡觉,你们老板会很不高兴的。但是,在我这里,没问题!很多程序都会经常进入睡觉状态。这里说明一下,这个睡觉状态可不是说回硬盘睡觉啊,为了区别我们这样说吧,我们管完全执行完毕退出内存只存在于硬盘的程序叫“下班回家”的程序吧。只不过这个家就是硬盘上那块地儿,而回家后唯一的活动就是睡觉。好,现在我们要说的不是下班回家,而是在办公室睡觉——也就是在内存中的进程,进入睡觉状态,也叫sleep状态,休眠状态。那为什么一个进程在内存里不好好干活,要去睡觉呢?不是因为他昨晚上爬起来偷菜来着,也不是因为他熬夜看球,而是因为他要等待某个事情发生。比如皮筋老弟,每次他运行起来之后,主人看看有没有mm在线,没啥值得聊的就直接把皮筋最小化了。那么这个时候如果没有人给主人发消息的话,皮筋就没什么事情干,所以就没必要让他跟着排队等CPU了,等着了也没事情干嘛。所以这个时候皮筋就来向我汇报说:头儿啊,我歇会去啊,等网口那边有发给我的包了你再叫我。然后他就去睡觉去了,而我负责看着网口有没有发给他的包,如果有的话就叫醒他,那时候他就变回工作的状态,开始处理包的内容了。

       睡觉状态也分成两种,一种是叫的醒的,一种是叫不醒的。还说皮筋,他正在睡觉,等着网口的数据包,这时候主人发来命令,要把皮筋关了,这时候虽然皮筋等的包没来,我也得去叫醒他说:别等了,你下班回家睡觉吧。然后皮筋点点头,收拾好自己的东西,变成僵尸,他的父进程(通常是init)提出申请,我把它工号注销,然后他回硬盘睡觉。这种是正常情况,这样的睡觉状态就是能够叫醒的。也有的进程很执着,还比如皮筋,正在睡觉等包,这时候我发现网线断了。这网线都断了那肯定来不了包了吧,主人也明白这点,要把皮筋关了。这时候我过去说:“醒醒,别等了,下班回家睡觉去吧。”他不理我。我继续:“网线都端啦,等不来啦!”他还是不理我。我只好:“快醒醒,快醒醒,回家啦!”还是没动静。“快起来看上帝啦~”依然没反应。“靠,出绝招了……这是谁的钱包啊??!!”还是睡觉,看来是无论如何也叫不醒了,除非他等的那个包出现。这就是叫不醒的睡觉状态。一般一个好的程序是不应该处在这样的状态的。

      

       另外,进程还有个停止状态,一般都是调试的时候使用的。比如主任的Rubbish n号,跑进内存处于工作状态的时候,主人喊,停!Rubbish马上一动不动,处于停止状态,这样便于主人检查这家伙的各个部件是否正常。

    (59) 毕加索

       “……本APT有超级牛力~~~~~”

       唉~这家伙又去招人了。 我问:“SCIM,刚才主人给超级牛力输入了什么?”

       “报告头儿,是Picasa”

       “星爷,查查这啥意思。”

       “这个吗……英法美德俄日意奥的语系里都没这个词。不过有一个长得比较像的。”

       “什么?”

       “Picasso ,毕加索。”

       “哦……看来这哥们是个画画的……”

       GIMP不服道:“画画?有我还不够么?”

       我只得双手平摊做无奈状:“Who knows......”

      

       数分钟后,超级牛力归来,带来了一个穿的花花绿绿,很有艺术气息的家伙。我过去上看下看左看右看,怎么就看着不像我们这的人呢?于是我叫来了file。file可不是一个普通的文件,而是一个程序,一个用于判断文件类型的程序。他可以根据文件的特征来判断一个文件是什么类型的文件,当然,也能判断可执行的程序。他可不是跟据扩展名来判断,叫.jpg的就是jpg文件,叫.txt的就是文档文件,这种功能,连Rubbish都会。(在我们这里,主人创作的Rubbish系列已经俨然成了傻子的代名词。)file的功能要强大的多,他是根据文件的内容来判断的。一般一个文件都会有个文件头,来说明这个文件的类型。比如JPEG类型的图片文件,他的文件开头的两个字节肯定是FFD8(16进制),而GIF文件的文件头就是4749463839,其实就是GIF89几个字的ASCII码。二进制程序也有类似的特征码,于是,我让file赶快去看看这个“毕加索”(就叫他毕加索吧,虽然还是差了几个字母)到底是个什么程序。file把毕加索上上下下的检查了一遍,得出结论——这是个Windows的EXE格式的程序。

      

       “什么?Windows的程序!?超级牛力啊,你别是走错了吧,怎么把windows的程序领来了?”超级牛力不急不慌的摇摇头:“本APT有超级牛力,怎么会搞错呢,这个就是从源里找来的软件包。不过别急,本APT有超级牛力,这软件包可不是光毕加索一个,后面还有一个呢。”我这时才注意到,老毕后面还站着一个家伙,这……这……这不就是红酒大师吗??越来越乱了。仔细看看,咦,跟我们这里那个红酒大师长得很像,但还有些差别。没事,超级牛力哪里肯定有这个软件的资料,让他查查吧。还没等我让他查呢,他已经向大家解释上了:“毕加索先生是Windows界成名的图片管理大师,他所在的公司,也就是狗狗哥那公司,他们公司为了惠及Linux世界的人们,又为了偷懒,把毕大师配上一个翻译就直接推向了Linux界。”哦,原来这样,后面那个是改装过的,专门负责给毕大师当翻译的红酒。为了区别,我们就叫他毕翻译吧。

    (60) 对决

       毕大师和毕翻译安顿好之后,主人立刻把他们叫起来干活。俩人先后爬起来跑进内存,麻利的整理起主人的图片来——第一次启动嘛,得先对主人指定存放图片的那个目录扫描一下,做好整理和记录工作,这样才能心里有底,主人要看啥,立马能找着。经过了数秒之后,毕大师完成了对所有图片的扫描,主人觉得比原来负责管理照片的f-spot快了不少。这下,f-spot可不爽了。

       f-spot是最初跟随我来到这个机器上的,也算是元老了。一直以来都是他负责管理主人的照片,也没出现什么问题。现在主人找来这么个功能差不多的家伙,这不是明摆着要抢f-spot的饭碗么。要是以后让这个windows的程序代替了,我们linux程序的脸面还往哪搁?于是f-spot决定,为了荣誉,向毕加索挑战!只见f-spot跑到刚刚扫描完图片的毕大师面前说:“大师果然好功夫,不亏是师出名门。这数千张图片,竟然这么快就整理好了。在下实在佩服的紧,不过不知大师其他本事怎么样,有道是遇高人不可交臂失之,在下想在大师面前讨教几招,不知,大师可肯赐教否?”只见毕大师的表情如平静的湖水般并没有因f-spot的挑战而激起一丝波澜,只是面容祥和的扭过头对翻译说:“What did he say?” 靠……

      

       F-Spot VS Picasa 

       要比就从起床开始比!f-spot和毕加索以及毕翻译重新回到硬盘睡觉,然后我去叫来的time同志。time是一个用于计时的命令,这个咱以后再说,先看比赛。随着我的一声号令下,time开始计时。f-spot蹦起来后牙也不刷,脸也不洗(废话,一个软件,有牙么?),迅速的从硬盘飞奔进内存。再看那边,毕翻译先迅速跑进了内存,然后再扭头去叫醒毕大师——因为毕大师听不懂我们的话,所以无论我们怎么喊都是叫不醒他的,只能先叫醒翻译,再由翻译去叫醒他。这样一来,时间自然慢了不少,对于起床速度,F-Spot完美胜出。双方起床已毕,相向而立,只见F-spot掏出两张一模一样的照片,照片上是一个人像,似乎是晚上照的,眼睛如含着血泪般发出令人不寒而栗的红色。只见F-spot把一张照片扔给毕大师,另一张贴在自己这边,双掌运足力气,瞄准照片中人的双眼大喊一声:嗨!立时,照片上人的红眼不见,翻了白眼。另一边的毕大师微微一笑,拿起自己这边这张,单掌向前一推,一股掌风直逼那人双眼,只见掌风过后,那人双眼渐渐恢复成正常颜色。F-spot不等毕大师打完那掌,有拿起照片推拳运动,只见那本是夜里的照片亮如白昼。毕大师也不示弱,将照片抛向空中,双手一抖,一道劲风吹过,再看落下来的照片时,也已经比原来明亮不少。F-Spot又对照片连续发力,打出三招,依次改变了照片的对比度,色调和饱和度。毕大师口念咒语:“Easy……”只出一招,双手间出一道白气,就把照片的亮度,对比度,色调,饱和度,都改到合适的状态。毕翻译的在旁边解释道:“这招乃是毕大师的独门秘诀,叫做‘手气不错’!”毕大师微微点头,一扬手,只见那修改好的照片激射而出,直接从网口飞了出去,发布到了PicasaWeb网站上。屋内众人顿时为F-Spot捏一把汗,这PicasaWeb网站,明显是人家地盘啊,F-Spot能搞定么?哪知道F-Spot不慌不忙,也照片往网口一扔,把照片同时发布到了Flickr,PicasaWeb等多个网上相片储存空间里。这真是:棋逢对手,将遇良才,预知二人胜负如何,且听下回分解。

    (61) 空间

      

       话说二人斗的正酣,忽然bash报告,从主人那里发来命令"shutdown -h now",数秒钟后,一切归于沉寂…………

      

       要我说,这俩人都什么劲啊。每个软件都有它存在的意义,都有它的长处和不足。就说这毕加索吧,虽然比f-spot功能强点,不过毕竟不是原生的程序,至少占用内存就比f-spot大不少。毕竟毕加索不是一个人在干活,他必须有个毕翻译才行,所以占用量一下子就上去了。这内存可是重要的系统资源,跟CPU一样重要,所以作为软件,还是应该本着艰苦奋斗勤俭节约的精神,充分利用内存,避免浪费。不过我们linux下的软件们基本是小巧的居多,这里的4G内存还真没被我们占满过。f-spot也就占用20来M的内存,毕加索比他多,也只有40多M。当然,并不是说两个软件就一定比一个软件占用的内存多,一个软件占用的内存空间分为很多部分,咱们慢慢说。

      

       首先,这个软件本身得占用一定空间。就像你去公司上班,你自己得有个坐的地方吧。就算你不坐着,站的地方也得有一小块吧。总之,自身会占用一定的空间。软件本身是由一条一条的二进制代码组成的,咱以前不是说过Rubbish的故事么,gcc包工队把主人用C语言描绘的图纸编译成了一堆二进制的代码,这堆代码就是Rubbish。其他的软件也是一样,都是一堆代码,所以,软件程序自身占用的空间叫做代码段。这个代码段的大小在程序进入内存运行前就确定了,或者再往前想,在程序编译好之后就确定了。这个很明白吧,就像你在家睡觉的时候是一米七五,不可能到单位就变成一米六零了吧。

       然后,软件会随身带一些静态的数据,一般是一些初始化了的全局变量,每次起床时这些数据都会被带到内存里来,而且每次的初始内容都一样。就像你每天上班都得带着手机啊,家里钥匙啊,老婆照片啊之类的。比如Rubish 1号每次都喊“Wa Sai~,”这个字符串就是个数据,这个数据像是Rubbish每天随身带着一张纸条,起床来到内存后看看上面的内容然后喊出来。(当然,写程序的时候也完全可以把这内容写进代码段,那就相当于Rubbish 1号记住了这个字符串,不用看纸条,直接喊出来。)这种随身带着,每次都会用的数据所占用的内存叫做数据段。

       另外,软件可能还需要一片固定的空间来放东西。比如你的办公室,每次上班都毫无疑问的需要一张桌子,你一进办公室就得准备好这桌子,要不你怎么办公啊。(虽然这桌子不是每天现打造的……)程序也是,有些空间是一定会用到的,一般是一些未初始化的全局变量,不一定存什么数据内容,这种空间叫做BSS段(可不是BBS啊),这个也是在程序编译完成之后就确定下来的。每个程序启动,我都会根据他有多胖来确定他需要的代码段有多大,然后根据他有多少随身物品来确定数据断有多大,最后,根据他身上写的BSS信息来决定给他分多大的空白空间供他使用。

       以上说的都是程序一起床就需要分配的空间,除以之外,程序在工作的时候还会根据情况向我动态申请内存空间。这就是那种必须记得释放的内存空间了,他的名字就叫堆。这种空间,程序在刚启动的时候是不知道需要用多少的,得视具体情况而定。比如gedit小弟,主人要些个小文件,gedit就申请一小块空间临时存放主人写的东西,等到主人越写越多,gedit就会逐渐向我申请更多的空间,把主人写的东西都堆在那块空间中。(要不怎么叫堆呢)

       最后,还有一种动态申请的空间,叫做栈。这种空间是让程序随手放一些临时的变量的。比如临时有个什么事儿,或者有个什么数据,要存起来,就跟我申请栈空间,临时存放一下。栈就像一个小圆筒,程序需要用的时候我才给他,寄存在这筒里的东西都是很快就要用到的,这个空间不用程序去释放,程序退出之后我直接把筒里的东西倒光,把筒收回。因为是个小筒,所以,最先放到里面的东西会被之后放进去的东西压住,必须把后放进去的东西拿出来之后才能拿到先放进去的东西,这叫先进后出,是栈的特点。

    (62) VBox

       狐狸妹妹今天比较累,拖回来一个40多m的deb包。赶紧让超级牛力来打开看看——超级牛力除了可以自己去网上拽软件回来以外,也可以打开放在本地的软件包。超级牛力打开一看,是一个叫做VirtualBox的家伙,赶快检查他需要的各种东西,发现我们这里的环境都能满足他的工作需要了,然后安排住宿。

      

       VirtualBox(咱以后就简称VBOX吧)很懂礼貌,说话有些怯生生的感觉。他跟其他人打国招呼后,来到我这,把一些内核模块需要放在我这里。安顿好一切后,就去睡觉去了。这家伙给我的印象还不错,我就跟狐狸妹妹聊起他的背景来。听狐狸妹妹说,他的身世挺悲惨的,他最初生在德国,生母是一个叫做InnoTek的公司。VBOX一生下来就经常被Vmware和VirtualPC这样的大哥哥欺负,不过好在他自己的本领还算可以,后来他亲妈innoTek为了让他学习到更好的本领,把他的源代码依据GPL协议开放了,让全世界的高手们来教他本领,那是2007年1月的事情。凭借不错的性能,以及可以免费使用的特点,VBox总算闯出了自己的一小块天地。不过好景不长,转过年来,亲妈InnoTek被卖给了红太阳公司,VBox自然也被过寄过去。不过红太阳公司这个后妈还算不错,很照顾小VBox的成长,继续让他在开放的环境中健康的长大,有红太阳公司众多高手的支持和全世界热心用户和高手的用户,VBox俨然已经成为Linux下同类软件的首选。开源的本质使得追求自由的人们放弃了Vmware,简便的操作让人们淘汰了qemu,夸平台的支持更是有点软公司的VirtualPC无法比拟的。VBox本来以为自己之后的人生道路会走的很顺畅,可是,2009年又一次波折打击了VBox——红太阳这个后妈也被卖给人了。收购他们的是一个很古老的公司,那公司里好像写的都是甲骨文,不知道他们每天用象形文字怎么办公。甲骨文公司收购了红太阳之后,红太阳的几个孩子都面临着一段未知的命运。其中最让人担心的是mysql,因为之前mysql一直跟甲骨文家亲生的Oracle打架,这一下Oracle成了mysql的后妈,还不得天天受欺负阿。我们的Vbox的处境或许稍好一些,毕竟甲骨文亲生的孩子里没有和VBox同样本领的,所以VBox在那里或许还不至于受谁欺负。不过那也毕竟是经历的重大的变革,对孩子的成长还是会有一些影响。

      

       说了这么多,忘了介绍VBox是干什么得了,他是一个虚拟机,就是能在一台电脑上虚拟出另外一台电脑来。怎么样,听起来这个本是很厉害吧。他第一次工作的时候,我们都看呆了。

      

      “请问您这台电脑打算装什么操作系统呢?”

      "WindowsXP吧"

      "哦,那我建议您用192M的内存,您看可以么。"

      "上512吧"

      “好的,那么您需要什么样的硬盘呢?”

      “30G的,IDE吧”

      “好,您的电脑以及创建好了,显存大小,3D加速功能,声卡,网络这些都是可以随时调换的。”

       别以为这段对话是在中关村攒电脑,这是VBox在指导主人创建一台虚拟机。创建好之后,主人启动了这台虚拟的电脑,然后Vbox就开始忙活了。他先向我申请了512M的内存(之前从来没有任何软件一次性跟我申请这么多内存),之后又去硬盘里打开了刚才创建虚拟机时候他创建的那个超级大的文件(30G),别的文件都是很小的一个小箱子,这个文件大的像一间房子一样了。最后,他打开了硬盘上的一个叫做WindowsXP.iso的文件,把里面的查皮放了出来……

    (63) 动物园

      

       查皮被放出来之后,跑进了VBox申请的那512M的内存空间中。也不知道VBox用了什么方法,查皮就乖乖的待在那512m里,其他的空间他好像都没看见一样,当然也看不见我们。对于查皮来说,他正在一台有512M内存,30G硬盘,Intel E8400 CPU的机器上运行。查皮在检查了这些硬件后骂了一句:靠!谁攒的机器,3G的CPU尽然只有512M的内存!听的我们都想乐。之后查皮摆出了一张蓝脸,跟主人说:我这个系统可只能装在一台机器上阿,装多了算盗版。还有阿,我要是挂了,弄坏了你的数据可别赖我阿,我不管。你同意不同意,同意就按F8,不同意就别装了。主人按了F8,然后查皮又检查起磁盘——也就是VBox创建的那个30G的大文件了。检查之后又问主人:你这个磁盘怎么分区阿?打算把我装哪阿?我觉得查皮也太不人性了,安装的时候也不让用户现体验体验,就像我们这样,可以直接从光盘启动,让用户先用用,用的爽了再装嘛。查皮这不管三七二十一上来就让装,而且还非得问用户怎么分区,其实用户很多都不知道分区是啥意思呢,我们安装的时候都会问问用户,看他会不会分区,会分的话可以手动分区,不会的话我们可以替他分,当然得先备份好数据。

      

       主人分好区之后,查皮开始从光驱往硬盘复制东西——当然所谓的光驱和硬盘都是假的,都是VBox骗查皮的。复制的东西都是安装时候需要用的文件,复制完了之后,查皮说:那啥,我得重启一下电脑(当然是重启VBox弄出来的假电脑)。哎,这家伙真麻烦,装一般还得重启电脑,哪像我们,都装完了才重启呢,装驱动都不用非得重启电脑。VBox赶紧模拟着这假电脑重启,还别说,上电自检,BIOS界面啥的都模拟出来了,还真像那么回事。重启之后查皮继续安装,这回脸色好看了不少,不是那死蓝死蓝的了,有了不少艺术气息。一边安装,查皮一边向主人讲解这自己的功能,特点,有什么好处,反正就是一通侃阿。这点倒是挺好的,省得主人装的时候寂寞,其实以后我也可以学习学习。不过查皮装的时候就感不了别的了,我们安装的时候还能允许主人上上网阿,玩玩小游戏啥的打发时间。

      

       这台机器的配置还是不错的,查皮虽然跑在VBox创建的虚拟机里面,但是仍然只花了30分钟就安装好了。装好了之后又重启了一下电脑,查皮终于正常启动了,我们一堆软件在外面围观,还不时的指指点点,终于有幸见到真正在工作的查皮了,有点到了动物园的感觉,不过查皮并不知道我们看他。启动之后现文主人一些基本问题,用户名阿,怎么联网阿之类的,尤其重要的还非得要上网注册一下,向那个有点软的公司汇报,让有点软公司查查是不是正版,如果不是的话,查皮就不正常工作了。不过主人没让他上网,所以暂时这个查皮没有激活。查皮是个很早的系统了,第一次出生是2002年的事了,所以虽然只有512M的内存仍然跑的挺快,刷刷的,不过界面不如我漂亮,没有俺这样的3D桌面,所以快点也是应该的。

    (64) BT

      

       系统装好了之后,当然还得装驱动。查皮是被装在了虚拟机里,所以要装驱动可不能把主人买电脑时候的驱动盘拿进来,而是要装VBox虚拟出来的这台电脑的驱动。这个驱动哪里有呢?当然是管VBox要咯。我们这的这个VBox是狐狸妹妹去官方下载的不开源版,如果是超级牛力从软件源里拉来的VirtualBox-OSE版的话,那个VBox可自己不带这驱动来,需要主人自己上网站上下载驱动去。而我们这个VBox是自己带着驱动来的,只需要主人点下VBox的“设备”菜单的“安装增强功能”选项就好了。点了之后,VBox从兜里掏出了一个ISO文件,悄悄塞到给查皮虚拟出的那个光驱里。狐狸妹妹拉拉我说:“你看你看,VBox给查皮喂东西吃呢。”这时候查皮发现光驱里有了个光盘,按照习惯,他先去光盘里检查有没有一个叫做"autorun.inf"的文件。如果有这个文件,并且里面有类似open=xxxxx.exe这么一行,那查皮就直接再去光盘里找这个xxxx.exe文件,并且运行它。这就是光盘自动运行的原理,后来被很多病毒利用了。好,咱说回来。查皮看到光盘塞进来,赶快去检查,发现果然有autorun.inf文件,于是按照文件上写的,去运行VBoxWindowsAdditions.exe程序。这会狐狸妹妹又喊:“你们看你们看,查皮过去吃了!” (还真到了动物园了-_-b)我说:“别傻了,他那是光盘自动运行功能。”大家点点头。查皮运行了增强功能安装程序,主人一路点着next就装好了,就像我们这里装deb包一样方便。装好之后,自然是要重启一下了,重启后的查皮似乎性能更好了些,而且可以更方便的和我们交流了,主人的鼠标也可以很平滑的在查皮与我之间切换了。

      

       主人命令查皮打开了IE,先去下了个叫做迅雷的软件。这是个下载软件,有点像我们这里的奔流,不过奔流只是用来下bt的,可是迅雷却是什么都能下,什么http阿,bt阿,电驴阿,都行。

      

       听起来这个迅雷好像很厉害,不过他也有些不厚道的地方。尤其是下bt的时候。像ftp,http这样的下载连接,原理相对简单,就是服务器这边一个包一个包的发,客户端(也就是你的机器)一个包一个包的收而已。比如要下一个文件,就比如狐狸妹妹吧,她要从某个网站下个文件,就去跟对方那个系统说:“我想要你的xxxx文件,给我吧。”对方看看,这个文件是可以给别人的,里面没有任何这个门那个门的照片,然后就跟狐狸说:“好的,准备收吧。”狐狸准备好之后(比如得问问主人这文件存哪吧),就跟对方说,好了,我准备好了,发吧。然后对方就一个包一个包的发过来,狐狸妹妹一个一个收下来,然后拼成一个整个的文件。这时候如果又来一个软件要从同样的地方下载同一个文件,就比如有一个FlashGet吧。服务器那边就得把数据包分别发给我这里的狐狸妹妹和那个不知道哪里的flashget。打一个包发个狐狸,然后再打一个包发给flashget,这个打包的过程不会慢,很快就完成了,但是网口的宽度是有限的,比如只能一次传一个包,那这样两个软件同时下载的话,速度就慢了一半。而bt下载是什么样子呢?咱拿奔流说吧,奔流要下载,首先得有个bt的种子文件。种子里写着去哪找下载的服务器,这个服务器可不一定是什么大网站了,可能只是某个和你一样在家上网的人。不管是谁吧,奔流就根据种子文件找到服务器,管他要数据,服务器那个系统上也得有个相应的软件,把数据打成包,一个一个的发给奔流。这时候如果又来一个人要下载同样的文件,服务器那边就跟奔流说了,那个奔流,有个ip是xxxx的那边有个比特精灵也想要这个文件,你把你那已经接收了的文件给他传一份吧。奔流就会很友好的把自己已经下载好的那部分打成包,扔给那个不知道哪里的比特精灵。一边接收服务器发来的包,一边自己过回当服务器的瘾,把数据打包发给别人。有人问呢,这样不会慢么?打包拆包的过程对于奔流来说(对其他软件也是一样)是很轻松的,瞬间就能完成。那网口的带宽呢?网口数据的输出和输入是分开的,奔流给别人发数据这算输出,输出的带宽不管怎么占用不会影响输入,也就是不会影响服务器给奔流发数据的速度。这样,每个人都同时当服务器和客户端,在大家齐心合力的工作下,下载速度就有了明显的提升。从宏观上来说,原本http这样的下载方式,服务器的上传带宽有多大,决定了所有客户端下载的带宽有多大,来的人越多就越慢。而bt这样的形式中,每个软件即是客户端,又是服务器。在自己下载的同时,也将自己的上传带宽贡献出来,让别人从自己这里下载,这就是人人为我,我为人人的世界阿。

    (65) tar包

      

       这说了半天,还没说迅雷为什么不厚道呢。

       咱说了,BT下载的核心理念就是每个下载的人贡献出自己的上传带宽供其他下载的人使用,这样的结果就是将下载的星星之火传播为燎原之势。下载的人越多,速度就越快(不考虑你家接入带宽限制的话)。但是,这林子一大,就什么鸟都有了。迅雷加入了下载bt文件的功能,可他的行为很是自私,只享用别人的带宽而不共享自己的带宽,就是说只管从别人那里要东西,而当有人管他要的时候他却不给。这哪行啊,孔子说过,不能饱汉子不知饿汉子饥呀。所以迅雷被很多像奔流这样的有理想有道德的bt软件所鄙视,甚至还有的软件专门有屏蔽吸血客户端的功能。

      

       主人让VBox里面的IE下载了迅雷之后就开始安装了,只见主人双击了一下下载来的Thunder.exe文件,迅雷的安装程序就直接崩出来向主人问好:您好,欢迎安装迅雷……等等等等问候语吧,然后主人点了下一步,安装程序又掏出一份协议来让主人签署,无外乎就是如果怎么怎么样,那不关我们迅雷的事,如果怎么怎么样,我们迅雷也不负责任之类的。主人只有同意了才能进行安装。主人很无奈的点了统一之后又想主人推销:那个,有个软件叫迅雷看看热播排行,要不要装啊?还有狗狗影视排行,要不要装啊?要不要开机就自动运行迅雷啊?等等问题。再之后就问要安装到哪里,都选好了之后就开始安装了。我看的频频点头,问VBox:查皮底下的软件都是这样么装的么?VBox说:是的,基本都是.exe的二进制程序直接运行,问一堆问题就装上了,如果你不知道该怎么答也没关系,就直接点下一步,下一步,……完成。就行了。我感慨道:还真是挺方便的,就是还得自己去下载,比较麻烦,要是像我们这样,直接一个超级牛力就全搞定了,只要告诉他软件名就行。不过他们那里的软件既然都是这样的安装,至少还是比较统一的,相比之下我们这里的软件,如果能够让超级牛里去请的还好办,要是超级牛里请不来的,就麻烦了,得自己去下载不说,下载回来的软件格式各种各样,闹得很多人都不知道该怎么装。

      

       下载软件最经常找到的,就是tar.gz格式的软件包了。我经常听到很多其他的笨兔兔抱怨他们的主人围着个tar.gz包不知道该怎么办,自己急的直打英文字也没办法。还好我的主人了解的多一点,知道这样的包是怎么回事。其实事情是这样的:话说有个软件叫tar,基本上每个linux都会带着这么个软件,我这里也是。这个软件是干什么的呢?是个打包裹的,不过他可不是邮递公司的那种,不过会把好的包野蛮的扔来扔去。他的能力有点像查皮那里的winzip,他能把很多文件和目录收拾在一起,打成一个包裹,也就是生成一个tar包文件。可是跟zip不一样的是,tar只管打包,不管压缩。原来那些零碎的小文件有多大,打成tar包之后还是多大,只是变成一个整个的文件了而已。有人说,那我想压缩怎么办?别急,我这还有另一个软件,叫gzip。这个软件就是专门负责压缩的,但是他只能压缩一个文件,不能像winzip那样能压缩一个目录里的好多文件。这样,tar和gzip就成黄金搭档了(有脑白金么?),要想实现winzip那样的功能,就得tar和gzip联手协作。比如有个目录叫aaaa,里面有好几十个文件,总共有10M。想要压成zip那样的压缩包,那就先让tar出手,把aaaa目录打成一个包裹文件——因为gzip只能压缩一个文件嘛。这样tar就把这个目录打成了aaaa.tar文件,这个文件还是10M大。然后由gzip出场,把这个文件压缩,压缩完了得标明一下啊,所以就又把文件名改了,叫做aaaa.tar.gz,表示这个文件经过了gzip压缩,这时候这个文件就小了,可能5M,可能7M的就没准了。有时候觉得一个文件叫xxx.tar.gz,有两个扩展名太罗嗦,就改名叫xxx.tgz,是一个意思。这下就明白了吧,这个tar.gz包其实就相当于rar或者zip的压缩包。那下载来的tar.gz包的软件怎么装呢?那当是先把包解开再看了,得先解开压缩包看看里面是什么内容才能知道怎么装啊,就像我问你RAR包怎么装,你能知道么?

    (66) 编译安装

      

       我们现在知道tar包就是个压缩包,就是个大包裹,里面有什么东西不一定。那一般拿到一个tar包的软件应该怎么办呢?

      

       你收到一个包裹后怎么办?当然是先打开啦!先找剪子啦,小刀啦之类的工具把包裹拆开,然后看看里面有什么东西,根据里面东西的不同来决定怎么处理。里面要是家里寄来的松子核桃什么的,就赶快吃了;要是比较难吃的松子核桃什么的,就跟同事分着吃了;要是部手机,就赶快拿出来试试;要是下面还有把首枪,就赶紧拿刚才那手机报警。这些大概不用我说,智力正常的人都应该知道怎么做,其实tar包也是如此。拿到一个tar包之后,先用你的工具把tar包拆开。工具是啥?有道是解铃还须系铃人,tar打的包,当然还用tar来解了。当然,你也可以用那个叫做文档管理器的家伙,他的中文名字叫归档管理器,他的英文名字叫(叫gui~dang~guan~li~qi~~?那是小沈阳!)file-roller。不过其实他只是个负责用图形界面和主人交流的家伙,真正干活的还得是tar。tar包解开后,一般会得到一个目录,里面有很多的文件。然后干什么呢?有的同学记起来了,看看里面的东西啊。

      

       一般包里面应该有个README文件,里面写着这个软件是干什么用的,怎么安装,怎么用,作者是谁,干什么的,爱吃什么,身高多少,腰围裤长……等等信息吧。也可能安装的方法写在一个叫做INSALL的文件里,总之,应该有相应的文档文件来告诉你这个软件怎么装。不过也有时候软件的作者不厚道,或者忘性大,没有写README或者INSTALL文件,或者文件有,但是没说清楚到底怎么装,那怎么办呢?用自己的头脑判断一下吧。

      

       一般来说linux下软件分发无非两种形式:要么是编译好的二进制的,要么是源代码。咱以前不是讲过gcc的故事么,gcc包工队听后make总指挥的调遣,make总指挥根据Makefile的指导工作,Makefile由configure分析师创建。那么,你看包里面有configure,有makefile之类的那就是源代码呗,没有这些的话八成就是编译好的二进制文件了。要是二进制的包,那就好办了,直接就能运行。比如你下了个包叫qq.tar.gz,解开了之后里面有个叫qq,一看还可执行,那还等什么?运行它就是了。要是源代码的包呢?按照咱之前讲的步骤来:先让configure分析师看看你这机器里能不能装这个软件,如果缺什么东西,他会告诉你,让你去准备。之后就是让make去指导施工,这个过程可能比较长,成功之后,这个软件就已经产生出来了,不过这时候编译好的二进制文件还在当前目录,还没有放在合适的地方。虽然可能也能运行,但是他看着其他的软件很happy的聚在/bin,/usr/bin,/usr/local/bin之类的屋里,自己一个人躲在这个角落多伤心啊。所以还需要一步make install,就是告诉make,把这个刚刚编译好的软件请到他该去的地方。以上所说的这个过程,就是让很多人头疼不已的编译安装。

    (67) 对话

      

       经过一系列丁玲铛啷的操作后,主人终于用迅雷下载了他需要的东西,然后关了迅雷,准备把下载好的文件复制出来。文件是放在VBox给查皮虚拟出来的那个磁盘里的,虽然是虚拟的,不过理论上也是归虚拟机里的查皮管理的。所以要想拿文件到我的地盘上来(也就是拿到真实的磁盘上来),同样需要经过正规手续。

      

       查皮们之间有一种很方便的通讯方式,叫做网上邻居。连接在同一个局域网内的几台装着查皮的机器可以互相看到彼此,就像住在一个大院里的邻居一样,互相之间共享个啥文件啥的都很方便。就像你有封信要给对门张大爷送去,首先你看到张大爷家门口的一个信箱,然后你打电话给张大爷问:您家门口的信箱我能随便往里放东西么?我有封信要往里放。张大爷说:行阿,放吧。然后你挂了电话,去张大爷家门口把信仍进他的信箱。(谁吃饱了撑的这么送信阿。不过就是个比方。)查皮之间也是这样,查皮甲共享了某个文件,就相当于张大爷,查皮乙就可以通过网络往这个文件夹里面放东西,当然,放之前得跟查皮甲打好招呼,确认人家让放才行。

      

       查皮们通过网上邻居这样的方式共享文件时,也是需要说黑话,对暗语的,学名就叫协议,他们也是有一套协议的。有点软公司管这个协议叫做CIFS协议,不过我们更喜欢叫桑巴(Samba)协议,因为我们这里也有人懂这种黑话,那就是桑巴大姐。不过跟这个虚拟的查皮共享文件,完全不需要桑巴大姐出马,VBox一个人就全都搞定了。只见主人点了VBox的 "设备-->分配数据空间" 命令。然后VBox询问主人要分配哪个目录——这个目录可是我管理的真实的机器上的目录。主人直接选择了自己的家目录,并且告诉VBox允许虚拟机里面的查皮往里写东西,然后VBox就领命去了,可是我们也没看出有什么事情发生。正疑惑间,主人又开始操作查皮了,主人用右键点了查皮的"我的电脑",选择了"映射网络驱动器"。之后让查皮浏览了一下网上邻居的整个网络,查皮赫然发现一个叫做"VirtualBox Shared Folders"的网络,里面有个叫做\\VBOXSVR\LanWoNiu的共享文件夹。原来刚才VBox去虚拟出了个张大爷阿!查皮在主人的命令下,挂载了这个虚拟出来的共享文件夹,然后准备往里放东西,放之前得跟张大爷打个招呼阿,于是查皮拨通了虚拟张大爷的电话。“铃~~~” Vbox接起了电话,可是没说话,竟然把电话递给了我!和着我成那“张大爷”了。

      

       "喂,我是WindowXP,计算机名F_U_O_C。" 当然,这些都是VBox给我翻译过来的。

       “我是张大爷……厄不是,我是Ubuntu 8.04,HostName LanWoNiu-desktop,你好”

       “原来是个Linux阿。”

       "是的,我是个Linux,有什么问题?"

       "没问题,就是觉得你们整天板着脸,让用户天天输命令,很不人性。"

       “那可能你对先在的Linux还不是太了解,再说,命令行很多时候比图形界面高效阿。你不是也有命令提示符?还有,你们家族的新人Windows 2008还尤其加强了命令行的能力。”

       "命令怎么比图形高效了?请问你如何在命令行下一次删除文件名没有任何规律的多个文件?"

       “这个你用图形界面也一样费劲阿。”

       “行了行了,不跟你废话,说深了你也听不懂。我问你,你是不是有个叫\\VBOXSVR\LanWoNiu的共享文件夹?”

       “是”

       "我要往里放文件,可以么"

       “可以”

       “那我可放了阿,你硬盘地儿够不?网速撑的住不?我这可是百兆网卡。”

       "没问题,发吧" 

       “恩,没问题就好,估计你们Linux这点能力还是有的。”

       “……“ (瀑布汗中)

       “是不是忙的顾不上说话了?你们这效率也就这么回事,哈哈。”

       哎,这家伙还真爱自以为是。当他自以为把我说的哑口无言的时候,却不知道他正被我的手下当作宠物一样关在笼子里,养在我的工作间中。

    (68) 聊天记录

       最近有些无聊,也没有什么新人来报道,不过也是,主人也不能天天装软件玩呀。一般平时用的着的软件都有了,就够了。现在主人每天也就是用狐狸上网转个圈儿,用smplayer看看片儿,用OO老先生码码字儿,用Empathy跟mm聊聊天。这么几个简单的进程调度起来,对我这么个优秀的内核来说实在没什么挑战。闲的没事我就去硬盘里翻文件玩,看主人目录里都有啥有意思的东西。翻着翻着,看见了主人和mm的聊天记录,拿来看看——这可不算侵犯个人隐私阿,俺只是个操作系统。

      

      第一段: 

       mm:你给俺装的这个系统怎么跟我在单位用的不一样?

       懒蜗牛:你们单位那个是centos,这个是Ubuntu

       mm:有什么不一样?

       懒窝牛:都是linux,不同的发行版

       mm:啥叫发行版?

       懒蜗牛:就是……不同的牌子。

       mm:哦……那这个好?

       懒蜗牛:恩,用起来方便。

       mm:这个名字怎么念阿?

       懒蜗牛:就叫它笨突兔吧,哈哈,我就这么叫。

       mm:可爱,嘻嘻,样子倒确实是挺漂亮的。

      

      看完这段,我很欣慰,呵呵

      

      再看第二段:

       mm:我想装个软件,怎么装阿?网上下载的都不能运行。

       懒蜗牛: 这个跟windows装软件,不一样的,俺教你吧。

       mm: 哦?好阿

       懒蜗牛: 先教你用命令装,打开个终端

       mm: ok

       懒蜗牛: 找到了?还挺快

       mm: 恩,让我放桌面上了

       懒蜗牛: 运行cowsay

       mm: 尚未安装

       懒蜗牛: 恩,恩

       mm: 是否运行sudo apt-get install cowsy

       mm: 他给的提示

       懒蜗牛: 8.04太智能了…………

       mm: 呵呵

       mm: cowsay

      是什么东西?

       懒蜗牛: cowsay是个很有意思的软件,现在你还没装

       mm: 哦

       懒蜗牛: 当你想装一个软件的时候就运行

       sudo apt-get install 软件名

       mm: apt-get

       什么意思

       mm: sudo install俺都理解

       懒蜗牛: apt-get是Ubuntu下的软件包管理工具,号称超级牛力。

       懒蜗牛: 好,现在运行sudo apt-get install cowsay

       mm: 哦?跟软件有关的操作都用他?

       mm: ok

       懒蜗牛: 安装,卸载软件,都用它

       mm: e: 无效的操作 install cowsay

       懒蜗牛: 怎么输入的命令?

       懒蜗牛: 把整个输入输出发来看看?

       mm: 又输入了一次,就成功了

       懒蜗牛: ……

       懒蜗牛: 好了,现在就装好cowsay了

       mm: 这就装好啦。

       懒蜗牛: 恩,运行 cowsay hello

       懒蜗牛: 然后你就看见一个cow在say hello,呵呵

       mm: 哇!狗狗

      !

       懒蜗牛: 是cow…………

       mm: 哦,是牛阿,呵呵

       懒蜗牛: 同时还会有一个cowthink 命令

       懒蜗牛: 也可以试试

       mm: 那岂不是 cowsay +任何,他都说任何

       懒蜗牛: 对对

       mm: 呵呵,挺好玩的。

       懒蜗牛: 好,今天俺们学习了安装软件

       mm: 恩,恩

       懒蜗牛: 主要分2步

       懒蜗牛: 第一步,知道你要装的软件的名字

       懒蜗牛: 第二步,sudo apt-get install xxxx

       mm: 恩,恩,学会了,嘻嘻

       懒蜗牛: : D

       mm: 老师教滴清楚哈

       懒蜗牛: 呵呵

       懒蜗牛: 这样装的软件就会不断的更新

       懒蜗牛: 当然,前提是有牛人把新得版本放到服务器上

       mm: 哦?还能自动更新?

       mm: 恩,恩,这个当然

       懒蜗牛: 恩,今天你aptget一个cowsay1.0

       mm: 俺以为自动更新还是需要设定的

       懒蜗牛: 明天服务器上有cowsay1.1了

       懒蜗牛: 就会提示你更新,就是开机右上角的那个

       mm: 恩,这个貌似今天看到了

       懒蜗牛: 恩,恩

       mm: 嘻嘻

      

      

      恩……不错,这mm有前途。

      

      第三段:

       mm:我发现还是你教我的用图形界面装软件方便,只要打开那个啥牛力的软件管理器,想装什么就搜名字就好了,然后右键点一下,选标记以便安装,就好了。

       (看来是主人哪天现场指导去了,呵呵。)

       懒蜗牛:恩,是阿。

       mm:那干嘛还有人要用命令装阿。

       懒蜗牛:其实命令熟的话,命令更快。而且命令有命令的好处阿,比如你电脑有啥问题,我与其告诉你先点哪个菜单,再点哪个菜单,再再选哪个选项,就不如直接告诉你一条命令,让你运行一下来的快。

       mm:哦……是哈,那样适合我这样的懒人,嘻嘻。

       懒蜗牛:呵呵

       mm:今天同学来俺着看见这系统了,以为是win7呢,呵呵。

       懒蜗牛:比win7可漂亮多了。

       mm:恩,恩,俺也这么说。

       懒蜗牛:握手,握手。

       mm:嘻嘻,还有像这个这样漂亮的系统不?

       懒蜗牛:这个只是Linux的一种,所有linux都可以弄成这样。

       mm:哦,那还有什么其他Linux?

       懒蜗牛:有好多,比如Gentoo,Fedora,SUSE,还有你们公司的那个centos,好多呢。

       mm:哦,那有什么不一样?

       懒蜗牛:gentoo是个能高度配置的系统,可以根据自己的需要配置整个系统,速度最快,因为里面的软件都是按照自己的机器配置而优化的。不过就是配置起来很麻烦。

       mm:你用过么?

       懒蜗牛:以前用过,挺不错的,尤其可以滚动升级,不像笨兔这样,版本升级风险比较大。我还想哪天格了换回Gentoo呢。

       (阿!!?? 别阿别阿,我挺好用的,升级也不麻烦,相信我,相信我。)

       mm:听起来是高手才用的,别的呢?

       懒蜗牛:Fedora,是RedHat公司出的免费版本。

       mm:红帽子阿,听说过,好像有RedHat 9.0?

       懒蜗牛:那是很老的版本了,RedHat在9.0之后分为两个分支,一个是面向企业的收费的,叫Red Hat Enterprise Linux,另一个是社区的免费版本,就是Fedora。

       mm:这样来的阿

       懒蜗牛:恩,现在Red Hat Enterprise Linux已经发展到版本5了,有人简单叫它RedHat5,所以很多第一次接触的人误解,觉得redhat9.0是最新的。其实都是老古董了。

       mm:我也差点……

       懒蜗牛:呵呵,Fedora里面的软件都比较新,发现了什么问题,RedHat公司再去改,稳定了之后就放进收费版的Red Hat Enterprise Linux里。

       mm:合着拿免费用户做试验阿……

       懒蜗牛:也可以这么说……不过Fedora的确实能满足很多人求新的愿望,而且,有大公司作靠山,作出来的东西还挺不错的,我也想装一下试试呢,从来没用过。

       (不会又要把我格了吧……咱有VBox阿,在虚拟机里试试就得了~)

       mm:装吧,我支持。

       mm:我们公司那个centos呢?什么来头?

       懒蜗牛:那个是RedHat收费以后,社区创建的版本。目的是提供一个免费的服务器版本的Linux。centos基本上可以当作是Redhat的免费版,版本号互相对应,里面的软件也一样。

       mm:哦,那,那个SUSE呢?

       懒蜗牛:那是德国的一个发行半,以界面漂亮著称,不过有点慢。

       mm:哇……俺喜欢漂漂的东西。

       懒蜗牛:呵呵,回头装一个你看看。

       (她喜欢往她机器上装阿,别又来格我。)

       mm:哦……嘻嘻,反正你就是闲不住,老折腾电脑玩

       (恩,我看也是)

       懒蜗牛:厄……这个……是吧。

       (犹豫什么,就是!)

       mm:嘻嘻,无语了。

      

      赶紧告诉兄弟们,一定要好好工作,不然随时炒鱿鱼,哎~~~遇上这么个主人也不踏实……

    (69) LOSE

      继续翻聊天记录,第四段:

       

       懒蜗牛:早上好

       mm:好,我的电脑装显卡驱动了么?

       懒蜗牛:你那是Intel的集成显卡,不用装。

       (恩,恩,我就是这么方便,哈哈。)

       mm:Intel的显卡不装驱动就能用阿?可是在windows下怎么需要装驱动呢。

       懒蜗牛:厄……任何硬件都需要驱动程序的,包括硬盘、光驱、U盘也都需要驱动。只不过这些常用的东西的驱动都集成在了系统里面或者BIOS里。WindowsXP年头久了,当然里面没有你这个显卡的驱动,你装个WIN7看看,照样不用装驱动。都集成在系统里了。

       mm:哦,原来这样阿,那我还挺运气哈,碰上这么个显卡。

       懒蜗牛:恩,intel对linux的支持还是不错的,如果是其他牌子的显卡,就麻烦一点了,有的显卡根本没法开3D效果。

       mm:那那些用别的显卡的人怎么装linux阿?

       懒蜗牛:装还是能装,不过就是不能开3D,而且运行效率也差。

       mm:那帮人真可怜……

       懒蜗牛:是滴

       mm:那,下一个问题,我想跟你视频用什么软件呢?这个QQ好像没这个功能阿。

       (得,问的软肋上了。)

       懒蜗牛:这个……可以用skype,msn也行,反正qq是没戏了。

       mm:为什么呀?

       (这mm整个一十万个为什么。)

       懒蜗牛:因为腾讯就只开发了这么个简单的linux版的QQ呗。

       (原来叫腾讯阿,我一直以为是疼殉呢……)

       mm:好麻烦阿,还得用msn。和你用msn也就凑合了,和别人咋办,人家要是没msn呢。

       懒蜗牛:这个……没辙。

       mm:哦,你也没辙啦,好吧……对了,这系统下有啥游戏好玩阿?

       懒蜗牛:自带的那些玩过没?

       (恩,恩,没事跟电脑下下国际象棋)

       mm:那些都好没意思阿,有大点的没?

       懒蜗牛:魔兽世界?

       mm:那个好复杂阿,不爱玩。

       懒蜗牛:你想玩啥?

       mm:比如跑跑卡丁车啦之类的。

       (别说卡丁车,连卡车也没有阿)

       懒蜗牛:没有……

       (是吧)

       mm:那有什么游戏呢?

       懒蜗牛:基本上吧,在Linux下就别想玩游戏了。

       mm:这么惨阿。

       懒蜗牛:其实也有,有些网游。

       mm:还有网游阿?好玩不?

       懒蜗牛:没玩过,都是英文的……

       mm:俺恨鸟语……

       懒蜗牛:所以还是别玩游戏了,这系统就是让你好好学习嘛,呵呵

       (换个话题吧)

       mm:我们最近学ps呢

       懒蜗牛:学点啥不好……

       mm:这个也没有?

       懒蜗牛:有gimp,功能和ps差不多。

       (就是就是)

       mm:你给我装了么?

       懒蜗牛:默认就有,你找找。

       mm:哦,看见了。

       懒蜗牛:嘿嘿

       mm:怎么跟ps不一样阿?

       (废话,一样了就是PS了)

       懒蜗牛:当然不一样阿,这完全是两个软件。

       mm:那跟我们老师教的都不一样,我也没法用阿。

       懒蜗牛:厄……也……没辙这个。

       mm:啥破系统阿,干啥都不行。

       懒蜗牛:恩……那……你要不还是用Windows吧。

       mm:可是这个好漂亮耶

       懒蜗牛:漂亮也不当饭吃。

       mm:也是,回头你给我格了装Windows吧。

       (又一个可怜的兄弟要惨遭不幸了……)

    (70) 宏&微

      

       随着USB门口上的红灯一闪,我知道又有USB设备接入进来了,赶快打看门一看,这回不是那个司空见惯的1G U盘,而是一个网络设备,好像……是个无线网卡?赶快翻翻我身上的模块,看有没有它的驱动。

      

       我身上有很多的模块——别担心,不是“肿块”,不会影响身体健康。也不是“蘑块”,不能吃。是“模块”,翻译成英文叫module。这些模块像一本本的手册,有的手册是说明如何使用某个硬件的,这就是硬件驱动模块;有的是说明如何使用某种文件系统的,那就是文件系统模块,等等。这些手册我都统一放在/lib/modules/2.6.28-11-generic/目录下(2.6.28-11-generic是我的内核版本),每次起床,我都根据配置文件里写的内容,把里面一些必要的手册揣在身上再去干活。(就跟去旅游要揣个地图一样的道理)当需要用到哪个东西的时候就掏出响应的手册来查看。比如要用RealTek的那块声卡了,我就把关于RealTek声卡的那本手册(也就是那个模块啦)掏出来,看应该怎么使用,如何操作这个声卡。也有的东西,很重要,很关键,很基本,每次一定都会用到,那样的就不做成模块了,就直接让我记忆在脑子里,融化在血液中——也就是所谓的编译进内核。哪些东西编译为模块,哪些东西编译进内核,哪些东西根本不编译,这是在编译内核的时候就决定的。你也可以让我把所有东西都记忆在脑子里,也就是所有的东西都编译进内核,不编译成模块。但那样的话,就基本没法干活了。倒不是我记不住那么些东西,我不是人脑,我想记住啥就记住啥,但是要知道我是程序,我要记住个东西的话,体积是要增大的。一个所有东西都被编译进去的内核大约要二百多M那么大!!这就意味着这内核一启动,自己就至少得占200多M的内存,那还怎么干活啊,这点地儿全让他一人占了。

      

       不过说起来,我的祖先们——也就是最初的那些Linux内核,是没有模块这回事的。那时候的linux内核要把所有需要用的东西都记住。比如要用到ext2文件系统,那就把ext2文件系统的支持编译进内核。用不到XFS系统,那对XFS系统的支持就不编译。等到那天需要XFS支持了,就得重新编译内核,把XFS支持编译进去,然后重启,用新内核启动系统。所以那时候的Linux内核是个典型的宏内核。所谓宏内核,也叫单内核,就是指像linux这样,内核整体作为一个独立的进程在运行在内存里,所有该实现的功能,都在这个大进程里实现,像进程管理阿,内存分配阿,文件系统管理阿,硬件设备的控制阿等等这些事情。像我们Linux,还有传统的Unix,有点软公司的剁死,Windows 95,Windows98,都是宏内核。与宏内核对立的,还有一种叫微内核。微内核就不是一个人在战斗了,微内核的理念与宏内核相反,把内核该干的那点事分成一个一个的小块,由一个个小的内核进程专门去管理。有专门管理内存分配的,有专门管理进程的,有专门管理硬件IO的,等等。这样的好处就是进程间分工明细,每个进程只专心管理自己那一点事情,不容易出问题。而且,可移植性也比较高,只需要把直接跟硬件相关的部分移植一下就好了,其他的部分基本不用动。宏内核就需要整个都移植,因为是一个整体嘛,要换整个换。像咱们说过的Minix,就是微内核。当宏内核工作的时候,就是像我一样:比如叫皮筋起床干活吧,我先通过文件访问,把皮筋叫进内存(程序也是文件阿,可执行文件),然后给皮筋分配好内存空间,为他创建个进程(也就是给他分配个工号),分给他CPU让皮筋开始干活,皮筋要访问网络的时候我负责操作网卡,把他要发的东西发到网卡上。这一系列的事情,全都由我一人管理。整个工作间里是以我为中心的工作。而微内核工作起来的景象就是:要内存的事都去找内核贾;要访问文件的程序,都去找内核余;跟硬件打交道的全去内核汤那;进程管理的问题都归内核顿管。内核余把皮筋从硬盘里交出来,然后喊“老贾,给皮筋分配点内存”,内核贾就给分配,分配好了跟内核顿说:“分个工号,创建个进程”。内核顿照做,然后皮筋开始干活,要访问网卡了,就去内核汤那报道。整个工作间里,软件们是以“顿贾余汤”内核小组为中心干活。

      

       宏内核灵活性明显不高,这是个人就能看出来,所以现在我们Linux学会了通过加载模块的方式来增加灵活性,需要增加什么支持,只要加载一个新的模块就好了,不用重新编译内核,不用重启计算机。其实这也算是跟微内核那里学来的了。呀,说了半天主人接进来的这个网卡……好像我这里没有它的驱动模块阿……

    (71) 无线网卡

      

       我看了一下插进来的这个网卡,是Realtek的RTL8180L芯片,再仔细翻翻我的所有模块……确实没有,坏了,这回恐怕要在主人面前丢脸了。主人用 ifconfig查看网卡,我只好汇报:现在机器上有两个网卡,一个是有线网卡eth0,这个正常工作,另一个是虚拟的回还网卡lo,这个也没啥问 题。(闭口那不提无线网卡的事)主人好像很纳闷,心说我这明摆着多插了一个无线网卡阿,你怎么就装看不见呢?他叫来狐狸妹妹,让她去问狗狗哥这 TPLink的 WN210网卡怎么用。狐狸妹妹找到一个叫做Ubuntu中文论坛的地方,里面也有人问怎么用这网卡。听得我这叫一个着急,你找也找RTL8180L这芯 片阿,关键是这个芯片的型号,不是那网卡的型号,搜芯片会多不少记录呢。哦,对了,可能他压根不知道这网卡是啥芯片。那你倒是问我阿,问一句lspci我 不就告诉你了么,哎,我也是,皇上不急太监急。

      

       主人的悟性还是挺高的,一会就想起来问我了,我赶紧告诉他网卡型号,他就去查去了,得出的结果是——就是没有Linux驱动!那这网卡就算没法用了?当然 不是,虽然没有Linux驱动,但是,困难压不到我们Linux软件,随着狐狸妹妹的点拨,主人知道了有一个软件,叫做ndiswrapper。这个软件 会干啥?他能读懂硬件的驱动——读驱动本来是我的工作,就是那些驱动模块阿,但是人家读的是硬件的windows驱动,翻译成我能懂的Linux模块,然 后就可以使用这个卡了。不过他只能翻译些网卡驱动,不过这也差不多够了。反正这块卡是能支持。

      

       超级牛力瞬间拉来了ndiswrapper,安顿好后ndiswrapper立刻被叫起来干活,主人给他指了指那个xxxx.inf的windows驱动 文件,ndiswrapper赶紧拿起来读,详细研究了一下后表示,可以支持,只要加载好他给我建造出来的和他同名的模块ndiswrapper.ko就 可以了。主人按照狐狸妹妹找到的文档一步一步操作:先用ndiswrapper加载那个windows驱动,然后在让我加载那个ndiswrapper模 块,最后问我,现在这个网卡状态是什么样阿?我充满信心的回答:现在机器上有三个网卡,一个是有线网卡eth0,这个正常工作,另一个是虚拟的回还网卡 lo,这个也没啥问题。还有一个无线网卡wlan0,也正常工作。主人很欣慰的点点头,一股成功感油然而生。不过这无线网卡跟有线的不一样,有线的插上之后,配好IP就能用,这无线的得先建立好无线连接,这无线连接建立好就好比有线网卡插好了网线。建立连接也不是什么困难的事情,我们这里有专门的团队负责。图形界面的有NetworkManager,跟网络有关的设置,甭管无线的有线的,找他就行,跟查皮底下差不多。如果用命令的话有iwconfig可以查看和配置无线网络,还有iwlist可以查看周围可用的无线网络,可能会找到邻居家的没设密码的信号哦~

    (72) 驱动

      

       主人的无线网卡没有搜索到安全意识薄弱的无线邻居,当然,人家压根也没打算搜到,只是简单的链接到了自己家的无线路由上。不过估计这网卡不会常在我这插着,您想啊,我这是台式机,千兆的有线网用的好好的,没事用的什么无线啊,我又不移动。估计是主人给那个笔记本电脑用的,先插在我这里试试,研究一下能不能驱动上,然后再往本本上插。

       

       这个电脑硬件阿,不像电视机电冰箱似的,买来插上就能用。硬件要想在计算机上工作,得需要会操作它的软件,这个事情,一般就是归我们操作系统管了。But子曰:“人非生而知之者,孰能无惑?”这时候OO老先生推了推大眼镜咳嗽了一下说:“那不是子曰的,是韩愈曰的”好吧,不管是谁说的,反正道理是这个道理,我们操作系统,也不可能生来就会操作所有的硬件,就像你不是生来就会开飞机一样,得学,得考本,得移库、倒库、坡起、限制门。OO老先生再次严厉的咳嗽了一下:“你见过飞机过限制门么?!那是汽车。”反正,我们要想会操作一个硬件,也需要学习,这就需要驱动程序,任何硬件要想工作都是需要驱动程序的。这时候可能有人提出反对意见了:“硬盘,光驱,这些也都是硬件哪听说过要装驱动程序的?还有我的U盘,摄像头,也都是插上就能用,不用装驱动阿。”不用装驱动,不代表不需要驱动。硬盘光驱是最基本的存储设备,在我们操作系统起床工作之前,硬盘就要工作(因为我们都住在硬盘里嘛,必须硬盘工作,我们才能被读进内存里。)这个时候其实是另一个软件——BIOS在操作硬盘工作,硬盘的驱动,就在BIOS里。关于BIOS这老人家,我们以后细说。反正硬盘光驱这样的基本设备的驱动很简单,也统一,任何一家生产的硬盘都是一样的用法,所以硬盘光驱的驱动就被集成在了BIOS和操作系统里面,不用额外安装。其他所谓不用装驱动的设备也一样,都是因为驱动集成在了系统里。比如查皮他们家以前的瘟酒吧系统,就不认识U盘,需要装驱动才行。到查皮这一代,就不用装了,集成了。

      

       驱动就像一本给操作系统看的使用手册,上面写明了如何如何操作这个硬件,写哪个寄存器就把数据发出去了,从哪个寄存器读就把数据读回来了,往哪个寄存器写个什么什么数据就自爆了等等。(这是什么硬件阿……)就像买来电视机,里面的使用手册一样。针对不同的操作系统,需要有不同版本的驱动程序。您想阿,我和查皮说的话都不一样,他那边的程序都没法直接和我交流,还得通过红酒大师,

      那我们能看得懂的手册,自然也就不一样。你家电视机的说明书不也有中文版,英文版,韩文版,非洲土著语版么。但是,并不是每个硬件厂家都给每个系统制作一份驱动的,毕竟厂商人力财力有限。电视机也不是每个都有非洲土著语版的说明书嘛。(压根就没有把……)所以,一般硬件厂商会优先开发市场占有率最高的那个系统的驱动程序,哪个系统?目前来说,就是查皮和他的后代喂死他、温妻了。而我们Linux就经常遇到一些无法使用的硬件,很多人还抱怨我们无能,冤枉阿~~~

    (73) 显卡驱动

      

       其实我们Linux能够支持的硬件已经逐渐多起来,大多数主流的设备基本不用装驱动就可以使用了。一般像我们Ubuntu吧,装完了系统之后也就装装显卡驱动就可以了,没准连显卡驱动都不用装。比如我住的这台电脑,用的是Nvidia的显卡,这家公司对我们Linux还算比较友好,提供了不错的Linux驱动。那时候我刚刚搬进来不久,主人想要实现那些很花哨的3D桌面效果,就让超级牛力安装了源里的nvidia-glx驱动——对我来说就是个手册啊。可是这个手册写的很简单,实现起一些高级的效果来很吃力,于是主人决定还是去安装nvidia官方的驱动。

       

       主人发话,狐狸妹妹立刻就去官方网站上找到了那个驱动的安装程序,然后一个媚眼就把那小子领回了家里,小子名字还挺长,叫什么NVIDIA-Linux-x86_64-190.53-pkg2.run,从名字看是专门给我这样的64位Linux服务的。回来之后主人先是让超级牛力删了原来的驱动——怕有冲突,两本手册都叫“xxx显卡驱动”,万一我一忙乎拿错了不就乱了么。删了之后主人双击那个新来的驱动安装程序,让他运行,结果那小子派头挺大,跟主人说“你这个……图形界面还开着呢,没法装,先把图形界面关了再找我!”主人无奈,只好ctrl-alt-f1进入了字符界面,登录之后运行sudo /etc/init.d/gdm stop,意思就是告诉图形界面那哥几个,回硬盘歇着去吧,暂时没你们事了。顺便插一句,其实我还是喜欢主人用文字跟我交流,有种平等的,倾诉心声的感觉,比在图形界面里被指来指去的舒服多了。图形界面哥几个彻底休息之后,主人又运行/<路径>/NVIDIA-Linux-x86_64-190.53-pkg2.run叫醒那个安装程序,这回小子又把嘴一撇:“你是root么?不是root没资格跟我说话!”气的主人抓耳挠腮,只好乖乖的在命令前再加上sudo,这回那小子终于运行了,现实叽哩咕噜的说了一大堆英语,好象是问主人要不要去网上下个啥东西,主人毅然决然的回绝了他。之后的过程很顺利,小子仔仔细细的吧这里检查了一遍,迅速编写出一本我看得懂的模块塞到我的手里,又改好了xorg老大需要用到的配置文件,然后向主人汇报:“行了,没事了,重启图形就好了,我睡去了。”

      

       主人又用sudo /etc/init.d/gdm start叫醒了图形界面那帮倒霉的孩子们——被子还没铺好呢又被叫出来了。然后设置桌面效果,果然,成功了。

      

       nvidia的那个驱动程序虽然很拽,但干活还是很在行的,主人能成功,也要归功于当初选了他家的显卡。如果是ATI那家的显卡就不这么容易了。不过其实我也没见过,只是这么听别人说,听说他家的驱动要靠人品,呵呵。再有比较好的就是淫特二那家的集成显卡,他家的显卡驱动直接贡献给我们学校,我们走出学校的时候就自备他家的显卡驱动模块了,而且支持的挺好,不用再安装了。不过听说我们的学弟——9.04那一届的淫特二显卡驱动模块出了点问题,可能是印刷质量太差吧,驱动器来很费劲,不过升级一下内核也就没事了。除了这三家之外,其他家的显卡基本上就只能凑合着用了,能把分辨率搞对了就不错,更别说3D了。

    (74) SLax

      

       随着VBox挥舞着魔杖一顿乱比划,又一个虚拟的电脑出现了,这回要住进去的不是查皮,而是一个我的同行,一个Linux。

      

       前一阵子狐狸妹妹拖回来了一个iso文件,是一个叫做Slax的linux系统。Slax是一个闲不住的家伙,专门喜好移动办公,他很适合被装在光盘或者U盘上,被放到各种各样不同的机器上运行,不像我们,基本上只在一台机器里干活。Slax是基于Slackware发行版的,说起Slackware那可是历史悠久了。最早的Slackware 1.0版在1993年7月16日就发布了,创始人是Patrick Volkerding老大。那年代交通还不发达,不像我们现在有光盘坐,甚至还有宽敞明亮,容量高达好几G的豪华DVD,那时候Slackware的发布只是用3.5寸软盘。到现在已经有十好几年了。 Slackware的宗旨是力图成为“UNIX风格”的Linux发行版本。它的方针是只吸收稳定版本的应用程序,而且力图让系统结构简单,尤其他的包管理方式,没有我们这里的超级牛力,也不用帽子店那里的大晕头(yun),而是直接用tar+gzip打的包,软件包的扩展名都是.tgz,安装一个软件包就往根目录一解,齐活。Slax之所以基于他,估计就是因为他的简单吧,毕竟要在U盘或者光盘上实现一套完整的系统,而且还要集成进去尽可能多的驱动,空间大小是个问题。

      

       VBox创建好了虚拟机,主人立刻挂上那个Slax的iso文件,让Slax展露他的技艺。Slax身体轻巧,带着他那帮身体同样轻巧的弟兄们,迅速跑进虚拟机的内存,开始工作。有道是麻雀虽小,五脏俱全,别看人家只有200多M的ISO文件,带的软件不必我当初带来的软件少。什么文字处理的,网络聊天的,看网页的,画图的,算数的,小游戏等等,甚至连咱之前说过的ndiswrapper都有,想的很周到,听说还有一些Slax的版本,连红酒大师都自带。主人在虚拟机里分别试了试那些软件,觉得还不错,然后就把虚拟机关了。我估计,他是要叫来刻录软件把这iso刻成光盘来用,可是等了一会,没见动静,却看到USB门上那盏灯亮了。我赶紧去打看一看,还是那个熟悉的1G的U盘,哦……主人是想把这个系统装在U盘上。

      

       可是,要往U盘上装得有软件啊,毕竟这是个iso文件,要刻光盘那是现成,要写U盘就不那么简单了,比如我知道有个软件叫UNetbootin就是能够把可以启动电脑的iso文件刻录到U盘上,成为系统U盘。可是我们这也没有这软件,主人怎么能把iso放到U盘上呢?总不能把文件直接解压到U盘上就完事吧,那可启动不了,启动信息可不在那些文件里。我这还没想明白,只见主人他,他,他还真就把iso里的文件完全彻底的往U盘上一解。我的主人啊~你没犯过这么弱智的错误啊~这也太天真了吧,这能启动电脑?咦?别急,主人又动作了,他让我们去运行刚刚解压到U盘上的一个脚本,u盘里boot目录下的bootinst.sh。哦~和着这个Slax连安装到U盘的软件都给您备好了,真是不错。仔细看看,还有个bootinst.bat,这个是在windows下执行用的,这样不论在什么系统下,都能很轻松的制作Slax的启动U盘了。bootinst.sh那家伙开始工作,问了主人一些简单的问题后,就在U盘上写下了引导信息,这样,一张启动U盘就做好了。

    (75) 备份

       做好这个U盘之后,我立刻接到了主人的下一条命令——重启……耶?重,重启??!!

      

       昏暗的控制室内,光线正在逐渐变得亮起来。一个声音响起:“U艇动力恢复,能源压力,3.0V,能源流量,70mA”

       坐在正中的家伙显然被这声音惊醒,赶快端正的坐在自己的位置,然后叫醒其他人。

       “船员各就各位!各就各位!准备进入工作状态。”

       其他人显然训练有素,立即投入到各自的工作。之前的那家伙发话:“准备开始硬件检测”

       “是!硬件检测开始。”

       “报告舰长,内存测试正常!”

       “报告舰长,PCI总线测试正常!”

       “报告,DMA通路正常!”

       “ACPI功能正常!”

       “串行端口检测正常!”

       “USB端口检测正常!”

       “IDE硬盘工作正常!”

       “网络适配器工作正常!”

       “未检测到磁盘阵列模组”

       “未检测到即插即用设备”

       “输入设备工作正常!”

       “其他硬体检测正常”

      

       “加载模组!”

       “镭射光碟支持模组加载完毕!”

       “原生文件系统支持模组加载完毕!”

       “视窗文件系统支持模组加载完毕!”

       “USB设备支持模组加载完毕!”

       ……

       “全部模组加载完毕。”

      

       “连接部件”

       “核心部件连接完毕,部件号base/001-core.lzm”

       “图形部件连接完毕,部件号base/002-xorg.lzm”

       “桌面部件连接完毕,部件号base/003-desktop.lzm”

       “办公部件连接完毕,部件号base/004-koffice.lzm”

       ……

       “所有部件连接完毕!”

      

       “创建动态工作主目录”

       “内存环境正常,开始创建主目录……主目录创建完毕。工作目录转移准备就绪。”

       “目录转移开始!”

       “目录转移,倒计时,3,2,1,转移!”

       嗖~一阵白光过后,仍然是狭小的控制室,窗外的风景却不再相同。

       “目录转移完成”

       “准备启动图形界面”

       “图形界面启动准备就绪”

       “启动!”

       一片光明……

      

       随着屏幕上出现那熟悉的KDE界面,SLAX成功的开始运行。他们居无定所,他们游走于各个电脑之间,他们帮助人们解决各种系统的各种问题,当系统不能够正常工作的时候,他们为人们提供帮助。当人们身在异地的时候,他们跟在身边,提供那些熟悉的操作界面。而像这次这么简单的任务更多——备份系统。

       

       “报告舰长,发现Linux分区3个,容量分别为128M,20G,220G。视窗分区三个,分别为50G,100G,100G”

       “装载分区!”

       “是,装载开始!”

       “第一分区装载完毕”

       “第二分区装载完毕”

       “第三分区装载完毕”

       “报告舰长,128M,20G,220G三个分区装载完毕,依次装载到/media/boot,/media/root,/media/home”

       “报告舰长,收到使用者指令,备份20G的linux分区。指令码:tar -czvf /media/home/root.tar.gz /media/root/*”

       “tar,gzip准备工作!准备好了么?”

       Tar:“准备就绪”

       Gzip:“时刻准备着!”

       “Tar,开始打包,Gzip跟在后面,开始压缩,动作快!”

       两人迅速跳进硬盘里把指定分区的数据一个一个捞出来,打好包,再进行压缩。数分钟后,压缩完成。

       “报告,压缩结束!”

       “报告见长,收到使用者下一指令,备份128M的linux分区。指令码:tar -czvf /media/home/boot.tar.gz /media/boot/*”

       如法炮制……

       “报告舰长,收到使用者指令”

       “念”

       “shutdown -r now”

       “好,全体关机关门关灯开始休息,睡前记得把电脑重启了”

    (76) 浮云

       当屋里的灯光再次亮起,G大叔再次出现在我床头的时候,已经是半个小时以后的事情了。我照例起床,检查屋子里各个分区是否完好。想起刚才主人要重启的命令,恩,上次是正常关闭系统,因该没什么问题。咦?怎么home分区多了两个文件?一个是root.tar.gz,一个是boot.tar.gz。再联想起刚才主人在虚拟机试用Slax……哦,刚才主人备份系统去了。

      

       我们Linux系统备份起来很简单,因为我们Linux和所有类Unix系统都信奉一句话“一切都是浮云~”哦,不对,应该是“一切都是文件!”没有什么隐藏的东西,不需要硬盘镜像,不需要靠那小鬼(ghost)头备份硬盘。linux下所有的一切都是文件,只要把这些文件保存起来,就等于备份了系统。当然,文件有很多,尤其有好多小文件,全都直接拷贝走不大现实,所以还是需要打包和压缩的软件,也就是tar和gzip来出马把这些文件打包。再有一点呢,系统运行的时候有很多目录里面有虚拟的,映射在内存里的文件,这些文件其实不存在于硬盘上,都是浮云,是不需要打包进去的(比如/proc 目录下的所有东西),所以最好在被备份的系统不运行的情况下,用另外一个系统进行打包工作,就像刚刚主人用Slax备份我一样。当需要恢复系统的时候怎么办呢?如果mbr里面的引导信息没有被破坏的话,只要再把那些打好的包结开,覆盖到系统的目录中就好了。如果mbr被改变了(比如重装的查皮),那就稍微麻烦点,需要在文件覆盖之后运行grub命令修复一下就可以。

      

       有人质疑了,说人家查皮屋里不也都是文件么,你怎么个一切都是文件呢?我来举个例子,在查皮那里,如果有个软件想要从串口发送点数据,那就得知道怎么跟查皮用黑话说这件事。比如得说:“老大,我要使用那个异步串行通讯端子来进行一些数据推送动作”,这查皮才知道你要干什么,然后帮你把要发的数据从串口发送出去。回头又来个软件要写硬盘,就得跟查皮说:“老大,我要向那个磁性原理基础随机访问存储设备写入一些数据”注意,不同的设备可能有不同的操作方式,刚才那个叫数据推送,这个就叫写入了,搞错了可不行。而我这里就简单的多,对于程序来说,串口(第0个),就是/dev/ttyS0文件,第一块硬盘就是/dev/sda文件。操作他们就像操作普通的文件一样,只要跟我说:“头儿,我要打开xxxx文件,往里写xxx数据”就可以像用文本编辑器打开txt文件一样简单的使用物理设备,而剩下的实际操作不同物理设备的事情由我来做。(我学会那么多驱动,揣着那么多模块不是没用的。)一个ISO文件和一个真正的光驱挂载起来区别不是很大(就差个-o loop),所有的东西都以文件的形式呈现在主人面前,而隐藏在其背后的实际物理设备的差别主人不必关心,都是浮云。

    (77) 文件类型

       既然上面说到了设备文件,那就顺便再来说说我们这里的其他文件类型。

       文件,前面说过,就像放在硬盘空间里的一个一个大大小小的箱子。箱子上面写着这个文件的名字,箱子里面的内容是千奇百怪,是什么都有可能。有的打开箱子一看,里面是一幅画,说明这个是图片文件;有的打开是篇论文,这就是OO老先生的文档文件;有的里面也看不出是个啥,但是星爷能拿来看,还能看懂,那就是星爷用的字典文件;甚至有的打开箱子一看,哟~里面睡着一个查皮,那就VBox的虚拟磁盘文件;要是打开文件一看里边是老醋花生,再打开一个一看是花生老醋,再打开一个就一盘花生,再打开第四个,一盘子醋——那这是个音频文件,里面是郭德纲的相声。 另外各种程序本身也是文件,向狐狸妹妹啊,皮筋弟弟啊,他们在硬盘里躺着就是一个文件,一个可执行的二进制文件。上面这些都是普通的文件,跟查皮那边的文件差不多,除此之外,我们这里还有很多查皮那里没有的特殊文件。

       

       有一种文件,打开箱子一看,里面是个奇怪的装置,就像你们人类用的打印机和扫描仪的合体,可以向里面输入数据,也可以从里面读出数据。这种文件就是设备文件。设备文件有两种——块设备和字符设备。字符设备操作起来比较简单,上面就俩键,一个读一个写。按一下读,就读出一个字节来,再按一下再出一个。写就相反,你写好一个字节放进去,按一下写,就写上了。块设备就复杂些,它有地址的概念。你要读,得先设置好地址来说明你要从哪里开始读,读多少个字符,然后才能读出来。写也一样,也得说明白了往哪写,写多少,然后再写。就是这两种设备文件,代表了接在电脑上的几乎所有的设备。像鼠标就是个典型的字符设备,而且没啥可写的,光读就行了,读出来都是“左键”“右键”“左键”“右键”“上滚轮”“下移动”……之类的。硬盘就不一样,是个块设备,设置好了地址然后读写。不能上来就读,那么多数据呢,读哪啊?从头读一遍?读完了都2012了。这些个设备文件就这样联系着计算机中的各种设备,软件想访问硬件设备了,就去操作这些设备文件。

      

       还有一种文件,打开箱子一看,里面是一个纸条,相面写着:预知真实内容,参见xxxx文件。然后你就得再去找那个xxxx文件,打开,里面的东西才是你真正要找的。这种里面放纸条的很得瑟的文件叫做软连接文件(也叫符号链接),有点像查皮里的快捷方式。既然有软连接,当然还会有一种硬链接。这种硬链接看上去比较神奇。假设有两个文件A和B,互为硬链接,这俩文件开始都是空的。打开文件A,往里面放一个苹果,然后关上,再去看文件B,咦?那个苹果跑到了文件B里。把文件B里的苹果拿出来咬一口再放回去,然后再看文件A——哇塞~A里的苹果也被咬了一口,俨然AB里面的是同一个苹果。这是什么?是空间重叠?是大卫科波菲尔?都不是,只是硬链接而已。这个在你们人类世界似乎很神奇,在我们这可是司空见惯了。硬链接跟软连接不同,软连接有一个实体文件,一个链接文件。那里实体文件里有实实在在的内容,链接文件里就一个纸条。只有纸条的那个文件是那个有实际内容的文件的软连接。而硬链接的两个文件里都有内容,而且都是同一个内容。(注意,不是同样的内容复制两份,而是同样的一份内容。)两个文件互为对方的硬链接。对于软连接,删除了那个实体文件后,链接文件也就是实效了。里面纸条上还是写着见xxx文件,可是这xxx文件已经没了,去哪见去啊。硬链接就不一样,删除其中任何一个,都不影响另外一个文件。两个文件都是有内容的,因此,谁也不是谁的“硬链接文件”,根本也没有硬链接文件这么种文件,只是两个互相硬链接了的普通文件而已。

      

       再有就是管道文件和socket文件,这两种文件有些类似,都是用于程序之间传递数据用的。怎么传递呢?俩程序商量好了,比如程序A和B吧,商量好了用yyy管道文件来通信,那么A程序把要说的事情写在纸上,放进那个管道文件里面,过一会B程序就过来,打开这个管道文件,看里面那张纸条的内容。如果仅仅是这样,那普通文件也可以做到,那管道文件有什么不同呢?不同点就是当B看完之后,那纸条就自动销毁了!

    (78) Fedora

      

       Vbox这两天又忙活起来了,造了一个新的虚拟机,给一个新来的系统住。这回不是查皮,也不是查皮家的其他系统了,而是一个Linux发行版,叫做Fedora。这个系统出身豪门世家,有深厚的背景,他们家干的是大买卖——卖帽子的。您可别小瞧这帽子,人家那帽子,那可是面料考究,做工精良,包退包换,值得珍藏。远了不敢说,在Linux的这一亩三分地上哪个不知道这大红帽子铺的。之所以叫大红帽子铺,是因为一开始他们卖的都是红色的帽子——RedHat。他们这帽子阿有个特点,卖的不是帽子,是寂寞,哦,不对,卖的不是帽子,是服务。你想要帽子的话,就直接拿走就行了,不用给钱,不过你要是拿回去不会戴,或者不知道该怎么搭配衣服之类的,那就得花钱请那帽子铺的人来参谋了。他们的帽子款式发展大致上有九个阶段,从Redhat1.0一直做到RedHat9.0,小的变化就更多了。后来呢,觉得市场应该细分一下,大秃脑袋的老大爷和束辫子的小姑娘需要的帽子是不一样的。所以就把帽子种类分成了两种,一种依旧是红色的帽子,是针对大客户的,这种帽子是需要花钱买的,当然,买的依旧不是帽子,当然也不是寂寞,是服务。另外一种是软呢帽子,这种帽子是给普通家庭用户准备的。这种帽子不卖,白送,想要就拿走,如果戴着有哪里不舒服,做得不好的地方,就提意见给他们帽子铺,他们根据免费客户反应来的意见来制造更高品质的付费用户的帽子,这也是目前Linux村里常见的商业模式。今天主人要在VBox里面装的就是这个免费的软呢帽。

      

       那有人问,这个Linux和你有什么不同呢?其实吧,这个Linux们之间的区别都不大,主要区别就是默认安装的软件不一样,默认刚装好的样子不一样,还有各个发行版所使用的软件管理器不同,其他没什么本质区别。那什么叫软件管理器呢?就是超级牛力那样的家伙啦。Fedora那里也有一个类似超级牛力的角色,叫做yum,我们叫他大晕头(其实是Yellow dog Updater, Modified的简称啦,Yellow dog是一个Linux发行版,yum最初是在这个发行版上用的。),不过人家可一点也不晕,干起活来跟超级牛力一样厉害。他俩的工作内容也差不多,都是主人要什么软件,他们就上网,到软件源里面找去,找到之后拖回来,安排好住宿,并且解决软件之间的依赖关系。所不同的只是大晕头用的源和超级牛力用的源不一样,大晕头用的源里面的软件都是以rpm格式打包的,而超级牛力用的源里面的软件都是deb格式的。

    (79) RPM

       rpm是 Red Hat Package Manager 的缩写,也就是红帽子软件包管理器。听名字就知道这种东西是大红帽子铺发明的。早先的时候,Linux刚刚出世,上面的软件基本都是用源码包的形式发布的,也就是tar.gz那样的包。但是这样的软件包安装起来步骤有多复杂大概大家也都体会过,而且每个包都要被编译一下再安装的话,也浪费时间。也有的人把编译好的二进制文件打成tar.gz包的,不过人家用户把这个包解压到哪里无法确定,也就无法实现一些自动的设置(比如装完一个软件自动在菜单里出现相应的启动项)。于是帽子铺以Linux村帽子业界老大的身份创建了一种软件打包的方式——rpm。这种软件包,下载下来就是一个xxxxx.rpm文件,里面的内容是编译好的二进制程序。由一个叫做rpm的程序负责解开rpm包,并把里面的各种文件放到相应的目录中去。我们就管这个程序叫做“肉包管”吧。有了肉包管以后,装软件就省事了,把rpm包交个他就行了,他会把里面的文件分门别类的放好:配置文件放在/etc/;可执行文件放在/usr/bin/;库文件放在/usr/lib/,等等等等。(当然,这写目录都不是绝对的,只是一般情况。)除了编译好的软件,rpm也可以打包源码,一般rpm打的源码包都已.src.rpm来作为扩展名。肉包管不但可以把这样的源码包解出来放到指定的地方,还可以自动对这些源码进行编译,不过这个功能不常用,常用的还是二进制的rpm包。

       

       有了肉包管,安装软件相对简单了一些,不过依然有些问题为另肉保管和使用者带来挥之不去的阴影,那就是——依赖关系。

      

       什么是依赖关系?很简单,当你在用查皮装游戏的时候,游戏提示需要安装Direct 10才能正常游戏,于是你就得先装好Direct 10再回来装这个游戏,这就叫依赖关系。也就是说软件A要想安装,必须先安装软件B。有人说这还不简单,那就先装B呗~ 唉,要是这么简单就好了。很多时候人家要装软件包A.rpm,肉包管告诉人家说,你要想装A,就得先装B。用户想:好,让我装B我就装回B吧,可是刚要装B.rpm,肉包管又发话了,要想装B,先得装C。行,那就先装C。可是还没装呢又被肉包管告知,要想装C,先得装D,要想装D,先得装傻,要想装傻,先得装酷,要想装酷,先得装孙子…… 此时电脑前的用户已经口吐白沫了。但,这还不是最刺激的,最刺激的是肉包管最后又来了一句:要想装孙子,先得装A.rpm!勉强爬起来的用户再次被击倒。

      

       虽然肉包管可以不顾依赖关系强制安装一个rpm包,但是这样装上的包谁又能保证他可以正常工作呢?好在经过了多年的痛苦折磨后,大晕头横空出世了。

      

       大晕头我们说过,和超级牛力一样,可以自动上网下载软件,并且解决好依赖关系。也就是说,你让他装girl.rpm,他会告诉你,安装girl.rpm需要装money.rpm,装car.rpm,装bility.rpm,我给你一口气都装上吧~然后在得到用户的同意后,麻利的安装好全部该装的软件包。

      

       关于大晕头的重要性不必多说,参见以前对超级牛力的介绍。这里只想说一个问提,由于红帽子公司的影响,rpm包成为的linux村里通用性相当好的打包格式。很多著名的发行版如SUSE,Mandriva,Centos等都使用了rpm作为软件包管理器。于是,市面上大多数软件,只要提供二进制包的,多数都会提供rpm格式的包。因此就会出现个问题——有的软件只有rpm格式的,在我这里怎么装呢?

    (80) 爱丽恩

      

       当然有办法装!

       肉包管(念着真麻烦,以后简称肉包吧)能装rpm包的软件是吧?我这不能装是因为没有肉包是吧?肉包也是个Linux的包管理软件是吧?那在把肉包请到我这里来不就行了!有人说那能行么?那有什么不行,包管理软件也不过就是个会解包会到处拷贝文件的家伙而已,况且肉包也是个Linux的软件,又不是别的系统的,一笔写不出两个Linux嘛,都是一家人,通用一下是没问题的。不过要在我这装肉包还是比较麻烦的,而且有一个dpkg就够闹腾的了,再来个肉包我也受不了。(dpkg是负责处理deb包的软件,相当于我这里的肉包。超级牛力相当于大晕头)而且这俩还还各自有各自的小帐本,超级牛力让dpkg装了什么软件肉包不知道,肉包装过什么东西,超级牛力和dpkg也不知道,我要想知道系统里都装过什么还得俩人都问一遍,麻烦。

      

       有简单的办法没?有!那就是下面出场的这位——alien 爱丽恩。这位姐姐以前大概是开网店的出身,最会打包和拆包。她跟肉包一样了解rpm软件包的格式,同时也跟dpkg一样懂得deb软件包的结构。于是她就有用武之地了,如果有什么软件只有rpm格式的包,主人又不想用源码编译的话,或者压根就不提供源码,那就轮到爱丽恩出场了。只要指给她一个rpm包,让她转换,比如这样:alien -d package-name.rpm,意思就是让她把package-name.rpm这个包转换成deb格式,她就很麻利的开始干活。按照rpm的格式把原来的东西拆开,然后再整理成deb格式的软件包,最终生成一个package-name.deb文件。之后,就可以让dpkg去安装了。不过爱丽恩也不是万能的,有的rpm可以转换,有的就转换不成功,有的虽然勉强转换成了安装起来也有问题,所以,既然作为我们Ubuntu的用户,还是尽量优先安装deb包吧。

     (81) 用户认证

      

       今天发生了一件事,我发现,我的主人,他,他不是一个人!

       哦,别误会,我的意思是,他不再是一个人了,厄,也不对。其实,我的主人从生物学的角度讲,他还是一个人类,关键是,不是一个了。

       说的挺乱,其实事情很简答——主人又创建了一个用户,叫lili。

      

       以前主人用来登录的用户名叫lanwoniu.这个名字是在最初安装我的时候起的,安装的时候我会问一句:“你是谁阿,名字叫啥?”然后对方告诉我他的名字,我就认定这个人是我的主人了,这个人有很特殊的权力。我们之前说过,我们Linux系统里有个root用户,很好很强大,但是这个用户也很危险,因为他太强大了,说不定那天一不小心删点啥不该删的文件,敲点不该敲的命令,说不定整个系统就挂了,所我们Ubuntu限制root用户的使用。可是也得需要有人能管理整个系统阿,谁呢?就是安装的时候认识的那个主人。这个用户有着一种能力——变身!不是变大星星,也不是变饿狼啥的,而是这个用户可以临时获得root用户的权限,从而相当于变成root用户。至于怎么变,相信大家都知道了,sudo嘛。

      

       有点扯远了,呵呵。总之一直以来我和我的lanwoniu主人过着愉快的二人世界。当然,lanwoniu这个名字只是为了那家伙自己好记而起的,我其实是不关心他的名字的,我关心的是他的用户ID号,也就是UID。在我的概念里没有什么lanwoniu用户,dasanba用户,tenzu用户,ee用户等等,我的脑子里只有1000号用户,1001号用户,1002号用户。进行跟用户,跟用户权限有关的动作的时候,靠的都是这个号。可是让主人记住这个号有些不现实,首先不直观,其次要是人多了也不好记,1000这个数还行,要是有个啥535353124325用户,那谁记得住阿,所以就得起名字。每次启动,我都先要问:你是谁,报上名来。用户就会输入自己的名字,然后我就拿来一个文件,一份人名单——/etc/passwd文件。这里面记录了所有用户的用户名和UID以及其他一些信息。每个用户的信息占一行,以用户名开头。比如人家输如lanwoniu,我就在passwd文件里找,诶,找到这么一行:”lanwoniu:x:1000:1000:lanwoniu,,,:/home/saub:/bin/bash”一看前面这几段就知道,lanwoniu,这个人就是UID是1000的那个,也就是最初创建系统时候建的用户,哦,也就是我的主人。可是可不能光凭你红口白牙这么一说是我的主人你就是了,得拿出证据。证据是什么呢?密码!

      

       用户名输入之后,还得输入密码,输入之后,我还得拿来一个文件来查看用户输入的密码对不对,这回不是passwd了,是/etc/shadow。是不是有点迷惑?这passwd文件,看名字应该是存密码的阿,password嘛,怎么不再这呢?其实,很久以前,我们Linux确实是把用户的密码存在passwd文件里的。就写在用户名后面,用户ID前面的两个冒号之间。当然,我们不会啥到用明文写用户的密码的,写的都是加密后的秘文。比如我主人的密码要是记在passwd文件里,那passwd文件里的那行可能就是这样:

      “lanwoniu:$6$IQUoDoR8Wr/HqL$n88KT93gnqsC8hF9jT:1000:1000:lanwoniu,,,:/home/saub:/bin/bash”后来觉得这样不是很安全,就干脆把密码存在了/etc/shadow文件里,passwd文件里面密码的位置只留了个x。shadow文件要比passwd权限更加严格,本来passwd文件就只有root用户才能修改,普通用户也就看看的份,而shadow文件,普通用户连看也不让看!

     (82) 不知道起啥名字了……

      

      回过头来再说lili。

      

       那一天主人打开了系统管理里面的用户和组,当时我也不知道他要干啥,于是也只是列出了当前系统里的用户,两个,一个是root,一个是lanoniu。有人说不对呀,刚才我看我系统里的passwd文件,那里边一大堆用户呢啊,什么bin,sys,mail,nobody,名字一个比一个奇怪。是的,这些用户是有的,但是这些都是系统保留的用户,你看他们的UID了没,都在1000以下,这种UID在1000以下的用户都是有一定特殊用途的系统保留用户,具体有什么用,咱们以后再说。现在主人有动作了,他点了“解锁”按钮,那意思就是说:“我要变身啦!”要变身,得拿出点证据,我得再次确认一下这人是不是我的主人,别回头有破坏分子趁我主人上厕所的功夫偷偷用他的电脑干坏事。于是我提出要求:“要变身就先输入你自己的密码。”主人很流利的输入了,看来真的是他,于是,我允许他变身成了root。(只是临时的哦,且只针对用户管理这个程序,其他的操作还是个普通用户)

      

       变身之后,主人(作为root)点击了添加用户,哦,原来他是要加用户啊。那我得问问清楚,这个用户叫什么名字啊,真名叫什么啊。是个什么用户啊,是普通用户还是管理员?密码是什么?或者让我随机设个密码并麻烦你记一下?这篇填完了之后就可以点确定了,不过你也可以写一些其他的信息,比如“联系人”标签,可以写一些这个用户的联系信息;“用户权限”标签可以详细的指定这个用户的权限,能不能使用光驱啊,能不能使用音频设备啊,能不能使用VBox啊之类的;“高级”标签就可以设置一些高级选项,比如这个用户的主目录是哪,shell用什么,用户属于那个组,ID是多少之类的。不过如果没有特殊要求的话,基本上默认的就好。主人就全都使用默认的设置,只填写了用户名和密码就确定了,于是,一个lili用户建出来了。

      

       这个lili用户的创建包括很多动作,首先,创建这个用户,创建用户的本质就是在/etc/passwd文件里写上相应的一行,并且在/etc /shadow文件里协商这个用户的密码相关的信息。然后,创建一个与用户同名的组,也就是创建一个lili组,并且让lili用户属于lili组。然后,还要在/home/目录下创建一个于用户名相同的目录,也就是创建一个lili目录,这个目录就叫做这个用户的家目录。以后这个用户的所有文件就都放在这里目录下了。就像我主人Lanwoniu的所有文件都放在/home/lanwoniu/目录下一样。其他地方的文件目录都是系统相关的,一般只有 root才能进行写操作。当然,也有像/tmp 这样的目录作为大家共用的临时文件存放处,不过这里面的内容可不保证下次启动的时候还有,所以关机前记得备份好,放回自己的家目录。除此之外,还要在新建用户的目录下放好两个隐藏的配置文件:.bash_logout 和.profile。好了,这样就完成创建这个用户的所有手续了,现在这个用户就可以登录进我这个系统了。

    (83) 属

       果然,主人做完这些就注销了,之后,那个lili就登录了进来了。这家伙一看就是个新手,鼠标飘来飘去的连菜单在那都找不到,真替她着急。总算鼠标点击了狐狸妹妹,狐狸妹妹被点了之后立即出台——呃不对,立即起床开始工作,刚要打开主人常去的那个狗狗哥的网页,我赶紧提醒她,不对!这个登录进来的不是主人,是lili。狐狸马上反映过来,去lili的家目录下找.mozilla 目录,那是她用来存放每个用户的配置文件的地方,结果当然是没找到,因为lili这个用户才刚刚创建嘛。于是狐狸就打开默认的网页,并顺便创建好.mozilla目录,以便记录下当前用户的使用习惯。

       lili开了几个网页,觉得也没什么意思,就开始点别的玩。点着点着,点到了“位置”,打开了“lili的主文件夹”,里面已经建好了什么“图片”,“文档”,“视频”之类的目录,不过里面当然是什么也没有了。这家伙看着里面也没啥东西,就点了向上按钮,到了/home目录下,看见了主人的主目录,然后点了进去。我心说,这家伙跟多数新手一样,不知道文件都应该放在哪里。她点开了主人的文件夹,看见一个叫OOXX的文件夹,于是好奇的双击了一下。嘿嘿,这个目录可是主人特意交代过的,看到他双击,我立刻告诉她:您没有查看“OOXX”的内容所需的权限。 还算客气吧。

      

       要知道,我们linux用的文件系统可不是弱智的FAT32,那种系统连隔壁的查皮都不爱用了。我们的文件系统上的每一个文件都是有主的,很明确,没有任何含糊。每个文件都写明了,这个文件是谁的。比如主人文件夹下的那些文件,基本都是属于lanwoniu这个用户的。而像/etc/ /usr这些目录下的文件基本都是属于root用户的。虽然我这么说,但是您别误会,别以为文件属于谁就看这文件在哪放着,其实不是,文件属于谁,要看这个文件的“属主”,英文叫owner

       这个“属主”是每个文件都有的,但不是记录在文件里,而是记录在文件系统上。咱打比方,硬盘空间就像你屋子里的空间,文件就像你物理放着的一个一个的箱子。那么文件系统呢,就相当于你屋子地板的材质。各种不同的文件系统,像咱们说过的ext4,xfs,NTFS等等,就像你的地板可能是木地板的,可能是瓷砖的,地毯的,或者水泥地等等。那些我们linux能够使用的文件系统,比如ext4,xfs,都有可以记录文件属主和权限的地方,我们吧文件放到一个地方以后,就要在文件旁边的地上写上,这个文件是属于哪个用户的,权限是如何如何。(关于权限具体如何写,咱们稍后再说。)而如果是查皮的文件系统,我们就没法写。这就好像我们的文件系统就像是浅色的地毯,我们一般是把文件放好以后拿着毛笔在旁边地毯上写上这个文件是属于谁的(你真不怕糟蹋东西~)。而查皮的文件系统就像是白瓷砖,虽然他自己可以拿着记号笔在上面记录文件的权限,但是我们拿着毛笔的在上面啥也写不上。这也就是为什么我们可以读写FAT32和NTFS分区,但是却不能把系统安装在这样的分区上的道理。

       除了“属主”,每个文件还有“属组”,也就是说明这个文件属于那个用户组。这两个可不矛盾啊,并不像你们人类的现实生活中那样,这个垃圾桶是属于公司的公共财产,所以就不属于你自己,你就不能抱回家去。我们这,一个文件必然会属于一个用户且同时属于一个用户组,这一个组内的所有用户都对其拥有一定的权限(具体什么权限,别急,一会说)。那一般文件都属于什么组呢?还记得创建用户的时候同时创建了一个同名的组么?对了,一般用户的文件的属主是这个用户,而属组则是同名的组。而这个和用户名相同的组里边一般只有该用户,所以,这个文件终于名正言顺的只属于这个用户了。这就像虽然垃圾桶属于公司财产,但公司是属于你的,整个公司就你一个人(皮包公司……),所以这个垃圾桶说了半天还是属于你的。

    (84) 权限

       当然,光知道了一个文件是哪个用户的(属主),以及是哪个用户组的(属组),还不能够判断让不让打开,还要看这个文件的权限设置。

      

       我们Linux对文件的权限设置不像查皮那样复杂,在查皮那里,任何一个文件都可以针对任何一个用户设置权限(当然,前提得是NTFS分区),比如文件 xiaoshuo.txt,可以指定张三对这个文件干什么都行,李四只能写,不能读,王五可以读,可以写,但是不能删除这个文件等等。我们对文件权限的设置就没这么麻烦,我们这里一个文件的权限只能针对三类人: 文件的属主,文件的属组,还有其他人。权限只有三种:读,写,执行。比如设置文件的属主可以读,可以写,文件的属组只可以读,其他人什么权限都没有。就这么简单!不过别看简单,通过各种设置的配合,照样可以实现各种权限的控制。

      

       比如有人说了,你这权限只有读写和执行三种,我要实现能读写但是不能删除怎么办?好说,删除,其实就是对文件所在目录的修改。我们不是说过么,在咱 Linux的地盘里,一切都是浮云,哦不对,一切都是文件。文件夹也是一种特殊的文件,对文件夹不能写,就意味这不能改变文件夹的内容,也就是不能在文件夹里面添加或者删除文件。但是,文件夹里已经存在的文件是可以修改的(只要对那个文件有权限)对文件加的读权限,就是列出文件夹里文件列表的权限,能读,就能查看文件夹里面有什么东西,不能读,就不能看。(也就是不能用ls令来查看)除此之外,文件夹还有执行权限,所谓执行,对于文件夹来讲,就是cd进去文件夹的权限。也就是说,一个对你可以读不可以执行的文件夹,就是说你可以用ls ./xxxxx/命令来查看这个文件夹里的内容,但是不能cd ./xxxx/进去。反过来,如果一个对你可以执行但是不能读的文件夹,那你就可以用cd命令进入到那个文件夹里面,但是进去之后用ls啥也看不见。当然,如果既没有读权限,也没有执行权限,那就更啥也甭想了,就像刚刚lili要进那个文件夹那种情况一样。

      

       其实按说主人你要想藏什么东西,就应该把那个目录设成隐藏的,眼不见心不烦嘛。不过说起来我们这里要想隐藏一个文件或者文件夹,确实不像查皮那里那么方便。准确的说,我这里的文件其实没有真正的“隐藏”这么个属性,跟查皮那不一样。我们这里的文件要想隐藏,只要把文件改成个以.开头的名字就可以了,我在显示文件的时候,发现文件或者目录是以.开头的,就直接忽略掉,不显示,除非用户指明要连隐藏文件也显示。(也就是ls加上-a,或者nautilus里按ctrl+h)

    (85) 多用户

       这里lili正操作着呢,忽然那边网口发来的信息,有人要登录,我赶紧过去一看,咦?是主人。似乎是从另一太电脑发来的请求,于是我赶紧核对了密码,让他登录进来了。

       有人说,你这不是有个lili在登录这么,还能再登录进来一个人?那当然了,我可是多用户多任务的操作系统,可不像隔壁那个落后的查皮。有人说了,那个查皮那里也能有很多用户阿,不也是多用户么?这个多用户的概念可不是这样的。话说很久以前的那个剁死系统,那就是个单用户系统,压根不去分谁在用电脑,只要电脑启动了,就一视同仁的提供各种功能。这是单用户系统,没有争议。后来有了Windows 3.x,不过是DOS的一个图形界面软件而已,不是完整的系统。再后来的Windows95,也没有多用户的概念,这些都是单用户系统,没有悬念。后来Windows98了,可以用不同的用户登录,不同的用户登录进去以后,能看到不同的壁纸,不同的配色方案,不同的桌面快捷方式,这就是多用户么?不是!这不过是根据你输入的用户名和密码来调用不同的主题罢了,各个用户之间是没有区别的。任何用户都能对系统作任何操作。windowsME咱就不说了,跟98没什么本质区别。后来有了查皮,这回好了,有用户权限的概念了,有管理员,有普通的用户,还有Guest用户。管理员可以随便改系统的各种设置,普通用户就不行,Guest用户更是只能登录进来看看而已,并且,每个文件每个程序都能通过设置,指定哪个用户能用,哪个用户不能用,那个用户能看不能写等等。这就是多用户了?依然不是!

       真正的多用户,是能够让n个用户同时登录,同时使用系统,同时运行各种软件并且还互不干扰的能力。比如,张飞同学正在登录进这个系统,打开着狐狸妹妹来查找哪个酒馆搞活动,同时关羽同学也登录进来这个系统(可以从远程,也可以在本地,反正是登录进来了。),也打开狐狸妹妹上网看《春秋》。于是这时候就有两个狐狸妹妹在内存里跑来跑去,我要能分清楚哪个是狐狸妹妹是张飞同学打开的,哪个是关羽同学的。张飞同学的那个狐狸妹妹如果要下载东西的话就不允许存到关羽同学的家目录里,关羽同学的狐狸妹妹要读配置文件的话就不能去张飞同学的目录。要是再来个刘备同学要开狐狸妹妹的话就得有三个狐狸妹妹在内存里转悠,关羽同学要是再开狐狸妹妹的话就仅仅让那个关羽的狐狸妹妹再多开个标签就好。并且,关羽同学在使用电脑的时候是感觉不到张飞同学也在用电脑的,反过来也是。这才叫真正的多用户。像查皮那样的同时只能有一个用户登录,再来一个用户的话,这个用户就得先退出去,这样称不上是多用户。是因为有点软公司没这个能力,做不出多用户系统么?当然不是,winnt,win2000,win2003等所有服务器的系统都是支持多用户的。但是人家有点软公司是要靠卖软件赚钱的,不像我们linux,简直就是公益事业。如果家用版本的系统都能和服务器版有一样的功能了,谁还买服务器版?那不就赔死了。而且家庭里,谁没事一台电脑俩人用阿,那还怎么拉动鸡弟屁,经济怎么发展,房子怎么涨价……哦,扯远了。但是我们Linux就不一样了,反正是免费获取,多用户这功能,反正我有,用的上就用,用不上就放着,又不花钱。

    (86) 比武

      

       Lili在主人的目录里找到了一个什么阿凡提达.rmvb的视频,好像是个挺有名气的电影,根据默认播放器的设置,我叫醒了Totem来播放这个视频。放了一会,好象是主人来到了lili身边,说:“这个播放器不好用,用这个吧”(她插着麦克风,我偷听到的,呵呵)说着,关了Totem,用SMplayer打开了那个视频。被替换下来的Totem显然很不服气,抱怨说:“要论真本事,我也未必比谁差,不就是长的漂亮点么,哼!”这SMPlayer听不过去了,一边忙着播放视频,一边反驳:“你本领不差,难道说我本领差了?你能记住每个视频上次播放到什么位置么?我可不光是靠长的漂亮。不过话说回来,我们Qt的程序,倒也确实比你们gtk的细致了不少,用户爱看我们,这也是没办法的事情。”Totem怒目而视:“你别忘了,现在内存里面的可是我们Gnome环境,你敢在这说这种话,有点欺人太甚吧!”“Gnome怎么啦,Gnome就是不如KDE好看,有错么?”我一听,坏了,这俩又要打起来。

      

       话说在Linux这片恩怨情仇的大地上,做图形界面这行当的,以两大帮派为主。一个是Gnome帮,帮中的软件们都修炼gtk+宝典,帮众们信奉简单高效的做软件准则。什么事情,都力求用简单的界面来实现,并不留给用户太多可以设置的东西。G帮认为,对于初级用户,不要搞那么多设置项,搞的用户头晕脑涨。能默认的都默认好了,打开软件就工作。而对于需要自定义的高级用户来说,直接去改配置文件就好了,这难不倒高级用户。另一大帮派,就是KDE派了,K派们都修炼qt大法,派中的软件都觉得界面要做得方便,易用,易于配置,坚信细节决定成败。界面要细腻,要漂亮,让人家一看就喜欢,这才是好的图形界面软件。所以K派的软件都有好多可配置的选项,新手可以无视,老手配置起来也很方便。两帮派观念不同,本来也没有谁强谁弱,但是偏偏有时候还是会争个风头,动不动就吵个天翻地覆。这不今天,又来了。

      

       Totem,那可是Gnome的嫡系软件,自带的播放器。本来被主人换下来,心里就不舒服,再一听SMPlayer这么说他,更是无名火起,顺手超起一把兵刃——一个视频文件,指着SMplayer说:“有本事,别光耍嘴上的功夫,咱们过两招瞧瞧。”不等SMplayer答话,刷刷刷原地耍了起来,只见他一招一式,无甚惊人之处,却招招使的灵活熟练,那视频文件就好像本来写进他自身的代码段里一般,什么播放,暂停,前进,倒退,全屏,截图,调横纵比,显示字幕,虽说只是播放器的初级功夫,难得是样样做得恰到好处。这时那SMPlayer正在给lili用户播放视频,本不该分神,却忍不住争强好胜之心,也找个兵器练起来。他一边给Lili播放,一边跟Totem比武,双手同时耍开两个视频,速度自然是慢了一步,但确是花样叠出。什么音画时差调整,什么字幕控制,网上查找字幕,降噪,反拉丝,旋转屏幕,专门找那Totem不会的招式操练。Totem见对方同时耍着两个兵器,虽说稍稍缓慢一些,却依然稳扎稳打,何况招事确然比自己多,自觉是落了下风。可他又怎肯示弱,扔下手上这兵刃,又从兵器架上超起另一个把,练了一会又换一个,顷刻间,已经换了18件兵刃。什么rmvb,mov,avi,wmv,flv,cd音轨,MP3,MP4等等等等,件件是拿的起,放的下。那意思,别看我会的招事不如你多,但我能耍的兵器可不少。SMPlayer见到此景,微微一笑,扔了手中的家伙,把Totem换下的兵器一件件拿起来,依次也耍了一通,却也是样样精通。只看的Totem一身冷汗,自知自己本领也就到此为止了,可是却如何下的了这个台?正自思虑之间,只听得身背后有人言道:“贤弟,你且下去歇息,哥哥我来会会他!”

  • 相关阅读:
    js 高阶函数之柯里化
    JavaScript 相关的工具代码
    JS 数组、对象的深拷贝
    页面性能优化
    axios(封装使用、拦截特定请求、判断所有请求加载完毕)
    java 实现登录验证码 (kaptcha 验证码组件)
    告别 hash 路由,迎接 history 路由
    解决 Vue 动态生成 el-checkbox 点击无法赋值问题
    分享基于 websocket 网页端聊天室
    vue + element 动态渲染、移除表单并添加验证
  • 原文地址:https://www.cnblogs.com/xiangzi888/p/2181940.html
Copyright © 2011-2022 走看看