これはおそらく重複する質問ですが、CentOSのログイン/ブートプロセス(特にVMの場合)を十分に理解していないため、何を検索すればよいかわかりません。
VirtualBoxでCentOS 7を実行しています。 gnome-terminal
ファイルの最後に誤って~/.bashrc
を追加しました。そのため、ログインするとターミナルウィンドウがポップアップします。そのターミナルセッションは.bashrc
を実行し、別のウィンドウなどを開きます。大量のgnome-terminal
ターミナルウィンドウが殺到しています。
GUIログインなしでターミナルセッションにログインしようとしています(そのためgnome-terminal
が失敗します)が、GUIなしでは起動できません。この質問への回答を使用してみましたが、成功しませんでした。毎回GUIログインを取得します: CLIでCentOSを起動するには? 。起動時にGRUB構成を編集する別の方法、またはUbuntuのCtrl + Alt + F1など、GUIログインから新しいターミナルインスタンスにアクセスする方法はありますか? (はい、試しました。CentOS7では機能しないか、VirtualBox VMでは機能しません。)または、GUIなしでターミナルセッションを取得できる他の方法があります。 .bashrc
そしてこの混乱を修正しますか?
CtrlAltF1 ホストによってキャプチャされているか、VirtualBoxがそれを正しく渡していない可能性があります。いくつかの簡単なテストで、VirtualBoxで定義されたHostキーを代わりに使用できることがわかりました CtrlAlt (左である可能性があります Ctrl、または左 ⌘ Mac)。だから、押す ⌘F1 VirtualBoxでTTY1に切り替えました(同様に ⌘F7 GUIに戻る)。
ライブLinux CDで起動してから、CentOSファイルシステムをマウントし、そこから.bashrcファイルを編集できます。
GUIに移動する代わりに、grub構成を編集してルートシェルをロードできます。
e
を押して編集します。表示されない場合は、再起動して、起動中にShiftキーを押したままにしますlinux16
またはlinux
で始まる行を見つけます。鉱山はこんな感じ。あなたのものは少し異なる場合があります
linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8
ro
をrw
に変更し(readonlyフラグをreadwriteに変更して、変更を書き込むことができるようにします)、行にinit=/bin/sh
を追加します。これは、起動時にinit
ではなく/bin/sh
を実行するようにlinuxに指示します。私のエントリーの例
linux16 /vmlinuz-3.10.0-327.18.2.el7.x86_64 root=/dev/mapper/centos-root rw crashkernal=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF8 init=/bin/sh
Ctrl-Xを押して構成を実行します。保存されません。
ルートシェルが表示されます。 .bashrc
を編集して問題の行を削除します。
シェルはPID 1として実行されるため、この状態でOSを使い続けることはできません。通常はinit
プロセス用に予約されています。exec /sbin/init
を使用して手動で初期化を続行できますしかし、私は再起動することをお勧めします
通常どおり再起動します。以前の変更は忘れられます。
基本的に、GRUBからLinuxに渡されるブートオプションを編集しています。これにより、Linuxにルートファイルシステムを読み書き可能でマウントし、initプロセスの/bin/sh
を開始するように指示します。
これは、Centos 7とVirtualBox 4.3.12を使用している場合に機能します
.bashrc
のコピーをscpします別のマシンで作業する場合は、壊れたファイルをコピーして問題を修正し、元の場所に戻します。これにより、ログインやログインコマンドの呼び出しが回避されます。
user@backup ~ $ scp user@homehost:~/.bashrc busted.bashrc
user@backup ~ $ vim busted.bashrc # fix, fix
user@backup ~ $ scp busted.bashrc user@homehost:~/.bashrc
user@backup ~ $ rm busted.bashrc
補遺:OPが以下に指摘するように、これにはhomehost
へのSSHアクセスが必要です。これがオプションではないが、代わりにFTP/SFTPが使用可能な場合、どのファイル転送方法でも必要な処理を実行します。これは、修正されたログインファイルをインストールするだけです。