⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 加快 linux 的引导.htm

📁 这是我做linux系统初始化过程分析时在网上收集到的资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
        脚本开始,事情才变得有趣。<BR><BR>系统服务<BR>rc 
        脚本负责启动用户需要的所有服务。就像名字所描述的一样,所谓服务就是系统提供的有用的工具。可能会有很多服务需要启动。大部分的 Linux 
        系统会启动 sshd(安全Shell服务)、syslog(系统日志工具)和 lpd(打印服务),但还会有更多的服务需要启动。比如,我的 Red 
        Hat 9 
        系统现在运行着29个服务,但如果我把所有的服务都启动,那么我的系统中将会有近50服务在运行。<BR><BR>还有一点很重要,我们应该明白有的服务可能只能由特定的运行级来启动。比如,除了运行级5(多用户图形方式)以外,几乎不会启动某种形式的图形服务,因为其它所有的运行级都是非图形方式的。接下来我们将深入讨论这一问题。<BR><BR>服务程序在哪里?<BR><BR>可选的服务程序目录<BR>在一些 
        Linux 系统中,服务程序有时候是在 /etc/init.d 目录下。<BR><BR>通常在 /etc/rc.d/init.d/ 
        目录下可以找到服务程序。<BR><BR>如果你浏览一下这个目录,你就会发现相当多的(如果不是全部都是的话)服务程序实际上都是 shell 
        脚本,用于调用其他程序完成实际的工作。<BR><BR>rc 
        脚本如何知道在每个运行级下去运行哪些脚本?<BR>回顾一下,如果我们不希望在某个运行级下运行某个脚本,我们如何告诉系统这样去做?答案是在 
        /etc/rc.d/ 目录下,在这个目录下,除了我们已经讨论过的 init.d/ 目录以外,还有一组目录,每一个目录对应一个运行级。这些目录以 
        rc&lt;runlevel&gt;.d 的形式来命名,比如,对应运行级5的目录为 
        /etc/rc.d/rc5.d/ 。在这些rc.d目录中,每一个目录下都有一组符号链接,指向 /etc/rc.d/init.d 
        中的真正的服务程序。实际上,后边我们会发现,每个服务事实上有两个符号链接。<BR><BR>服务链接名<BR>这些指向实际服务程序的符号链接的名字很重要,它们遵循严格的命名约定,这样 
        rc 
        脚本就知道如何处理它们。<BR><BR>为了便于标识,每个链接的名字都以它们所指向的服务的名字做为后缀。<BR><BR>前缀由两部分构成:一个大写字母,紧跟着是一个两位的十进制数。前缀中的大写字母是“S”(表示“启动”),或者“K”(表示“杀死”,或者停止)。两位数的大小范围是自00到99。<BR><BR>服务链接名正则表达式<BR>符号链接的名字可以用 
        egrep 正则表达式来描述,[SK][0-9]{2}[a-zA-Z]+。(更多详细信息请参阅 man 
        egrep)。<BR><BR>启动和停止服务<BR>如果我们决定让 Linux 机器引导到图形模式(运行级5),当 init 调用 rc 
        脚本并传递给它运行级数字时,rc 脚本将到 /etc/rc.d/rc5.d/ 
        中查找,并且去运行它所能找到的所有符号链接(也就是说,它将运行每个链接指向的程序/脚本)。它将在两个截然不同的阶段来运行这些链接;首先它会执行所有以“K”开头的链接,同时传递给它们参数“stop”。执行完以后,所有这些链接指向的服务都被停止。<BR><BR>当 
        rc 
        脚本把所有需要停止的服务都停止后,它将去执行所有以“S”开头的链接,同时传递给它们参数“start”。执行完以后,所以这些链接指向的服务都被启动。rc 
        脚本也把参数“start”传递给每一个程序。<BR><BR>rc 
        把参数“tart”或者“stop”传递给每一个服务程序,这样做是为了只用一个服务程序可以启动或停止那个服务——服务程序根据传递给它的参数值分辨系统是正在引导还是正在关闭。<BR><BR>有一个重要的方面我还没有解释——链接名的数字部分。在“S”或者“K”之后的两位十进制数是 
        rc 
        脚本用来确定启动链接(就是链接指向的服务)的顺序的。数字较小(比如00,01,等等)的链接在数字较大(99是最大的)链接之前运行。我们会在本文后边的内容中再次提到这一重点问题。<BR><BR>现在还迷惑吗?清单1列出了运行级5对应目录下的所有链接。当引导到运行级5的时候,最先被执行的链接将是 
        K05saslauthd,因为它以“K”开头,并且在所有的以“K”开头的链接中两位十进制数是最小。最先被执行的启动链接将是 
        S05kudzu,因为它以“S”开头,并且在所有以“S”开头的链接中两位十进制数是最小的。最后一个运行的链接将是 S99local。<BR>清单 
        1. 运行级5的指向服务程序的链接<BR><BR><BR># cd /etc/rc.d/rc5.d<BR># ls -al<BR>total 
        8<BR>drwxr-xr-x 2 root root 4096 Jul 15 09:29 .<BR>drwxr-xr-x 10 root 
        root 4096 Jun 21 08:52 ..<BR>lrwxrwxrwx 1 root root 19 Jan 1 2000 
        K05saslauthd -&gt; ../init.d/saslauthd<BR>lrwxrwxrwx 1 root root 20 Feb 
        1 2003 K15postgresql -&gt; ../init.d/postgresql<BR>lrwxrwxrwx 1 root 
        root 13 Jan 1 2000 K20nfs -&gt; ../init.d/nfs<BR>lrwxrwxrwx 1 root root 
        14 Jan 1 2000 K24irda -&gt; ../init.d/irda<BR>lrwxrwxrwx 1 root root 17 
        Jan 1 2000 K35winbind -&gt; ../init.d/winbind<BR>lrwxrwxrwx 1 root root 
        15 Jan 1 2000 K50snmpd -&gt; ../init.d/snmpd<BR>lrwxrwxrwx 1 root root 
        19 Jan 1 2000 K50snmptrapd -&gt; ../init.d/snmptrapd<BR>lrwxrwxrwx 1 
        root root 16 Jun 21 09:43 K50vsftpd -&gt; ../init.d/vsftpd<BR>lrwxrwxrwx 
        1 root root 16 Jun 21 08:57 K73ypbind -&gt; 
        ../init.d/ypbind<BR>lrwxrwxrwx 1 root root 14 Jun 21 08:54 K74nscd -&gt; 
        ../init.d/nscd<BR>lrwxrwxrwx 1 root root 18 Feb 8 11:15 K92iptables 
        -&gt; ../init.d/iptables<BR>lrwxrwxrwx 1 root root 19 Feb 1 2003 
        K95firstboot -&gt; ../init.d/firstboot<BR>lrwxrwxrwx 1 root root 15 Jan 
        1 2000 S05kudzu -&gt; ../init.d/kudzu<BR>lrwxrwxrwx 1 root root 14 Jun 
        21 08:55 S09isdn -&gt; ../init.d/isdn<BR>lrwxrwxrwx 1 root root 17 Jan 1 
        2000 S10network -&gt; ../init.d/network<BR>lrwxrwxrwx 1 root root 16 Jan 
        1 2000 S12syslog -&gt; ../init.d/syslog<BR>lrwxrwxrwx 1 root root 17 Jan 
        1 2000 S13portmap -&gt; ../init.d/portmap<BR>lrwxrwxrwx 1 root root 17 
        Jan 1 2000 S14nfslock -&gt; ../init.d/nfslock<BR>lrwxrwxrwx 1 root root 
        18 Jan 1 2000 S17keytable -&gt; ../init.d/keytable<BR>lrwxrwxrwx 1 root 
        root 16 Jan 1 2000 S20random -&gt; ../init.d/random<BR>lrwxrwxrwx 1 root 
        root 16 Jun 21 08:52 S24pcmcia -&gt; ../init.d/pcmcia<BR>lrwxrwxrwx 1 
        root root 15 Jan 1 2000 S25netfs -&gt; ../init.d/netfs<BR>lrwxrwxrwx 1 
        root root 14 Jan 1 2000 S26apmd -&gt; ../init.d/apmd<BR>lrwxrwxrwx 1 
        root root 16 Jan 1 2000 S28autofs -&gt; ../init.d/autofs<BR>lrwxrwxrwx 1 
        root root 14 Jan 1 2000 S55sshd -&gt; ../init.d/sshd<BR>lrwxrwxrwx 1 
        root root 20 Jan 1 2000 S56rawdevices -&gt; 
        ../init.d/rawdevices<BR>lrwxrwxrwx 1 root root 16 Jan 1 2000 S56xinetd 
        -&gt; ../init.d/xinetd<BR>lrwxrwxrwx 1 root root 14 Feb 1 2003 S58ntpd 
        -&gt; ../init.d/ntpd<BR>lrwxrwxrwx 1 root root 13 Jun 21 10:42 S60afs 
        -&gt; ../init.d/afs<BR>lrwxrwxrwx 1 root root 13 Jan 1 2000 S60lpd -&gt; 
        ../init.d/lpd<BR>lrwxrwxrwx 1 root root 16 Feb 8 17:26 S78mysqld -&gt; 
        ../init.d/mysqld<BR>lrwxrwxrwx 1 root root 18 Jan 1 2000 S80sendmail 
        -&gt; ../init.d/sendmail<BR>lrwxrwxrwx 1 root root 13 Jan 1 2000 S85gpm 
        -&gt; ../init.d/gpm<BR>lrwxrwxrwx 1 root root 15 Mar 22 08:24 S85httpd 
        -&gt; ../init.d/httpd<BR>lrwxrwxrwx 1 root root 15 Jan 1 2000 S90crond 
        -&gt; ../init.d/crond<BR>lrwxrwxrwx 1 root root 13 Jan 1 2000 S90xfs 
        -&gt; ../init.d/xfs<BR>lrwxrwxrwx 1 root root 17 Jan 1 2000 S95anacron 
        -&gt; ../init.d/anacron<BR>lrwxrwxrwx 1 root root 13 Jan 1 2000 S95atd 
        -&gt; ../init.d/atd<BR>lrwxrwxrwx 1 root root 15 Jun 21 08:57 S97rhnsd 
        -&gt; ../init.d/rhnsd<BR>lrwxrwxrwx 1 root root 14 Jul 15 09:29 S98wine 
        -&gt; ../init.d/wine<BR>lrwxrwxrwx 1 root root 13 Feb 8 17:26 S99db2 
        -&gt; ../init.d/db2<BR>lrwxrwxrwx 1 root root 11 Jun 21 08:52 S99local 
        -&gt; 
        ../rc.local<BR>#<BR><BR>这看起来好象是非常复杂的系统,但实际上它提供了极好的灵活性,因为如果您想临时禁止某个特定运行级中的服务,只要把适当的符号链接删除即可。不过,手工管理这些链接可能会让人感觉厌烦,并且容易出错(尤其当您累了的时候),所以可以采用一个相对好一些的方法,使用 
        chkconfig 命令。<BR><BR>chkconfig 和 xinetd<BR>如果您有一个新版本的 chkconfig 
        ,您会在主输出的最后一部分看到有关 xinetd (Internet services 
        daemon)的配置。为了减化说明,此部分没有列入清单2中。<BR><BR>如何找出激活的服务<BR>想查看您已经激活了多少服务,运行这个命令:<BR><BR>/sbin/chkconfig 
        --list<BR><BR>清单 2 列出了这个命令的输出。您可以看到,每一行有八列。<BR><BR>chkconfig 
        命令还可以用来切换任何一个服务的开或关。详细信息请参考手册页(man chkconfig)。<BR>清单 2. chkconfig 
        --list|sort的输出<BR><BR><BR>afs 0:off 1:off 2:off 3:on 4:off 5:on 
        6:off<BR>anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>apmd 0:off 
        1:off 2:on 3:on 4:on 5:on 6:off<BR>atd 0:off 1:off 2:off 3:on 4:on 5:on 
        6:off<BR>autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off<BR>crond 0:off 
        1:off 2:on 3:on 4:on 5:on 6:off<BR>db2 0:off 1:off 2:off 3:on 4:off 5:on 
        6:off<BR>firstboot 0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR>gpm 
        0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>httpd 0:off 1:off 2:off 3:off 
        4:off 5:on 6:off<BR>iptables 0:off 1:off 2:off 3:off 4:off 5:off 
        6:off<BR>irda 0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR>isdn 0:off 
        1:off 2:on 3:on 4:on 5:on 6:off<BR>keytable 0:off 1:on 2:on 3:on 4:on 
        5:on 6:off<BR>kudzu 0:off 1:off 2:off 3:on 4:on 5:on 6:off<BR>lpd 0:off 
        1:off 2:on 3:on 4:on 5:on 6:off<BR>mysqld 0:off 1:off 2:off 3:on 4:off 
        5:on 6:off<BR>netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off<BR>network 
        0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>nfs 0:off 1:off 2:off 3:off 
        4:off 5:off 6:off<BR>nfslock 0:off 1:off 2:off 3:on 4:on 5:on 
        6:off<BR>nscd 0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR>ntpd 0:off 
        1:off 2:off 3:on 4:off 5:on 6:off<BR>pcmcia 0:off 1:off 2:on 3:on 4:on 
        5:on 6:off<BR>portmap 0:off 1:off 2:off 3:on 4:on 5:on 
        6:off<BR>postgresql 0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR>random 
        0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>rawdevices 0:off 1:off 2:off 
        3:on 4:on 5:on 6:off<BR>rhnsd 0:off 1:off 2:off 3:on 4:on 5:on 
        6:off<BR>saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR>sendmail 
        0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>snmpd 0:off 1:off 2:off 3:off 
        4:off 5:off 6:off<BR>snmptrapd 0:off 1:off 2:off 3:off 4:off 5:off 
        6:off<BR>sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>syslog 0:off 
        1:off 2:on 3:on 4:on 5:on 6:off<BR>vsftpd 0:off 1:off 2:off 3:off 4:off 
        5:off 6:off<BR>winbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR>wine 
        0:off 1:off 2:on 3:on 4:on 5:on 6:off<BR>xfs 0:off 1:off 2:on 3:on 4:on 
        5:on 6:off<BR>xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off<BR>ypbind 
        0:off 1:off 2:off 3:off 4:off 5:off 6:off<BR><BR>清单 
        2中第一列是服务的名字,接下来的列是运行级和每一个运行级中服务的状态。例如,ntpd (Network time 
        daemon)服务被配置为只在运行级3中(多用户,无图形)和运行级5(多用户,有图形)中启动,sshd 
        服务在运行级2,3,4和5中都被切换到开的状态。<BR><BR>注意在运行级0和6中没有一个服务要启动。回顾表 
        1,原因显而易见。运行级1表示要关闭或停止系统,因此在机器将要“关闭”时,您不会想要启动任何服务。运行级6中也是如此。<BR><BR>运行级1——“单一用户模式”——是一个特别的运行级,一般在系统出问题的时候使用。一直以来,在运行级1中运行的唯一一个应用程序是 
        shell,允许超级用户来修复系统或者让超级用户在一个安全的环境中修改系统。这样是安全的——就像它的名字“单一用户模式”的含意一样——只有超级用户可以访问系统。并且,联网是禁用的,所以没有人可以远程登录。如表 
        1所示,单一用户模式中运行的唯一一个服务是keytable,这样使得超级用户的键盘可以正常使用。<BR><BR>激活服务与运行服务的对比<BR>有时服务会由于某种原因无法启动,用下面这个命令查看当前有哪些服务正在运行:<BR><BR>/sbin/service 
        --status-all<BR><BR>这个命令将为每个服务输出一行或多行,指出每个服务是否在运行,如果在运行,则列出服务的一些特定的输出,比如服务运行的PID(进程号)。service 
        命令没有手册页,但是您可以在运行这个命令时使用--help 
        选项,您就可以得到有关它的操作的一些帮助信息。<BR><BR>传统服务框架的缺陷<BR>关键的是,只有当配置中的所有服务都启动以后,您才可以登录进入您的 
        Linux 
        系统。等待50个服务启动可能会需要若干分钟,而这本来应该是您享用Linux系统的时间。<BR><BR>我已经找到了一个加速这个过程的方法。注意这种方法不会停止任何服务。不管怎样,停掉那些不用的服务是很明智的,不仅是因为这样可以加快引导的速度(在机器可以登录之前需要运行的服务少了),而且,由于很多服务要以 
        root 用户身份来运行,停掉不用的服务会减少您的安全隐患。<BR><BR>扼要重述一下,当一个 Linux 
        系统引导时,它以一种连续的方式来运行所有的某个运行级所配置的所有服务——一个接一个地。这是一个耗时的操作。<BR><BR>或许一个很明显的加快服务启动速度的方法是并行地启动所有的服务,这样它们就可以同时启动。不幸的是,虽然这听起来很吸引人,却不可行。原因是各个服务之间存在依赖的关系。Linux没有把这些依赖关系完全显式地表示出来,但是事实上这些依赖关系是存在的。还记得我们先前讨论的关于链接名字格式的问题吗?在“S”和“K”之后的两位数决定了链接(也就是它们指向的服务)的运行顺序。这些数字确定了一个硬性的顺序,这样一定程度上也强化了服务之间的依赖关系。<BR><BR>服务之间的依赖关系<BR>回顾清单 
        1,我们可以看到 network 服务(S10network)将在ntpd服务(S58ntpd)之前运行。这是我们所期望的,因为 ntpd 
        服务要求网络可达,以使它可以连接一个本地时间服务器。不幸的是,这个硬性的顺序并不能告诉我们足够的信息,并且会让人误解。例如,在清单 
        1中我们可以看到 lpd 服务(S60lpd)将在 network 服务之后运行。虽然这样对那些连接到网络并且使用网络打印机的 Linux 
        系统来说是正确的,但是这并不说明当背板上有一个 inkjet 打印机连接到本地系统时,lpd 服务还是必须要在 network 
        服务之后运行。实际上,在这种情况下,在启动 network 之前先启动 lpd 会更好一些。<BR><BR>再来看另外一个例子:crond 
        (cron daemon)服务 (在清单 1中的 S90crond)也是在 network 启动之后运行。可是,如果您没有使用远程机器文件的 
        cron 文件,那么就应该让 crond 在 network 之前启动。<BR><BR>由于我刚才介绍的 Linux 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -