Linux江湖:Just for 折腾
我在博客园开博已经有七年又十个月了。不幸的是,我的博客里一篇东西都没有。我七年又十个月前选择博客园的时候,博客园还不是像现在这样的大杂烩。那时,博客园的内容主要是.net方向的,同时,博客园还有两个分站,一个是www.cppblog.com,一个是www.blogjava.net,分别让用户发布C++和Java方面的文章和随笔。现在,www.cnblogs.com这个主站俨然有一统江湖之势,我在另外两个分站上的博客访客寥寥。So,我又把这个闲置了快八年的博客启用了。
我是非常喜欢博客园的,这么多年一直都没有在别的博客站点上写任何东西。当初选择博客园,是因为它的编辑器。在博客园里写文章,贴代码时非常漂亮,是一个真真正正面向程序员的博客。现在,我对博客园的喜爱又增加了一个理由,那就是它对数学公式的支持。
刚开博时,我也写了几篇.net方面的随笔,但是后来觉得不过瘾就都删了,然后这个博客就一直闲置至今。倒是在C++和Java的分站上发表了一点东西,有兴趣的朋友不妨移步一观。现在重启博客,当然是因为找到了让自己觉得过瘾的东西。从这篇博文的标题应该可以看出来,我是要写一系列关于Linux的东西了。只是不知道我觉得过瘾的东西,别人是否会和我有同感。那就看我目前77304的排名以什么样的速度上升吧。
Linus说“Just for fun”,而我要说“Just for 折腾”。想知道我是怎样折腾Linux的,请看下面这个截图:
从这个截图可以看出,我为了“折腾”Linux系统,在我的电脑上安装的5个不同的发行版。它们分别是Ubuntu 14.04桌面版、CentOS 5.10、CentOS 6.5、Fedora 20和一个Ubuntu 14.04 Server版。在以上所有系统中,只有Ubuntu 14.04桌面版和Fedora 20开启了GUI,其它的几个系统都使用字符界面。上面的截图就是我在Ubuntu 14.04桌面版中,使用ssh远程连接到另外四个系统时的情形。
关于字符界面和图形界面
多年前,我使用Linux系统是偏爱字符界面的。装B神器啊,不管是别人看起来还是自己看起来,都显得特别的高大上。当然,字符界面用起来那也是相当舒服的,不过只是曾经。为什么这么说呢,那是因为在14寸或17寸,分辨率限于1024*768的时代,使用字符界面,字体不大不小,也没有刺眼的强光,眼睛看着非常舒服。可是,自从液晶屏、高分屏时代来临之后,这种舒服感就一去不复返了。原因何在?字太小。比如在我这个21.5寸1920*1080的液晶显示器上,使用纯字符界面根本没法看,即使开启FrameBuffer也没办法把字体变漂亮。在我的显示器上,必须使用15pt到16pt的Dejavu Sans Mono字体,眼睛看着才舒服。现在在网络上,仍然有很多人问怎么把Linux设置成启动后自动进入字符界面这样的问题,我很想告诉他们:拉倒吧,还是使用图形界面靠谱。对于确实没有图形界面的服务器系统,还是老老实实使用ssh远程连接吧。
为什么要装这么多不同的发行版
都是Linux,为什么要装这么多的发行版呢?那是因为系统和系统之间是不一样的。不同流派的发行版不一样,同样流派的发行版,老系统和新系统也不一样。还是以上面提到的那个经典问题“怎么把Linux设置成启动后自动进入字符界面”为例。对于这个问题,教科书式的回答是:将/etc/inittab文件中的启动级别修改为3。但是,我可以很负责任地说:教科书过时了。
我最早是从Red Hat Linux 9开始接触Linux的,那时,天天抱着一个Red Hat Linux宝典啃。很显然,这本书现在肯定是严重过时了,因为Red Hat后来就开始做Enterprise Linux,每两年一个版本,现在已经是Enterprise Linux 6,马上就要出7了。在我安装的这些系统中,CentOS等同于Red Hat,Fedora是Red Hat新技术的试验场,所以他们是一个流派的,Fedora 20比CentOS 5、CentOS 6新,Ubuntu则是另外一个流派,每半年出一个新版本,我用的是目前的最新版。
我想,我们中的很多人学习Linux都是从Red Hat开始的吧。就像我家里总有那么几本经典教材,如下图(我书柜一角的照片):
对于前面提到的那个经典问题,教科书式的回答仅适用于CentOS 5,其它的系统则各有各的方法。我将在后面讲述方法论的时候详细说明。
折腾Linux系统的方法论
要想将Linux折腾透彻,光靠基本教材是远远不够的,还得掌握适当的方法。我的方法论如下:
1.在使用一个命令的时候,最好要知道它属于哪个软件包;
2.会查找和安装软件包,安装软件包后,要能够找出文件都安装到哪里了;
3.要会阅读软件的文档;
4.实在不行了,那就看源代码吧。
使用我的方法论还是要有一定的Linux基础(比如如何进行用户管理、文件管理等,以及了解Linux究竟是个什么样的系统这样的基本哲学问题),所以教科书还是很有必要读那么几本。过了基础阶段,折腾Linux其实就是折腾Linux系统下的各种软件,这时候,我的方法论的重要性就显现出来了。
举例说明
还是以前面提到的经典问题为例,究竟怎么样才能让Linux系统启动后自动进入字符界面呢?按我的方法论,我们还是得从软件分析起。Linux系统的内核加载完毕后,第一个执行的进程是init,是进入字符界面还是进入图形界面,当然是init说了算。不同的系统,启动的第1个进程都叫init,可此init等于彼init吗?所以,1.我们要找到这个init属于哪个软件包;2.找到这个软件包的文件都安装在文件系统的哪些位置,这个软件包还包含哪些程序,包含哪些文档;3.阅读这个软件包的文档(当然,首先利用搜索引擎对该软件包做一些功课是必须的);4.实在不行就阅读源代码吧。
在Red Hat流派的系统(CentOS、Fedora)中,软件的包管理器是RPM。先看CentOS 5.10,首先,使用which init命令,可以查出init的完整路径为/sbin/init;然后使用rpm -qf /sbin/init命令,可以查出init程序所在的软件包为SysVinit;最后,使用rpm -ql SysVinit命令,就可以看到这个软件包里面还有哪些程序、哪些文档已经它们分别位于文件系统的什么地方了,如下图:
而Ubuntu属于另外一个流派。它的包管理器为dpkg。在Ubuntu中,首先,使用which init命令,可以查出init的完整路径为/sbin/init;然后使用sudo dpkg -S /sbin/init命令,可以查出init程序所在的软件包为upstart;最后,使用sudo dpkg -L upstart命令,就可以看到这个软件包里面还有哪些程序、哪些文档已经它们分别位于文件系统的什么地方了,如下图:
用同样的方法研究一下CentOS 6.5,发现其init程序也是属于upstart软件包,如下图:
究竟是什么样的优势使得upstart软件包取代了传统的SysVinit软件包呢?很显然,有了以上信息,我们Google一下又有何难。还会有更先进的软件包取代upstart吗?让我们看看Fedora 20用的什么,如下图:
原来Fedora 20用的是systemd。使用cat /etc/inittab命令可以显示inittab文件里面的内容,从其提示可以看出Runlevel的概念早已无影无踪。由此可见,inittab、RunLevel都不是Linux本身的哲学,只是使用了不同的软件而已。
使用Ubuntu、CentOS、Fedora等Linux发行版有一个很省心的地方,那就是它们都具有官方的软件包仓库,只需要一个命令,就可以从仓库中查找、安装相应的软件包。Ubuntu系统使用的是apt-get或aptitude,Red Hat流派的系统使用的是yum。如下图,在Ubuntu中使用aptitude查找软件包:
在CentOS 5中使用yum查找软件包:
怎么查看软件的文档
Linux就是一座宝藏,其中有汗牛充栋的精心编写的文档,一辈子都学不完。要发掘这座宝藏,有两把钥匙必不可少,它们就是man和info。比如,想学习bash编程,可以尝试输入man bash来查看bash的文档,如下图:
而对于GNU出品的软件,往往都提供info格式的文档,可以通过info命令阅读。例如,想了解Grub怎么安装和配置,可以输入info grub查看其文档,如下图:
需要提一下,在Ubuntu中,很多软件的文档是单独打包的,可以通过aptitude search命令搜索,通过aptitude install命令安装相应的文档包。有些软件的文档可能不是man格式或info格式,而是html格式或pdf格式,这时,可以通过前面提到的方法找到这些文件都安装在文件系统的什么地方,然后使用相应的阅读器打开阅读。
阅读源代码
通过查找软件包、无所不能的搜索引擎和精心编写的文档,我们基本上可以解决Linux系统下绝大部分的问题。只有绝少数情况下,可能需要阅读源代码。
在Ubuntu系统下,可以通过sudo apt-get source命令获取某一个包的源代码。比如要想学习getty是怎么写的,想看它的代码,使用如下图命令:
在Ubuntu中,Linux内核的源代码是特例,它单独打包。可以使用如下命令搜索内核的源代码:
而在CentOS 5.10中,所有的源代码包都是在其二进制包的名称后面加上-devel后缀,Linux内核也不例外,如下图,搜索Linux内核的源代码:
源代码下载和安装后,如果仅仅只是阅读,使用VIM足以。在“Linux江湖”的后续系列中,我肯定会有一篇如何折腾VIM的博文。这里就不继续啰嗦了。
总结:
经常使用的命令:
Ubuntu系统:
which
dpkg -S
dpkg -L
aptitude search
aptitude install
apt-get source
man
info
CentOS、Fedora系统:
which
rpm -qf
rpm -ql
yum list
yum install
man
info
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。