`
奔跑的犀牛
  • 浏览: 12565 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

Linux_init级别

阅读更多

 init是Linux系统操作中不可缺少的程序之一。
  所谓的init进程,它是一个由内核启动的用户级进程。
  内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
  内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
  二、运行级别
  那么,到底什么是运行级呢?
  简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
  不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)
  # 0 - 停机(千万不能把initdefault 设置为0 )
  # 1 - 单用户模式
  # 2 - 多用户,没有 NFS
  # 3 - 完全多用户模式(标准的运行级)
  # 4 - 没有用到
  # 5 - X11 (xwindow)
  # 6 - 重新启动 (千万不要把initdefault 设置为6 )
  这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)
  三、运行级别的配置
  运行级别的配置是在/etc/inittab行内进行的,如下所示:
  12 : 2 : wait : / etc / init.d / rc 2
  第一个字段是一个任意指定的标签;
  第二个字段表示这一行适用于运行那个级别(这里是2);
  第三个字 段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。
  第四个字段中的命令执行设置运行级别时的一切“杂活”。它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。根据Linux版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。
  init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:
  id : 2 : initdefault :
  你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。比如说,内核命令行参数的指定可通过LILO来执行。这样一来,你就可以选择单用户模式了(即运行级别1)。
  系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时, init 就会从/etc/inittab运行相应的命令。
  四、/etc/inittab中的特殊配置
  /etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如:
  1. powerwait
  允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P S并通知init电源已被切断的软件。
  2. ctrlaltdel
  允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。
  3. sysinit
  系统启动时准备运行的命令。比如说,这个命令将清除/tmp。
  上面列出的特殊关键字尚不完整。其他的关键字及其使用详情,可参考你的inittab手册页。
  五、在单用户模式下引导
  一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登 录。单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀 死。
  一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。内核启动时,在内核命令行指定single或 emergency关键字,就可进入运行级别1了。内核同时也为init指定命令行, init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。
  有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。
  如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。这样做是为了防止系统使用不连贯的文件系统,这个文件系 统是f s c k不能自动修复的。文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。
  由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动 盘)。
  不同的运行级有不同的用处,也应该根据自己的不同情形来设置。
  例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入:
  init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级

分享到:
评论

相关推荐

    tty_init.rar_linux tty_init

    本文将深入探讨“linux tty_init”这一主题,解析Linux控制终端的初始化过程以及`kprint`如何将字符打印到终端的基本原理。 首先,让我们了解“tty_init”在Linux启动过程中的角色。在Linux内核初始化阶段,`tty_...

    zeromq, zmq_init, 源码

    3. **I/O多路复用器设置**:zeromq使用了epoll(Linux)、kqueue(FreeBSD)、IOCP(Windows)等操作系统级别的I/O多路复用技术,`zmq_init`会根据运行平台选择合适的多路复用器并进行初始化。 4. **上下文参数设置...

    ecshop_init.php文件分析

    此外,根据操作系统目录分隔符的不同(Windows使用反斜杠,Linux/Unix使用正斜杠),ecshop_init.php还会相应地调整`include_path`设置,确保在不同平台下都能正确加载所需的类库和文件。 ### 引入配置文件 最后,...

    embedded_linux_kernel_and_drivers

    #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> static int __init hello_init(void) { printk(KERN_ALERT "Good morrow to this fair assembly.\n"); return 0; } static void __...

    service_init

    在Linux或Unix等操作系统中,服务初始化(Service Initialization)是指系统启动时对各种服务进行配置和启动的过程,确保系统能够正常运行所需的各种服务。在这个场景下,"fcscgw-service_init.zip"是一个压缩包文件...

    linux init.d目录理解

    ### Linux Init.d 目录理解 #### Linux 引导过程 Linux 系统的启动流程是整个操作系统能够正常运行的基础。通常来说,Linux 的启动流程可以分为几个阶段:硬件自检(POST)、加载内核(Bootloader)、初始化系统...

    Linux的init进程启动过程

    在大多数Linux发行版中,启动脚本位于/etc/rc.d/init.d目录下,它们通过ln命令链接到/etc/rc.d/rcn.d目录,这里的n代表对应的运行级别。这些脚本负责启动和停止对应运行级别所需的服务。 /etc/inittab文件中还有...

    Linux_Keyboard.rar_ARM Linux_arm 键盘_s3c_键盘 arm_键盘 linux

    "Init.s"则可能是一个汇编语言文件,用于完成驱动程序的初始化,比如设置中断向量、配置GPIO引脚等底层操作,这些操作通常需要更低级别的控制。 标签中的"arm_linux"、"arm_键盘"、"s3c"、"键盘_arm"、"键盘_linux...

    Linux下init进程源码分析

    综上所述,`init`进程在Linux系统中的地位举足轻重,它不仅负责系统的初始化和运行级别的控制,还承担着进程管理、服务监控和系统维护等关键职责。通过深入理解`init`的源码和配置机制,可以更好地掌握Linux系统的...

    Linux-init-process-analyse.pdf

    这个文档“Linux-init-process-analyse.pdf”深入探讨了INIT进程的工作原理,以及相关的代码和配置文件分析,为理解Linux系统的启动流程提供了宝贵的资料。 Linux的初始化过程可以分为几个阶段,首先是内核加载阶段...

    linux-文档_linux_linux编程_

    - **启动与关机**:了解系统的启动过程和不同运行级别。 - **服务管理**:使用systemd或init系统管理服务。 - **用户与组管理**:添加、删除用户,调整用户权限。 - **日志分析**:阅读和分析/var/log中的系统...

    linux-文档_linux_linux编程_源码.zip

    7. **调试技巧**:学会使用`strace`、`gdb`和`valgrind`等工具进行系统级和内存级别的调试,是解决复杂问题的关键。 8. **性能优化**:通过`perf`、`profiler`等工具进行性能分析,理解Linux的调度策略和内存管理...

    LINUX_c_SOURCE.zip_linux文件编程

    例如,GTK+中的`gtk_init()`初始化,`gtk_window_new()`创建窗口,`gtk_widget_show_all()`显示所有控件,`gtk_main()`启动事件循环。 总结,"LINUX_c_SOURCE.zip"压缩包提供了Linux环境下的C语言编程实践,涵盖了...

    linux引导过程.txt

    当内核完成基本初始化后,将调用`init()`进程,这个进程通常由`/sbin/init`程序实现,负责执行系统初始化脚本,这些脚本定义了系统的运行级别和相应的服务启动顺序。`init()`进程会执行`do_basic_setup()`函数,进行...

    linux内核启动分析

    11. **早期对象调试初始化** (`debug_objects_early_init()`):开启对象级别的调试支持。 12. **早期CGroup初始化** (`cgroup_init_early()`):初始化控制组(Control Group)机制,用于资源管理和隔离。 13. **...

    linux_boot_analysis.zip_linux启动_启动分析

    - `init`根据配置文件(如`/etc/inittab`或`/etc/systemd/system/default.target`)控制系统的运行级别和启动服务。 7. **运行级服务**: - 不同的运行级别对应不同的服务集合,如运行级别3是多用户无图形界面,...

    Linux init详解

    在 Linux 系统中,init 进程负责管理系统的运行级别,从 0 到 6 共有七个运行级别,每个运行级别对应不同的功能。 运行级别的配置是在/etc/inittab 文件中进行的,该文件是 init 程序寻找的主要文件。init 程序会在...

    eeprom.rar_eeprom linux_run

    驱动程序的编写需要遵循Linux内核的规范,如使用`module_init`和`module_exit`宏,以及适当的锁机制来确保并发访问的安全性。 6. **编译和加载驱动**:源代码需要被编译成内核模块,然后通过`insmod`或`modprobe`...

Global site tag (gtag.js) - Google Analytics