88171.net

2008-08-04

*nix オタが非オタの彼女に *nix コマンドラインを軽く紹介するための10コマンド

元ネタとさらに元ネタ。皆様(?)の期待に応えて「自転車」か「メガネ」で書きたかったんだけど、残念なことに10種も例示して語るにはネタが足りなかった。

そして、一般人には何を言ってるのかさっぱりわからず、そっちの筋には平凡すぎてちっとも面白くないという最悪のパターン。


まあ、どのくらいの数の *nix オタがそういう彼女をゲットできるかは別にして、「オタではまったくないんだが、しかし自分のオタ趣味を肯定的に黙認してくれて、その上で全く知らない *nix の世界とはなんなのか、ちょっとだけ好奇心持ってる」ような、ヲタの都合のいい妄想の中に出てきそうな彼女に、*nix のコマンドラインのことを紹介するために見せるべき10コマンドを選んでみたいのだけれど。

(要は「脱オタクファッションガイド」の正反対版だな。彼女に *nix を布教するのではなく相互のコミュニケーションの入口として)

あくまで「入口」なので、バックグラウンドの理解に過大な負担を伴うシステム管理系のコマンドは避けたい。できればぱっと見だけでイメージが掴めるコマンド、せめて Cygwin 環境で手軽に試すことができるコマンドにとどめたい。あと、いくら *nix 的に基礎といっても ed みたいな古びを感じすぎるものは避けたい。メガネスキーが「飴色の天然本鼈甲フレーム」は外せないと言っても、それはちょっとさすがになあ、と思う。そういう感じ。

彼女の設定はコマンドライン知識はいわゆる「DOS 窓」の存在を(使ったことはないけど)知っているくらい。頭はけっこう良いという条件で。

まずは俺的に。出した順番は実質的には意味がない。

cd

まあ、いきなりシェルのビルトインかよとも思うけれど、ファイルシステムの上での「CLI」を濃縮しきっていて、「絶対」と「相対」の二種類のパス表現を決定づけているという点では外せないんだよなあ。使用頻度も、圧倒的に上位だし。

ただ、ここでオタトーク全開にしてしまうと、彼女との関係が崩れるかも。

ディレクトリ階層とか CWD とか $HOME とか、この蘊蓄過多なコマンドについて、どれだけさらりと、嫌味にならず濃すぎず、それでいて必要最小限の情報を彼女に伝えられるかということは、オタ側の「真のコミュニケーション能力」の試験としてはいいタスクだろうと思う。

echo

アレって典型的な「オタクが考える一般人に受け入れられそうなコマンド(そうオタクが思い込んでいるだけ。実際は全然受け入れられない)」そのものという意見には半分賛成・半分反対なのだけれど、それを彼女にぶつけて確かめてみるには一番よさそうな素材なんじゃないのかな。

「*nix オタとしてはこの二つは比較的理解しやすいと思うんだけど、率直に言ってどう?」って。

xargs

ある種の *nix オタが持ってるパイプラインデータストリームパラダイムへの憧憬と、単機能のコマンドのパズル的な組み合わせへのこだわりを彼女に紹介するという意味ではいいなと思うのと、それに加えていかにも

をはじめとして、オタ好きのする立ち位置で振る舞っているのが、紹介してみたい理由。

[

たぶんこれを見た彼女は「へんなコマンドだよね」と言ってくれるかもしれないが、そこが狙いといえば狙い。

ゴミだと思って消しちゃってシステムがおかしくなっちゃう笑い話があること、でも最近だと実はシェルのビルトインコマンドになってること、たまに見かける ] っていうファイルは大抵 vi の w コマンドで Enter と ] を同時に打ってできちゃったものだということ、なんかを非オタ彼女と話してみたいかな、という妄想的願望。

zenity

「やっぱり *nix コマンドは単機能なほうがいいんだね」という話になったときに、そこで選ぶのは sort でもいいのだけれど、そこでこっちを選んだのは、コマンドは CLI の枠の中だけに囚われないんだということを知ってほしいから。

スクリプトから GUI のダイアログが制御できちゃう、っていう割とどうでもいい機能が、どうしても俺の心をつかんでしまうのは、その制御方法がいかにもオタ的だなあと思えてしまうから。プログレスバーの進捗制御なんて標準入力からパーセンテージを改行で区切って流し込んじゃって、さすがにちょっとダサいんじゃないかとは思うけれど、一方でこれを別の方法で実現しようとすると他に方法はちょっとないんじゃないかとも思う。それに動作はコマンドラインオプションで徹底的に実行時に指定する、というあたり、どうしても「やっぱりコマンドは機能が明確で絞られている方が好きなオタク」としては、親近感を禁じ得ない。コマンド自体の完成度と合わせて、そんなことを彼女に話してみたい。

rsh

今の若年層でコンピュータネットワークの有用性を否定する人はそんなにいないと思うのだけれど、だからこそ紹介してみたい。

ssh よりも前の段階で、ネットワーク越しのパイプラインとかはこのコマンドで実現されていたんだよ、というのは、別に俺自身がなんらそこに貢献してなくとも、なんとなく [rs]sh 好きとしては不思議に誇らしいし、いわゆる telnet でしかリモートシェルを知らない彼女には見せてあげたいなと思う。

grep

「標準正規表現」あるいは「拡張正規表現」をオタとして教えたい、というお節介焼きから見せる、ということではなくて。

「終わらないパイプラインを繋ぎつづける」的な感覚がオタには共通してあるのかなということを感じていて、だからこそパイプラインの使えないシェルは生き残らなかったんだとも思う。「無意識に | を打っている」というオタの感覚が今日さらに強まっているとするなら、その「パイプな気分」の源は grep にあったんじゃないか、という、そんな理屈はかけらも口にせずに、単純に楽しんでもらえるかどうかを見てみたい。

tac

これは地雷だよなあ。地雷が火を噴くか否か、そこのスリルを味わってみたいなあ。

こういうあんまり使いどころのない機能を「cat の反対だから tac!」ってノリでコマンド化して、それが非オタに受け入れられるか気持ち悪さを誘発するか、というのを見てみたい。

ls

9コマンドまではあっさり決まったんだけど10コマンド目は空白でもいいかな、などと思いつつ、便宜的に ls を選んだ。

cd から始まって ls で終わるのもそれなりに収まりはいいだろうし、使用頻度も圧倒的にトップクラスのコマンドでもあるし、紹介する価値はあるのだろうけど、もっと他にいいコマンドがありそうな気もする。

というわけで、俺のこういう意図にそって、もっといい10コマンド目はこんなのどうよ、というのがあったら教えてください。

「駄目だこの ohkawa は。俺がちゃんとしたリストを作ってやる」というのは大歓迎。

こういう試みそのものに関する意見も聞けたら嬉しい。