webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

VM + CentOS6の環境変数をいじっていて、ゲストOSにログインできなくなったときの治し方

pathや環境変数まわりをいじっていると、コマンドが実行できなくなり、ログインも出来なくなってあせったので、同じような症状の方のためにメモを残しておきます。

経緯

windows上のvirtual boxでcentosを動かし、tensorflowのチュートリアルをやろうと思っていました。

すでにanacondaでpythonはインストール済みで、あとはtensorflowをインストールするだけ♪のはずでした、、、

しかし、「pyenvとanacondaのactivate衝突問題」というものがあるらしく、私もこの問題に引っかかってしまいました。

その中の解決法の一つに、「pathへanacondaのインストールpathを書き込む」という方法がありました。

その時のコマンド(実行しないでください)

$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
source ~/.bash_profile

を実行してみると・・・

症状

なぜかlsコマンドが出来なくなってる(コマンドが見つかりませんと出る)!

そこで、またいろいろ解決法を探していると、一旦ログアウトすれば大丈夫というのを見つけました。

これまでも、centosの調子が悪かったら、ログアウトかシャットダウンをすると治っていたので、今回もそんな感じだろうと思っていました。

しかし今回は、ログインも出来なくなってしまいました。ログイン画面は表示されるが、パスワードを入れてログインすると、またログイン画面に戻ってくる。

鈴木奈々風に)「すごく焦った。すごく焦った。」

たまたまプロジェクトがリリース前で、やることが無く少なかったので、助かりましたが。

治し方

いろいろ調べて、こうしてブログもかける様になりました。以下解決法です。

  1. まず、ログイン画面のところで、Ctrl + Alt + F2(環境によってはF1?) を押します。すると、コマンドラインが表示されてログイン出きるようになるので、ログインします。
  2. コマンドライン$PATHと入力して、環境変数を確認します。私の場合は、ここがおかしくなっていました。
  3. 次のコマンドで環境変数を設定し直します。するとls等のコマンドが使えるようになるはずです。 export PATH="$PATH:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

  4. 次のコマンドで ~/.bashrc, ~/.bash_profile を削除します。 rm ~/.bashrc ~/.bash_profile

  5. centosを再起動してログイン画面からログインします。

参考

以下のブログに助けられました。ありがとうございます。

Linuxの環境変数PATHをいじっていて、lsを実行するとcommand not foundになってしまった。 - farundorLog

http://pocketstudio.jp/linux/?%A5%D1%A5%B9%28PATH%29%A4%CE%B3%CE%C7%A7%A4%C8%C0%DF%C4%EA%CA%FD%CB%A1%A4%CF%A1%A9

以上。

追記

シェルの変更 2017/4/12

上記の手順後シェルが/bin/bashになっていました。現在のシェル確認コマンドはecho $SHELLです。

以前のシェルtcshだと、[railsdev@os名:カレントディレクトリ]となっていて分かりやすかったので、デフォルトで使うシェルをtcshへ戻す手順を書いておきます。

  1. シェルの一時的な変更はそのままシェルの名前(tcsh)をコマンドみたいに入力するだけです。 戻るときは exitで元のシェルに戻ります。
  2. デフォルトシェルに設定するにはchshコマンドを使います。
bash-4.1$ chsh
railsdev のシェルを変更します。
パスワード:
新しいシェル [/bin/bash]: /bin/tcsh
シェルを変更しました。

.bashrc, .bash_profileの復元 2017/4/13

スナップショットを取っていなければ0から書いていくことになります。基本的な内容は以下の通りだと思います。

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functionsse
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

export PATH=$PATH:$HOME/.local/bin:$HOME/bin

シェルがcsh系だとexportコマンドが使えないようなので、bashコマンドでシェルをbashにしておきます。

source .bashrc

で内容を読み込みます