私は最小限のLinuxシステムを持っています。
init /bin/bash
、最小限のライブラリだけが静的に満たされ、デーモンは/lib/
実行/dev/
されません(udev、..なし)。
Bashが起動すると、次のエラーが発生します。
bash: cannot set terminal process group (-1) inappropriate ioctl for device
bash: no job control in this shell
straceを使用してbashを起動すると、次のような出力が表示されます。
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
....
readlink("/proc/self/fd/0", "/dev/console"..., 4095) = 12
stat("/dev/console", {st_mode=S_IFCHR|0600, st_rdev=makedev(5, 1), ...}) = 0
open("/dev/console", O_RDWR|O_NONBLOCK) = 3
Bashを開くことができないようです/dev/tty
。ただし、/dev/tty
存在/dev/
し、正しい権限があります。
ll /dev/tty*
crw-rw-rwT 1 root root 5, 0 2014-Sep-29 23:39:47 dev/tty
crw------T 1 root root 4, 0 2015-Dec-23 20:10:18 dev/tty0
crw------T 1 root root 4, 1 2015-Dec-23 20:10:18 dev/tty1
なぜbash
開けないのです/dev/tty
か?このエラーはどういうENXIO
意味ですか?
ベストアンサー1
初期化は
/bin/bash
私が言ったようにhttps://unix.stackexchange.com/a/197472/5132、init=/bin/sh
「API」ファイルシステムがマウントされていないタイプexit
(https://unix.stackexchange.com/a/195978/5132)、通常、システムを最小限に使用可能にする操作を手動で実行することは(スーパー)ユーザーに委ねられます。
これらのタスクの1つ(明らかにタスク制御シェルを使用したい場合)は次のとおりです。制御端末のインポート。 /dev/tty
実際の端末装置ではありません。開いているプロセスの制御端末にリダイレクトするデバイスです。その場合いいえ、プロセス#1が起動しなかったため、デバイスを開くことができませんでした(実際のシステム管理者プログラムがプロセス#1として実行されているときは常に発生します)。
あなたのシステムはまた最低限の。制御端末をセットアップし、適切なセッションを初期化し、適切で完全なシャットダウンなどの最も基本的なシステム管理タスクのいくつかを実行し、タスク制御シェルを実行するプログラムを実行する必要があります。
追加読書
- アランコックス(2009-04-06)。Linux 割り当てデバイス。 2.6+。 kernel.org.