扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Linux系统内核被引导程序装入内核并运行后,Linux内核会检测系统中的各种硬件。并做好各种硬件的初始化工作,使他们在系统正式运行后能正常工作。之后内核做的最后一个工作是运行
/sbin下的init程序,init是英文单词initialization(初始化)的简称,init程序的工作是读取/etc/inittab文件中描述的指令,对系统的各种软硬件环境做最初化设定。最后运行mingetty等待用户输入用户名登录系统。所有的工作就这么简单,虽然Linux启动的时候有很多内容,看上去十分高深,但是都不过是对这个过程的扩充。明白了这个道理,你可以写一些脚本程序让他在系统启动的特定时间运行完成任务。事实上系统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可执行程序他都可以执行。可以做以下实验:
编写一个非常简单的C程序:
|
保存后以init.c保存他,并用gcc编译。
|
这里的--static 参数告诉gcc把这个程序静态联接,这样这个程序不倚赖任何库就能运行。把编译好的init程序拷贝到/sbin下,备份好原来的那个。重新启动系统最后系统的输出结果是: hello,world!
然后停在那里。做这个实验以前先确定你知道如何把系统恢复到原来的状态,有一个简单的方法,在内核启动前给他加上init=参数,比如你原先的init被你改成了init。bak 只要在启动的时候给内核加上init=/sbin/init。bak就可以用原来的init程序启动系统。
做完以上实验,就明白了内核和init程序之间的关系。此外,init程序不一定是一个二进制可执行程序,他可以是一个bash脚本,一个指向另一个程序的联接,他的位置也并不一定要在/sbin下,只要在启动内核时,给内核加上init参数就能被运行,比如,开始时给内核加上init=/bin/bash参数,内核在最后一步就直接运行bash给出提示符,不用登录系统就可以输入命令了。其功能类似单用户模式启动系统。 /sbin/init 程序只是内核默认运行的第一个程序。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者