階層ファイルシステム

11.8. 階層ファイルシステム

コンピュータ内部でファイルやフォルダを管理する方法をまとめます。 全体の構造をファイルシステムと呼びます。

まずこれまでの理解を確認しましょう。
ユーザが日常的に使うフォルダは、ユーザ個人ごとにわりあてられた「ホーム」です ( 11.2. ホーム )。 はじめは「ホーム」とその直下の「ダウンロード」と「デスクトップ」程度を区別できれば十分ですが、慣れたら自分でフォルダを作成したり、他のフォルダを使う機会も生じます。

フォルダ内にファイルやフォルダを配置した状況を、親子関係と呼びました ( 11.1. ファイルとフォルダの基本 )。 ホーム自身を親を持ち、またホームの外にもフォルダが存在します。 たとえば全ユーザに共通の「アプリケーション」フォルダはホームの外に存在します。

親をたどってゆきつく最古の祖先をルート /、ルートから対象ファイルやフォルダまでの親子関係の列をパス path と呼びました。学籍番号を使えば同姓同名の人を正しく認識できるように、同じ名前を持つファイルやフォルダもパスで区別することができます ( 11.6. フォルダの場所 )。

階層構造 #

一般に「木構造」とはグラフの一種で、ルート (根) から枝分かれしながら頂点を伸ばした形をとります。辺で結ばれた2つの頂点のルートに近い方を親、遠い方を子と呼びます。また子を持たない頂点を葉と呼びます。

macOS を含めて現代的なファイルシステムは、ルート (/) を根、通常のフォルダを頂点、通常のファイルを葉、親子関係を辺とする 木構造と対応します。 このようなファイルシステムを階層的なファイルシステムとも呼びます (昔のファイルシステムにはフォルダの中にフォルダを作れないものもありました)。

ルートもフォルダの一つであることに注意してください。ルートの中にいくつかのフォルダがあり、それぞれの中にまたフォルダがあり、またその中にフォルダが……、といった具合に入れ子構造を成しています。 自然界の木は下から上に伸びますが、情報科学では根を上に描き枝を下に伸ばすことが多いです。

ファイルシステムの木構造は、不変ではなく、さまざまな機会に変更されます。 たとえば、ユーザが新規フォルダを作れば木は下に伸びます。 またUSBメモリをつなげば、USBメモリ内のファイルシステム全体 (これも木構造を持ちます) が、コンピュータのファイルシステムのどこかの子として接続されます。

パスの文字列表現 #

木構造のファイルシステムでのパスの代表的表現方法は、 ルート / とし、そこからたどったフォルダの名前を スラッシュ/ でつなげます。 1台のコンピュータ内でファイルは、この文字列により一意に特定されます。

確認例 #

多くのGUIでは、初学者の混乱を防ぐため、パスの詳細は隠されています。 その場合でも、コンピュータ内部では、 GUI (Finder で表示されるアイコン) とパスは結びつけられています。

ここでは「ターミナル」というアプリケーションに、Finder で表示中のアイコンをドラッグアンドドロップすることで、パスの文字列表現を確認してみます。

  1. Dock からターミナルのアイコンをクリックし、起動させましょう。

    このようなウィンドウが現れます。
  2. 続いて、Finderで表示中のアイコンをドラッグアンドドロップします。
  3. 表示された文字列が、アイコンに対応するパスです。
  4. 事故が起こらないように、確認したらいちどターミナルを閉じましょう。なお、ターミナルの正規の使い方は 13. コマンドの基本 で学びます。
例として、ダウンロードフォルダ内のPDFのアイコンをドラッグアンドドロップした様子を示します。

この場合はGoogle Chromeで開いたアドレスバーでも同じ文字列が表示されます。

表示された文字列 /System/Volumes/Data/home/.../Downloads/9.dpf は以下の構造を持ちます。

\(\overbrace{\texttt{/System/Volumes/Data/home/}\underbrace{\texttt{...}}_{\mathclap{\text{10桁のID}}}}^{\texttt{ホーム \textcolor{red}{---環境依存---}}}\texttt{/}\overbrace{\underbrace{\texttt{Downloads}}_{\texttt{ダウンロード}}\texttt{/}\underbrace{\texttt{9.pdf}}_{\mathclap{\texttt{ファイル名}}}}^{\mathclap{\texttt{ホーム内の位置=パスバーの表示}}}\)
  • /System/Volumes/Data/home/ と続く 10桁のIDまでが、「ホーム」のパスに相当します。
    • ECCS環境ではこのように長いですが、/home/System/Volumes/Data/home/ 別名として定義されているので、 /home/1234056680 など /home/ に10桁のIDをつなげた省略記法も利用できます。
    • 他の環境では /Users/hanako のように短い場所に置かれることも多いです。
  • Finder で「ダウンロード」として表示されるフォルダ名は、実際には Downloads というアルファベットの名前を持ちます。 macOSを英語モードで起動すると Finder でも Downloads と表示されるようになります。このような翻訳が行われるのは、開発者が意図した特定のフォルダだけで、ユーザが作成したフォルダ名は翻訳されません。
  • 区切り文字/で切ったときの右端 9.pdf がファイル名です。このなかでピリオドより右 .pdf の部分を 拡張子 と呼びます。ファイル名だけからファイルの種類を知りたいときには、拡張子が手がかりになります。拡張子は Finder では隠されていることもあります。

パスの文字列は、前 (左) が大分類、後 (右) が細かい分類になります。日本の住所表記と同じ慣習です。 比較して URL のところで触れたドメイン名は逆向きで、前 (左) が細かい分類、後 (右) が大分類でした。

7.1. ブラウザとURL

別の例を見てみましょう。 アプリケーションの Google Chrome のパスを調べてみます。

ターミナルにドロップすると /Applications/Google\ Chrome.app となります。
Google Chorme 自身にドロップすると、PDFの場合と違って中身は表示されませんが、URLバーは /Applications/Google%20Chrome.app となります。

正しいパスは /Applications/Google Chrome.app で以下の構造を持ちます。

\(\overbrace{\texttt{/Applications/}}^{\texttt{アプリケーション}}\underbrace{\texttt{Google Chrome.app}}_{\texttt{フォルダ名}}\)
  • アプリケーションソフトウェアのGoogle Chrome は、 /Applications というルート直下のフォルダに配置されています。このパスがユーザのホームの外であることが、パスの文字列からも分かります。また/ApplicationsがFinderでは「アプリケーション」と表示される理由は、「ダウンロード」と同じ翻訳するよう設定されているためです。
  • macOSのアプリケーションは、.appという拡張子を持つフォルダ内の複数のファイルから構成されます。このこと自体を覚える必要はありませんが、通常のGUIの見た目と実体は異なりうるという理解は重要です。
  • パス中の GoogleChrome の間の空白文字 は、ターミナルでは \ に、URLバーでは %20 と変換されています。これは空白文字は、ターミナルが扱うシェルで別の意味を持ったり、URLでの使用が許されていないためです。このように、「ファイル名として使えるが、扱いが面倒な文字」があります。

パスに移動 #

Finder にパスを入力して移動することもできます。 ウェブブラウザにURLをコピーペーストして移動することと似ています。

開いてほしいフォルダを他者に伝える際は、パスを正確に伝えられるなら、この方法が適しているでしょう。(そうでないと、あれをクリックして、と伝言している内に迷子になってしまうかもしれません)

移動フォルダへ移動

とメニューを選択すると

ダイアログウィンドウがでるので、ここに文字列を入力します。 たとえば / とルートを入れると
ルートに移動しました。

今の環境ではパスを入力するダイアログでも翻訳が働くようで、/Systemと入力すると数秒後に システム と置き換えられたりします。 このあたりは環境の違いが大きく、HWBでは触れません。
exercise
Finder で、/home/hwb/exercise/ にカレントフォルダ変更してみましょう。ここには、操作の練習のためのファイルやフォルダがおかれています。
次のうち、/home/hwb/exercise に置かれていないフォルダ名はどれでしょう。
  • taro
  • ichiro
  • hanako

exercise
/home/hwb/exercise/taro/interest.txt というファイルには、太郎くんの興味があるものが書いています。彼の興味がある科目は何でしょうか?
  • 体育
  • 数学
  • 国語

ファイル名とパス #

ファイル名の制限 #

ファイル名には使えない文字、使わない方が良い文字があります。 基本的には 大文字と小文字の英数字、そしていくつかの記号 (ハイフン -、ピリオド .、アンダースコア _) を使うことをお勧めします。

まずパスの区切り文字である/は、ファイル名には使えません (理由は分かりますね?)。 また多くの環境で、長さの制限がありmacOSでも「255 文字まで」という制約があります。

さらに他の環境や別の人に送付することを想定するなら、使えない文字は増えます。 Microsoft Windows のユーザに送る場合は、バックスラッシュ\とコロン: も、ファイルの区切り文字になるため、使えません。

また濁音半濁音のひらがなやカタカナは避けた方が良いでしょう。 文字の符号化のところで紹介しますが 濁音や半濁音は、「が」を「か」+「゛」のように分解するかどうかで、大手の環境でも流儀が分かれているためです。

macOS独自の注意点として、いまのところ、ファイル名の大文字と小文字を区別しないようです。 つまり、同一フォルダ内に ok.pdfOK.pdf の両方のファイルを作ることができません。

Microsoft社製の環境などで、 スラッシュ / に替えて バックスラッシュ\ を区切りに使うことがあります。 さらにややこしいことに日本語環境では バックスラッシュ\が 円記号 ¥ に文字化けのように代用されることがあります。 そのような環境に慣れている人は、国際的にはパスに円記号は使われない ことに注意してください。
異なるファイルが同じ名前を持つことは、一つのフォルダ内ではできません。 別の場所なら、同じ名前の別のファイルやフォルダを作成可能です。たとえば、2023-04/journal.pdf のように月毎にフォルダを分けて、同じ名前のファイル journal.pdf に日記を書いて、いつの日記かはフォルダで区別することは合理的です。

拡張子 #

慣習としてファイル名にピリオド . を含めて、その左側を人が認識するための文字列に、右側をファイルの種類を示す略称にすることがあります。 後者を 拡張子と呼びます。たとえば index.html というファイル名は、html が拡張子です。

GUI環境では、ファイル名の拡張子部分が表示されていないこともあります。 これは、ファイルの種類はアイコンでわかるため、不要な情報を省く意図です。 パスを一部省略したり、一部が日本語に翻訳して表示されることと共通の目的です。

かつて個人用コンピュータの性能が未発達だった頃 (たとえば1980年代)、 ファイル名の拡張子が 3文字までという環境もありました。今の環境は拡張子に特に制約がありませんが、2-4文字が人には見やすいようで多く使われています。
普段使わない情報を隠すことも、よいUIの設計方針と言えます。一方、リテラシーとして、普段は隠されている内容の理解もが多少は必要です。電源コードの許容電流や、ブレーカーについて、順調な間は意識しないで生活することと似ているかもしれません。

ネットワーク共有 #

通常の個人用コンピュータでは、各コンピュータ毎にユーザが管理され、ユーザのホームは各コンピュータで異なります

ECCSの iMac 環境では、全端末でユーザを統一的に管理しホームもネットワークで共有しています。 そのため、どの端末に座ってログインしても、同じホームを使うことができます。

Google Driveや iCloud, One Drive などのクラウドサービスは、別の仕組みで、ファイル共有を実現しています。 各自の計算機では設定によってホーム以下のダウンロードや文書などのフォルダが自動で同期されているかもしれません
詳細情報とアクセス権 階層ファイルシステム アーカイブ
このサイトは開発版の はいぱーワークブック です.