[Chapter 5] 5.4 ファイル名の短縮 (Name Mangling) と大文字小文字
Date: 1999-11-05T21:33:01Z

| ## Using Samba Robert Eckstein, David Collier-Brown, Peter Kelly 共著 第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル ハードコピー版(英語)を購入する 目次

| Chapter 5 ブラウジングと高度な共有の設定 |

> ## 5.4 ファイル名の短縮 (Name Mangling) と大文字小文字

> DOSやWindows 3.1の時代を振り返ってみると、全てのファイル名は8文字からなる大文字、ピリオド、そして3文字からなる大文字に制限されていた。これは 8.3 形式として知られ、非常に, やっかいである。Windows 95/98、Windows NTししてUNIXは、ファイル名に大文字小文字が区別され、より長い文字長を可能とすることでこの問題を緩和した。 表 5.6 では、一般的なオペレーティングシステムの幾つかにおける名前づけ規則の現状を示す。

> 表 5.6: OS毎のファイル名の制限
> OS | ファイル名規則
> --- | ---
> DOS 6.22 以前 | 8文字、ドット(.)、さらに3文字の拡張子(8.3 形式)。大文字と小文字は区別されない
> Windows 3.1 for Workgroups | 8文字、ドット(.)、さらに3文字の拡張子(8.3 形式)。大文字と小文字は区別されない

> Windows 95/98

> 127 文字。大文字と小文字を区別
> Windows NT | 127 文字。大文字と小文字を区別
> UNIX | 255 文字。大文字と小文字を区別

> Samba は現在でも Windows for Workgroups のような 8.3 形式でしかファイルを保存できないクライアントとの下位互換性を保持する必要がある。ユーザが antidisestablishmentarianism.txtという名前のファイルを共有に作成した場合、Windows for Workgroups クライアントは、同じディレクトリにある antidisease.txtという名前のファイルと区別することができない。 Windows 95/98 や Windows NT と同様、Samba は似たようなファイル名同士で名前が重複してしまわないように、長いファイル名を8.3 ファイル名に変換する特別なロジックを実装する必要がある。これは name mangling と呼ばれ、Samba はこれを Windows 95 以降の OS と同様の、しかし同一ではない方式でとりおこなう。

> ### 5.4.1 The Samba Mangling Operation

> ここで、Samba がどのようにして長いファイル名を 8.3 形式のファイル名に mangle するかをみてみよう:

> - 元々のファイル名がドットから始まっていないのであれば、最後のドットが現れるまで、先頭から5文字分の英数文字を大文字に変換する。これらの文字は、8.3 形式に mangle されたファイル名の最初の5文字になる。

> - 元々のファイル名の先頭がドットで始まっている場合、ドットを削除してから、最後のドットが現れるまでの先頭から5文字分の英数文字を大文字に変換する。これらの文字は、8.3 形式に mangle されたファイル名の最初の5文字になる。

> - これらの文字の次には、特別な mangle 用の文字が続く。デフォルトではチルダ(~)であるが、Samba ではこの文字を変更することもできる。

> - 最後のピリオドの前までの長いファイル名から2文字のハッシュが生成される。最後のドットに続く部分も必要に応じて利用される。この2文字のハッシュコードは、8.3 形式のファイル名では mangle 文字に続いて現れる。

> - 元々のファイル名で最後のドットに続く3文字が、大文字に変換され、mangle 名の拡張子になる。元々のファイル名がドットから始まっていた場合、三文字のアンダースコア(`___`) が、拡張子として用いられる。

> 以下に幾つかの例を示す:

>     virtuosity.dat                       VIRTU~F1.DAT
>     .htaccess                            HTACC~U0.___
>     hello.java                           HELLO~1F.JAV
>     team.config.txt                      TEAMC~04.TXT
>     antidisestablishmentarianism.txt     ANTID~E3.TXT
>     antidiseast.txt                      ANTID~9K.TXT

> この規則により、Windows for Workgroups 経由でネットワークにアクセスしないといけない不幸な人も、二つのファイルを区別することが可能になる。Samba は同じ長いファイル名は、常に同じ mangle 名に短縮することに留意すること。Windows ではその限りではない。この方式では、ファイル名の重複の可能性は皆無ではない。しかしその可能性は激減している。

> 通常、mangle 設定オプションは、古いクライアントの為にのみ用いられる。そのため、この設定が別のクライアントに悪影響を与えないように、`include` パラメータを smb.conf ファイルに追加することを推奨する:

>     [global]
>     	include = /ucsr/local/samba/lib/smb.conf.%m

> これは、Windows for Workgroups クライアントがアクセスすると smb.conf.WfWg のように解決される。そこで /usr/local/samba/lib/smb.conf.WfWg というファイルに以下のようなオプションを設定しておこう:

>     [global]
>     	case sensitive = no
>     	default case = upper
>     	preserve case = no
>     	short preserve case = no
>     	mangle case = yes
>     	mangled names= yes

> Windows for Workgroups 3.1 を利用していないのであれば、恐らくこれらのオプションをデフォルト値から修正する必要はないであろう。

> #### 5.4.1.1 Representing and resolving filenames with Samba

> 指摘しなければならないもう一つの点は、ファイルを 表示 する方法と 識別 する方法のOSによる違いである。例えば、Windows 95/98/NT を利用している場合、恐らく, you have likely run across a file called README.TXT という名前のファイルをみたことがあるであろう。このファイルは、OSによって、全て大文字のファイルとして表示されている。しかし、MS-DOS プロンプトを開いて `edit` `readme.txt`とした場合、全て大文字のファイルが、エディタにロードされる。名前を小文字で入力した場合も同様である。

> これは、Windows 95/98/NT 系列のOS は、ファイル名を大文字小文字を区別せずに識別している為である。ファイルが大文字小文字を区別するように書かれていても同様である。一方UNIX系列のシステムは、常にファイルを大文字小文字を区別して識別する。例えば README.TXT ファイルを編集しようとして `vi` `readme.txt` と入力した場合、恐らく新しいファイルの空のバッファを編集することになるであろう。

> ここで、Samba が大文字小文字をどのように処理するのかを記述する: `preserve` `case` が `yes` の場合、 Samba はファイル名を表示(解決ではない)するのに、常に大文字小文字を区別する。`no`の場合、大文字小文字の特徴は、`default` `case` オプションによって決定される。これは `short` `preserve` `case`についても同様である。このオプションが `yes`に設定されていると、Samba は 8.3 ファイル名を表示するのにOSのデフォルトの文字の大きさで行うようになる。そうでない場合は、`default` `case` オプションで設定された文字の大きさを利用する。最後に Samba は`case` `sensitive` オプションの値に基づいて共有内のファイル名を識別する。

> ### 5.4.2 Mangling Options

> Samba では name mangling をどのように行うかについての詳細な制御を行うことが可能である。それには、文字の大きさを識別するかどうかの制御や、mangled 名を形成するときに挿入する文字、また手作業でファイル名の形式を変換する機能などを含まれる。これらのオプションを 表 5.7に示す。

> 表 5.7: Name Mangling のオプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `case sensitive` `(casesignames)` | 真偽値 | `yes`の場合、Samba はファイル名の大文字小文字を区別する(Windows は区別しない) | `no` | 共有
> `default case` | (`upper` or `lower`) | デフォルトの文字の大きさ(preserve case が`no`の時のみ用いられる) | Lower | 共有
> `preserve case` | 真偽値 | `yes`の場合、クライアントが提供する文字の大きさを維持する(`default case`に従った変換を行わない) | `yes` | 共有
> `short preserve case` | 真偽値 | `yes`の場合、クライアントが提供する 8-3 形式の名前の文字の大きさを維持する | `yes` | 共有
> `mangle case` | 真偽値 | 大文字と小文字が混在している時に名前を mangle する | `no` | 共有
> `mangled names` | 真偽値 | 長い名前を 8.3 の DOS 形式にmangle する | `yes` | 共有
> `mangling char` | 文字列 (1文字) | mangle 文字を指定する | `~` | 共有
> `mangled stack` | 数値 | ローカルな manle スタックに保存する mangle 名の数を指定する | `50` | グローバル
> `mangled map` | 文字列 (パターンのリスト) | 形式を変換するときに用いるファイル名のマッピング方式を記述する | なし | 共有

> #### 5.4.2.1 case sensitive

> この共有レベルのオプションには、`casesignames`というよく意味がわからない同義語が存在するが、Samba がある共有内のファイル名を識別する際に文字の大きさを区別するかどうかを設定する。このオプションのデフォルト値は`no`であり、これは Windows がファイル名を識別する方法と同じである。クライアントのOSにファイル名の文字の大きさを区別するものを用いている場合は、この設定オプションを以下のように`yes` にできる:

>     [accounting]
>     	case sensitive = yes

> それ以外の場合は、このオプションをデフォルトのままにしておくことを推奨する。

> #### 5.4.2.2 default case

> `default` `case` オプションは `preserve` `case` オプションと一緒に用いられる。これはクライアントが共有にファイルを作成した時に Samba が用いるデフォルトの文字の大きさ(大文字/小文字) を設定する。デフォルトの文字の大きさは`lower`であり、これは新しく作成されたファイルがクライアントから与えられる文字の大きさが混在した名前を用いることを意味する。必要であればこのグローバルオプションを以下のように設定することもできる:

>     [global]
>     	default case = upper

> この場合、新しく作成されるファイルの名前は大文字に変換される。プログラムによってこの動作を変更することはできない。Windows for Workgroups 等、`大文字`である必要がある 8.3 クライアントを利用していないのであれば、このオプションはデフォルトの値を用いることを推奨する。

> #### 5.4.2.3 preserve case

> このオプションは、クライアントが Samba に作成したファイルの名前にクライアントのOSから提供された文字の大きさを用いるか、上記の`default` `case` 設定オプションを用いるかどうかを設定する。デフォルト値は `yes`であり、クライアントのOSが提供する文字の大きさを利用する。`no`にした場合、`default` `case` オプションの値が用いられる。

> このオプションは、クライアントが 8.3 形式のファイルを送付した場合は適用されないことに注意 - 以下の`short` `preserve` `case` オプションを参照のこと。 このオプションを`yes`にすると、アプリケーションが Samba サーバ上に作成したファイルは、 ファイル作成時に用いられた大文字と小文字の情報を識別する。Samba に Windows NT のファイルシステムの動作を模倣させるのであれば、このオプションはデフォルトの `yes`のままにしておくこと。

> #### 5.4.2.4 short preserve case

> このオプションは、クライアントが Samba に作成した 8.3形式のファイル名をクライアントのOSのデフォルトの文字の大きさにするか、`default` `case` 設定オプションで設定された文字の大きさにするかを設定する。デフォルト値は `yes`であり、クライアントのOSから提供された文字の大きさの情報を利用する。以下のようにすることで、`default` `case` オプションで指定した値を利用させることができる:

>     [global]
>     	short preserve case = no

> Samba に Windows NT ファイルシステムの動作を模倣させるのであれば、このオプションはデフォルトの`yes`のままにしておくこと。

> #### 5.4.2.5 mangled names

> この共有レベルのオプションは、Samba が8.3 クライアント用に共有中のファイル名を mangle するかどうかを設定する。このオプションが`no`の場合、Samba は名前を mangle しない、(clientにも依存するが)8.3 形式のOSを利用しているユーザからは、それらのファイルは見えなるか、ファイル名が切り捨てられたようにみえる。デフォルト値は `yes`である。ある共有についてこのオプションを設定するには、以下のようにする:

>     [data]
>     	mangled names = no

> #### 5.4.2.6 mangle case

> このオプションは `default` `case` 設定オプションで指定される文字の大きさから構成されていないだけのファイル名も mangle するかどうかを設定する。このオプションのデフォルトは`no`である。これを`yes`にすると、全てのクライアントが mangled ファイル名を扱えるようになる。ある共有についてこのオプションを設定するには以下のようにする:

>     [data]
>     	mangle case = yes

> このオプションは、変更する正当な理由がない限りそのままにしておくことを推奨する。

> #### 5.4.2.7 mangling char

> この共有レベルのオプションは、Samba が 8.3 形式からファイル名を生成するときに用いる mangle 文字を指定する。デフォルトで利用される文字はチルダ(~)である。これは必要に応じて変更することが可能である。以下に例を示す:

>     [data]
>     	mangling char = #

> #### 5.4.2.8 mangled stack

> Samba は最近 mangle した 8.3 ファイル名のスタックを持っている。このスタックは mangle 名をオリジナルの名前に戻す逆変換表に使われる、これは作成したファイルを一度クローズした後で必要とするようなアプリケーションが必要とする。長いファイル名/mangle ファイル名のペアが蓄積されるデフォルトの値は 50 である。ファイル名を mangle するのに利用するCPU時間を短縮したいような時は、このスタックのサイズを必要に応じて増加させる。その代わりメモリの消費量が増え、わずかながらファイルのアクセスが遅くなる。

>     [global]
>     	mangled stack = 100

> #### 5.4.2.9 mangled map

> デフォルトの名前のmangleの動作に不満があれば、`mangled` `map` オプションを用いることで、Samba に対してどのようにそれを行うかを指示することが可能である。このオプションは、Samba が名前の mangle を行う前、もしくは行っている最中に用いられるマッピングパターンの指定を可能にする:

>     [data]
>     	mangled map =(*.database *.db) (*.class *.cls)

> これにより、Samba は各々のファイル名について括弧内で指定された最初のパターンにマッチする文字列が存在するかどうかをさがし、8.3 クライアントのファイル名表示のために、括弧内の二番目のパターンに従ってそれを置き換えるようになる。これは、名前の mangle がファイル名を正しく変換せず、クライアントがそれを認識できなくなってしまうような時に有用である。パターンはホワイトスペースで区切られる。

5.3 MS-DOS と UNIX におけるファイルのアクセス権と属性 |  | 5.5 ロックと oplock

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.