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の調子が悪かったら、ログアウトかシャットダウンをすると治っていたので、今回もそんな感じだろうと思っていました。
しかし今回は、ログインも出来なくなってしまいました。ログイン画面は表示されるが、パスワードを入れてログインすると、またログイン画面に戻ってくる。
(鈴木奈々風に)「すごく焦った。すごく焦った。」
たまたまプロジェクトがリリース前で、やることが無く少なかったので、助かりましたが。
治し方
いろいろ調べて、こうしてブログもかける様になりました。以下解決法です。
- まず、ログイン画面のところで、Ctrl + Alt + F2(環境によってはF1?) を押します。すると、コマンドラインが表示されてログイン出きるようになるので、ログインします。
- コマンドラインに
$PATH
と入力して、環境変数を確認します。私の場合は、ここがおかしくなっていました。 次のコマンドで環境変数を設定し直します。するとls等のコマンドが使えるようになるはずです。
export PATH="$PATH:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
次のコマンドで ~/.bashrc, ~/.bash_profile を削除します。
rm ~/.bashrc ~/.bash_profile
centosを再起動してログイン画面からログインします。
参考
以下のブログに助けられました。ありがとうございます。
Linuxの環境変数PATHをいじっていて、lsを実行するとcommand not foundになってしまった。 - farundorLog
以上。
追記
シェルの変更 2017/4/12
上記の手順後シェルが/bin/bashになっていました。現在のシェル確認コマンドはecho $SHELL
です。
以前のシェルtcshだと、[railsdev@os名:カレントディレクトリ]となっていて分かりやすかったので、デフォルトで使うシェルをtcshへ戻す手順を書いておきます。
- シェルの一時的な変更はそのままシェルの名前(tcsh)をコマンドみたいに入力するだけです。 戻るときは
exit
で元のシェルに戻ります。 - デフォルトシェルに設定するには
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
で内容を読み込みます