Linux /usr ディレクトリは User の略ではない?

50年前の「ハードウェア事故」が生んだバタフライ効果

LinuxやUnixシステムを使うと、こんな疑問を抱くことがあります。

「/usr は何の略?」

一見すると User から e を抜いたように見えます。 もしそうなら /user と書けばよいのに、なぜ /usr なのか?

  • タイピングが面倒?
  • 文字数制限があった?
  • それなのに /boot/home/proc のように4文字のディレクトリは存在する。

本当に「ユーザー(user)」なら /user と書くはずです。 曖昧に /usr とした理由には、私たちが知らない歴史が隠れています。

本日は、この /usr ディレクトリに絡む、開発者なら一度は「あ、そうだったんだ」と膝を叩きたくなる 50年前の「笑える」ハードウェア物語 を紐解きます。

image


1. 結論から:現在の /usr は「User」ではない



現在のLinuxファイルシステム標準(FHS, Filesystem Hierarchy Standard)で /usr は次のように定義されています。

システム全体で使われる、(ほぼ)読み取り専用のプログラム・ライブラリ・共有データが入る領域

そのため、私たちがよく見る構造はこうです。

  • /usr/bin – ほとんどのユーザー用実行ファイル
  • /usr/sbin – システム管理用実行ファイル
  • /usr/lib* – それらの実行ファイルが使うライブラリ
  • /usr/share – マニュアル、アイコン、ロケールなどアーキテクチャ非依存データ

どこを見ても「ユーザーの個人ファイル」とは距離があります。 ホームディレクトリ(~/...)や文書、写真などはすべて /home 以下にあります。

したがって、今日の観点で /usr を一言で定義すると:

/usr = 「User ではなく、OSとアプリの『共通システムリソース倉庫』」

です。

それで質問が残ります。

「それでも最初は usr は user の略だったのでは?」

ここからが面白い部分です。 起源は「User」でした。 ただ、その後50年間で使われ方が完全に逆転しました。


2. 初期Unix: /usr/アカウント名 がホームディレクトリだった

時を1970年代初期、初期Unix時代に戻ります。

当時のUnixシステムでは:

  • ユーザーのホームディレクトリは今のように /home/alice ではなく
  • /usr/alice のように /usr の下に直接置かれていました。

つまり、当時の /usr は本当に:

「user 関連のものが入るディレクトリ」

という名前通りの役割を果たしていたのです。

当時のコンピュータはPDP-11のような機器で、ディスクは今日の基準では信じられないほど小さかったです。 「容量数十KB/MBで騒がしかった時代」でした。

  • ルートディスク(/ – OSのコアファイルだけが入る狭いスペース
  • 第2ディスク(/usr – 相対的に広いスペース、そこにユーザーのホームディレクトリを配置

この構造自体は合理的でした。 問題は… Unix(と開発者の欲望)が急速に拡大したことです。


3. 「ディスクがいっぱい」→システムファイルを /usr に追い出す



Unixは続々と拡大し、新しいコマンドや機能が追加されます。 問題は ルートディスク(/)の容量はそのまま だったことです。

結局、ある日こうなる。

「もう / にプログラムを入れる場所がない…」

そこで開発者は現実的な選択をします。

「結局第2ディスク(/usr)は広いので、起動に必須でないプログラムはそっちに移そう。」

こうして最初は「user ホームディレクトリ」だった /usr に、 少しずつ プログラム・ライブラリ・データ がスムーズに押し込まれ始めます。

その結果が、今私たちが知っている構造です。

  • /bin – 起動に必須の「最小限」のコマンド(元はルートディスク)
  • /usr/bin – 残りの一般的なコマンド(第2ディスクへ逃げた仲間)
  • /lib vs /usr/lib も同様の論理

つまり、

元々ユーザーの家だった /usr に 「空きスペースがあるだけで」システムファイルが引っ越し始めた

ということです。文字通り 「ハードディスク容量不足が作ったトリック」 です。

その後、Unixは継続的に発展し、

  • ユーザーのホームディレクトリは /home のように より直感的なディレクトリ に移動し、
  • /usr は完全に「共有プログラム/ライブラリ領域」として定着します。

この段階で状況はかなり笑える。

  • 名前:usr(user)
  • 実際の内容:システム・アプリ専用ファイル

オーナーが引っ越したのに、その家にシステムファイルだけがいっぱいになる という状態です。


4. 「Unix System Resources」? それは後から作った言葉

この矛盾した状況が長く続くと、後世の誰かがこう言い始めます。

「そう、今は /usrUnix System Resources の略だとしよう。」

どこかの文書で「/usr = Unix System Resources」と書かれているのを見たことがあるでしょう。 しかし重要なポイントがあります。

これは 後から挿入された(backronym)解釈 で、 初期Unix設計時の公式意味ではありません。

初期Unixの文書と証言を見ると:

  • /usr は元々 user の略
  • /usr/アカウント名 形式でホームディレクトリを置くためのスペース
  • その後ディスク容量問題で「user 関連全て」→「user が使うプログラム」→「プログラム・ライブラリ全般」へ意味が拡大・変質

という流れがより合致します。

しかし時間が経つにつれ、人々は現実をこう整理しました。

「今はシステムリソースを入れる場所だから Unix System Resources と呼べばいい。」

このようなものを専門用語で backronym と呼びます。 元々の略語があり、その意味を後から「逆に」定める手法です。

開発者の世界ではよく見られるパターンです。

  • 一時的に決めた名前・構造
  • 文書に記載
  • 標準化
  • 後で「最初からそういう意図があった」と説明される…

5. 50年前の構造が今まで:Usr Merge の物語

ここまで聞くとこう思うかもしれません。

「いや、ディスクが広いのに今になって /bin/usr/bin を分ける必要があるのか?」

実際、最近のLinuxディストリビューション(Ubuntu、Fedora、Debianなど)はこの歴史的遺産を整理しています。これが /usr merge(UsrMerge) です。

最近のディストリビューションで次を実行してみてください。

$ ls -l /
lrwxrwxrwx 1 root root    7  ...  bin  -> usr/bin
lrwxrwxrwx 1 root root    7  ...  sbin -> usr/sbin
lrwxrwxrwx 1 root root    7  ...  lib  -> usr/lib

ほとんどの場合、こうなっています。

  • /bin は実際のディレクトリではなく /usr/bin を指すシンボリックリンク
  • /sbin/lib も同様

つまり、今日の実質的な構造は:

「プログラム、ライブラリのほとんどは **すべて /usr 以下にある」

という形に戻っています。([wiki.debian.org][6])

なぜこう統合するのか?理由は複数ありますが、代表的なものは:

  • パッケージ管理/ポーティングが簡素化
  • コンテナ/イメージベースの配布で /usr を一つの「システムイメージ」として扱いやすい([freedesktop.org][7])
  • 古いハードウェア制約で分けていた構造を維持する理由がない

面白いのは、すべての出発点が:

「1970年代、ディスクが小さすぎて プログラムを /usr に押し込んだ選択」

だったという点です。まさに 「一時的な対策が永遠になることはない」 という言葉がぴったりの例です。


6. それなら今日の私たちは /usr をどう理解すればいい?

実際のLinuxシステムを扱うとき、 /usr をこう考えると楽です。

「このシステムで共通に使うプログラムとライブラリ、共有データが入る領域」

逆に:

  • 個人ファイル / 設定/home/自分のアカウント
  • 頻繁に変わるデータ(ログ、キャッシュ、DBなど)/var
  • ディストリビューションパッケージ以外に、別途インストールしたアプリ → 通常 /opt または /usr/local 以下([Ask Ubuntu][1])

つまり:

  • /usrOSとアプリの世界
  • /homeユーザー個人の世界

と分けて考えると混乱が減ります。


7. まとめ:ディレクトリ名一つに込められた開発者の妥協

/usr というディレクトリには:

  • 「容量不足に悩んだ初期Unix開発者たち」の実際的な悩み
  • 「とりあえずこうしておいて後で整理しよう」という慣れた一時的対策
  • そして数十年後、それを取り巻く標準化と整理作業(UsrMerge)

という、かなり長い物語が詰まっています。

単に:

  • /usr = Unix System Resources」
  • /usr はユーザーディレクトリではない」

と覚えるより、こうした背景を知れば、ターミナルで /usr/bin/usr/lib を見る感覚が少し変わります。

「あ、これは50年前に誰かがディスクがいっぱいで 仕方なく移した結果物だな。」

黒い画面のディレクトリ一つにも、あの時代のハードウェア制約と開発者の妥協がそのまま残っている事実は、かなり面白いと思いませんか?