パス (コンピューティング)

パス(またはfilepathfile pathpathnameなど) は、ディレクトリ構造の場所を一意に識別するために使用される文字です。これは、区切り文字で区切られたコンポーネントが各ディレクトリを表すディレクトリツリー階層に従うことによって構成されます。区切り文字は、最も一般的にはスラッシュ(「/」)、バックスラッシュ文字 (「\」)、またはコロン (「:」) です。ただし、一部のオペレーティング システムでは別の区切り文字が使用される場合があります。パスは、最新のオペレーティング システムで一般的なディレクトリとファイルの関係を表すためにコンピューター サイエンスで広く使用されており、 Uniform Resource Locator (URL)の構築に不可欠です。リソースは絶対パスまたは相対パスで表すことができます。

歴史

Multics は、1960 年代半ばにディレクトリ (">" で区切られる) を備えた階層ファイル システムを初めて導入しました。 [1]

1970 年頃、Unix はディレクトリ区切り文字としてスラッシュ文字 (「/」) を導入しました。

1981 年に、 Microsoft DOSの最初のバージョンがリリースされました。MS-DOS 1.0 はファイル ディレクトリをサポートしていませんでした。また、MS-DOS 1.0 にパッケージされているユーティリティ コマンドの大部分はIBMから提供されており、そのコマンド ライン構文では「スイッチ」プレフィックスとしてスラッシュ文字が使用されていました。たとえば、ワイド リスト形式オプションを指定してコマンドを dir /w実行します。dir

このスラッシュの使用は、 Microsoft Windowsのコマンド インターフェイスで今でも見られます。対照的に、Unix では、コマンド ライン スイッチのプレフィックスとしてダッシュ (「-」) 文字が使用されます。

バージョン 2.0 でディレクトリ サポートが MS-DOS に追加されたとき、下位互換性のために「/」がスイッチ プレフィックス文字として残されました。 Microsoft はディレクトリ区切り文字としてバックスラッシュ文字 (「\」) を選択しました。これはスラッシュ文字に似ていますが、最新バージョンの Windows はスラッシュに依存せず、パス内で両方のタイプのスラッシュを混在させることができます。[2] [3]

絶対パスと相対パス

絶対パスまたは完全パスは、現在の作業ディレクトリに関係なく、ファイル システム内の同じ場所を指します。そのためには、ルート ディレクトリを含める必要があります。

対照的に、相対パスは特定の作業ディレクトリから始まるため、完全な絶対パスを指定する必要がありません。ファイル名は、現在の作業ディレクトリに基づく相対パスとして考えることができます。作業ディレクトリがファイルの親ディレクトリではない場合、ファイルがその名前でアドレス指定されていると、ファイルが見つからないというエラーが発生します。

ベースURL

ベースURL はAPI パスの一貫した部分であり、エンドポイント パスが追加されます。

オペレーティング システムとシェルによるパスの表現

オペレーティング
·システム
シェル ルート
ディレクトリ
ディレクトリ
区切り文字
カレント
ディレクトリ

ディレクトリ
ホーム
ディレクトリ
Unix 系OS ( macOS
を含む)
Unix シェル / / . .. ~ /home/user/docs/Letter.txt
./inthisdir
../../greatgrandparent
~/.rcinfo
DOS コマンドドットコム [drive letter:]\または
\\[server name]\[volume]\
\ . .. C:\USER\DOCS\LETTER.TXT
A:PICTURE.JPG
\\SERVER01\USER\DOCS\LETTER.TXT
OS/2 cmd.exe [drive letter:]\または
\\[server name]\[volume]\
/または\ . .. C:\user\docs\Letter.txt
A:Picture.jpg
\\SERVER01\USER\docs\Letter.txt
マイクロソフト
ウィンドウズ
cmd.exe \(現在の作業ディレクトリのルートを基準とした)または
または[drive_letter]:\
またはまたは4]\\[server]\[sharename]\
\\?\[drive_spec]:\
\\?\UNC\[server]\[sharename]\
\\.\[physical_device]\
/または\

日本語版ではパス区切り文字として「¥」が使用され、韓国語版では「₩」が使用されます。

. ..[5] C:\user\docs\Letter.txt
/user/docs/Letter.txt
C:\Letter.txt
\\Server01\user\docs\Letter.txt
\\?\UNC\Server01\user\docs\Letter.txt
\\?\C:\user\docs\Letter.txt
C:\user\docs\somefile.ext:alternate stream name
./inthisdir
../../greatgrandparent
Windows PowerShell [drive letter:]/または[drive name:]\またはまたは
\\[server name]\

[PSSnapIn name]\[PSProvider name:][:PSDrive root]

/または\ . .. ~ C:\user\docs\Letter.txt
C:\user/docs\Letter.txt
\\Server01\user\docs\Letter.txt
cd ~\Desktop

UserDocs:/Letter.txt
Variable:PSVersionTable
Registry::HKEY_LOCAL_MACHINE\SOFTWARE\
Microsoft.PowerShell.Security\Certificate::CurrentUser\

TOPS-20 DCL [device name:] . PS:<USER.DOCS>LETTER.TXT,4
RSX-11 MCR [device name:] DR0:[30,12]LETTER.TXT;4
OpenVMS DCL [device name:][000000]または

[NODE["accountname password"]]::[device name][000000]:

. [] [-] SYS$LOGIN: SYS$SYSDEVICE:[USER.DOCS]PHOTO.JPG

[]IN_THIS_DIR.COM;
[-.-]GreatGrandParent.TXT
SYS$SYSDEVICE:[.DRAFTS]LETTER.TXT;4
GEIN::[000000]LETTER.TXT;4
SYS$LOGIN:LOGIN.COM

クラシック
Mac OS
[volume or drive name]: : : :: Macintosh HD:Documents:Letter
:fileincurrentdir
::fileinparent
:::fileingrandparent
プロドス AppleSoft BASIC /[volume or drive name]/ / /SCHOOL.DISK/APPLEWORKS/MY.REPORT

FLIGHT.SIMULATOR,D2

AmigaOS Amiga CLI /
AmigaShell
[drive, volume, device or assign name]: / ""
(空の文字列)
/ Workbench:Utilities/MultiView
DF0:S/Startup-Sequence
S:Startup-Sequence
TCP:en.wikipedia.com/80
RISC OS シェルCLI [fs type[#option]:][:drive number or disc name.]$

注: &、%、@ は、それぞれ現在のユーザーのルート
、ライブラリ、現在の (作業) ディレクトリを参照するために使用することもできます。

. @ ^ & ADFS::MyDrive.$.Documents.Letter
Net#MainServer::DataDrive.$.Main.sy10823
LanMan::WindowsC.$.Pictures.Japan/gif
NFS:&.!Choices
ADFS:%.IfThere
@.inthisdir
^.^.greatgrandparent

ファイル名拡張子を持つファイルシステムがマウントされている場合、
「.」上記の Japan/gif の例のように、文字は「/」に変更されます。

シンビアン OS ファイルマネージャー \ \ \user\docs\Letter.txt
ドメイン/OS シェル

//(ドメインのルート)
/(現在のノードのルート)

/ . \ ~ //node/home/user/docs/Letter.txt
./inthisdir
\\greatgrandparent
~rcinfo
MenuetOS CMD / /
ストラタス VOS VOSコマンドライン
インタープリタ
%[system_name]#[module_name]> > < %sysname#module1>SubDir>AnotherDir
ノンストップ
カーネル
TACL
Tandem 高度な
コマンド言語
ルートがありません .
ディレクトリが ありません
\NODE.$DISK.SUBVOL.FILE
\NODE.$DEVICE
\NODE.$DEVICE.#SUBDEV.QUALIFIER
CP/M 中国共産党 [drive letter:] ディレクトリはサポートされず、ユーザー領域 0 ~ F のみがサポートされます A:LETTER.TXT
GS/OS :[volume name]:または.[device name]:、または[prefix]:

注: プレフィックスは数字 (0 ~ 31)、*(ブート ボリューム)、または@(AppleShare ホーム ディレクトリ) です。

:または/ @ :Apps:Platinum.Paint:Platinum.Paint
*:System:Finder
.APPLEDISK3.5B/file
OpenHarmony ( HarmonyOSを含む) 実行[6] [7] hb set -root [ROOT_PATH]

hb set -p --product [PRODUCT_NAME]

> ./ ../ LOCAL>MEDIA_TYPE_>Download>Letter.txt

Windows の日本語版および韓国語版では、ディレクトリ区切り文字の代わりに「 ¥」文字または「 」文字が表示されることがよくあります。このような場合、バックスラッシュのコードはこれらの文字として描画されます。 MS-DOS の非常に初期のバージョンでは、ディスプレイ上のバックスラッシュをこれらのグリフに置き換えて、7 ビットASCIIのみを理解するプログラムで表示できるようにしました(角括弧などの他の文字も同様に置き換えられました。ISO 646、 Windowsを参照)コードページ 932 (日本語シフト JIS)、およびコードページ 949 (韓国語))。 Windows の最初のバージョンでも、U+00A5 に円記号がある8 ビットISO-8859-1文字セットをサポートしており、最新バージョンの Windows は U+20A9 にウォン記号があるUnicodeをサポートしていますが、多くのソフトウェアは今後も継続されます。下位互換性を維持するために、ASCII ファイルにあるバックスラッシュをこの方法で表示します。[8]

Mac OS X はUNIX から派生したものであり、内部的に UNIX パスを使用します。ただし、ソフトウェアの互換性とユーザーの使いやすさを維持するために、GUI の多くの部分は、ユーザーが入力した「/」を内部で「:」に切り替え、ファイル名を表示するときに元に戻します (ユーザーが入力した「:」も変更されます) 「/」に変換しますが、逆変換は行われません)。

プログラミング言語のパス

プログラミング言語でもパスが使用されます。例:ファイルを開いたとき。ほとんどのプログラミング言語は、基盤となるオペレーティング システムのパス表現を使用します。

 uxFile = fopen("project/readme.txt", "r")
 winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")

オペレーティング システムのパスへのこの直接アクセスは、プログラムの移植性を妨げる可能性があります。移植可能なプログラムをサポートするために、Java はFile.separatorを使用して/ と \ で区切られたパスを区別します。Seed7 はパス表現に対して異なるアプローチを採用しています。 Seed7 では、オペレーティング システムに関係なく、すべてのパスで Unix パス規則が使用されます。 Windows ではマッピングが行われます (例: パス/c/users はc:\usersにマッピングされます)。

ユニバーサル命名規則

Microsoft Windows UNC は、 Universal Naming ConventionまたはUniform Naming Conventionの略で、共有ファイル、ディレクトリ、プリンタなどのネットワーク リソースの場所を記述する共通の構文を指定します。 Windows システムの UNC 構文は次の一般的な形式になります。

\\コンピューター名\共有フォルダー\リソース

Microsoft では、これを「ネットワーク パス」と呼ぶことがよくあります。

一部の Microsoft Windows インターフェイスでは、 WebDAV共有アクセスに URL ではなくUNC 構文を許可または要求します。 UNC 構文は、SSL および TCP/IP ポート番号の使用を示すオプションのコンポーネントで拡張されており、WebDAV URL は次のようhttp[s]://HostName[:Port]/SharedFolder/Resourceなります。

\\ホスト名[@SSL][@ポート]\SharedFolder\Resource

リモートで表示される場合、「SharedFolder」の名前は、サーバー上のプログラムが「\SharedFolder」を開いたときに表示されるものとは異なる場合があります。代わりに、SharedFolder 名は、「共有」を定義するときにフォルダーに割り当てられる任意の名前で構成されます。

一部の Microsoft Windows インターフェイスは、「Long UNC」も受け入れます。

\\?\UNC\コンピューター名\共有フォルダー\リソース

Microsoft Windows では、次の種類のパスが使用されます。

  • ローカル ファイル システム (LFS) などC:\File
  • \\Server\Volume\Fileまたは /などの汎用命名規則 (UNC) <internet resource name>[\Directory name](少なくとも Windows 7 以降では)
  • \\?\C:\Fileまたはなどの「長い」デバイス パス\\?\UNC\Server\Volume\File[10]このパスはローカル ファイルの名前空間を指しており、\\.\ローカル DOS デバイスの名前空間を指すパスと同様です。この形式は、 /を\に変換したり..のような名前を解釈したりせずに、パスをファイル システムに直接送信するため、「生」または「解釈されていない」パスでもあります[4]
  • Windows NT オブジェクト マネージャ \\??\- プレフィックス付きパス (グローバル DOS 名前空間)。[11] [12]

Windows XP より前のバージョンの Windows では、「長い」デバイス パスを受け入れる API のみが 260 文字を超える文字を受け入れることができました。

Windows XPおよびWindows Vistaのシェルexplorer.exeでは最大 248 文字の長さのパス名を使用できます。[要出典]

UNC は 2 つのバックスラッシュで始まり、バックスラッシュは文字列のエスケープや正規表現にも使用されるため、極端なケースでは爪楊枝症候群が発生する可能性があります。UNC に一致する正規表現のエスケープ文字列は 8 つのバックスラッシュで始まります\\\\\\\\。文字列と正規表現は両方ともエスケープする必要があります。これは、C#や Python のような生の文字列、または Perl のような正規表現リテラルを使用することで簡略化できます@"\\\\"r'\\\\'qr{\\\\}

POSIX パス名の定義

ほとんどの Unix 系システムは同様の構文を使用します。[13] POSIX では、実装定義の方法で 2 つのスラッシュで始まるパスを扱うことができますが、[14] 他の場合には、システムは複数のスラッシュを 1 つのスラッシュとして扱わなければなりません。[15] Unix 系システム上の多くのアプリケーション ( scprcp 、 rsyncなど) は、次のようなリソース定義を使用します。

ホスト名:/ディレクトリパス/リソース

またはサービス名 (ここでは「smb」) を含む URIスキーム:

smb://ホスト名/ディレクトリパス/リソース

Unix スタイル

次の実際の例では、端末または端末アプリケーション (コマンド ライン ウィンドウ) から表示される Unixスタイルのファイル システムの動作について説明します。

以下の現在の作業ディレクトリ (cwd) に接続されています。

/ユーザー/マーク/

現在の作業ディレクトリを次のように変更したいと考えています。

/users/マーク/ボバップルズ

この時点で、目的のディレクトリの相対パスは次のように表すことができます。

./ボバップル

または略して:

ボバップル

ディレクトリの絶対パスは次のようになります。

/users/マーク/ボバップルズ

必要なディレクトリの相対パスとしてbobapples を指定すると、コマンド プロンプトで次のように入力して、現在の作業ディレクトリを bobapples に変更できます。

CDボバップル

2 つのドット (「.. 」) は階層内で上向きを指し、親ディレクトリを示します。 1 つのドット (「.」) は、現在のディレクトリ自体を表します。どちらも複雑な相対パス (例: 「../mark/./bobapples」) のコンポーネントにすることができ、「.」は単独で、またはそのような相対パスの最初のコンポーネントとして作業ディレクトリを表します。 (「./foo」を使用して現在の作業ディレクトリ内のファイル「foo」を参照すると、デフォルトのディレクトリまたは他の手段で見つかるリソース「foo」と区別できる場合があります。たとえば、特定のファイルを表示する場合などです。システムにインストールされているバージョンではなく、 マニュアル ページのバージョンです。)

MS-DOS/Microsoft Windows スタイル

ディレクトリ内のファイル名を表示するWindows コマンド シェルのスクリーンショット

一般に信じられていることに反して、Windows システム API はスラッシュを受け入れるため、上記の Unix の例はすべて動作するはずです。しかし、Windows 上の多くのアプリケーションでは、スラッシュを他の目的に解釈したり、無効な文字として扱ったりするため、特にcmd.exeシェル (通常はターミナル ウィンドウで実行されるため、「ターミナル」と呼ばれることが多い) ではバックスラッシュを入力する必要があります。tcshWindows PowerShellなど、Windows で使用できる他の多くのシェルではスラッシュが使用できることに注意してください。

さらに、「\」は単一のルートを示すのではなく、「現在のディスク」のルートを示します。現在のディスク以外のディスク上のファイルを示すには、ドライブ文字とコロンを接頭辞として付ける必要があります。コロンは MS-DOS ファイル名では有効な文字ではないため、あいまいさは生じません。したがって、現在のディレクトリに「A:」というファイルを置くことはできません。

UNC 名 ( \\?\で始まるパス) はスラッシュをサポートしません。[4]

次の例は、最も一般的な構文に一致させるためにバックスラッシュを使用した MS-DOS / Windowsスタイルのパスを示しています。

A:\Temp\File.txt

このパスは、ディレクトリTempにあるFile.txtという名前のファイルを指します。このファイルは、ドライブA:のルート ディレクトリにあります

C:..\ファイル.txt

このパスは、ドライブC:の現在のディレクトリの親ディレクトリにあるFile.txtというファイルを参照します

フォルダー\サブフォルダー\ファイル.txt

このパスは、サブフォルダーディレクトリにあるFile.txtというファイルを示します。サブフォルダー ディレクトリは、現在のドライブの現在のディレクトリにある フォルダーディレクトリにあります(この例ではドライブの指定がないため)。

ファイル.txt

File.txtこのかなり単純なパスは、現在のドライブ (ドライブ指定が存在しないため) 上の現在のディレクトリ (パスにディレクトリ指定がないため) にある という 名前のファイルを指します。

\\.\COM1

このパスは、最初のシリアル ポート( COM1 ) を参照します。

C:\>詳細< C:/Windows/system.ini
; 16 ビット アプリのサポート用
[386Enh] 
woafont = dosapp.fon 
EGA80WOA.FON = EGA80WOA.FON 
EGA40WOA.FON = EGA40WOA.FON 
CGA80WOA.FON = CGA80WOA.FON 
CGA40WOA.FON = CGA40WOA.FON 
...

この例では、ディレクトリ区切り文字としてスラッシュを含むパスを使用します。このコマンドは、ファイルの内容をコマンドにリダイレクトしますmore

E:\> dir  "/Folder/SubFolder/" /Q
ドライブ E のボリュームはデータ
ボリュームです。シリアル番号は 07BE-0B10 です。

E:\フォルダー\サブフォルダーのディレクトリ

2008 年 10 月 18 日 08:15 AM <DIR> DOMAIN\user 。
 2008 年 10 月 18 日 08:15 AM <DIR> DOMAIN\user ..
 2008 年 10 月 18 日 08:15 AM <DIR> DOMAIN\user File.txt
                1 ファイル 8 バイト
               2 ディレクトリ 19,063,000 バイト空き

スラッシュを含むパスは、多くの場合、コマンド ライン スイッチとのあいまいさをなくすために二重引用符で囲む必要があります。

  • 注: CD はこのようには機能しません。

CD「[ドライブ文字]:/Program Files」は、ルート ([ドライブ文字]:\) ディレクトリからのみ動作します。これにより、すべてのスラッシュが .\ と同じように扱われるようです。[要出典]

  • 例外: ドライブの現在のディレクトリを変更するだけでなく、/D スイッチを使用して現在のドライブを変更します。

例えば:

CD「C:.\Program Files」

と同じように機能します

CD「C:/プログラムファイル」

また、ルート フォルダーから:

CD「C:.\Program Files.\Internet Explorer」

と同じように扱われます

CD「C:/Program Files/Internet Explorer」

スラッシュで指定されたディレクトリ名への相対パスがない場合は、次のエラーが発生します。

システムは指定されたパスを見つけることができません。

環境変数を設定するには、スペースを含まないパスを指定する必要がある場合があります。たとえば、%JAVA_HOME%「C:\Program Files\Java...」として定義すると、パス内にスペースが含まれるとスクリプトが停止する可能性があります。名前。環境変数での置換のために Windows が任意のディレクトリに割り当てる 8 文字の名前を取得するには、ターゲット ディレクトリの 1 レベル上の /x オプションを指定してディレクトリ一覧コマンドを使用します。たとえば、次のコマンドを実行すると、ルート直下のすべてのディレクトリの 8 文字の名前が取得されます。

C:\>ディレクトリ/x

こちらも参照

参考文献

  1. ^ デイリー、RC;ニューマン、PG (1965)。 「二次ストレージ用の汎用ファイルシステム」。1965 年 11 月 30 日から 12 月 1 日まで開催された秋の合同コンピュータ会議、XX に関するパート I - AFIPS '65 (秋、パート I) の議事録。 Vol.パート I。213 ~ 229 ページ。土井: 10.1145/1463891.1463915S2CID  16236414。
  2. ^ 「Windows がバックスラッシュを使用し、他のものはすべてスラッシュを使用する理由」. 2014 年 2 月 10 日。
  3. ^ 「なぜ DOS のパス文字は "" なのでしょうか?」. 2005 年 6 月 24 日。
  4. ^ abc 「ファイル、パス、名前空間の命名」。Microsoft ドキュメント。 2022 年 12 月 15 日。
  5. ^ 「CD」。 Windows コマンド: Windows サーバー。Microsoft ドキュメント。 2023 年 2 月 3 日2023 年10 月 4 日に取得
  6. ^ 「シェルの紹介」. GitHub。 OpenAtom OpenHarmony 2024 年3 月 13 日に取得
  7. ^ "実行". GitHub。 OpenAtom OpenHarmony 2024 年3 月 14 日に取得
  8. ^ "バックスラッシュがバックスラッシュではないのはどのような場合ですか?".すべてを整理する
  9. ^ "DavGetHTTPFromUNCPath 関数". WebDAV : Windows。Microsoft ドキュメント。シリーズ。 2021 年 10 月 13 日2023 年10 月 4 日に取得
  10. ^ "Windows システムのファイル パス形式".ファイルおよびストリーム I/O : .NET。Microsoft ドキュメント2019 年7 月 14 日に取得
  11. ^ "winapi - \??\ パスと \\?\ パスに違いはありますか?".スタックオーバーフロー
  12. ^ "パスのプレフィックス \??\ および \\?\"。スタックオーバーフロー
  13. ^ 「UNC の定義」. ComputerLanguage.com
  14. ^ "POSIX パス名解決仕様".
  15. ^ "POSIX パス名の定義".

外部リンク

  • パス定義 - Linux 情報プロジェクト (LINFO)
  • ファイル、パス、名前空間の命名 - ローカル ファイル システム : Windows : Microsoft Docs
「https://en.wikipedia.org/w/index.php?title=Path_(コンピューティング)&oldid=1218460997#Absolute_and_relative_paths」から取得