<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post//</link>
<title><![CDATA[[转载]让ubuntu直接启动到文本模式]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[Web 技术 ]]></category>
<pubDate>Mon, 15 Dec 2008 14:37:45 +0000</pubDate> 
<guid>https://atim.cn/post//</guid> 
<description>
<![CDATA[ 
	init和inittab<br/>=============<br/>Linux下为什么会要有个init？用过 windows 9.x的人应该知道有个批处理文件autoexec.bat，用过windows NT/2000系统的人应该在控制面板中见过system service工具，它们的目的是相同的。只是比较起来windows下的这些东西功能太弱（当然用法也更简单）。<br/>init是Linux启动的最后一步，它帮助用户完成每次启动系统都必须完成的一些重复性任务，如加载文件系统、各类网络服务等等程序；它还有一个重要用途，让用户自定义系统运行环境，只启动需要的进程，关闭不用的进程，释放内存和处理器资源，让系统运行得更快更稳。<br/><br/>init 会按任务表执行我们下的命令，这个任务表就是/etc/inittab文件。我们可以为系统制定多个运行环境以满足不同任务的需要，在inittab中称之为运行等级（runlevel）。例如，计算机要用来完成一种联网编译任务（与其它系统共享CPU周期，合作编译软件），这样情况需占用大量CPU能力和内存，所以当计算机用作这种用途时，其他程序的运行要尽可能少。可设置一个运行等级（如：runlevel 4），把其它程序包括X Window全关闭，只启动联网编译进程；其他时段，你的计算机要与Windows系统共享文件，需要启动Samba，可以再定义一个运行等级（如： runlevel 2）。<br/>现在当你要进行联网编译时可运行init 4，而不用手工去关闭每个暂不需要的进程；要与Windows系统共享文件可运行init 2。<br/><br/>Debian系统对某些运行等级进行了预先配置（而且是无法修改的）<br/><br/>runlevel 0：它的任务就是关闭所有程序，关机。如果计算机及内核支持APM，系统电源可自动切断。<br/><br/>runlevel 1：为单用户模式保留的。在这个运行等级下，除了一个root shell外，没有其它程序运行。除了root文件系统以只读方式安装外，不安装其它文件系统。该运行等级通常在恢复系统时用。<br/><br/>runlevel 6：与runlevel 0非常相似，只是它是重启系统而不是关闭系统。<br/><br/>runlevel 2、3、4、5：Debian系统对它们没有具体规定，通常可自由进行定制，它们都属于多用户模式。其中runlevel 3是Debian使用的默认运行等级。启动Debian系统时，用的就是这个运行等级。<br/><br/>下面是inittab文件的例子<br/><br/># /etc/inittab: init(8) configuration.<br/># $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $<br/><br/># The default runlevel.<br/>id:2:initdefault:<br/><br/># Boot-time system configuration/initialization script.<br/># This is run first except when booting in emergency (-b) mode.<br/>si::sysinit:/etc/init.d/rcS<br/><br/># What to do in single-user mode.<br/>~~:S:wait:/sbin/sulogin<br/><br/># /etc/init.d executes the S and K scripts upon change<br/># of runlevel.<br/>#<br/># Runlevel 0 is halt.<br/># Runlevel 1 is single-user.<br/># Runlevels 2-5 are multi-user.<br/># Runlevel 6 is reboot.<br/><br/>l0:0:wait:/etc/init.d/rc 0<br/>l1:1:wait:/etc/init.d/rc 1<br/>l2:2:wait:/etc/init.d/rc 2<br/>l3:3:wait:/etc/init.d/rc 3<br/>l4:4:wait:/etc/init.d/rc 4<br/>l5:5:wait:/etc/init.d/rc 5<br/>l6:6:wait:/etc/init.d/rc 6<br/># Normally not reached, but fallthrough in case of emergency.<br/>z6:6:respawn:/sbin/sulogin<br/><br/># What to do when CTRL-ALT-DEL is pressed.<br/>ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now<br/><br/># Action on special keypress (ALT-UpArrow).<br/>#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."<br/><br/># What to do when the power fails/returns.<br/>pf::powerwait:/etc/init.d/powerfail start<br/>pn::powerfailnow:/etc/init.d/powerfail now<br/>po::powerokwait:/etc/init.d/powerfail stop<br/><br/># /sbin/getty invocations for the runlevels.<br/>#<br/># The "id" field MUST be the same as the last<br/># characters of the device (after "tty").<br/>#<br/># Format:<br/># <id>:<runlevels>:<action>:<process><br/>#<br/># Note that on most Debian systems tty7 is used by the X Window System,<br/># so if you want to add more getty's go ahead but skip tty7 if you run X.<br/>#<br/>1:2345:respawn:/sbin/getty 38400 tty1<br/>2:23:respawn:/sbin/getty 38400 tty2<br/>3:23:respawn:/sbin/getty 38400 tty3<br/>4:23:respawn:/sbin/getty 38400 tty4<br/>5:23:respawn:/sbin/getty 38400 tty5<br/>6:23:respawn:/sbin/getty 38400 tty6<br/><br/># Example how to put a getty on a serial line (for a terminal)<br/>#<br/>#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100<br/>#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100<br/><br/># Example how to put a getty on a modem line.<br/>#<br/>#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3<br/><br/>该文件有一个基本类型的指令，它们指定命令行，命令行所采取的动作，在何种运行等级下激活命令。这引起命令行的格式大体如下：<br/><br/>id:runlevels:action:command<br/><br/>id是任意一个名称（具体是什么并不重要），runlevels是一个数字串（代表运行等级），action描述何时执行命令，command指定执行的实际命令。拿启动getty的命令行举例：<br/><br/>1:2345:respawn:/sbin/getty 38400 tty1<br/><br/>该命令告诉init，它应该在引导后以运行等级2-5运行命令/sbin/getty 38400 tty1。动作标记respawn表示命令在退出时重新运行（当用户在shell输入exit的时候）。<br/><br/>从方面的文件中可以看到，运行等级2和3有六个活动的gettys，而等级4和5只有一个。假设运行等级4下有三个shell运行在虚拟控制台。你在ID为2和3的命令行的运行等级字段添加了数字4，也就是说你将<br/><br/>2:23:respawn:/sbin/getty 38400 tty2<br/>3:23:respawn:/sbin/getty 38400 tty3<br/><br/>替换成<br/><br/>2:234:respawn:/sbin/getty 38400 tty2<br/>3:234:respawn:/sbin/getty 38400 tty3<br/><br/>然后重启或执行以下命令：<br/><br/>telinit q<br/><br/>对inittab进行修改。telinit q命令指示init重新加载它的配置。参阅telinit(8)。<br/><br/>/etc/inittab的其它行看起来比较复杂，我们先看看还有哪些动作标记：<br/><br/>·respawn：启动命令并监视命令的执行，当进程退出时，再次执行该命令（通常用于虚拟终端设备上的登录提示）。 ·wait：进入指定运行等级时，启动进程。init会停下来，直到执行完成。这个标记用于设置特定等级下软件的启动。<br/>·once：进入指定的任一运行等级时，启动一次进程。<br/>·boot：该命令在系统引导时运行。这种类型的指令忽略运行等级。<br/>·bootwait：该命令在系统引导时运行，init等到它退出后才能继续做别的事。<br/>·off：禁用所有运行等级下的某个命令。<br/>·initdefault：这种类型的项指定在系统引导时进入哪个运行等级。<br/>·powerwait：这类指令给出在电源不足时需要执行的命令。init直到进程完成后才继续工作。<br/>·powerfail：与powerwait类似，但init不等待进程完成。<br/>·powerworkwait：电源正常后执行。init暂停，直到进程结束。<br/>·powerfailnow：当便携机电池或外部UPS电池电量不足时执行。<br/>·ctrlaltdel：指定init在捕获ctrl+alt+del组合键时执行的命令。<br/>·kbdrequest：把特殊动作映射到特定的按键。Debian中的是alt+UpArrow。<br/><br/>现在再看上面的文件是不是清楚了许多？<br/><br/>更强大的sysvinit<br/>================<br/>inittab 的主要功能是描述引导及正常操作时，应该在何种运行等级下启动什么程序，每个运行等级的具体项目完全可以通常/etc/inittab来定义，但 Debian有一个更健壮的方案sysvinit，它被认为是init最强大的应用程序之一。Debian组织inittab的方式是把运行等级的大部分定义从inittab中移出来，移到一个脚本层次中去。惟一直接从inittab启动的程序只有getty，它用于虚拟设备上启动登录提示符，保留它因为它们要求特殊处理，在inittab之外处理要困难得多。<br/><br/>inittab来启动所有软件当然是可能的，但将所有配置写在同一个文件既不方便查看也不方便维护，所以文件里会加上这许多行：<br/><br/>l0:0:wait:/etc/init.d/rc 0<br/>l1:1:wait:/etc/init.d/rc 1<br/>l2:2:wait:/etc/init.d/rc 2<br/>l3:3:wait:/etc/init.d/rc 3<br/>l4:4:wait:/etc/init.d/rc 4<br/>l5:5:wait:/etc/init.d/rc 5<br/>l6:6:wait:/etc/init.d/rc 6<br/><br/>这些行实际决定了系统在各个运行等级下的行为。它们如何做到的也许并不明显，但至少我们知道主要意思：首先每行都有个符号ID lx，lx表示runlevel x；其次，每行只在一个运行等级下激活，该运行等级对应着符号ID中的数字x。命令执行时，init停下来，直到进程结束。最后，每个命令行调用一个脚本 /etc/init.d/rc x，这里x代表当前运行等级的数字。显然各运行等级的具体任务在/etc/init.d/rc脚本中安排。<br/><br/>Debian init设置的核心在/etc/init.d目录。该目录包含了启动或停止重要软件的脚本，为了简化操作，规定每个脚本都使用相同的一套参数——start或stop。个别软件包维护者为用户着想，往这些脚本中加了其他功能，但init不会去调用它们。<br/>举个例子，可调用：#/etc/init.d/apache start来启动Apache，调用：#/etc/init.d/apache stop来关闭它。<br/>作为一个用户工具，这是非常有用的，它让用户轻松启动和关闭Debian所带的复杂程序，不过在考虑如何启动程序前，先检查/etc/init.d，看看是不是已经有脚本可以做这件事了。借助于这种机制，可以按自己的需求来调整运行等级，/etc/init.d/rc可以把系统引入所需的运行等级。 /etc/rcx.d是一组指向/etc/init.d的符号链接。进行运行等级时，rc在运行等级目录中按逻辑顺序处理每个脚本。首先前缀为K的每个文件都以参数stop（按字母和数字顺序）执行；其次，以S为前缀的每个脚本都以参数start（按字母和数字顺序）执行。<br/>了解了工作原理，下面试着自己来构造一个运行等级。我们使用运行等级5和与之相关的rc目录/etc/rc5.d。首先，看看该目录下的内容：找出每个符号链接所做的工作；查看文件，判断它来自哪个文件。经过仔细查看，找出启动无用程序的S打头的脚本，把它们删掉，在/etc/init.d中找出需要运行但未包括在内的脚本，例如假设你想在运行等级5下启动Samba，执行命令：<br/><br/>ln -s /etc/init.d/samba /etc/rc5.d/S20samba<br/><br/>看到这里是不是对init有了新的了解，那么来测试一下学习成果：关闭Debian默认安装时加载的gdm/xdm/kdm进程，让Debian启动到命令行终端而不是X。<br/><br/><br/><br/>http://www.real-blog.com/linux-bsd-notes/49<br/>以文字模式啟動 Ubuntu<br/><br/>January 31, 2006 @ 11:00 pm · Filed under Linux / BSD 筆記<br/><br/>如果想 Ubuntu 在每次啟動到 command prompt ，可以輸入以下指令:<br/><br/>$echo “false” &#124; sudo tee /etc/X11/default-display-manager<br/><br/>當下次開機時，就會以指令模式啟動，如果想變回啟動 x window，可以輸入:<br/><br/>$echo “/usr/bin/gdm” &#124; sudo tee /etc/X11/default-display-manager<br/><br/>P.S. 如果不是用 gdm 作為，以上指令需要根據你的環境作出更改，例如 kdm 或 xdm。 
]]>
</description>
</item><item>
<link>https://atim.cn/post//#blogcomment</link>
<title><![CDATA[[评论] [转载]让ubuntu直接启动到文本模式]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://atim.cn/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>