某 unix における |
---|
ゴミ箱の図 |
「デスクトップ」といえば私にとって, それはりんご計算機の画面を意味する. りんご計算機の世界では, ファイルを抹殺してもゴミ箱に入るだけで, 「ゴミ箱を空にする」という操作を行わねば, ファイルは消えないのだ. りんご計算機でファイルが消えるという現象が, どのようにして実装されているの か, わしは知らんが, まあ, このように, うっかりファイルを抹殺してしまうと いうことが, 極力無いように配慮されているのである.
ところで, UNIX 方面でも, 細菌はじゃなく最近は「デスクトップ」が大流行り である. きっと, それを見た口うるさい昔からの りんごユーザは, 「だーから 言わんこっちゃない」と, 鼻の穴を広げているかも知れぬ. 過去の資産にすがっ て, 勝手に広げておれ. ところで, 卑しくも「デスクトップ環境」を名乗るのであれば, ファイル名 「*」を消すつもりで, つい
rm *しても, 復活できる, 人に優しい ものでなければなるまい. (*)
ext2 ファイルシステムを undelete できるようにする非公式パッチというのを 使って, カーネルをコンパイルした. ここ には, カーネルの各種非公式パッチが揃っていて, 怪しく楽しげな世界が 形成されているのだ. このパッチは, ある flag が on になっているファイルを rm すると, ゴミディレクトリに移動 され, flag は off になるというものだ. flag が off の時に rm すると, 普通に rm される. なんで, こんなのを持って来たかと言うと, gmc で undelete できるらしいの で, それと関係あるかと思って持って来たのだった. でも, このパッチは gmc とは全然関係無かった. gmc で undelete するには, e2fsprogs というパッケージに含まれるライブラリが必要なのだった. これは, さっき download してきたが, 残念ながら make すると parse error である. わけ判らん. Linux 用のプログラムだぜ.
まあ, GNOME で削除すると, 普通の rm だから, 現状でもゴミ箱ディレクトリに移動する ことには変わりは無い. それに, コマンドラインから rm したものも, ゴミ箱漁ればちゃんと復活可能だ. gmc の undelete よりも, こっちの方が便利かも. とりあえず, デスクトップから, ゴミ箱ディレクトリへの symlink をつけてみ た. 作者の意図とは違う形ではあるが, これで undelete はできている. ext2 ファイルシステムには, いろいろ余っている空間があって, 他にも普通の unix には存在しない機能を追加できるようだ.
パッチは, 単に圧縮された一個のファイルとして存在し, 使い方は書いてない. 使い方を知らないような奴は, 使うなということなのであ ろうか. しょうがないので, Linux のカーネルソースツリーの一番上で,
patch < patchfilenameとかやった. patch が, 何か文句たれまくってたが, とりあえず Config.help とかも修正さ れる, 非常に本格的でマジメなパッチである. make config して, config_experimental を 「Y」 にしとけば, (この記事読む人は, 当然 ここは Y で make してるよな) ext2fs_undelete とかいう項目が出現し, 「?」 をタイプすれば, ちゃんと修正された help も見れるのだ. すばらしい. そして, ドキドキの再起動. 何の問題も無く起動し, rm すると, そのファイルはゴミディレクトリに移動していた.
ちなみに, ゴミ箱ディレクトリは, パーティションに一個である. デフォルトでは ".wastebasket" である. せめて, ユーザに一個欲しいところである. それから, /tmp を undelete 可能にしとくと, /tmp がおいてあるパーティショ ンが一瞬で埋まるから気を付けろ(爆笑). ディレクトリ毎に undelete するかどうかが chattr コマンドで設定可能だ. というか, 設定しないといけない. 自分のホームディレクトリに存在している全ファイルを undelete 可能にす るには, わしは find とか xargs とかを使ったが, 今見ると chattr には -R という, モロそれ用のオプションがあった. それから, 気が付くと, emacs のバックアップファイルなどが, 大量にゴミ箱に存在 していたりする.
その他にインストールしたもの. これは gnome 関連.
こんなときは, ソースだ.
ソースを使え, ルークUse The Source, Luke 略して UTSL である. どっかにドキュメントされてない設定のディレクティブがあるかも, と思ってソースを当たった. なさそうであった. どうせイベントとアクションを関連づけるヘッダファイルがあるに違いないと 思って *h を grep で探した. 無し.
結局, イベントとアクションは, src/window.c に埋め込みであることが 判明. タイトルバーのダブルクリックイベントが発生したら, それが 左ボタンの場合, 左ボタンで modifier(Alt とか) が入っている場合, 真中の場合, とかいって, if と else で分岐がかけてあるのだった. 言い替えれば, 設定不可能なのである.
Window Maker は, ルックスと機能の割には軽いが, それはこの辺にも 秘密があるのかも知れない. 主要な機能は, ソースに埋め込んでしまってあるのだ.
とはいえ, このままでは非常に使い勝手が悪いので, Brian Kerninghan 師 と Dennis Ritchie 師 の手になる「ぷろぐらみんぐげんご しー」を見ながら タイトルバーを左ボタンで ダブルクリックするというイベントを窓を向こうへやるというアクションに 割り当てて, make すると, window.c に depend しているファイルだけをコン パイルしなおしてくれるのが make の良いところ. こういう変更が簡単にできるのが, Free Soft の良いところ. しかし, デフォルトのままで, みんな不便に思わないのであろうか.
問答無用でファイルを消してしまうという, この一見悲惨な仕様であるが, 各プログラムは, 自分のやるべき事だけをきちんとやる, という UNIX の方針からすれば, また, 論理的で自然なものでもあるのだ. しかし, 時代は流れてゆく, 使える計算機資源も増えて, 誰でも UNIX を使える ようになった今, あいかわらず rm * は全部のファイルを消去するが, 消えたファイルはゴミ箱から復活するというわけだ.