読者です 読者をやめる 読者になる 読者になる

Linux で環境変数 PATH を上書きしてしまった場合の対処法

Linux環境変数 PATH を上書きしてしまった場合の対処法
How to restore the overwritten $PATH environment variable


[環境]
大学が管理しているLinuxサーバー(Red Hat)
自分のアカウントにログインしていろいろ設定ファイルを修正している際に問題が発生。


[トラブル]
PythonのAnacondaを入れようとして、.cshrc ファイルで

正しくは
# ===correct===
setenv PATH /n/Users/__myname__/anaconda2/bin:${PATH}
# =============

とすべきところを、誤って
# ===wrong===
setenv PATH /n/Users/__myname__/anaconda2/bin
# ===========

としてしまった。

(wrong) だと、PATHが上書き(overwrite)されている。

そのため、
$ more ***
$ mv **** ***

だとか、いろんなコマンドが利用できなくなった。
(例)
mv: Command not found


[解決策]

(1)$HOMEディレクトリ上で
$ bin/vi .cshrc

(2)
vi画面に切り替わるので、まずは上記の「wrong」なPATHの設定部分をコメントアウトする。
===
# wrong!!!
# setenv PATH /n/Users/__myname__/anaconda2/bin #wrong!!!!!
# wrong!!!
===
のようにしたら、viを保存+終了(:wq)する。

(3)
サーバーからログアウトする。

(4)
サーバーに再度ログインする。

(5)$HOMEディレクトリ上で
$ bin/vi .cshrc
として、今度は正しいPATHの設定を書き込む。
#===correct===
setenv PATH /n/Users/__myname__/anaconda2/bin:${PATH}
#=============
のようにしたら、viを保存+終了(:wq)する。

(6)$HOMEディレクトリ上で
$ source .cshrc
とすれば完了。

(7)確認
$ echo $PATH
/n/Users/__myname__/anaconda2/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin


====
[番外]
どうやってviを見つけたか。

$HOMEディレクトリ上で、

$ cd /bin/
と押したあと、タブキーを押す。つまり、
$ cd /bin/[__Press_Tab_Key__]
とすると、

cd /bin/
alsaunmute* cgset* dbus-cleanup-sockets* echo* gettext* kill* mailx* nisdomainname@ rmdir* stty* true* zcat*
arch* cgsnapshot* dbus-daemon* ed* grep* link* mkdir* ping* rnano@ su* ulockmgr_server*
awk@ chgrp* dbus-monitor* egrep@ gtar@ ln* mknod* ping6* rpm* sync* umount*
basename* chmod* dbus-send* env* gunzip* loadkeys* mktemp* plymouth* rvi@ tar* uname*
bash* chown* dbus-uuidgen* ex@ gzip* logger* more* ps* rview@ taskset* unicode_start*
cat* cp* dd* false* hostname* login* mount* pwd* sed* tcsh* unicode_stop*
cgclassify* cpio* df* fgrep@ ipcalc* ls* mountpoint* raw* setfont* touch* unlink*
cgcreate* csh@ dmesg* find* iptables-xml@ lsblk* mv* readlink* setserial* tracepath* usleep*
cgdelete* cut* dnsdomainname@ findmnt* iptables-xml-1.4.7@ lscgroup* nano* red* sh@ tracepath6* vi*
cgexec* dash* domainname@ fusermount* kbd_mode* lssubsys* netstat* redhat_lsb_init* sleep* traceroute* view@
cgget* date* dumpkeys* gawk* keyctl* mail@ nice* rm* sort* traceroute6@ ypdomainname@

といろいろ出てくる。ここで「vi」を見つけた。