知識ベース

パス(計算)

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

歴史

Multicsは、1960年代半ばに最初にディレクトリ(「>」で区切られた)を持つ階層ファイルシステムを導入しました。

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は、ディレクトリセパレータとして円記号(「\」)を選択しました。これは、スラッシュ文字に似ています。

絶対パスと相対パス

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

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

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

オペレーティング・システムシェルルートディレクトリディレクトリ区切り記号カレントディレクトリ親ディレクトリホームディレクトリ
UnixライクなOS
(macOSを含む)
Unixシェル / / .. /home/user/docs/Letter.txt
./inthisdir
../../偉大なる祖父母
〜/ .rcinfo
DOS COMMAND.COM \ または
\\\\
\ .. C:\ USER \ DOCS \ LETTER.TXT
A:PICTURE.JPG
\\ SERVER01 \ USER \ DOCS \ LETTER.TXT
OS / 2 cmd.exe \ または
\\\\
/ または \ .. C:\ user \ docs \ Letter.txt
A:Picture.jpg
\\ SERVER01 \ USER \ docs \ Letter.txt
マイクロソフトウィンドウズ cmd.exe \(現在の作業ディレクトリのルートに対して)
または :\
または \\\\
または \\?\:\
または \\?\\\
または\\?\ UNC \\\
または \\。\\
/ または \ .. 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
../../偉大なる祖父母
マイクロソフトウィンドウズ Windows PowerShell /または\ or
\\\ または

\ PSProvider名:

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

UserDocs:/Letter.txt
変数:PSVersionTable
レジストリ:: HKEY_LOCAL_MACHINE \ SOFTWARE \
Microsoft.PowerShell.Security \ Certificate :: CurrentUser \

TOPS-20 DCL PS:USER.DOCS> LETTER.TXT、4
RSX-11 MCR DR0:LETTER.TXT; 4
OpenVMS DCL または

NODE「アカウント名パスワード」

SYS $ LOGIN: SYS $ SYSDEVICE:PHOTO.JPG

IN_THIS_DIR.COM;
GreatGrandParent.TXT
SYS $ SYSDEVICE:LETTER.TXT; 4
GEIN :: LETTER.TXT; 4
SYS $ LOGIN:LOGIN.COM

クラシックMac OS :: Macintosh HD:ドキュメント:レター
:fileincurrentdir
:: fileinparent
::: fileingrandparent
ProDOS AppleSoft BASIC // / /SCHOOL.DISK/APPLEWORKS/MY.REPORT

フライトシミュレーター、D2

AmigaOS Amiga CLI / AmigaShell / ""(空の文字列) / ワークベンチ:ユーティリティ/マルチビュー
DF0:S / Startup-Sequence
S:起動シーケンス
TCP:ja.wikipedia.com/80
RISC OS ShellCLI fs type#option $

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

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


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

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

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

/ \ //node/home/user/docs/Letter.txt
./inthisdir
\\偉大なる祖父母
〜rcinfo
MenuetOS CMD / /
ストラタスVOS VOSコマンドラインインタープリター %#> > %sysname#module1> SubDir> AnotherDir
NonStopカーネル TACLタンデムアドバンスドコマンド言語ルートなし親ディレクトリなし \ NODE。$ DISK.SUBVOL.FILE

\ NODE。$ DEVICE

\ NODE。$ DEVICE。#SUBDEV.QUALIFIER

CP / M CCP サブディレクトリなしサブディレクトリなし親なしサブディレクトリなし A:LETTER.TXT
GS / OS ::または。:または

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

: または / @ :アプリ:Platinum.Paint:Platinum.Paint
*:システム:ファインダー
.APPLEDISK3.5B /ファイル

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

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 / usersc:\ usersにマッピングされます )。

汎用命名規則

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

\\ ComputerName \ SharedFolder \ Resource

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

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

\\ HostName @ SSL \ SharedFolder \ Resource

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

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

\\?\ UNC \ ComputerName \ SharedFolder \ Resource

Microsoft Windowsは、次のタイプのパスを使用します。

  • C:\ Fileなどのローカルファイルシステム(LFS)
  • \\ Server \ Volume \ Fileまたは/ インターネットリソース名>などの汎用命名規則(UNC)(少なくともWindows 7以降)
  • \\?\ C:\ Fileまたは\\?\ UNC \ Server \ Volume \ Fileなどの「長い」デバイスパス

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

Windows XPおよびWindows Vistaのシェルであるexplorer.exeでは、最大248文字のパス名を使用できます。

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

POSIXパス名の定義

ほとんどのUnixライクシステムは同様の構文を使用します。POSIXでは、実装定義の方法で2つのスラッシュで始まるパスを処理できますが、他の場合、システムは複数のスラッシュを単一のスラッシュとして処理する必要があります。 Unixライクシステム上の多くのアプリケーション(scp、rcp、rsyncなど)は、次のようなリソース定義を使用します。

ホスト名:/ directorypath / resource

または、サービス名(ここでは「smb」)を持つURLが好きです:

smb:// hostname / directorypath / resource

Unixスタイル

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

次の現在の作業ディレクトリ(cwd)に接続:

/ users / mark /

現在の作業ディレクトリを次のように変更します。

/ users / mark / bobapples

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

./bobapples

または略して:

ボバップル

およびディレクトリの絶対パス:

/ users / mark / bobapples

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

cd bobapples

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

MS-DOS / Microsoft Windowsスタイル

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

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

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

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

A:\ Temp \ File.txt

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

C:.. \ File.txt

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

Folder \ SubFolder \ File.txt

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

File.txt

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

\\。\ COM1

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

C:\> more C:/Windows/system.ini
; 16ビットアプリサポートの場合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:\ Folder \ SubFolderのディレクトリ2008年10月18日08:15 AM DIR> DOMAIN \ userです。 2008年10月18日08:15 AM DIR> DOMAIN \ user .. 18 October 2008 08:15 AM DIR> DOMAIN \ user File.txt 1ファイル8バイト2 Dir 19,063,000バイト空き

スラッシュを含むパスは、コマンドラインスイッチと区別するために二重引用符で囲む必要があります。

  • 注:CDはこの方法では機能しません。

CD ":/ Program Files"は、ルート(:\)ディレクトリからのみ機能します。これは、すべてのスラッシュを。\と同じように扱うように見えます。

  • 例外:/ Dスイッチを使用して、ドライブの現在のディレクトリを変更することに加えて、現在のドライブを変更します。

例えば:

CD "C:。\ Program Files"

と同じように動作します

CD "C:/ Program Files"

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

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

と同じように扱われます

CD「C:/ Program Files / Internet Explorer」

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

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

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

C:\> dir / x

誤解

パスをディレクトリとして表す正しい方法は、 末尾のスラッシュとピリオドです。

posix:

./bobapples/。

Windows:

。\ bobapples \。

末尾のスラッシュで終わるパスはディレクトリであると考えるかもしれません。しかし実際には、末尾のスラッシュで終わるパスは、ディレクトリ内のすべてのファイルを表します。

ボバップル

は、ディレクトリの場合もそうでない場合もあるファイルへの単なるパスです。ディレクトリへのパスではありません。最終的にディレクトリに解決される場合でも。