我使用以下/etc/inittab文件(systemv):
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:5:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin
S0:12345:respawn:/sbin/getty -L 115200 ttyS0为了理解事情是如何运作的,如果你对1-3的回答能区分两种情况,我会很感激的:
问题:
si::sysinit:/etc/init.d/rcS命令,哪个getty将运行其他脚本的命令?(根据系统运行级别运行脚本的人)换句话说:在/etc/inittab文件中,我可以为不同的gettys分配不同的命令吗?(我指的是那些将由这些盖提斯开放的航站楼)发布于 2019-11-05 08:25:39
ttyS1的串行端口上打开一个终端。inittab中的行不是连续的,也不是与登录相关的。每一行描述在给定的一组运行级中要采取的操作。因此,si::sysinit:/etc/init.d/rcS指定init在处理系统初始化时应该运行/etc/init.d/rcS;这发生在登录之前。(详见这个inittab(5)命令页 )。要在特定的终端上为不同的gettys分配不同的命令,您可以配置getty调用本身,例如通过更改它启动的login程序(大多数getty实现中的-l选项):S0:12345:respawn:/sbin/getty -l 115200 -L /bin/my-t0-登录ttyS0 S1:12345:respawn:/sbin/getty -L 115200 -l /bin/my-t1-登录/etc/init.d/rc 5在登录之前运行,并且它运行的程序没有连接到终端(“正确”,这就是getty所做的--它为您打开终端并连接它启动的程序),所以当调用su nobody -c /bin/sh时,shell找不到它所期望的终端设置,因此禁用作业控制。sh-4.3$提示符在作为/bin/sh运行时是Bash4.3‘S默认提示符。getty使用的登录序列;但是这样的程序将作为root运行。根据您所追求的目标,您可能最好使用initscript而不是/etc/inittab自定义,或者sudo和shell的启动脚本。发布于 2019-11-05 11:09:00
刚才一秒钟(很长!)答案已张贴。我必须说,第一条解释得很好。目前,我想就第三点发表评论:这不是一个时间问题,而是控制一个“真实虚拟”tty的进程,而不仅仅是一个“控制台假人”。
在启动shell“具有作业控制”之前,必须设置打开ttyN。“泛型”命令是getty。从你得到的东西,你可以启动一个外壳,而不仅仅是在那之后。
这就像尝试首先启动一个窗口管理器,然后启动xorg,而不是将它们与xinit一起“引导”。我认为。“会议领袖”。
因为
xx:12:...:program相反地:
aa:1:...:pr_1
bb:1:...:pr_2...you得到一个N:M关系(如果你滥用了--很多RLs,每个RLs都有许多不同的程序)。你可以走得更远,但自从不同种类的RC-“标准”已经接管。"Runcoms“使用它们,inittab看起来很简单,但是所有的复杂性都在这些脚本中。
但是你的inittab看起来简单而正确--只有最后的注释和"z6“条目.
也许你的“苏没人”只是需要一个“盖蒂. ttyN”之前/周围。su而不是login,没有重生。至少应该给出另一条错误信息,而不是“不恰当”。
结论(阅读第二个答案后):你不需要一个复杂的init.d系统,原始的输入标签是足够灵活的。只要把概念和细节都弄清楚。
您可以设置三个运行级别:一个带有ttyNs,一个带有ttySN,另一个RL启动两者。它是一个引导参数,您可以添加到引导加载程序中。在您的情况下,运行级别"5“只是默认的。您可以选择一个内核、一个root=和一个要插入的运行级别。
“重生”行动实际上是需要sysvinit的。它做不到的更多,在脚本中实现的可能性也更小。但是,如果您退出(或崩溃)的“最后”shell级别,您需要一个安全网。
sysvinit甚至可以通过错误的“产生太快-忽略5分钟.”来检测错误配置。
https://unix.stackexchange.com/questions/550431
复制相似问题