Unixの哲学
・小さいものは美しい。
・各プログラムが一つのことをうまくやるようにせよ。
・できる限り原型(プロトタイプ)を作れ。
・効率よりも移植しやすさを選べ。
・単純なテキストファイルにデータを格納せよ。
・ソフトウェアの効率をきみの優位さとして利用せよ。
・効率と移植性を高めるためにシェルスクリプトを利用せよ。
・束縛するインターフェースは作るな。
・全てのプログラムはフィルタとして振る舞うようにせよ。
Unixの哲学について論じるスレです。
ムー 2022年4月号
2025年人類文明崩壊の危機
昭和100年問題はUNIXは無問題? ネタ投入
FreeBSDを語れ Part54
https://mevius.5ch.net/test/read.cgi/unix/1630061644/
>>840
でもそんなに間違ってなくね?
むしろただの哲学を原理や原則みたいに勘違いして
唯一の正しい定義があるみたいな考えの方が問題
今となってはUNIX哲学も現実に当てはまってるとは言えないし
特にガンカーズのUNIXの哲学とか具体過ぎてて今じゃアレって思うような内容だし
5. 単純なテキストファイルにデータを格納せよ。
7. 効率と移植性を高めるためにシェルスクリプトを利用せよとか
9. 全てのプログラムはフィルタとして振る舞うようにせよ。
これ多分UNIX時代の唯一の主流言語だったC言語のバイトオーダーの話してるんだと思う
重要性が低い教義の
3. 小文字の短い名前を使え。
これも可読性からしたら間違い あの手のやつは勢い上位のスレでイキりたいだけくさいので来なそうではあるが Unix哲学はウェブアプリとかGUIアプリとかゲームとかと相性が悪い
黒い画面でポチポチやっていた時代のもの 黒い画面見せて、「ハッカーですか?」ってOLさんに尊敬して欲しくない >>44
項目によるだろ
△ 小さいものは美しい。
△ 各プログラムが一つのことをうまくやるようにせよ。
○ できる限り原型(プロトタイプ)を作れ。
○ 効率よりも移植しやすさを選べ。
△ 単純なテキストファイルにデータを格納せよ。
○ ソフトウェアの効率をきみの優位さとして利用せよ。
☓ 効率と移植性を高めるためにシェルスクリプトを利用せよ。
○ 束縛するインターフェースは作るな。
☓ 全てのプログラムはフィルタとして振る舞うようにせよ。
(○: GUI とかでも適用できる、△: 微妙、☓: 適用できない) 小さいものは美しいっていうけどさ
Unixコマンドって全然小さくなくね?
awkとかsedとか複雑すぎだし
その時点で矛盾してると思う
プログラミング言語の関数の方が遥かに小さくて
本当に一つの機能しかやってない 廃止してもっと小さいコマンドにするべきだろうな
Unix哲学に従うなら
俺はUnix哲学はてきとうなものだと思ってるから
間違っている時は守らなくていいと思ってる LinuxはGNU toolsを使用している
GNU toolsはそれまでのUNIXコマンド群を置き換える&自らのGNU OS(Hurdなど)で利用する為に、従来のSystemV/BSD由来のコマンドよりも多機能になっているから肥大化している
シンプルなUNIXコマンドを見るのであればLion's Commentaryのコマンドや、実機ならxv6やver.2以前のMINIXを見ると良い >>51
Linuxは成功し、Unixは消滅寸前
「悪い方が良い」の言葉通りだw
Unix哲学のほうが良いなんてことはないんだよ >>47
> 小さいものは美しいっていうけどさ
> Unixコマンドって全然小さくなくね?
そりゃ何でもかんでも7行プログラムにできるわけじゃないよw
コンパイラとかシェルなんてもっとでかいだろうし
必要な機能を実現できる中で小さいという意味だろ
> プログラミング言語の関数の方が遥かに小さくて
> 本当に一つの機能しかやってない
違うものを比べて俺の勝ちーってやっても虚しくね? >>52
悪貨は良貨を駆逐する
コの世界は安さは大正義だから Linux を悪いもののようにとらえる神経がわからん。
ただ配りのFreeBSDは組込み用途は多くてもインターネットに接続するサーバ用のシェアはそんなに高くないのに。 >>54
世の中で勝ち残ってるものは悪貨という理屈
macOSとか >>53
そういう意味じゃなくてUnixコマンドは一つの機能だけを持ってないって話
一つのコマンドがたくさんの機能を持ってる。もっと小さく出来る。
> 違うものを比べて俺の勝ちーってやっても虚しくね?
違わないな。シェルスクリプトからコマンドを呼び出すのも
関数を呼び出すのもどっちも同じだろ >>57
> 一つのコマンドがたくさんの機能を持ってる。もっと小さく出来る。
具体的どの機能を外出しできると思ってるの?
> 違わないな。シェルスクリプトからコマンドを呼び出すのも関数を呼び出すのもどっちも同じだろ
実際にやってみ
例えば関数は構造体で複数の値を返せるけどコマンドでそれやろうとしたら大変だろ >>58
sedだったら、置換、削除、挿入などに分けられる
awkもgrepとsedに分けられるだろ
/regex/ { print } は実質 grep + sed
他にもrmはファイルだけ削除する機能があればいい
ディレクトリの削除はファイルを空にしてrmdirでできる >>58
> 例えば関数は構造体で複数の値を返せるけどコマンドでそれやろうとしたら大変だろ
構造体は
key1 valueA
key1.key2 valueB
みたいな工夫をすれば返せる awkはDSLだから役割としてはperlに近い
sedを機能毎に切り出すとgrep, tr, cut, cat, join等を組み合わせないといけない
面倒臭いなw 覚えないといけないコマンドが増えちゃうよね
何をmanすればいいのか
何に-hつければいいのか >>61
awkはプログラミング言語だからね
> sedを機能毎に切り出すとgrep, tr, cut, cat, join等を組み合わせないといけない
そういうこと。結局Unix哲学って小さいものは美しいっていうのは
主観でこれぐらいは分離できるけどまとめていいんじゃね?
みたいな適当な感覚でしかないんだよ https://qiita.com/richmikan@github/items/e051b5d882c3dd2a39c6
> jqやxmllint等は、UNIX哲学に染まりきっていない
この人とか
> jqやxmllint等は、データの正規化(都合の良い形式に変換する)機能と
> データの欲しい部分だけを抽出する部分抽出機能を分けていない。
とか言ってるけど
> でもUNIX使いとしては、 部分抽出といったらgrepやAWK を使い慣れているわけで、
そのawkが、データの正規化とデータの欲しい部分だけを抽出する部分抽出機能を
分けてないわけで、理論が破綻しちゃってるんだよね >>59
> sedだったら、置換、削除、挿入などに分けられる
sed 使ったことある?
それらには範囲が指定できて行番号だけじゃなくて特定パターンの行とか指定できる
そう言う検索機能を各々が持つのがいいのかよーく考えよう
> awkもgrepとsedに分けられるだろ
> /regex/ { print } は実質 grep + sed
そんな特定のパターンだけで語られても困る
> 他にもrmはファイルだけ削除する機能があればいい
> ディレクトリの削除はファイルを空にしてrmdirでできる
rm -r 相当のことをやるにはどうすればいいかよく考えようね
>>60
> 構造体は
> key1 valueA
> key1.key2 valueB
> みたいな工夫をすれば返せる
具体的に示してくれ > そう言う検索機能を各々が持つのがいいのかよーく考えよう
Unix哲学的には、それが正しいよ >>64のリッチー大佐ってちょっと考え方が偏ってる
jqがだめならawkもだめってことになる
jqはJSONデータの加工という一つのことをやっているわけで
それをデータの正規化と抽出機能に分けろって言うなら
awkだって分けないといけないということになる
自分の理論が正しいと強弁するために
屁理屈を言ってるようにしか見えないね 偏ってると言うか色々思慮が足りてない感じ
> 例えば、"取寄商品"だけ抽出したいなら、後ろにパイプでgrep '取寄商品'と書けばいい
とか書いてるけど、万が一「取寄商品」と言う商品があったらダメなことはすぐにわかる
構造を持つデータをgpepなりで扱えるように行単位に変換したとしてもgrepはkeyなのかvalueなのかを知らないのでどうしょうもない
例示のデータくらいなら正規表現を駆使すればkey部分のみを対象にすることもできるけど毎回それやりますか?って話
こういうのをやりたいなら PowerShell みたいに構造を持つデータのままパイプに流せるようにしないと色々無理が出てくると思う >>70
調べてみると、USP研究所の社員で
そこがユニケージとかいうシェルスクリプトの
システム開発を推奨してる会社らしい
んで調べてみるとやっぱり色々と思慮が足らなくて
システム炎上してるっぽい Unixの哲学を学んだところで、現実にどう応用したかが重要だ
何か具体的な事例が有れば参考になるがな 大魔道士とか賢者と呼ばれる為には、何をするのが近道だい? 実用をすっ飛ばして概論だけで他人に認めてもらいたいの?
「エアプ」とか「忍者ハッタリくん」とか呼ばれるだけだとおもうよ 「Unix哲学は素晴らしい」
では、そのUnix哲学でスマホアプリは作れるのかい? 素晴らしいなら何でもできる!
って言って良いのは小学生までだぞ うん。だから結局Unix哲学も適材適所で当てはまるかどうかだよねってこと
使えない分野にはとことん使えない 使えない分野にはとことん使えない!
って誰でも言えるようなことをドヤって良いのは小学生までだぞ それはドヤらないなら言っていいってことだよね?
正しいことを言ったらダメという理屈じゃないはずだし 広告に入るようになってしまった
「私、ホワイトハッカーに転職します。」
というのが、気持ち悪い。 誰も聞いてないのに誰でも知ってることを言うのはちょっと恥ずかしい
君もいきなり1+1は2だよ
って言われたら何だコイツって思うでしょ? >>83
あなたの感想ですよね?
誰もあなたの感想は聞いていません シンプルながら83の感想には説得力があると思ったけど >>84
ごめんね、>>81は知らないみたいだから書いたんだけど内容が理解できなかったのね
まあそういう人は一定数いるからしょうがないね みんなでワイワイやってるとこに
ガラッとドア開けて人が入ってきて
掛け算の九九暗唱しはじめたとき
そいつが子供だった場合 → 微笑ましい気持ちになってみんな黙ってる
そいつが大人だった場合 → ギョッとしつつ不気味な気持ちになる >>77
お前は女の口説き方まで教えて貰わなければできないのか? なんでUnix哲学のスレでテーマに沿ったUnix哲学の話をしたら
必死にそれを止めさせようとしてるんだろw
他の人が"正しい"Unix哲学を知ってしまったら困るのだろうな。
あのな、Unixコマンドを使うことだけが
コンピュータの正しい使い方じゃないんだよ Unixが成功した時点で、Unix哲学が正しかったと証明されてるようなもんだ
もはや否定する事は不可能
文句が有るならUnixが成功しないように過去に戻って妨害でもするしかないw >>92
ほらな。こういう理解できてないやつがいあるから
やっぱり説明しないといかんだろ
Unix哲学が正しかった+当てはまらない新しい分野が登場した
ということだとなんで理解できないんだ?
Unixが成功って、今はLinuxが成功してるじゃんか
Unixなんてもう死滅寸前だぞ
Linuxが成功している時点で、Unix哲学だけでは
足りなかったと言うことが証明されてる
文句があるならUnixを復活させてみろよ 哲学とブランドは別物だろうに。
なにを説明してる気になってるんだろう。 しらね。Unixが成功したのを哲学と勘違いしてるんだろ?
アホだよな 当てはまらない新しい分野が出来たとして、だからなんだ?
ニュートン力学が通用しない分野が出来たからって、ニュートン力学が間違ってるのか?
新しい分野は新しい哲学でやればいいだけ >>97
Unix哲学が当てはまらない所の話なんだから
このスレでいいだろw UNIXに哲学が在るようで無いのがUNIXという文化
其処の意味付けは後世の人間が勝手にやった事で、KenもDennisも楽しかったからやったに過ぎない でもファイルと標準入出力にこだわってたのは意図的にしてた訳だし、哲学が全く無かったとは思えないな
それを追及したからPlan9がある > 楽しかったからやったに過ぎない
「それがぼくには楽しかったから」
これはペンギン臭いです >>101
> でもファイルと標準入出力にこだわってたのは意図的にしてた訳だし、哲学が全く無かったとは思えないな
当時のパソコンの制約で仕方なくそうしていただけ
GPUとかネットワークとかファイルにできてない >>101
> それを追及したからPlan9がある
じゃあPlan9哲学じゃないんですかー?
失敗しましたね >>106
それって、揚げ足取りというか、上げてない足に大外刈かけにいってない? >>105
> 当時のパソコンの制約で仕方なくそうしていただけ
どんな制約だよw
それ以前はI/O毎に専用の入出力手順とかあったのに
> GPUとかネットワークとかファイルにできてない
何でもかんでも統一できるわけじゃないことぐらいは理解しなよ >>108
> どんな制約だよw
え?出力がプリンタ(テレタイプ)だったからだよ
> 何でもかんでも統一できるわけじゃないことぐらいは理解しなよ
理解してるから、Unix哲学は完璧じゃないって話をしてるんだが? 誰もUnix哲学が完璧なんて主張してないと思うんだが Space Travelを移植したかったからUNIXとC言語が作られたんやろ >>110
> え?出力がプリンタ(テレタイプ)だったからだよ
意味わからん、プリンタとファイルじゃアクセス方法は全く違うけどプログラム側からは同じように扱えるって話だぞ
そもそも当時テレタイプに繋がってたパソコンなんて超レアだろw >>113
同じようには扱えないよ
プリンタは印字するから印字可能なASCII前提の文字で
ファイルに保存するというのがUnix哲学の考え方で
プリンタは印字してしまったら消せないから
そういう前提で標準入出力を設計したのがUnix哲学 Unixが作られたのはメインフレームの時代だからね
結局その時代の制約で作られたのがUnixなのさ
Unix哲学は後付でそれらを説明したものにすぎない >>114-115
一体何を言ってるんだよw
プリンタとファイルで結果が違うのは当たり前
でもプログラムは同じwrite()で出力できるから出力先を気にしなくていい
そもそもパソコンとかメインフレームとかアホすぎるだろ、Unix はミニコンの時代だぞ >>116
そこじゃなくて標準入出力の話なんだなー
知ってるか?標準入出力はファイルに切り替えることが出来るが
画面にも出力することが出来るんだぜ?
画面というのは最初はプリンタ(テレタイプ)だ
一旦出力してしまったものは消せない
だから標準入出力はファイルとは違って
一旦出力してしまったものは消せないという
制約のなかで実装されてるんだよ >>117
だからプログラムは標準出力に何が繋がってるかなんて気にせずに出力できるって話だぞ
消せないとか言ってるけどそれもしかしてストリームの話をしてるのか?
それならその制約は今でもあるだろ
パソコンとかメインフレーム関係なくて草生える >>118
だからその標準入出力は
当時のパソコン(ミニコン)の制約で仕方なくそうしていただけ
ってことだぞ
Unix哲学があったからじゃねーよ Unix哲学があったからストリームができたのではなく
当時のミニコンの制約でストリームにせざるを得なくなって
後付でそれがUnix哲学なんだ!って言ってるだけってこと ストリームを活用しましょうってのがUnix哲学なのに、
それを後付けだとか言われてもなあ だからなんの制約だよ…
今でもストリームは普通に使われてるし、プリンタに出力された文字は消せないぞw 頭悪いのかな?ストリームはプリンタの制約で
生まれたものって話をしてるんだが理解できない? 頭悪いんだな
ストリームなんて汎用機の時代からあったぞ そこから127がUnix哲学論に昇華して下さるそうです 単に肥大化したMulticsへの批判と当時ですら古かったPDP-7で動かす軽量OSが欲しかったから作っただけで、そこに哲学なんて無いよ なんか最初は哲学なんて考えなく実装したから、Unix哲学なんて存在しないっていってるアホが居るな…
哲学なんて大抵後付けに決まってんだろ 哲学を実装したOSがUnixというわけじゃないのに、
後付けとか言い出すのはどれだけ頭が足りないんだろう >>126
そう言うこと
プリンタに限らずキーボードや紙テープだってストリーム
ファイルはランダムアクセスもできるけどストリームとして使われることが多いから標準入出力をストリームにするのは妥当な判断
プリンタ(テレタイプ)の制約とか言ってるのは単なる無能のシッタカ君 >>132
その自分が書いた内容を100回読んでみな
無意味なことを言ってることに気付け
哲学は第三者が意味を見出だして理論付けする学問だ
だからUnix哲学といっても人によって違ってたりする
しかしそこでいうUnixは同じものを指している >>133
ストリームはUnix哲学から生まれたものじゃないし
Unix哲学はストリームしか認めてないから
ランダムアクセスできるファイルはUnix哲学に反している なんで哲学を刑だと思い込んでるんだろう
親に虐待でもされて脳がおかしくなってるんじゃないかろうか 標準入出力はコマンド間のIPCの一種に過ぎない
流すデータの内容は関係ないだろう
書式を決めておけば、先に送ったデータを取り消す事も(書式が理解出来るコマンドなら)可能だろう
実際コントロールコードとか、昔のテレタイプでヘッドを戻して下線を引くとかに使われてた訳だし
ちなみに、標準入出力にはpipeという名前がついてるが、他のIPCには共有メモリがある
しかしシェルはpipeでしか繋がないが、シンプルで便利過ぎるインターフェイスなのでpipeで十分だろう シェルを基準にするのはやめるべきだ
あれもまた古いハードの制限の中で動くように作られたものだから
古いんですよ。