パス(またはファイルパス、パス名など)は、階層型ファイルシステム内の項目を一意に識別する文字列です。一般的に、パスはディレクトリ名、特殊なフォーマット指定子、およびオプションでファイル名で構成され、これらはすべて区切り文字で区切られています。この区切り文字はオペレーティングシステムによって異なりますが、一般的な最新のシステムではスラッシュ、バックスラッシュ、またはコロンが使用されます。/\:
個々のパス コンポーネントの大文字小文字の区別は、オペレーティングシステム、またはファイルシステムの作成時や初回使用時に指定されたオプションによって異なります。実際には、これは、大文字小文字を区別するcomponent1システムでは、およびという名前のパス コンポーネントがComponent1階層の同じレベルに共存できるのに対し、大文字小文字を区別しないファイルシステムでは共存できない(エラーが発生する)ことを意味します。macOS および Windows のネイティブ ファイルシステムはデフォルトでは大文字小文字を区別しませんが、一般的な Linux ファイルシステムは大文字小文字を区別します。[ 1 ] [ 2 ] [ 3 ]
パスは相対パスと絶対パスのいずれかになります。相対パスは、別のパス(多くの場合、作業ディレクトリ)を基準としたパスです。絶対パスは、現在のディレクトリに関係なく場所を示します。つまり、ファイルシステムのルートから始まるすべてのパス要素を指定し、相対パスのようにコンテキストに依存しません。
Multicsは1960年代半ばに、ディレクトリ(">"で区切られる)を用いた階層型ファイルシステムを初めて導入した。 [ 4 ]
1970年頃、Unixは/ディレクトリ区切り文字としてスラッシュを導入した。
元々、MS-DOS はディレクトリをサポートしていませんでした。この機能を追加する際、多くの既存のコマンドがスイッチのプレフィックスとしてスラッシュを使用していたため (例: dir /w)、Unix 標準のスラッシュを使用するのは良い選択肢ではありませんでした。対照的に、Unix はスイッチのプレフィックスとしてダッシュを使用します。最終的に、スラッシュに似ていて既存のコマンドと競合しない-バックスラッシュが選択されました。この慣習はWindowsにも引き継がれました。ただし、 PowerShellなど、Windows の一部の領域では Unix スタイルのスラッシュも受け入れたり理解したりします。[ 5 ] [ 6 ]\
以下の表は、主要なオペレーティングシステムにおけるパスの構文を示しています。
ほとんどのプログラミング言語は基盤となるシステムのパス表現を使用しますが、システムに依存しないものもあります。[ 2 ]
例えば、このCコードはシステムに依存しており、異なるシステムでは失敗する可能性があります。[ 1 ]
uxFile = fopen ( "project/readme.txt" , "r" ) // Windows では失敗しますwinFile = fopen ( "C: \\ Program Files \\ bin \\ config.bat" , "r" ) // Unix では失敗しますimport java.io.File ; import java.nio.file.Path ; import java.nio.file.Paths ; // ... File file = new File ( "path" + File.separator + "file.txt" ) ; Path path = Paths.get ( "path" , "file.txt " ) ;from pathlib import Path( Path ( " path" ) / "to" / "file.txt" ) . open () as open_file : ...ほとんどのUnixライクなシステムは同様の構文を使用します。[ 22 ] POSIXでは、2つのスラッシュで始まるパスを実装定義の方法で処理できますが、[ 23 ]他の場合、システムは連続するスラッシュを1つとして処理する必要があります。[ 24 ]
Unix ライクなシステム上の多くのアプリケーション (例えば、scp、rcp、rsync ) は、などのリソース定義hostname:/directorypath/resource、またはサービス名 (ここでは ' smb ')を含むURIスキーム (例: 。[ 3 ]smb://hostname/directorypath/resource
macOS の開発時には、 Classic Mac OSとUnix ライクなNeXTSTEPからパス名の選択の一部が引き継がれました。Classic Mac OS は を使用します:が、 Unixおよび Unix ライクなシステムで/はパス区切り文字として を使用します。ソフトウェアの互換性とユーザーの使い慣れた操作性を維持し、Classic Mac OS と macOS の両方でディスク ファイルシステムを使用できるようにするため、macOS の一部ではパス名内のコロンとスラッシュを相互に変換します。[ 25 ]例えば、Classic Mac OS の HFS+ ファイルシステムは、ファイル名内のコロンをスラッシュに変換し、ディレクトリを読み込む際にはファイル名内のスラッシュをコロンに変換します。[ 26 ]また、Carbonツールキットは、パス名内のコロンをスラッシュに、パス名内のスラッシュをコロンに変換し、呼び出し元にファイル名とパス名を提供する際にそれらを元に戻します。[ 26 ]

DOSとWindowsには単一のルートディレクトリは存在せず、各ストレージドライブごとにルートが存在し、ドライブ文字またはUNCパスで示されます。
ディレクトリ名とファイル名の比較では大文字と小文字は区別されません。「test.TXT」は「Test.txt」と一致します。[ 27 ]
Windows は、以下の種類のパスを認識します。
C:\File。\\.\C:\Fileや など\\?\UNC\Server\Volume\File。前者は\\?\パスの正規化をスキップします。後者は\\.\生のデバイス 名前空間を使用します。[ 27 ] [ 28 ]Windows APIでは、ファイル I/O 関数は自動的/に に変換されます\(プレフィックスを使用する場合を除く)。標準の Windows API (DOS およびWin9x\\?\に遡る) を使用するパスは、環境変数MAX_PATHで定義されているように、260 文字以下に制限されていました。レガシー アプリケーションとの下位互換性のために、この制限は Windows 10 ビルド 1607 まで解除されず、32,767 まで拡張できるようになりました。Windows NT は常に 32,767 のパス長を内部的にサポートしていましたが、Unicode API を使用する場合、またはプレフィックスによって UNC パスを強制する場合に限られていました。[ 29 ]\\?\
PowerShell は、後方互換性のためにスラッシュ相互運用性を許可しています: [ 30 ]
PS C :\> Get-Content -Path "C:/path/to/file.txt"ファイル内のテキストの一部を以下に示します。日本語版および韓国語版のWindowsでは、ディレクトリ区切り文字の代わりに「¥」または「₩」の文字が表示されることがよくありました。これは、ANSIコードページでは0x5Cの文字がバックスラッシュであるのに対し、日本語版および韓国語版では0x5Cがそれぞれ円とウォンの記号であったためです。そのため、バックスラッシュの文字が使用されると、他のグリフが表示されました。[ 31 ]
Microsoft Universal Naming Convention ( UNC、Uniform Naming Convention、またはNetwork Pass ) は、共有ファイル、ディレクトリ、プリンタなどのネットワーク リソースの場所を記述するための構文です。UNC パスの一般的な形式は次のとおりです。[ 2 ]
\\ComputerName\SharedFolder\Resource
Windows インターフェースの中には、URL ではなく UNC 構文を使用してWebDAV共有にアクセスできるものや、それを必須とするものがあります。UNC 構文は、SSL と TCP/IP ポート番号の使用を示すオプションのコンポーネントで拡張されます。したがって、WebDAV URL は のhttps://hostname:443/SharedFolder/Resourceようになります\\hostname@SSL@443\SharedFolder\Resource。[ 32 ]
リモートからアクセスした場合、「SharedFolder」の名前は、サーバー上のプログラムが「\SharedFolder」を開く際に表示される名前とは異なる場合があります。実際には、SharedFolderの名前は、共有フォルダの作成時に割り当てられた任意の名前になります。
UNC は 2 つのバックスラッシュで始まり、バックスラッシュはエスケープシーケンスや正規表現にも使用されるため、傾いたつまようじ症候群が発生する場合があります。UNC に一致する正規表現のエスケープ文字列は、文字列と正規表現の両方でエスケープが必要なため、8 つのバックスラッシュで始まります。これは、 C#、Python 、Perl などの生文字列を\\\\\\\\使用することで簡略化できます。@"\\\\"r'\\\\'qr{\\\\}
Windowsのファイルシステムでは、ファイル名とディレクトリ名は大文字と小文字を区別しません。FOO.txtとfoo.txtは同等のファイルとして扱われます。Linuxのファイルシステムでは、ファイル名とディレクトリ名は大文字と小文字を区別します。FOO.txtとfoo.txtは別々のファイルとして扱われます。
Linuxにおける大文字小文字の区別とは、ファイル名に含まれる小文字と大文字を区別して認識する機能のことです。例えば、「File.txt」と「file.txt」は、それぞれ異なるファイルとして扱われます。この概念は、Linuxを含むUnix系オペレーティングシステムにとって不可欠な要素です。
{{cite book}}: CS1 メンテナンス: その他 (リンク)