您的位置:首页 > 运维架构 > Linux

Linux从按下电源到屏幕出现命令行究竟做了什么——linux mingetty命令

2016-05-09 15:39 603 查看
第一部分:内核的引导(核内引导)

第二部分:运行init及系统初始化

init程序 需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。

该文件决定了系统的启动级别(1,2,3,4,5)

  

inittab中有这样一行si::sysinit:/etc/rc.d/rc.sysinit(调用执行/etc/rc.d/rc.sysinit,这个脚本中有很多小功能)。

第三部分:启动对应运行级别的守护进程

 在rc.sysinit执行后,将返回init继续其它的动作,通常接下来会执行到/etc/rc.d/rc程序。[/b]

 根据启动级别执行相应的脚本rcx.d:

l0:0:wait:/etc/rc.d/rc 0

  l1:1:wait:/etc/rc.d/rc 1

  l2:2:wait:/etc/rc.d/rc 2

  l3:3:wait:/etc/rc.d/rc 3

  l4:4:wait:/etc/rc.d/rc 4

  rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。init接下来会打开6个终端,以便用户登录系统。通过按Alt+Fn(n对应1-6)可以在这6个终端中切换。在inittab中的以下6行就是定义了6个终端:

  1:2345:respawn:/sbin/mingetty tty1

  2:2345:respawn:/sbin/mingetty tty2

  3:2345:respawn:/sbin/mingetty tty3

  4:2345:respawn:/sbin/mingetty tty4

  5:2345:respawn:/sbin/mingetty tty5

  6:2345:respawn:/sbin/mingetty tty6

   从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序(其实mingetty也可以调login程序来实现登陆界面,具体见下文),mingetty程序能打开终端、设置模式。同时它会 显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验 证用户的身份。

下面来分析mingetty如何实现登陆界面附部分源码


//autologin  自动登陆
if (autologin) {
do_prompt (0);//
printf ("login: %s (automatic login)\n", autologin);
logname = autologin;
} else//否则调用get_logname()获取用户名,get_logname会调do_prompt()提示输入Login:get_logname没有别处源码
while ((logname = get_logname ()) == 0)
/* do nothing */ ;
·
·//省略部分源码
·
execl (loginprog, loginprog, autologin? "-f" : "--", logname, NULL);/*此处替换login程序来实现验证用户名密码
注意:全局变量static char *loginprog = "/bin/login";
*/
static void do_prompt (int showlogin)
{
FILE *fd;
int c;

if (nonewline == 0)
putchar ('\n');
if (noissue == 0 && (fd = fopen ("/etc/issue", "r"))) {
while ((c = getc (fd)) != EOF) {
if (c == '\\')
output_special_char (getc (fd));
else
putchar (c);
}
fclose (fd);
}
if (loginpause) {
puts ("[press ENTER to login]");
getc (stdin);
}
if (nohostname == 0)
printf ("%s ", hn);
if (showlogin)//autologin==0,跳过
printf ("login: ");
fflush (stdout);
}


**验证成功后会执行/etc/profile(如果存在)文件完成相关环境初始化**
例:终端输入 :mingetty将提示入户输入程序(以login为例),调用login程序,login验证通过后将执行配置文件/etc/profile(如果存在)


到此整个启动过程就结束了。

参考:http://www.51ou.com/browse/linuxml/mingetty.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息