web-dev-qa-db-ja.com

ログインせずに.bashrcを編集する方法

これはおそらく重複する質問ですが、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そしてこの混乱を修正しますか?

17

CtrlAltF1 ホストによってキャプチャされているか、VirtualBoxがそれを正しく渡していない可能性があります。いくつかの簡単なテストで、VirtualBoxで定義されたHostキーを代わりに使用できることがわかりました CtrlAlt (左である可能性があります Ctrl、または左  Mac)。だから、押す F1 VirtualBoxでTTY1に切り替えました(同様に F7 GUIに戻る)。

13
muru

ライブLinux CDで起動してから、CentOSファイルシステムをマウントし、そこから.bashrcファイルを編集できます。

24
Charles Burge

Grub設定から/ bin/shを初期化

GUIに移動する代わりに、grub構成を編集してルートシェルをロードできます。

  1. VMを再起動します
  2. グラブメニューが表示されたら、最初のエントリを選択し、eを押して編集します。表示されない場合は、再起動して、起動中にShiftキーを押したままにします
  3. 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
    
  4. rorwに変更し(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
    
  5. Ctrl-Xを押して構成を実行します。保存されません。

  6. ルートシェルが表示されます。 .bashrcを編集して問題の行を削除します。

    シェルはPID 1として実行されるため、この状態でOSを使い続けることはできません。通常はinitプロセス用に予約されています。exec /sbin/initを使用して手動で初期化を続行できますしかし、私は再起動することをお勧めします

  7. 通常どおり再起動します。以前の変更は忘れられます。

基本的に、GRUBからLinuxに渡されるブートオプションを編集しています。これにより、Linuxにルートファイルシステムを読み書き可能でマウントし、initプロセスの/bin/shを開始するように指示します。

これは、Centos 7とVirtualBox 4.3.12を使用している場合に機能します

15
lex

修復された.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が使用可能な場合、どのファイル転送方法でも必要な処理を実行します。これは、修正されたログインファイルをインストールするだけです。

6
gws