見出し画像

Retro-gaming and so on

Linuxのディレクトリ・ツリーの話

星田さんがLinuxを導入したようなので、ちとこの話を書いておこう。

ぶっちゃけ、昨今のLinuxのインストールは簡単だ。
かつてはフロッピーディスクを何枚も用意して、GUIの為の環境も導入して、設定して・・・とクソメンド臭かったのが、ここ15年くらいだとCDあるいはDVDが一枚あれば、インストール前にLinuxをディスクから起動して問題ないかチェックして、良さそうならボタン一発でインストール、そうじゃなければ止めればいい、程度に簡易になってる。
インストールした後も、Windowsと大して使い勝手は変わらない。殆どマウス操作だし、クリック、ダブルクリック、右クリックも全く同じで、かつてのLinuxのイメージである「クソダサいコンピュータオタク向けのやたら使いづらい文字だらけのOS」ではなくなっている。
最低でもiMac程度には簡単になってるんだ(いや、個人的な意見ではiMacの方が使うのは難しいと思ってる)。
まぁ、今でもGentoo Linux(※1)とか、使うの難しいだろうし、Linuxの近縁にはインストールが難解なFree BSDと言う大御所もある。
ただし、その他のLinux系OSは多かれ少なかれ、かつてのイメージと違って使いやすい。Windowsから移動してきてもハナクソをほじりながら使う事が可能とはなっている。
しかも、Windowsのエロゲなんかも(出来ないヤツもあるが)Linuxで動かせる。この一点だけでも「エロゲもないような」Mac OSよかマシだと言えるだろう。
いや、正確に言うと、エロゲのようなADVは一番動かすのが簡単なんだ(笑)。これがアクションとかだとそうも言えないのだが、基本、エロゲは静止画だし昨今は声さえ付いてりゃいいようなんで、Windows向けに作られたエロゲでも複雑じゃないからエミュレータの類で十二分に対応出来る事が殆どだ。
うん、それだけでもiMacよかマシだろう(笑)。iMacはGUIも特殊だし、事実上UNIX系OSなのにLinux <-> iMacのソフトウェアの行き来よりWIndows <-> Linuxのソフトの行き来の方が簡単になっている。それが現実なんだ。


Linux版Steam Launcher。
Steamなんかも一部のゲームはLinux対応を謳っており(※3)、また、SteamはLinuxを利用したSteam OSと言うOSまで提供している。

と言うわけで、使う分にはどんな人に対しても殆ど問題がなくなってる。
しかし、Linux新規参入者に取って一番分からんのは恐らくフォルダ構成だろう。

イキった人間は

「Windowsのフォルダ構成はダメ。UNIX系は分かりやすい。」

とか言うだろうけど、こういう意見は無視して良い。どんなに分かりづらかろうが、慣れれば分かりやすいんだ。当たり前の話である。

女だって最初は痛がるが慣れればそうでもない、ってのと同じだ。
違うか(爆

取り敢えず、最初に戸惑うのは、ユーザーはhomeと呼ばれるフォルダにいるんだけど、それ以外がよう分からん、って辺りじゃないか。UNIX系のフォルダ構成はとにかく「複雑に見える」し、覗くのも嫌になるくらいに思える。
この辺が、WindowsからLinuxに「引っ越ししたばかり」だと一番面食らう部分に思える。

Windowsは個人用コンピュータ、つまり、パーソナルコンピュータのOSとして発展してきた歴史がある。
一方、UNIXは違う。これはマルチユーザー対象のミニコン用として発達してきたOSで、平たく言うと、homeフォルダは各ユーザーがアクセス出来る個人用フォルダを置いておく場所なんだ。
そしてマルチユーザー向け、と言う事は、「それ以外の部分は基本、ユーザーには触らせない」と言う設計意図になっている。
だからhomeフォルダ以外は「よう分からん」状態になってる、ってのはむしろ「正しい設計」なんだな。
つまり「分からない」のはアナタのせいじゃない。むしろ「そう作ってる」んだ。

Windowsの工場出荷時辺りのデフォルトのフォルダ構成は大まかに言うと次のようになってる。

  • Windows
  • Program Files
  • ユーザー
もちろんもっとあるが、基本的にこの3つがCドライブ直下、と言うトコに置かれている。
そしてユーザー側も「どれが自分専用のフォルダなのか」あまり意識してないんじゃないか。事実その通りだ。
「ユーザーフォルダ」と言うのが一応あるけど、例えばWordとかExcelなんかで作成したファイルのデフォルトの保存先、程度の意味としか捉えてないと思う。
Windowsの場合は、基本的には、どこのフォルダだろうと「全部自分のモノ」であり、行き来を妨げるような印象がない(まぁ、さすがにWindowsフォルダを触ればマズそうだ、ってのは知ってるだろうが)。
これはプログラムをインストールする際にも顕著となってる。
元々は、名称が示す通り、Program_Filesにインストールしたプログラムを置く、ってのが原則の筈なんだけど、人によってはそこにインストールする事を嫌い、C直下にガンガン新規フォルダを作成してはそこにインストールしたプログラムを置くようにしてたりする。
まぁ、最近だと、セキュリティの問題もあって(「管理者権限」がなんたら、とか言われるようになったのはWindowsの歴史から言うと割に最近だ)煩いProgram_Filesにインストールするのを嫌う人々が益々増えてるようだし、ソフトウェアによっては、ソフトウェアのインストール先がProgram_Filesではなく、ユーザーフォルダ内のAppData内になってるケースも増えてきている。
このように、

  • Windowsは「個人用コンピュータ」つまり「パーソナル」コンピュータ向けのOSなんで、ドライブ上の全ての場所が、原則ユーザーに所属するものだと考えている。
  • 従ってシステムが入ってる「Windowsフォルダ」は別として、便宜上名称は付けてるけど全てのフォルダは原則ユーザーが好きに使って良い。
と言う思想が背景にあるんだ。
これはMS-DOS時代から続いている思想、だと言って良い。
正直、「セキュリティに甘い」と言う考え方も可能なんだけど、そもそもMS-DOSもWindowsもインターネットが普及する前に出来たOSで、「パソコンは個人のモノ」と言う意識が強い。そして「外部から何かが侵入してくる」なんつー前提が無かったんだな。
結果、全てのフォルダが「フラットに置かれてる」印象になる。どのフォルダを覗こうと凄く分かりやすい配置になってるんだ。


MS-DOS最後期の6.2の例。ハードドライブ(A:)直下には原則DOSフォルダしかなく、インストールされたソフトウェアは同階層にそのままインストールされるようなシンプルな使い方がされていた。
Windowsはこのような「フラットなDOSの階層」を受け継ぎながら発展させたもの、と考えて良い。

SHARP X68000のOS、Human 68Kの例。同時期のMS-DOSに比べても要素数は多いし、システム的に含まれてるフォルダはあるが、せいぜい「要素をフォルダに纏めてる程度」であり、多階層で「ツリー構成になってる」と言う事はない。
基本的に、「個人システム向けのOS」はこのようにシンプルな構造で充分だったのだ。

ところが、Linux等のUNIX系OSはユーザーにhomeフォルダ(上の自分専用のフォルダ)しか基本触らせない。そこが「あるユーザー」に対する「作業場」として提供されてるだけで、他のフォルダには触らせないように設計されている。
これは繰り返すが、元々「マルチユーザー」向けのOSとして設計されていて、つまり、端末が複数台あり、それが「メインフレーム」あるいは「メインコンピュータ」へと接続されてて、各端末を使ってるユーザーに「応答して」計算結果を返す、と言うモデルとして設計されたからだ。
各端末のユーザー向けの作業場としてhomeの中のユーザーフォルダが用意されていて、そこから各ユーザーは動けない。何故ならコンピュータ全体をクラッシュさせるような悪いことが出来ないようにするため、だ。
他の人がワープロで宿題のレポート書いてるのにコンピュータに悪さするヤツが出てコンピュータがクラッシュ、そのレポートが「飛んじゃいました」じゃ困るだろ(笑)?そういう事だ。「皆で使うコンピュータ」だとこのテの悪さをやられれば困るわけだよ(笑)。
従って、ユーザーとコンピュータの「管理者」ってのが別になってる、ってのがこのモデルなわけだ。
時代を経て今だと、結果、LinuxみたいなOSをパソコンにインストールして「使う」と言うのは、要するに「多人数向けのOS」を自分のパソコンで自分専用にして使ってること、と等しい。
つまり、「マルチユーザー向けのOS」としてデザインされたOSを、ある意味「個人用途」で使うような状況になってるから、こういうシステム的なコンセプトで作られてるファイル構成に、一見ピンと来なくなるわけだ。そこをまずは押さえておこう。

ちなみに、だからこそDOS窓は「コマンドプロンプト」なんだけど、Linuxの場合は「端末エミュレータ」または「ターミナルエミュレータ」なんだ。
DOS窓は「かつてのパーソナルコンピュータではDOSに入力してコンピュータ全体を使ってた」、その入力窓口としての「コマンドプロンプト」と言う名称になってるが、Linuxの場合は本当に、メインフレームへと接続する「ハードウェアとしての端末」の文字通りエミュレータだ。後者はマジで、Linux OSの中核部分と「通信」する為の機能を備えている(そしてだからWindowsと違って複数立ち上げられて、それぞれ別の計算を実行する事が出来る・※3)。


NEC PC-9801でMS-DOSを起動すると出る「コマンドプロンプト」。WindowsでもNEC PC-9801(正確にはIBM-PC)でDOSを使ってたような事が「出来ますよ」と言う意味で、ソフトウェアを使う使い方の「選択肢」としてマジモンのレトロなコマンドプロンプトを用意している、と考えて良い。



端末の代表的モデル、DEC VT-100。古いパソコンに見えるが、これ自体に計算能力はない。あくまでメインフレームに「接続」して情報をやりとりするだけのハードウェアだ。
これの「エミュレータ」が、端末エミュレータ、あるいはターミナルエミュレータである。
略して「端末」と呼んでるが、実はエミュレータなのだ。

さて、Linuxのファイル構成の話に戻ろう。
ルートフォルダ(/と記述し、Windowsでは単にCドライブにあたる)直下のフォルダは次のようになっている。

lsはDOSやX68000のHuman 68Kで言うdirコマンドだ。意味は「(ディレクトリを)リストアップせよ」。これによってルート直下にあるフォルダ群を見る事が出来る。
もう見たら分かるがWindowsだと馴染みのない名前ばっかだ。主なモノをピックアップしてみよう。

  • binフォルダ: 一般には、Windowsで実行ファイル(exe)にあたるバイナリ(binaries)を収めるフォルダ。/(ルート)直下ではWindowsで言う「Windows」フォルダに近いがそのものではない。
  • libフォルダ: バイナリが利用するライブラリ(library)を収めるフォルダ。/(ルート)直下ではWindowsで言う「Windows」フォルダの一部にあたる。
  • usrフォルダ: ユーザー(user)用のフォルダだがWindowsのユーザーフォルダとは意味が違う。
  • homeフォルダ: Linuxにアクセスするユーザー用作業場。ここに各ユーザー毎のフォルダを作成し、こっちの方がむしろWindowsのユーザーフォルダに近い。
取り敢えず覚えて欲しいのは、bin、lib、usrと言う名前が至るトコロに出てきて、これらの意味が明確に決められてる事だ(※5)。
例えばルート直下のbinにはOSを利用したり、あるいはOSが利用するコマンドが収められている。しかし、仮にユーザーがソフトウェアをインストールした場合、それはOSとは直接関係がないので重要度が下がる。
そういう場合、1つ階層が下がって、ユーザー用のusrフォルダ以下にインストールされるようになってる。具体的にはusrフォルダの中にもbinフォルダがまた別にあって、usrフォルダ下binフォルダ、通常/usr/binにインストールされるようになってるんだ(※6)。
そして、Linux等のUNIX系OSはソフトウェアインストールに於いてもっと顕著な特徴がある。
Windowsの場合、ソフトウェアを1つインストールするとそれ全部が1パッケージとなり、それが例えばProgram_Files以下にインストールされるようになっている。
仮にソフトウェアAとソフトウェアBが、どっかで提供されている「全く同じライブラリ」を使っていたとしても、別々のフォルダに個別にインストールされるだろう。
一方、Linux等のUNIX系OSは、ライブラリフォルダがlibとして独立している。そしてWindowsに比べるとよりAPI(※7)指向だ。つまり、Windowsに比べると圧倒的に「OSが提供する機能が多く、それを利用したプログラムが望ましい」と言うスタイルになっている。
つまり、ソフトウェアAとソフトウェアBが全く同じライブラリを使っていたとしたら、それを個別にはインストールしない。「OSが提供する」、あるいはユーザーが一回インストールしたライブラリは各ソフトウェアで「使い回しする」のが基本となっている。
また、ソフトウェアのマニュアルなんかもWindowsではそのソフトウェアがインストールされたフォルダに全て入るのがフツーだが、Linux等のUNIX系OSではそれもまたマニュアル専用のフォルダへとインストールされる。
一見「なんでまたそんなメンド臭い事を?」と思うかもしれないが、そうすれば「マニュアル呼び出しのソフト」も個別で用意する必要がなく、全て一貫して、OSが提供してる機能を使って呼び出しが可能となる。
重要な事なんで、もう一回書くが、Linux等のUNIX系OSでは「ソフトのインストール」と言うのは、1つのパッケージとして纏めてどっかにインストールする、と言う事はほぼなく、言っちゃえば「バラバラに分解されて」全て所定の位置へとインストールされる仕組みになっている。そしてこの仕組みのもう1つの利点は、仮にWindowsとLinuxで全く同じソフトがあるとしたら、Linux版の方のインストールに必要なディスク容量はWindowsのそれより「少なく」なる。何故なら既にAPIが用意されてたとしたら、それをわざわざ別にインストールする必要がないからだ(※8)。

取り敢えず、何かインストールした時、あるものは/usr/binへ、あるものは/usr/libへ、と「バラバラにインストールするのは何でだろう」、そして「Windowsに比べてLinuxのフォルダの組まれ方が分からん」のは何故か、と言うのは、その背景のコンセプトを理解すれば朧気ながら分かってくるだろう、と言う話だ。
Linuxニュービーが恐らく最初に「畏れを抱く」筈のディレクトリツリーに付いての簡単な入門として、これを纏めておいた。

※1: 誤解を畏れないで言うと、Gentoo だけはちと他のLinux系OSとは毛色が違う。
そもそも、UNIX系OSの特徴は「OSの最適化を目指さない」のが基となる哲学なのに、Gentooの第一の目的は個人が持ってるPCへの最適化である。
従って、これだけでマニア向けの性質が濃くなってる、ってのは否定出来ないだろう(言い換えるとGentooはある意味Linux系OSでは最速のパフォーマンスを誇る)。
もう1つは、Gentooは「普段使いの常用OS」と言うよりも、「OSを作るためのOS」の色合いが強い。極めて優秀なOSであり、それが故にちと、プログラマを含む「通常ユーザー」には向かないのだ。
どっちかと言うと「OSそのものを弄り倒そう」と言う人向け、であり、そして「コンパイル済みバイナリ」を入手するより、「自分であらゆるアプリケーションをコンパイルして最速ソフトウェアを作りたい」人向けである。

※2: カリフォルニア大学バークレー校で作られた、由緒正しいUNIXで、本家AT&TのUNIXより一時期人気があり、そしてある意味Linuxのライバルだ。
AT&TとのUNIXに纏わる裁判で公開が一時停止しており、その隙にLinuxがデビューして後塵を拝してしまった、が、現在でも熱狂的なファンが多い。
なお、GoogleのサーバーはLinux駆動だがYahoo!のサーバーはFreeBSD駆動である。

※3: ただし、僕個人はSteamをさほど評価していない。
第一にここはゲームの販売だけやってて、そのゲームが本当にそのプラットフォームで動くのかどうか全く検査していない。
従ってLinux対応を謳ってるゲームが本当にLinuxで動くのか分からんし、それどころか、Windows対応を謳っててもWindowsで動くかどうかも分からんのだ。
(ハッキリ言って一番信用に価するのは、結果、往年のDOSで動くレトロゲームしかなく、それもSteamの技術力じゃなくって、単にDOSエミュレータのDOS-BOXのデキが良いと言う、それだけの話だ)
そして売ってるソフトの殆どは同人ソフトで、結局その本質はなんだかんだ言ってDLsite.comと大して変わんないのだ。
(DLsite.comも似たようなシステムをやればSteamみてぇに大儲け出来るかも)

また、Linux用のSteamランチャーがクソ重くて、ハッキリ言って常用しよう、って気にはならんのだ(本質的には単なるブラウザなのに何故にこんなに重いのか?)。
Steamはネットでべた褒めされてたんで期待してたんだけど、お陰さんでスッカリ冷めてしまった。
今からSteamをやってみたい、と言う人に対しては「ちょっと待て」とだけ言っておこう。

※4: Windowsのソフトウェア文化に比してLinuxのソフトウェアで特徴的なのは、結構な確率で「サーバー・クライアントモデル」と言う一見わけの分からない方式のソフトが多い事だ。そのテのソフトは本体が「サーバー部分」のソフトウェアと「クライアント部分」のソフトウェアに分離されている。
どっちも貴方のパソコンにインストールされるだろうが、マジで貴方のコンピュータ内で「通信して動く」と言う「ホンマ何やっとんの?」と言うような状態になる。
ただし、このテのソフトウェアはUNIXなんかのメインフレーム文化では割にポピュラーなソフトウェアだ。

※5: Filesystem Hierarchy Standardと言う名称で公式に定義されている。

※6: この辺はシステムによって違ってて、/usr/local/binと言う、より下部に振り分けられるシステムもある。
いずれにせよ、Linux等のUNIX系OSに於いては、usrフォルダの役目はWindowsのユーザーフォルダと違い、ユーザーがインストールしたソフトウェアに関連したフォルダだと覚えておけば良い。

※7: アプリケーションプログラミングインターフェース。もちろん、WindowsにAPIが「無い」と言ってるわけではない。しかし、Windowsで言うAPIは非常に低レベルな、つまりハードウェアにかなり近い部分のAPIの提供が主となる。
反面、Linux等のUNIX系OSは、言っちゃえば「あらゆるレベルでのAPIが提供されている」と言ってよく、そのまんまAPI = 開発用ライブラリ、と考えて良い程である。

※8: ただし、利点じゃなくて欠点も当然ある。あるLinuxディストリビューションで提供されているライブラリが別のLinuxディストリビューションで提供されているとは限らない。また、あるLinuxディストリビューションで提供されているライブラリが別のディストリビューションでは「名前が変わってる」と言う事もしばしば起きる。
あらゆるレベルでのAPI提供、はプログラマ側にとっては「一々最初から作らなくて良い」と言う利点があるが、出来上がったプログラムは「依存関係がものすごい事になってる」と言う欠点も抱えてしまう。UNIX系のプログラムはそういう欠点が大きく、言い換えれば同じソフトをWindowsで提供しようとした時、この「依存関係」が足かせになる事がしばしば生じる。
なお、iPhoneやAndroid等のOSもUNIX系OSだが、この辺で提供されている「アプリ」類は、Windowsのように、1アプリケーション=1パッケージとして提供してて、本家UNIXのようにバラバラに分解してインストールするような事はやってない模様だ。その方が電話用のOSとしては管理に面倒がないらしい。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事