LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2004|回复: 5

系统起动几个问题

[复制链接]
发表于 2005-5-23 02:25:46 | 显示全部楼层 |阅读模式
有几个问题还没有搞明白,init运行等级3,系统起动好以后出现的那个login 是由谁控制的?诺这个login是就是 /bin/login 的话 当我把/bin/login 改名,重新起动后仍然会有 login提示, 只是无法登录了,由此我感觉是乎是由 /sbin/mingetty 起动的,在 /etc/mgetty+sendfax/
下有几个mingetty的配置文件,还没有搞清楚如何设置。另外一个问题,当我用输入 init -t1 S  正常进入单用户模式,我想知道的是这里的等级1是否是受/etc/inittab控制,是init本身已经定义好了的,还是由  /etc/inittab中 l1:1:wait:/etc/rc.d/rc 1 控制,如果是init内部已经定义好了的,那他此时所做的动作或者说所运行的脚本是在哪里?/etc/rc1.d/下吗?当我把/etc/inittab 中的l1:1:wait:/etc/rc.d/rc 1  改成l1:1:wait:/etc/rc.d/rc 3 再次运行  init -t1 S 仍旧可以进入单用户模式。这就说明init并没有按照inittab 中的设置去运行。 还有一个问题,接第一个问题,当运行单用户模式进入时,为什么不会起动login? 而可以直接看到提示符?仅仅是 /etc/rc1.d/下面的 S00single 脚本在起作用吗? 在S00single我也没有发现或者没有注意到可以直接进入提示符的内容,以上这些说来说去我只想了解一下当系统所有脚本引导好以后是如何起动tty虚拟终端并要求用户登录的。
发表于 2005-5-23 09:31:18 | 显示全部楼层
1. login 是由mingetty 产生的!
    1:2345:respawn:/sbin/mingetty tty1
    在runlevel2,3,4,5 下启动tty1作为登录控制台,并且因为使用了 respawn方法,所以mingetty将运行到关机都不会退出系统的运行。
2.关于启动的相关问题,请参见man inittab 和 man init !
3. inittab 是系统启动读到的第一个配置文件,无论是何运行级别都要执行遵循他的配置。
4. inittab只在系统启动或你运行init   q 的时候有效!

你在init 的理解的概念上有问题,请认真阅读man init 理解其runlevel的概念!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-23 11:19:12 | 显示全部楼层
谢谢kevian
查看了一些tty的资料,差不多搞清楚了
RedHat使用的是mingetty 一种简化版本,只能处理虚拟终端的登录。而mgetty不仅可以处理虚拟终端,而且还能处理传真,支持调制解调器双向传输
登录过程一般是这样
getty 输出 /etc/issue 文件中的内容,并显示登录
用户在 getty的提示处输入登录名;login提示符由getty产生,并且在用户输入口令和密码时调用/bin/login
login要求输入口令和密码,并对照/etc/shadow验证口令
login输出/etc/motd中的每日消息,并且运行一个shell;
shell执行适当的引导脚本
shell显示一个提示符,等待输入
当用户登出的时候,控制权就返回给init, 它醒来后在终端口上产生一个新的getty (respawn)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-23 12:18:25 | 显示全部楼层
init 1 和 init S  (telinit 1 和 telinit  S ) 是不一样的,  init  S 只是简单让当前终端运行到单用户模式下,关闭多用户模式下的其他终端,并没有到 /etc/rc1.d/中执行任何脚本,各种多用户下的服务仍然在运行,而运行 init 1 时才真正到 /etc/rc1.d 下去执行,而这里的1 是受 /etc/inittab中控制的,按照正常配置,当运行init 1时,起动脚本 /etc/rc 1 并且到 /etc/rc1.d/下执行,当运行到S00single后,是乎是init 自己调用了 init S 把当前终端引入单用户模式下,原因在于 /etc/rc1.d/S00single 中最后一句 exec init -t1 S ,在等级1模式下为什么没有看到login或者说为什么没有起动 getty ,其实很简单,在/etc/inittab 中 "Run getttys in standard runlevels "中,并没有要求等级1运行一个getty
像这样 1:2345:respawn:/sbin/mingetty tty1 只要在“2345”中加上“1”。便可以起动个 miigetty ,但又当 /etc/rc1.d/S00single脚本中最后会运行exec init -t1 S ,所以这些已经起动好了的 getty又会被关闭。大致就是这种情况,我觉得 init S 或者 telinit S 所做的最重要的动作应该就是 关闭 由/etc/inittab 中起动的getty
还有一点,当进入单用户模式后如果输入exit 退出,则init会根据/etc/inittab中设置的 initdefault字段进入默认运行等级,如果没有,init会提示输入一个运行等级
回复 支持 反对

使用道具 举报

发表于 2005-5-24 02:58:36 | 显示全部楼层
Post by mars_diy
init 1 和 init S  (telinit 1 和 telinit  S ) 是不一样的,  init  S 只是简单让当前终端运行到单用户模式下,关闭多用户模式下的其他终端,并没有到 /etc/rc1.d/中执行任何脚本,各种多用户下的服务仍然在运行,而运行 init 1 时才真正到 /etc/rc1.d 下去执行,而这里的1 是受 /etc/inittab中控制的,按照正常配置,当运行init 1时,起动脚本 /etc/rc 1 并且到 /etc/rc1.d/下执行,当运行到S00single后,是乎是init 自己调用了 init S 把当前终端引入单用户模式下,原因在于 /etc/rc1.d/S00single 中最后一句 exec init -t1 S ,在等级1模式下为什么没有看到login或者说为什么没有起动 getty ,其实很简单,在/etc/inittab 中 "Run getttys in standard runlevels "中,并没有要求等级1运行一个getty
像这样 1:2345:respawn:/sbin/mingetty tty1 只要在“2345”中加上“1”。便可以起动个 miigetty ,但又当 /etc/rc1.d/S00single脚本中最后会运行exec init -t1 S ,所以这些已经起动好了的 getty又会被关闭。大致就是这种情况,我觉得 init S 或者 telinit S 所做的最重要的动作应该就是 关闭 由/etc/inittab 中起动的getty
还有一点,当进入单用户模式后如果输入exit 退出,则init会根据/etc/inittab中设置的 initdefault字段进入默认运行等级,如果没有,init会提示输入一个运行等级


非常感谢!这方面我一直概念模糊,今天受教了!
回复 支持 反对

使用道具 举报

发表于 2005-5-24 09:42:59 | 显示全部楼层
谢谢楼主和斑竹,我也受益了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表