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


17

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


4
あるsshdそのVMにアップ?たくさんの方法。1)シングルユーザーモードとして起動します(ブート時に入力、カーネルを選択、aを押し、シングルを追加、入力...)2)VMシステムでsshdを実行し、.bashrc変更をコピーしてコピーバックできる場合( scp、sftp rsync ...)。3)あなたは、別のユーザーとしてログインして行うことができますsu -... 4)別のマシン(仮想でも)あなたができることからssh user@host mv .bashrc bashrcToModify、その後、変更... 0、ログ)すべての前にいCTRL ALT F1VMから仕事を?
ヘイスター

2
「誤って追加されたgnome-terminal」と言うとき、それはどのように起こりましたか?
mcfedr

@mcfedr誰かがXDに尋ねるのを待っていました。私は何の.bashrcためだったのか誤解していました。ログイン時に一度実行されると思っていましたが、シェルセッションが開始されるたびに実行されます。サインインするたびにターミナルウィンドウがポップアップするようにしたかったので、そうしましたecho 'gnome-terminal' >> ~/.bashrc。悪いアイデア。私は私が入れなければならない推測gnome-terminalでは/etc/init.dどこか?私はまだブートプロセスを理解しようとしています。
マイケルホフマン

回答:


13

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


1
うん。うまくいきました。Ctrl + F2が私のためのトリックをしました。Ctrl + F1はCentOSのGUIセッションのように見えますが、同じ原理です。IMOこれは最も簡単なソリューションです。追加のメディアやブート構成の編集は不要です。これを答えとしてマークしています。
マイケルホフマン

2
@MichaelHoffmannはい、それは私が持っているよりも新しいCentOSの影響でしょう。GDMの動作は、TTY 7の代わりに最初に利用可能なTTYを使用するように6と7の間で変更されました。
muru

2
将来のリリースでさらに変更されます:ログイン画面はvconsole 1になり、ログインした各グラフィカルユーザーは後続の各vconsoleを占有します(ログインすると、次のユーザーをユーザー切り替えた場合、セッションはvconsole 2になります) vconsole 3など)。
マイケルハンプトン

24

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


2
最も簡単なソリューション。また、(あなたは何が間違っていると、それを逆にする方法を知っている限り。)にログインしたりしても、完全に起動を妨げる設定ミスのために働く
アレクシス

これは非常に簡単です。特にVirtualBoxユーザーがゲストOSのISOを保持していることがほぼ保証されている場合はなおさらです。しかし、私はmuruの答えを選択する必要があるのではないかと思っています。貢献していただきありがとうございます。
マイケルホフマン

15

GRUB構成からInit / bin / sh

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

  1. VMを再起動します
  2. GRUBメニューが表示されたら、最初のエントリを選択し、を押し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. roto rw(変更を書き込むことができるようにreadonlyフラグをreadwriteに変更)を変更init=/bin/shし、行に追加します。これにより、Linux は起動時では/bin/shなく実行さinitれます。私のエントリーの例

    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、問題のある行を削除し。

    シェルは通常initプロセス用に予約されているPID 1として実行されるため、この状態でOSを使用し続けるべきではないことに注意してください。手動でinitを続行できますがexec /sbin/init、再起動することをお勧めします

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

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

これは、Centos 7とVirtualBox 4.3.12を使用して動作します


うーん...それは完璧に機能しました(そして少し不安なことに、誰かが私のラップトップにこれをして資格情報なしでルートシェルに到達することができますか?)しかし、シェルを終了したときにカーネルパニックが発生したため、これを回答としてマークできるかどうかわかりません... これが機能する理由を説明できますか?何rorw?それとも、Linux16のマンページはありますか?私はここで何をしているんだ?
マイケルホフマン

5
@MichaelHoffmannこれは、ルートを取得するための標準的なよく知られた方法です-これをブロックするには、ブートローダーをパスワードで保護する必要があります。initが終了することはないため、カーネルパニックが発生しますが、そうでなければパニックは無害です。exec /sbin/init実際の起動方法を問わず、起動を続行できますinitroおよびrwオプションは、ルートが読み取り専用または読み書きをマウントします。基本的にGRUBメニューを編集して、これらのオプションでLinuxをブートするように指示します。これにより、Linuxにルートファイルシステムを読み書き可能にマウントし、initでshを起動します。
ムル

1
@muru私はあなたのコメントのいくつかを答えに加えて、物事をより明確にするのを助けました。
lex

6

scpの修復されたコピー .bashrcを所定の場所に

別のマシンを使用する場合は、破損したファイルをコピーして問題を修正し、元の場所に戻します。これにより、ログインやログインコマンドの呼び出しが回避されます。

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が以下で指摘しているように、これにはへのSSHアクセスが必要homehostです。それがオプションではなく、代わりにFTP / SFTPが利用可能な場合、ファイル転送方法は必要なことを行います。これは単に修正されたログインファイルをインストールすることです。


1
これはsshd動作しますが、VMが動作している場合(CentOSがデフォルトで動作するかどうかはわかりません)、ネットワークがVirtualBoxとホストおよびVMで正しく構成されている場合のみです。
マイケルホフマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.