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 远程连接吧。

  在图形界面下,使用 gnome-terminal 依然可以模拟全字符界面,只要按一个 F11 键全屏即可。甚至可以设置半透明背景,看起来更拉风。如下图:

  Fedora 20 的图形界面也不错,如下图,在图形界面下使用 Vim 和 GVim 都很清爽:

为什么要装这么多不同的发行版

  都是 Linux,为什么要装这么多的发行版呢?那是因为系统和系统之间是不一样的。不同流派的发行版不一样,同样流派的发行版,老系统和新系统也不一样。还是以上面提到的那个经典问题“怎么把 Linux 设置成启动后自动进入字符界面”为例。对于这个问题,教科书式的回答是:将 /etc/inittab 文件中的启动级别修改为3。但是,我可以很负责任地说:教科书过时了。

  我最早是从 Red Hat Linux 9 开始接触 Linux 的,那时,天天抱着一本《Red Hat Linux 9 宝典》啃。很显然,这本书现在已经是古董级了,因为 Red Hat 后来就开始做 Enterprise Linux,每两年一个版本,现在已经到了 Enterprise Linux 6,马上就要出第 7 版了。在我安装的这些系统中,CentOS 等同于 Red Hat Enterprise Linux,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、SysVinit 作为关键字搜索一下又有何难。另外,还会有更先进的软件包取代 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 的文档,如下图(后面的截图都是将 gnome-terminal 全屏后的效果,完全模拟全文本界面,没有设置半透明背景):

  而对于 GNU 出品的软件,往往都提供 info 格式的文档,可以通过 info 命令阅读。例如,想了解 Grub 怎么安装和配置,可以输入 info grub 查看其文档,如下图:

  需要提一下,在 Ubuntu 中,很多软件的文档是单独打包的,可以通过 aptitude search 命令搜索,通过 aptitude install 命令安装相应的文档包。有些软件的文档可能不是 man 格式或 info 格式,而是 html 格式或 pdf 格式,这时,可以通过前面提到的方法找到这些文件都安装在文件系统的什么地方,然后使用相应的阅读器打开阅读。

阅读源代码

  通过查找软件包、无所不能的搜索引擎和精心编写的文档,我们基本上可以解决 Linux 系统下绝大部分的问题。只有极少数情况下,可能需要阅读源代码。

  在 Ubuntu 系统下,可以通过 sudo apt-get source 命令获取某一个包的源代码。比如要想学习 getty 是怎么写的,想看它的代码,使用如下图命令:

  在 Ubuntu 中,Linux 内核的源代码是特例,它单独打包。可以使用如下命令搜索内核的源代码:

  yum 自己并没有下载安装源代码包的功能。

  但是 yum-utils 软件包中的 yumdownloader 工具可以让人下载源代码包。命令为 yumdownloader --source package-name。下载的源代码包是 .src.rpm 格式。如果只想阅读源代码,而不是想重新编译源代码的话,可以使用 rpm2cpio 命令和 cpio 命令对该源代码包进行解包。截图如下:

  源代码下载和安装后,如果仅仅只是阅读,使用 Vim 足以。在“Linux江湖”系列的后续随笔中,我肯定会有一篇讲如何折腾 Vim 的,所以不在这里继续啰嗦。

总结

  掌握了以上方法论,当在Linux中碰到困难时,即使没有书本或别人的指导,也可以通过自己的努力找到解决问题的办法。前面提到的命令如下:

  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
    yumdownloader --source
    rpm2cpio
    cpio
    man
    info

(京山游侠于2014-05-27发布于博客园,转载请注明出处。)

  从 Fedora 22 开始,DNF 全面取代 YUM 成为 Feora 系统上的软件管理工具。DNF 同样不提供下载源码包的功能,但是通过 DNF 的插件可以下载源码包。先安装 DNF 的插件:

  sudo dnf install dnf-plugins-core

  然后这样查看文档:

  sudo rpm -ql dnf-plugins-core

  man dnf.plugin.download

  这样下载源码包

  sudo dnf download package-name --source

(京山游侠于2016-10-04更新于博客园,转载请注明出处。)

玩转 Linux 系统的方法论的更多相关文章

  1. Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  2. Linux江湖01:玩转Linux系统的方法论 (转载)

    http://www.blogjava.net/youxia/archive/2015/01/08/linux001.html 2014年上半年,我是在写RCP系列.然后,由于要准备研究生毕业论文和答 ...

  3. Linux系统的方法论

    Linux系统的方法论 https://www.cnblogs.com/youxia/p/LinuxDesktop001.html 阅读目录 特别说明 什么情况下适合玩Linux桌面 Linux桌面系 ...

  4. WSL2:我在原生的Win10玩转Linux系统

    原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. WSL2:我在原生的Win10玩转Li ...

  5. Linux 桌面玩家指南:20. 把 Linux 系统装入 U 盘打包带走

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  6. Linux系统中玩到让你停不下来的命令行游戏!

    大家好,我是良许. 在使用 Linux 系统时,命令行不仅可以让我们在工作中提高效率,它还可以在生活上给我们提供各种娱乐活动,因为你可以使用它玩许多非常有意思的游戏,这些游戏可都不需要使用专用显卡. ...

  7. Linux系统中有趣的命令(可以玩小游戏)

    Linux系统中有趣的命令(可以玩小游戏) 前言 最近,我在看一些关于Linux系统的内容,这里面的内容是真的越学越枯燥,果然学习的过程还是不容易的.记得前几个月初学Linux时,有时候就会碰到小彩蛋 ...

  8. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  9. 请不要重复犯我在学习Python和Linux系统上的错误

    本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习.使用的对象,它简单.易用.好操作.界面绚丽,对于想接触Linux的新手来说是非 ...

随机推荐

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. 初识Hadoop、Hive

    2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...

  3. React 入门教程

    React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...

  4. 10个最好用的HTML/CSS 工具、插件和资料库

    大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...

  5. 使用Java原生代理实现AOP

    ### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...

  6. javascript高性能编程-算法和流程控制

          代码整体结构是执行速度的决定因素之一. 代码量少不一定运行速度快, 代码量多也不一定运行速度慢. 性能损失与代码组织方式和具体问题解决办法直接相关.       倒序循环可以提高性能,如: ...

  7. 【SAP业务模式】之ICS(七):IDOC配置

    这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...

  8. unity3d导出到IOS程序下 集成unity3dAR功能

    转载自: 来自AR学院(www.arvrschool.com),原文地址为:http://www.arvrschool.com/index.php?c=post&a=modify&ti ...

  9. SSIS 包部署 Package Store 后,在 IS 中可以执行,AGENT 执行却报错

    可以执行 SSIS Package ,证明用 SSIS Package 的账户是可以执行成功的.SQL Server Agent 默认指定账号是 Network Service. 那么可以尝试一下将 ...

  10. Dancing Links and Exact Cover

    1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...