先日、Linux(CentOS)で色々インストールしている時に、.bash_profileの編集を失敗してしまい、その結果ログインができなくなりました。回復するまでだいぶ手間取ったので方法を記しておきます。
回復条件:.bash_profileが削除されていないこと
ユーザーが2つ以上用意されていること
経緯
.bash_profileを編集した後、更新手続きをしてsuccessの文言を確認しようとしたところ、「コマンドが見つかりません」というメッセージが出ました。普通であれば直前の編集でミスがあったのかと思いもう一度やり直すかもしれませんが、この時の私はこのファイルの重要性を知りませんでした。また、ちょっと疲れていたので一旦ログアウトして後でやろうという選択をしました。
その結果、ログインできなくなりました。正確にいうと、ログインは出来ている(last Loginの時間が更新されていく)のですが、すぐにログアウトした状態になっているようで、ユーザー選択画面が表示され続けました。
このあたりでようやく事の自体を重く捉え始めました。最後に触った.bash_profileが原因だろうというのは明白でしたので.bash_profileについて調べてみました。
.bash_profileとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
https://wa3.i-3-i.info/word13650.html
Ubuntu で $ rm ~/.bashrc を実行してしまった
詳しいことはわかりませんでしたが、どうもログイン時に必ず読み込むファイルとのこと。つまりこのファイルがない、もしくはなんらかの要因で読み込めない場合、ログインできなくなると理解し始めた私はだんだん焦り始めました。
.bash_profileを削除はしていないけれど、編集に失敗している可能性は大いにありました。修正しないと以前のようにログインできないということがわかりました。
.bash_profileを使わずにログインできないか調べる
正規の方法でログインできない以上、ファイルを外部から操作できる方法がないかを調べてみました。その結果以下のような記事を見つけました。
bash_profileまたはbashrcを実行せずにログインする(ssh接続の方法)
.bash_profileの設定を間違えて、どんなコマンドも"command not found"になってしまったときの解決方法
suコマンドの使用
ssh接続は非常に良い手だと思いましたが、そもそもssh接続の設定は行っていなかったので、この方法は使えませんでした。
もう一つのsuコマンドの使用はなかなか良さそうでした。運良くユーザーを2つもっていたため使っていなかったユーザーを踏み台として、ログインが出来なかったユーザーへの切り替えまで成功しました(suコマンドについては以下を参考にしました)。
suコマンドでユーザーを切り替える
lsコマンドが使えないので追加する
.bash_profileを再編集するためにls -aコマンドを実行したのですが、通りませんでした。「コマンドが見つかりません」というメッセージが出ました。
この時はよくわかっていなかったのですが、.bashrcの中にそういうコマンド(エイリアス)がまとめて用意されているらしく、bash_profileを読み込ませなくしてしまった自分の環境ではコマンドが使えなくなっていたようです。
この時ようやく上記に添付したURL先の「exportで各種コマンドを実行できるようにする」の意味がわかりました。以下の記事を参考に、exportコマンドで$PATH(パス)を通すことにしました。
.bash_profileを修正し、再ログインしてみる
上記コマンド実行後、パスが追加された旨のメッセージが表示され、無事に.bash_profileが閲覧できるようになりました。閲覧時には前回編集した状態のままになっており、そのまま間違っている箇所を修正しました。
修正した後はexitでsuユーザーで切り替える前のユーザーに戻し、ログアウトしました。その後、完全にログアウトした後に、ログインできなくなっていたユーザーで再度ログインを試みたところ、少し時間はかかりましたが無事にログインすることが出来ました。
余談
・スペルミスを防ごう
自分が失敗していたのはディレクトリ追加後のパス通しのスペルミスです。「export PATH="~」と記述すべきところで「"」を追加し忘れていました。事前に記述しておいてコピペする手段を考えていたほうがよかったと思っています。
普段linuxを触らないので保存系で焦ってしまっていた点もあると思います。基礎中の基礎なので覚えておくことにします(自戒を込めて)。
viを終了することができない人のためのviの使い方
・ユーザー2つあって本当によかった
ログインユーザーが2つ用意されていなければ本当に詰みだったと思います。調べていた時にディストリビューション入れ直しした人の記事もあったので万が一はそうなるかもしれませんでした。ユーザーが2つあってよかったです。
今回は、「.bash_profileの編集を失敗してログインできなくなったときにどう回復したらいいか」を調べてみました。いかがでしたか。