2011年11月 8日

[gentoojp-users:02200] Re: mount の動作

おはようございます.
>
> > 「rm -rf /tmp/fooしようとしてrm -rf /をやってしまった」と言うこと
> > は話題に上ることがあるようです。
> > 少なくとも、誤操作による被害を「やむを得ない」と捉えているのではな
> > いでしょうか。
>
> この時点で,既に私には疑問があります.

> 誤操作と判断する基準はなんでしょうか?
> 「rm -rf /tmp/fooしようとしてrm -rf /をやってしまった」と言うのは典型的かつ極端な例ですが,
> 「rm -rf /がrm -rf /tmp/fooの誤操作で{ある,あった}」と判断{する,した}のは,あるいはすべきな
> のはどこの誰なのでしょうか?
> 私は,ユーザーだと思います.
>

言葉が悪かったと思います。木村さんがおっしゃるように OS にしてみれ
ば「誤操作」などはあり得ないわけで、「誤操作」は社会的な問題です。

> > このような感覚は linux の習俗で(linux では)一般化していると思います。
> > コマンドによって危険度が異なるのは衆知のとおりです、利用者は自己の
> > 能力の範囲内でコマンドを使用することが求められています。
> > mount も決して安全なコマンドとは言えません。
>
> ここで言う危険度とは何でしょうか?
> cpとmvはどちらが危険なのでしょうか?
> mountも含め,例え結果的に誤操作だったとしても,ユーザーに入力にされた
> 通り動作する事に安全も危険も表現として適当ではないと思います.
> 仮に,信頼性・安全性工学的な面での指摘であれば,それは別レイヤで十分
> 検討した上で対応すべき課題であると思います.
>

危険度とは「予測不能性」にあります。
一瞬にして /dev が消えてしまったとすれば、何が起きるのでしょう。
表示だけならば、嘘の表示になります。
なぜ、パニックにならないのか疑問に思います。

> > しかし、コマンドの実行と結果には必然性が無ければなりません。
> >
> > # mount /dev
> >
> > と言うコマンドと実行結果はコマンド mount として予想される
> > 状態でしょうか。
>
> 青田さんの説明に従えば,「コマンドの実行と結果には必然性」があります.
> コンピュータは思った通りには動きません.命令された通りに動きます.
> 上記のコマンドが完全に有り得ない命令であり,誤操作でしかなく,事前に禁止したいのならば,
>
> function trapped_mount() {
> [[ $# -eq 1 && $1 = "/dev" ]] && echo "Oops!" || mount $* ;
> }
> alias mount='trapped_mount'
>
> と.bashrcに書くなどの方法はあります.
>

これは良い方法ですね、 早速入れてみました。
[[ $# -eq 1 && $1 = "/dev" ]] && echo 'Oops!' || mount $* ;
と変更しました。

コマンドの実行結果の必然性は「明示」されてこそ効力を発生するものです。
「内規」で 機能が決定されているものはブラックボックスです。

マニュアルに記述のない機能が他の機能から類推出来るものならまだ良い
でしょうが、青木さんのような能力の高い方が直接ソースプログラムを解
析されて何が起こるかを判断しなければならないような機能が特別の指定
もなく動いてしまうと云うのは不発弾のように危険きわまりない存在です。

プログラム的に「起こってしまう」はシンプルではありません。
シンプルはコマンドの「社会性」の中にあるのです。

> 「だから,どうして最初からmountはそうなっていないのか?」と思うかもしれません.
> 私は今まで,mount /devを間違っても入力した事はありませんし,青田さんが説明
> する様な挙動をするとも知りませんでしたが,例えば,「/devを一時的に弄りたいが,
> 今の/devはとっておいて後で戻したい」と言うニッチな要求もあるかもしれません.
> 上記のtrapped_mountがmountにbuilt-inの場合,その様な要求は満たせません.
> 余計な安全装置が付いていないが故に,使い勝手が良いと言う面もあります.

マニュアルは開発者が利用者に対して行う約束です。
ユーザはマニュアルを頼りにコマンドを使用しています。
# mount /xxx
と指定した場合には fstab 中にあらかじめ定義したマウントポイント
/xxx にあらかじめ定義された装置がマウントするとあります。

# mount /dev

と実行された場合どこの定義に従って何がマウントされるのでしょう。

青木さんの説明だと /dev に tmpfs を新たに作成して マウントしてい
るので発生していると言うことです。
tmpfs 使用することで持ち込まれた現象が合目的に可用性を高めると言
うことでしょうか。現象を確認していませんが、/dev の内容が無くなる
と云うことは「大停電」です。もし、見えなくなるだけなら不要な機能で
す。
/dev を従来の方式から変更したときに持ち込んだ問題点だと思います。

> それは安全装置を後付出来ると言う点も含めてです.
>
> 勿論,限度と言うモノはあるでしょうが,以下の言葉に少し耳を傾けては如何でしょうか?
>
> There are two ways of constructing a software design: One way is to
> make it so simple that there are obviously no deficiencies and the
> other way is to make it so complicated that there are no obvious
> deficiencies.
>
> ― C.A.R. Hoare, The 1980 ACM Turing Award Lecture
>
> Unix is simple. It just takes a genius to understand its simplicity.
>
> ― Dennis Ritchie
>
> The best things are simple, but finding these simple things is not simple.
>
> ― bill http://stackoverflow.com/questions/58640/great-programming-quotes/1003525#1003525]
>
> Ingenious ideas are simple. Ingenious software is simple. Simplicity
> is the heart of the Unix philosophy.
>
> ― Anselm R Garbe http://suckless.org/manifest/]
>

情報はありがとうございます。

-- 早間


投稿者 xml-rpc : 2011年11月 8日 12:51
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/107165
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。