シングルユーザーモードで2番目のシェルを起動するにはどうすればよいですか?


14

これは用語の矛盾のように聞こえるかもしれませんが、最近、壊れたRAIDアレイを再構築しようとしてしばらく(数日!)シングルユーザーモード(別名メンテナンスモード)を使用する必要がありました。

これを行っている間、さまざまな構成ファイルの設定を確認/編集したり、メイン(および唯一の)コンソールがいくつかの回復プロセスを実行している間にシステムログを調べるなどの目的で2番目のシェルを使用したいことがわかりました。

別のttyで2番目のシェルを起動するための推奨コマンドは何ですか?

明らかに、1つの方法はscreentty1で使用することですが、Alt-F1、Alt-F2などでセッションを切り替えるだけの簡単さはありません。


4
screenそれと同じくらい簡単です。Ctrl APはAlt F1ほど
複雑で

以下のようなアプリのことは注目に値するscreentmuxTUIのウィンドウ管理のためには、常にトリックをしません。時々ではなく、実際のttyXデバイスが必要ですpts
パルティアショット

回答:


14

この状況専用に設計されたコマンドがありますopenvt。ただ、実行しますopenvt(。おそらくtty2)TTY1上のシェルから、あなたはすでにそれに何かを持っていなかった最初のtty上で実行中のシェルを見つけるあなたが役立つかもしれないいくつかのオプションがあります。openvtのマニュアルページを参照してください。

これはgettyによって管理されるログインではないため、新しいシェルを終了するときにログインプロンプトは表示されません。実行中のプロセスがないため、ttyは死んでしまいますが、シェルを終了するときに前後に切り替え(Alt-F1 Alt-F2)、画面の内容を確認することができます。このdeallocvtコマンドは、このゾンビのような状態にあるttyを破壊し、元の「Alt-F2は何もしない」状態に戻ります。

もともとこれらのコマンドは、と呼ばれopendisallocいましたが、最終的に誰かがそれらを変更することを決定しました。

昔は、キーボードドライバとinitがAlt + Upが実行されるように構成されていたためopen、新しいコンソールでシェルを生成するホットキーとして機能していました。あなたはまだ、その古い設定の残りをコメントアウトしてあなたのに見つけるかもしれません/etc/inittab。(を持たない派手な新しいinitを使用していない場合inittab

ここに同様の質問があります


3
ニース、私は知らなかったopenvt。+1。
jscott

これは、実際にはgettyよりもはるかに簡単に思えます。すでにインストールされていることに気づきませんでした。
StarNamer

RAIDアレイを修復するシングルユーザーモードのシステムで1週間以上費やしただけで、openvt非常に役立つことがわかったと報告したいと思います。新しいコマンドを通知してくれてありがとう。
StarNamer 14年

12

getty必要なttyに別のttyをスポーンできます。シングルユーザーモードで起動し、gettytty2で起動します。

root@host:~# /sbin/getty 38400 tty2 &

あなたは今かもしれAlt+ F2以上の新しいTTYへ。必要に応じて、追加のttyについて繰り返します。おそらく何かもっときれいなことをして、/etc/inittabこれをシングルユーザーモードで自動的に処理するように構成することができます。


これは私が探しているもののように見えます。次回は試してみます。
StarNamer 14年

それを試してみました。それは機能しますが、ログインセッションはから生成されinitないため、死んだ場合に再生成されません。
StarNamer 14年

実際、上記の例ではバックグラウンドにドロップしています。あなたは本当のVTの完全な提供が必要な場合は、ハッキングすることになるだろう/etc/inittab/etc/rc1.d/S??single非常に少なくとも。
jscott 14年

2

おそらく、使用して余分なシェルインスタンスなしで行うことができます JOB CONTROL、現在のシェルですること。のマンページに記載されていbash(1)ます。

デフォルトでCtrl+ Zシーケンスを使用してタスクを一時停止できますが、端末で別の方法で構成できますが、次の出力を確認してください。stty -a

$ stty -a | grep susp
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

次のコマンドを発行して、ジョブを確認できますjobs

# jobs
[1]   Stopped                 journalctl -f
[2]-  Stopped                 vim /etc/hosts
[3]+  Stopped                 tail -f /var/log/firewalld

それらの1つをフォアグラウンドに移動します。

$ fg %3

または、バックグラウンドで再開します。

$ bg %2

この方法には、screenまたはの多くの利点はありませんがtmux、状況によっては同様に役立つ場合があります。


要点は、初期コンソールで実行中のプロセスを中断したり、干渉したりしないことです。たとえば、実行中ddrescueに、これを行うように設定されていても、中断して再開したくはありません。
StarNamer14年

これに関するいくつかの問題。一つは、彼が彼のシェルとしてbashのを使用することはできません(使用することができcshtcshまたはzshそうそのmanページに言及すると、その際に不正確になり、例えば、)。別の場合、これは尋ねられた質問に答えません。
パルティアショット

1

tmuxやscreenなどの端末マルチプレクサーの使用を検討してください。

tmuxの詳細については、https//github.com/tmux/tmux/wikiをご覧ください。


質問ではこれについてすでに言及しています:「明らかに、1つの方法はtty1 *で画面使用することですが、これはAlt-F1、Alt-F2などでセッションを切り替えるだけの簡単さではありません。」
クリスティアンCiupitu 14年

クリスティアンが言うように、私はすでにscreen他のマルチプレクサがさらに過剰であると考え、感じていました。必要なのは、シンプルな2番目のコンソールだけです。
StarNamer 14年

ああ、すみません、screenあなたの質問を見落としていました。遅かった。
マーチンカミンスキー14年

2つのキーの組み合わせを使用すると、新しいTTYが生成され、それらに個別に固定されるなどの「過剰」になります。
mveroone 14年

IMO、それは「オーバーキル」の奇妙な定義ですが、ちょっと、誰かのために働くものは何でも、私はそれで大丈夫です;)
Marcin Kaminski 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.