linux中inittab文件详解

linux中inittab文件详解

2023年7月26日发(作者:)

linux中inittab⽂件详解###表⽰当前缺省运⾏级别为5(initdefault);id:5:initdefault: /*启动后进⼊图形界⾯,设为3则进⼊字符终端界⾯*/###启动时⾃动执⾏/etc/rc.d/t脚本(sysinit)在inittab⽂件中以#开头的所有⾏都是注释⾏。注释⾏有助于⽤户理解inittab⽂件,inittab⽂件中的值都是如下格式:label:runlevel:action:processlabel是1~4个字符的标签,⽤来标⽰输⼊的值。⼀些系统只⽀持2个字符的标签。鉴于此原因,多数⼈都将标签字符的个数限制在2个以内。该标签可以是任意字符构成的字符串,但实际上,某些特定的标签是常⽤的,在Red Hat Linux中使⽤的标签是:id ⽤来定义缺省的init运⾏的级别si 是系统初始化的进程ln 其中的n从1~6,指明该进程可以使⽤的runlevel的级别ud 是升级进程ca 指明当按下Ctrl+Alt+Del时运⾏的进程pf 指当UPS表明断电时运⾏的进程pr 是在系统真正关闭之前,UPS发出电源恢复的信号时需要运⾏的进程x 是将系统转⼊X终端时需要运⾏的进程runlevel字段指定runlevel的级别。可以指定多个runlevel级别,也可以不为runlevel字段指定特定的值。action字段定义了该进程应该运⾏在何种状态下:boot 在系统启动时运⾏,忽略runlevelbootwait 在系统启动时运⾏,等待init进程完成。忽略runlevelctrlaltdel 当Ctrl+Alt+Del三个键同时按下时运⾏,把SIGINT信号发送给init。忽略runlevelinitdefault 不要执⾏这个进程,它⽤于设置默认runlevelkbrequest 当init从键盘中收到信号时运⾏。这⾥要求键盘组合符合KeyBoardSigral(参见/usr/share/doc/kbd-*关于键盘组合的⽂档)off 禁⽌进⼊,因此该进程不运⾏once 每⼀个runlevel级别运⾏⼀次ondemand 当系统指定特定的运⾏级别A、B、C时运⾏powerfail 当init收到SIGPWR信号时运⾏powerokwait 当收到SIGPWD信号且/etc/⽂件中的电源状态包含OK时运⾏powerwait 当收到SIGPWD信号,并且init等待进程结束时运⾏respawn 不管何时终⽌都重新启动进程sysinit 在运⾏boot或bootwait进程之前运⾏wait 运⾏进程等待输⼊运⾏模式process字段包含init执⾏的进程,该进程采⽤的格式与在命令⾏下运⾏该进程的格式⼀样,因此process字段都以该进程的名字开头,紧跟着是运⾏时要传递给该进程的参数。⽐如/sbin/shutdown -t3 -r now,该进程在按下Ctrl+Alt+Del时执⾏,在命令⾏下也可以直接输⼊来重新启动系统。#特殊⽬的的记录  仔细学习例⼦⽂件,学习应⽤其中关于inittab的语法格式。该⽂件的⼤多数内容都可以忽略,因为超过⼀半的内容都是注释,剩余的⼀些⽂件内容主要是⽤来实现某些特殊的功能:  id 的值表明缺省的runlevel是3。  ud 的值可以唤醒/sbin/update进程,该进程为保持磁盘的完整性,将在对磁盘进⾏I/O操作之前清空整个I/O缓冲区。  pf、pr和ca的值只被特定的中断所调⽤。  如果系统是专⽤的X终端,则只需x的输⼊值。  getty进程来提供虚拟终端设备的服务,例如:  3:2345:respawn:/sbin/mingetty tty3  标签字段的值是3,3是设备tty3的数字后缀,tty3与相应的进程相关联,该getty进程可以启动的runlevel是2、3、4和5, 当该进程终⽌时,init马上就重新启动它。启动进程的路径名是/sbin/mingetty,该进程是实现虚拟终端⽀持的最⼩版本的getty,为tty3提供启动虚拟设备的进程。  si::sysinit:/etc/rc.d/t  该值告诉init程序运⾏/etc/rc.d/t脚本⽂件来初始化系统,该脚本⽂件与所有启动的脚本类似,它只是⼀个包含Linux的shell命令的可执⾏⽂件,注意输⼊的字符串必须包括该脚本的完整路径。不同版本的Linux存放该脚本的位置也不相同,但不⽤刻意去记忆这些位置,只需查看/etc/inittab⽂件即可,该⽂件中包含启动脚本⽂件的确切位置。# System ::sysinit:/etc/rc.d/tl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4###当运⾏级别为5时,以5为参数运⾏/etc/rc.d/rc脚本,init将等待其返回(wait)l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6###在启动过程中允许按CTRL-ALT-DELETE重启系统# Trap CTRL-ALT-DELETEca::ctrlaltdel:/sbin/shutdown -t3 -r now# When our UPS tells us power has failed, assume we have a few minutes# of power left. Schedule a shutdown for 2 minutes from now.# This does, of course, assume you have powerd installed and your# UPS connected and working ::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"# If power was restored before the shutdown kicked in, cancel :12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"###在2、3、4、5级别上以ttyX为参数执⾏/sbin/mingetty程序,打开ttyX终端⽤于⽤户登录,###如果进程退出则再次运⾏mingetty程序(respawn)# Run gettys in standard runlevels1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6###在5级别上运⾏xdm程序,提供xdm图形⽅式登录界⾯,并在退出时重新执⾏(respawn)# Run xdm in runlevel 5x:5:respawn:/etc/X11/prefdm -nodaemon以上⾯的inittab⽂件为例,来说明⼀下inittab的格式。其中以#开始的⾏是注释⾏,除了注释⾏之外,每⼀⾏都有以下格式:id:runlevel:action:process对上⾯各项的详细解释如下:1. id  id是指⼊⼝标识符,它是⼀个字符串,对于getty或mingetty等其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常⼯作。2. runlevel  runlevel是init所处于的运⾏级别的标识,⼀般使⽤0-6以及S或s。0、1、6运⾏级别被系统保留:其中0作为shutdown动作,1作为重启⾄单⽤户模式,6为重启;S和s意义相同,表⽰单⽤户模式,且⽆需inittab⽂件,因此也不在inittab中出现,实际上,进⼊单⽤户模式时,init直接在控制台(/dev/console)上运⾏/sbin/sulogin。在⼀般的系统实现中,都使⽤了2、3、4、5⼏个级别,在Redhat系统中,2表⽰⽆NFS⽀持的多⽤户模式,3表⽰完全多⽤户模式(也是最常⽤的级别),4保留给⽤户⾃定义,5表⽰XDM图形登录⽅式。7- 9级别也是可以使⽤的,传统的Unix系统没有定义这⼏个级别。runlevel可以是并列的多个值,以匹配多个运⾏级别,对⼤多数action来说,仅当runlevel与当前运⾏级别匹配成功才会执⾏。3. action  action是描述其后的process的运⾏⽅式的。action可取的值包括:initdefault、sysinit、boot、bootwait等:  initdefault是⼀个特殊的action值,⽤于标识缺省的启动级别;当init由核⼼激活以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运⾏级别。如果没有inittab⽂件,或者其中没有initdefault项,init将在控制台上请求输⼊runlevel。  sysinit、boot、bootwait等action将在系统启动时⽆条件运⾏,⽽忽略其中的runlevel。  其余的action(不含initdefault)都与某个runlevel相关。各个action的定义在inittab的man⼿册中有详细的描述。4. process  process为具体的执⾏程序。程序后⾯可以带参数。#第三部分:系统初始化在init的配置⽂件中有这么⼀⾏:si::sysinit:/etc/rc.d/t它调⽤执⾏了/etc/rc.d/t,⽽t是⼀个bash shell的脚本,它主要在init的配置⽂件中有这么⼀⾏:它调⽤执⾏了/etc/rc.d/t,⽽t是⼀个bash shell的脚本,它主要在init的配置⽂件中有这么⼀⾏:si::sysinit:/etc/rc.d/t它调⽤执⾏了/etc/rc.d/t,⽽t是⼀个bash shell的脚本,它主要是完成⼀些系统初始化的⼯作,t是每⼀个运⾏级别都要⾸先运⾏的重要脚本。它主要完成的⼯作有:激活交换分区,检查磁盘,加载硬件模块以及其它⼀些需要优先执⾏任务。  t约有850多⾏,但是每个单⼀的功能还是⽐较简单,⽽且带有注释,建议有兴趣的⽤户可以⾃⾏阅读⾃⼰机器上的该⽂件,以了解系统初始化所详细情况。由于此⽂件较长,所以不在本⽂中列出来,也不做具体的介绍。  当t程序执⾏完毕后,将返回init继续下⼀步。#第四部分:启动对应运⾏级别的守护进程  在t执⾏后,将返回init继续其它的动作,通常接下来会执⾏到/etc/rc.d/rc程序。以运⾏级别5为例,init将执⾏配置⽂件inittab中的以下这⾏:l5:5:wait:/etc/rc.d/rc 5  这⼀⾏表⽰以5为参数运⾏/etc/rc.d/rc,/etc/rc.d/rc是⼀个Shell脚本,它接受5作为参数,去执⾏/etc /rc.d/rc5.d/⽬录下的所有的rc启动脚本,/etc/rc.d/rc5.d/⽬录中的这些启动脚本实际上都是⼀些链接⽂件,⽽不是真正的rc 启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/⽬录下。⽽这些rc启动脚本有着类似的⽤法,它们⼀般能接受start、stop、restart、status等参数。  /etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的链接⽂件,对于以以S开头的启动脚本,将以start参数来运⾏。⽽如果发现存在相应的脚本也存在K打头的链接,⽽且已经处于运⾏态了(以/var/lock/subsys/下的⽂件作为标志),则将⾸先以stop为参数停⽌这些已经启动了的守护进程,然后再重新运⾏。这样做是为了保证是当init改变运⾏级别时,所有相关的守护进程都将重启。  ⾄于在每个运⾏级中将运⾏哪些守护进程,⽤户可以通过chkconfig或setup中的"System Services"来⾃⾏设定。常见的守护进程有:amd:⾃动安装NFS守护进程apmd:⾼级电源管理守护进程arpwatch:记录⽇志并构建⼀个在LAN接⼝上看到的以太⽹地址和IP地址对数据库autofs:⾃动安装管理进程automount,与NFS相关,依赖于NIScrond:Linux下的计划任务的守护进程named:DNS服务器netfs:安装NFS、Samba和NetWare⽹络⽂件系统network:激活已配置⽹络接⼝的脚本程序nfs:打开NFS服务portmap:RPC portmap管理器,它管理基于RPC服务的连接sendmail:邮件服务器sendmailsmb:Samba⽂件共享/打印服务syslog:⼀个让系统引导时起动syslog和klogd系统⽇志守候进程的脚本xfs:X Window字型服务器,为本地和远程X服务器提供字型集Xinetd:⽀持多种⽹络服务的核⼼守护进程,可以管理wuftp、sshd、telnet等服务这些守护进程也启动完成了,rc程序也就执⾏完了,然后⼜将返回init继续下⼀步。#第五部分:建⽴终端  rc执⾏完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。init接下来会打开6个终端,以便⽤户登录系统。通过按Alt+Fn(n对应1-6)可以在这6个终端中切换。在inittab中的以下6⾏就是定义了6个终端:1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6  从上⾯可以看出在2、3、4、5的运⾏级别中都将以respawn⽅式运⾏mingetty程序,mingetty程序能打开终端、设置模式。同时它会显⽰⼀个⽂本登录界⾯,这个界⾯就是我们经常看到的登录界⾯,在这个登录界⾯中会提⽰⽤户输⼊⽤户名,⽽⽤户输⼊的⽤户将作为参数传给login 程序来验证⽤户的⾝份。#第六部分:登录系统,启动完成  对于运⾏级别为5的图形⽅式⽤户来说,他们的登录是通过⼀个图形化的登录界⾯。登录成功后可以直接进⼊KDE、Gnome等窗⼝管理器。⽽本⽂主要讲的还是⽂本⽅式登录的情况:  当我们看到mingetty的登录界⾯时,我们就可以输⼊⽤户名和密码来登录系统了。  Linux的账号验证程序是login,login会接收mingetty传来的⽤户名作为⽤户名参数。然后login会对⽤户名进⾏分析:如果⽤户名不是root,且存在/etc/nologin⽂件,login将输出nologin⽂件的内容,然后退出。这通常⽤来系统维护时防⽌⾮root ⽤户登录。名不是root,且存在/etc/nologin⽂件,login将输出nologin⽂件的内容,然后退出。这通常⽤来系统维护时防⽌⾮root ⽤户登录。只有/etc/securetty中登记了的终端才允许root⽤户登录,如果不存在这个⽂件,则root可以在任何终端上登录。/etc /usertty⽂件⽤于对⽤户作出附加访问限制,如果不存在这个⽂件,则没有其他限制。  在分析完⽤户名后,login将搜索/etc/passwd以及/etc/shadow来验证密码以及设置账户的其它信息,⽐如:主⽬录是什么、使⽤何种shell。如果没有指定主⽬录,将默认为根⽬录;如果没有指定shell,将默认为/bin/bash。login程序成功后,会向对应的终端在输出最近⼀次登录的信息(在/var/log/lastlog中有记录),并检查⽤户是否有新邮件(在/usr/spool/mail/的对应⽤户名⽬录下)。然后开始设置各种环境变量:对于bash来说,系统⾸先寻找/etc/profile脚本⽂件,并执⾏它;然后如果⽤户的主⽬录中存在.bash_profile⽂件,就执⾏它,在这些⽂件中⼜可能调⽤了其它配置⽂件,所有的配置⽂件执⾏后后,各种环境变量也设好了,这时会出现⼤家熟悉的命令⾏提⽰符,到此整个启动过程就结束了。inittab ⽂档描述在系统引导及通常的操作期间, 都启动哪些进程(⽐如/etc/init.d/boot, /etc/init.d/rc, getty 等等).Init(8) 讨论有关runlevels (运⾏级) 的概念, 每⼀个运⾏级都有他⾃⼰启动进程的集合. 有效的运⾏级为0 -6 加上⽤于ondemand 条⽬的A , B 和C . inittab ⽂档中的每⼀个条⽬有如下的格式:id :runlevels :action :process以#’ 开头的⾏被忽略. **id** inittab ⽂档中条⽬的唯⼀标识, 限于1-4 个字符(假如是⽤版本号⼩于5.2.18 或 的库编译⽣成的sysvinit 程式, 则仅限于2个字符). 注意: 对于getty 或其他的注册进程, id 必须是响应的终端线路的tty 后缀, 如1 响应tty1 , 否则, 注册过程不能正常的⼯作. **runlevels** 列出发⽣指定动作的运⾏级. **action** 描述要发⽣的动作. **process** 要执⾏的进程. 假如process 域以⼀个+’ 开头, init 不会在utmp 和wtmp ⽂档中为此进程记帐. 这是由于getty ⾃⼰主持utmp/wtmp 记帐的需要, 同时这也是个历史遗留的漏洞.runlevels 域能够包含表⽰不同运⾏级的多个字符, 例如123 表⽰本进程在运⾏级为1, 2 和3 时都要启动. ⽤于ondemand 条⽬的runlevels 域能够包含A , B , 或C . ⽤于sysinit , boot , 和bootwait 条⽬的runlevels 域被忽略.当改变运⾏级时, 在新运⾏级中没有给出的那些正在运⾏的进程被杀死, 先使⽤SIGTERM 信号, 然后是 域能够使⽤的动作有:respawn该进程只要终⽌就⽴即重新启动(如getty).wait只要进⼊指定的运⾏级就启动本进程, 并且init 等待该进程的结束.once只要进⼊指定的运⾏级就启动⼀次本进程.boot在系统引导期间执⾏本进程. runlevels 域被忽略.bootwait在系统引导期间执⾏本进程. 并且init 等待该进程的结束(如/etc/rc). runlevels 域被忽略.off什么也不做.ondemand在进⼊ondemand 运⾏级时才会执⾏标记为ondemand 的那些进程. ⽆论怎样, 实际上没有改变运⾏级(ondemand 运⾏级就是a’,b’, 和c’). **initdefault**initdefault 条⽬给出系统引导完成后进⼊的运⾏级, 假如不存在这样的条⽬, init 就会在控制台询问要进⼊的运⾏级.process 域被忽略. **sysinit**系统引导期间执⾏此进程. 本进程会在boot 或bootwait 条⽬之前得到执⾏. runlevels 域被忽略. **powerwait**本进程在电源不⾜时执⾏. 通常在有进程把UPS 和电脑相连时通知init 进程, Init 在继续其他⼯作之前要等待此进程结束. **powerfail**类似powerwait , 但是init 不等待此进程完成. **powerokwait**在init 收到电源已恢复的通知后⽴即执⾏此进程. **powerfailnow**本进程在init 被告知UPS 电源快耗尽同时外部电源失败(⽆效) 时被执⾏. (假设UPS 和监控进程能够发现这样的情况). **ctrlaltdel**在init 收到SIGINT 信号时执⾏此进程. 这意味着有⼈在控制台按下了CTRL-ALT-DEL 组合键, 典型地, 可能是想执⾏类似shutdown 然后进⼊单⽤户模式或重新引导机器. **kbrequest**本进程在init 收到⼀个从控制台键盘产⽣的特别组合按键信号时执⾏. 对于此功能本⽂档尚未完成; 能够在 包中找到更多信息(在写作本⽂档时最新的是kbd-0.94). 当然您可能想为某些"KeyboardSignal" ⾏为映射组合键, 如为了映射(Alt-上箭头) 能够在键盘映射⽂档中 使⽤如下的⽅式:alt keycode 103 = KeyboardSignal`举例这是个和⽼的Linux inittab ⽂档类似的例⼦⽂档:inittab for linuxid:1:initdefault:rc::bootwait:/etc/rc1:1:respawn:/etc/getty 9600 tty12:1:respawn:/etc/getty 9600 tty23:1:respawn:/etc/getty 9600 tty34:1:respawn:/etc/getty 9600 tty4本⽂档在引导时执⾏/etc/rc 并且在ty1-tty4 上启动getty 进程.⼀个更详尽的inittab 会有不同的运⾏级(参考本⾝的注释):进⼊默认的运⾏级id:2:initdefault:在进⾏其他⼯作之前先完成系统初始化.si::sysinit:/etc/rc.d/bcheckrc运⾏级0 挂起系统, 6 重新引导, 1 单⽤户模式.l0:0:wait:/etc/rc.d/1:1:wait:/etc/rc.d/l2:2345:wait:/etc/rc.d/6:6:wait:/etc/rc.d/“3 个键” 按下时要做的⼯作.ca::ctrlaltdel:/sbin/shutdown -t5 -rf now运⾏级2和3: 在控制台⽣成getty 进程, 运⾏级为3时在modem 上⽣成getty.1:23:respawn:/sbin/getty tty1 VC linux2:23:respawn:/sbin/getty tty2 VC linux3:23:respawn:/sbin/getty tty3 VC linux4:23:respawn:/sbin/getty tty4 VC linuxS2:3:respawn:/sbin/uugetty ttyS2 M19200⽂档/etc/inittabzylonite 上是::sysinit:/etc/init.d/rcSttyS0::respawn:-/bin/shttyS1::respawn:-/bin/shttyS2::respawn:-/bin/shtty1::respawn:-/bin/shtty2::respawn:-/bin/sh::ctrlaltdel:/bin/umount -a -rfedra 3 上是inittab This file describes how the INIT process should set upthe system in a certain : Miquel van Smoorenburg,Modified for RHS Linux by Marc Ewing and Donnie BarnesDefault runlevel. The runlevels used by RHS are:0 - halt (Do NOT set initdefault to this)1 - Single user mode2 - Multiuser, without NFS (The same as 3, if you do not have networking)3 - Full multiuser mode4 - unused5 - X116 - reboot (Do NOT set initdefault to this)id:3:initdefault:System ::sysinit:/etc/rc.d/tl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6Trap CTRL-ALT-DELETEca::ctrlaltdel:/sbin/shutdown -t3 -r nowWhen our UPS tells us power has failed, assume we have a few minutesof power left. Schedule a shutdown for 2 minutes from does, of course, assume you have powerd installed and yourUPS connected and working ::powerfail:/sbin/shutdown -f -h +2 “Power Failure; System Shutting Down”If power was restored before the shutdown kicked in, cancel :12345:powerokwait:/sbin/shutdown -c “Power Restored; Shutdown Cancelled”Run gettys in standard runlevels1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6Run xdm in runlevel 5x:5:respawn:/etc/X11/prefdm -nodaemon

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690379270a340655.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信