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程序来验 证用户的身份。
到此整个启动过程就结束了。
参考:http://www.51ou.com/browse/linuxml/mingetty.html
第二部分:运行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
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程