ぎゃああぁぁぁ
僕がMacのホームディレクトリを削除するに至った経緯と、復元するまでの道のり | CreativeStyle具体的に何をしたのか。それは、以下のコマンドの実行です。$ rm -rf ~/
でもこれ、すごいやりがち。
やりがちなのになんでそれよりおっちょこちょいなはずな私がもう30年近くものあいだ難を逃れているかを披露しておくことにする。
以下、それぞれtcsh版とbash版を。zsh版はどなたかよろしく。
alias
上記の例は、実はこれだけで防ぐことが出来ていた。
tcshalias rm 'rm -i'bash
alias rm='rm -i'
要するに、rm
と打ったらrm -i
を意味するようにしておくわけだ。i
なきrm
は、依然\rm
(頭にbackslash)ないし/bin/rm
(full path)でアクセスできるので、こうすることによって不意なファイル削除を未然に防ぐことができる。同様の設定は、mv
にも施しておいた方がよいだろう。
その歴史は古く、tなしのcshまで遡れる。tcshが出たのが私が大学生だった時代で、その頃の.cshrc
にはすでにこの設定をしていたのをよく覚えている。
noclobber
ファイルを不用意に損なうリスクは、rm
やmv
といったファイル操作以外にもある。シェルのリダイレクトだ。たとえば
% cat foo >> bar
のつもりで
% cat foo > bar
と打ってしまったらどうだろう。barに元々あった情報はfooの中身で完全に置き換わってしまう。これはaliasでは防げない。
それを防いでくれるのが、noclobber
オプション(bash)/shell変数(tcsh)。
set noclobberbash
set -o noclobber
こうしておくことで、ファイルが存在した場合エラーで止まってくれる。
% date > foo % date > foo foo: File exists.
本当に上書きしたい時には、bashでは>|
、tcshでは>!
を>
の代わりに使うだけだ。
su(do)?時の工夫
ユーザーより怖いのは、スーパーユーザー。
上記の例ではホームディレクトリーで済んだが、仮にsu
していた状態で
$ rm -rf /
としてたらどうなるか?昨今のrm
はこれを特例として扱う場合が多いそうだけれども、そうとは限らない上、恐ろしいことにこれはホームディレクトリーをバルスするより一文字も短い。
自分がスーパーユーザーであることを見落とさないように、私はいくつか工夫している。
まず、プロンプトをユーザー時とスーパーユーザー時に変えている。
dankogai@dan-imac122[1024]:~% sudo -s Password: root@dan-imac122[1025]:~#
おっさんゆえプロンプトはユーザー名を変えて太字にしているだけだが、赤くするなり反転するなりもっとどぎつい設定にしておいてもよいかもしれない。
さらにスーパーユーザーでない時には{,/usr,/usr/local}/sbin
はPATH
に入れないようにしている。sudo
のおかげでいちいちスーパーユーザーにsu
しなくともスーパーユーザー権限が使えるようになったのはよいけれども、これはかえって心の切り替えがないということで危なくもある。こうしておくことで、sudo
で通常ユーザーからスーパーユーザーコマンドを発行する際もフルパスを入力しなければならず、危険を未然に防ぐことができるし、補完があるおかげで面倒臭さもそれほどない。
おまけ
tcshもbashも、ワイルドカードをctrl-X+*
で展開できる。
% rm *ctrl-X + shift-8
↓
% rm homura kyoko madoka mami sayaka
まとめ
「Unixという考え方」UNIXシステムは、初心者にピストルどころか突撃銃を押しつけ、20発の弾を込めた上で、銃口を足に向けさせてやる
けだし名言。とはいえこの突撃銃には一応安全装置がついているのである。早めに使い方を覚えておこう。自分の頭や心臓をぶちぬく前に。
Dan the Unix User for 0x20 Years
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。