원문 보기: https://dawoum.duckdns.org/wiki/Path_(computing)
경로 (또는 파일-경로, 파일 경로, 경로-이름 또는 이와 유사한 것)는 디렉토리 구조에서 위치를 고유하게 식별하기 위해 사용되는 문자의 문자열입니다. 그것은 구분 문자로 구분된 구성 요소가 각 디렉토리를 나타내는 디렉토리 트리 계층을 따름으로써 구성됩니다. 구분 문자는 가장 공통적으로 슬래시("/"), 백슬래시 문자("\"), 또는 콜론(":")이지만, 일부 운영 시스템은 다른 구분 기호를 사용할 수 있습니다. 경로는 컴퓨터 과학에서 현대 운영 시스템에서 공통적인 디렉토리/파일 관계를 나타내기 위해 광범위하게 사용되고 Uniform Resource Locators (URL)의 구성에서 필수적입니다. 자원은 절대 경로 또는 상대 경로에 의해 표현될 수 있습니다.
History
Multics는 1960년대 중반에 디렉토리 (">"로 구분)를 갖는 계층적 파일 시스템을 처음 도입했습니다.
1970년경에, 유닉스는 디렉토리 구분 기호로 슬래시 문자 ("/")를 도입했습니다.
1981년에, Microsoft DOS의 첫 번째 버전이 출시되었습니다. MS-DOS 1.0은 파일 디렉토리를 지원하지 않았습니다. 역시, MS-DOS 1.0과 함께 패키지된 유틸리티 명령의 주요 부분은 IBM에서 왔고 명령줄 구문은 슬래시 문자를 '스위치' 접두사로 사용했습니다. 예를 들어, dir /w는 wide list 형식 옵션과 함께 dir 명령을 실행합니다.
슬래시의 이러한 사용은 Microsoft Windows 아래에서 명령 인터페이스에서 여전히 찾을 수 있습니다. 대조적으로, 유닉스는 하이픈-빼기 문자 ("-")를 명령줄 스위치 접두사로 사용합니다.
디렉토리 지원이 버전 2.0에서 MS-DOS에 추가되었을 때, "/"는 역방향 호환성을 위해 스위치 접두사 문자로 유지되었습니다. Microsoft는 디렉토리 구분 기호로 백슬래시 문자 ("\")를 선택했으며, 이는 슬래시 문자와 비슷해 보이지만, 최신 버전의 Windows는 슬래시와 무관하여, 경로에서 두 유형의 슬래시를 혼합할 수 있습니다.
Absolute and relative paths
절대 경로 또는 전체 경로는 현재 작업 디렉토리와 관계없이 파일 시스템에서 같은 위치를 가리킵니다. 이를 위해서, 그것은 루트 디렉토리를 포함해야 합니다.
이와 대조적으로, 상대 경로는 주어진 작업 디렉토리에서 시작하여, 전체 절대 경로를 제공하기 위한 필요성을 피합니다. 파일-이름은 현재 작업 디렉토리를 기준으로 하는 상대 경로로 여겨질 수 있습니다. 만약 작업 디렉토리가 파일의 부모 디렉토리가 아니면, 파일이 이름으로 지정되면 file not found error가 야기할 것입니다.
Base URL
기본 URL은 API 경로의 일관된 부분이며, 여기에 엔드포인트 경로가 덧붙여집니다.
Representations of paths by operating system and shell
일본어 버전과 한국어 버전의 Windows는 종종 디렉토리 구분 기호 대신 '¥' 문자 또는 '₩' 문자를 표시할 수 있습니다. 그러한 경우에서, 백슬래시의 코드가 이들 문자로 그려집니다. MS-DOS의 아주 초기 버전은 7-비트 ASCII만 이해하는 프로그램에 의해 표시될 수 있도록 디스플레이에서 백슬래시를 이러한 글리프로 대체했습니다 (대괄호와 같은 다른 문자도 대체되었으며, ISO 646, Windows Codepage 932 (Japanese Shift JIS), 및 Codepage 949 (Korean)를 참조). 비록 Windows의 첫 번째 버전조차도 U+00A5에 엔 기호를 가지는 8-비트 ISO-8859-1 문자의 집합을 지원했고 최신 버전의 Windows는 U+20A9에 원 기호를 가지는 유니코드를 지원할지라도, 많은 소프트웨어는 역방향 호환성을 유지하기 위해 이런 방식으로 ASCII 파일에서 발견되는 백슬래시를 계속 표시합니다.
유닉스의 파생물, Mac OS X는 내부적으로 UNIX 경로를 사용합니다. 어쨌든, 소프트웨어에 대한 호환성과 사용자에 대해 친숙성을 유지하기 위해, GUI의 많은 부분은 사용자에 의해 입력된 "/"를 내부적으로 ":"로 전환하고, 파일-이름을 표시할 때 그것들을 다시 전환합니다 (사용자에 의해 입력된 ":"도 "/"로 변경되지만 역변환은 일어나지 않습니다).
Paths in programming languages
프로그래밍 언어도 경로를 사용합니다. 예를 들어: 파일이 열릴 때. 대부분의 프로그래밍 언어는 기본 운영 시스템의 경로 표현을 사용합니다:
uxFile = fopen("project/readme.txt", "r")
winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")
운영 시스템 경로에 대한 이러한 직접 접근은 프로그램의 이식성을 방해할 수 있습니다. 이식 가능한 프로그램을 지원하기 위해, Java는 File.separator를 /와 \로 구분된 경로를 구분하기 위해 사용합니다. Seed7은 경로 표현에 대해 다른 접근 방식을 가집니다. Seed7에서, 모든 경로는 운영 시스템과 관계없이 유닉스 경로 규칙을 사용합니다. Windows 아래에서, 매핑이 수행됩니다 (예를 들어, 경로 /c/users가 c:\users에 매핑됩니다).
Universal Naming Convention
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[s]://HostName[:Port]/SharedFolder/Resource의 WebDAV URL은 다음이 됩니다:
\\HostName[@SSL][@Port]\SharedFolder\Resource
원격으로 볼 때, "SharedFolder"는 서버의 프로그램이 "\SharedFolder"를 열 때 보는 것과 다른 이름을 가질 수 있습니다. 대신, SharedFolder 이름은 "공유"를 정의할 때 폴더에 지정된 임의의 이름으로 구성됩니다.
일부 Microsoft Windows 인터페이스도 "Long UNC"를 허용합니다:
\\?\UNC\ComputerName\SharedFolder\Resource
Microsoft Windows는 다음과 같은 유형의 경로를 사용합니다:
- 지역 파일 시스템 (LFS), 예를 들어, C:\File
- 보편적 이름-짓는 규칙 (UNC), 예를 들어, \\Server\Volume\File 또는 /<internet resource name>[\Directory name] (적어도 윈도우 7 이상)
- "long" 장치 경로, 예를 들어, \\?\C:\File or \\?\UNC\Server\Volume\File. 이 경로는 지역 파일 이름공간을 가리키고 \\.\는 지역 DOS 장치 이름공간을 가리키는 유사한 경로입니다. 이 형식은 /를 \로 변환 없이 그리고 ...와 같은 이름을 해석 없이 경로를 파일 시스템으로 직접 보내기 때문에 "원시" 또는 "해석되지 않은" 경로이기도 합니다.
- Windows NT object manager \\??\-접두사 경로 (전역 DOS 이름공간).
Windows XP 이전의 Windows 버전에서, "long" 장치 경로를 허용하는 API만 260자 이상을 허용할 수 있었습니다.
Windows XP 및 Windows Vista에서 쉘, explorer.exe는 최대 248자 길이의 경로 이름을 허용합니다.
UNC는 두 개의 백슬래시로 시작하고, 백슬래시는 문자열 이스케이프와 정규 표현식에도 사용되기 때문에, 이것은 극단적인 경우 기울어진 이쑤시개 증후군을 초래할 수 있습니다: UNC와 일치하는 정규 표현식에 대해 이스케이프된 문자열은 8개의 백슬래시 – \\\\\\\\ – 로 시작하는데, 왜냐하면 문자열과 정규 표현식 둘 다는 이스케이프가 필요하기 때문입니다. 이것은 C#의 @"\\\\" 또는 Python의 r'\\\\'와 같이 원시 문자열을 사용하거나, Perl의 qr{\\\\}와 같이 정규 표현식 리터럴을 사용함으로써 간소화될 수 있습니다.
POSIX pathname definition
대부분의 유닉스-계열 시스템은 유사한 구문을 사용합니다. POSIX는 구현-정의된 방식으로 두 개의 슬래시로 시작하는 경로를 처리하도록 허용하지만, 다른 경우에서 시스템은 여러 개의 슬래시를 단일 슬래시로 처리해야 합니다. 유닉스-계열 시스템의 많은 응용 프로그램 (예를 들어, scp, rcp, 및 rsync)은 다음과 같은 자원 정의를 사용합니다:
hostname:/directorypath/resource
또는 서비스 이름을 갖는 URI 체계를 사용합니다 (여기서는 'smb'):
smb://hostname/directorypath/resource
Example
Unix style
다음의 작동 예제는 터미널이나 터미널 응용 프로그램 (명령-줄 윈도우)에서 나타나는 것처럼 유닉스-스타일 파일 시스템의 동작을 설명합니다:
다음과 같이 현재 작업 디렉토리 (cwd)에 첨부됨:
/users/mark/
현재 작업 디렉토리를 다음으로 변경하고 싶습니다:
/users/mark/bobapples
그 순간, 원하는 디렉토리에 대해 상대 경로는 다음과 같이 표현될 수 있습니다:
./bobapples
또는 짧게:
bobapples
그리고 다음과 같이 디렉토리에 대해 절대 경로로 표현할 수 있습니다:
/users/mark/bobapples
원하는 디렉토리에 대해 상대 경로로 bobapples으로 주어졌을 때, 명령 프롬프트에 다음을 입력하면 현재 작업 디렉토리를 bobapples로 변경할 수 있습니다:
cd bobapples
계층 구조에서 두 개의 점 ("..")은 위쪽을 가리키며, 부모 디렉터리를 나타냅니다; 하나의 점 (".")은 현재 디렉터리 자체를 나타냅니다. 둘 다 복잡한 상대 경로의 구성 요소가 될 수 있으며 (예를 들어, "../mark/./bobapples"), 여기서 "."만 또는 그러한 상대 경로의 첫 번째 구성 요소로 작업 디렉터리를 나타냅니다. (현재 작업 디렉터리에서 파일 "foo"를 참조하기 위해 "./foo"를 사용하는 것은 기본 디렉터리나 다른 방법으로 찾을 수 있는 자원 "foo"와 구별하는 데 유용할 수 있습니다; 예를 들어, 시스템에 설치된 매뉴얼 페이지 대신 특정 버전의 매뉴얼 페이지를 보려는 경우.)
MS-DOS/Microsoft Windows style
널리 알려진 믿음과는 달리, Windows 시스템 API는 슬래시를 허용하고, 따라서 위의 모든 유닉스 예제가 작동해야 합니다. 그러나, Windows의 많은 응용 프로그램은 슬래시를 다른 용도로 해석하거나 유효하지 않은 문자로 취급하고, 따라서 백슬래시를 입력해야 합니다 – 특히 cmd.exe 쉘 (종종 터미널 창에서 전형적으로 실행될 때 "터미널"이라고도 함). tcsh 및 Windows PowerShell과 같이 Windows에 대해 사용할 수 있는 다른 많은 쉘은 슬래시를 허용함에 주목하십시오.
게다가 "\"는 단일 루트를 나타내는 것이 아니라, 대신 "현재 디스크"의 루트를 나타냅니다. 현재 디스크가 아닌 다른 디스크의 파일을 나타내는 것은 드라이브 문자와 콜론을 접두사로 요구합니다. MS-DOS 파일 이름에서 콜론은 유효한 문자가 아니기 때문에 모호함이 발생하지 않고, 따라서 현재 디렉토리에 "A:"라는 파일이 있을 수 없습니다.
UNC 이름 (\\?\로 시작하는 임의의 경로)은 슬래시를 지원하지 않습니다.
다음 예는 가장 공통적인 구문과 일치하도록 사용된 백슬래시를 갖는 MS-DOS/Windows-스타일 경로를 보여줍니다:
A:\Temp\File.txt
이 경로는 Temp 디렉토리에 있는 File.txt라는 이름을 갖는 파일을 가리키고 있으며, 이 파일은 드라이브 A:의 루트 디렉토리에 있습니다:
C:..\File.txt
이 경로는 드라이브 C:의 현재 디렉토리의 상위 디렉토리에 있는 File.txt라는 파일을 참조합니다.
Folder\SubFolder\File.txt
이 경로는 현재 드라이브의 현재 디렉토리에 있는 Folder 디렉토리에 있는 SubFolder 디렉토리에 있는 File.txt라는 파일을 나타냅니다 (이 예제에서는 드라이브 사양을 제공하지 않습니다).
File.txt
이 간단한 경로는 현재 드라이브 (드라이브 사양이 없기 때문에)의 현재 디렉토리 (경로에 디렉토리-사양이 없기 때문에)에 있는 File.txt라는 파일을 가리킵니다.
\\.\COM1
이 경로는 첫 번째 직렬 포트 (COM1)를 참조합니다.
C:\>more < C:/Windows/system.ini
; for 16-bit app support
[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
Volume in drive E is Data
Volume Serial Number is 07BE-0B10
Directory of E:\Folder\SubFolder
18 October 2008 08:15 AM <DIR> DOMAIN\user .
18 October 2008 08:15 AM <DIR> DOMAIN\user ..
18 October 2008 08:15 AM <DIR> DOMAIN\user File.txt
1 File(s) 8 bytes
2 Dir(s) 19,063,000 bytes free
전방 슬래시를 포함하는 경로는 종종 그것을 명령줄 스위치와 구별하기 위해 큰따옴표로 묶어야 할 필요가 있습니다.
- 주목: CD는 이 방법으로 작동하지 않습니다:
CD "[drive letter]:/Program Files"는 루트 ([drive letter]:\) 디렉토리에서만 작동할 것입니다. 이것은 모든 전방 슬래시를 .\와 같게 처리하는 것으로 보입니다.
- 예외: /D 스위치를 드라이브에 대해 현재 디렉터리를 변경하는 것 외에도 현재 드라이브를 변경하기 위해 사용하십시오.
예를 들어:
CD "C:.\Program Files"
다음과 동일하게 작동합니다:
CD "C:/Program Files"
역시, 루트 폴더로부터:
CD "C:.\Program Files.\Internet Explorer"
다음과 동일하게 처리됩니다:
CD "C:/Program Files/Internet Explorer"
만약 전방 슬래시로 지정된 디렉토리 이름의 상대 경로가 없으면, 다음과 같은 오류가 발생할 것입니다:
The system cannot find the path specified.
환경 변수를 설정하기 위해, 때때로 경로 안에 공백을 포함하지 않은 것을 제공해야 할 때가 있으며, 예를 들어, "C:\Program Files\Java..."로 정의된 %JAVA_HOME%은 경로 이름에 공백이 있을 때 스크립트를 중단할 수 있습니다. 환경 변수에서 대체하기 위해 Windows가 임의의 디렉토리에 할당한 8-문자 이름을 얻기 위해, 대상 디렉토리에서 한 단계 위에 있는 /x 옵션과 함께 디렉토리 목록 명령을 사용하십시오. 예를 들어, 다음은 루트 바로 아래에 있는 모든 디렉토리의 8.3 파일-이름을 표시할 것입니다:
C:\>dir /x
(사용자는 드라이브별로 8.3 파일 이름 생성을 비활성화할 수 있습니다.)
See also
External links
- Path Definition - The Linux Information Project (LINFO)
- Naming Files, Paths, and Namespaces - Local File Systems: Windows: Microsoft Docs