파일 이름 및 파일 경로 이름

파일 이름 및 파일 경로 이름

파일의 파일 이름은 파일의 inode에 대한 포인터라고 합니다. 이것을 알기 전에는 이것이 작업을 수행한 파일의 경로 이름이라고 생각했습니다.

Unix에서 경로 이름과 파일 이름이 어떻게 정의되는지 잘 모르겠습니다. 예를 들어, /home/tim/tim.pdf파일 이름의 파일 경로 이름이 정확합니다 tim.pdf.

파일 이름과 파일 경로 이름의 차이점이 무엇인지 알고 싶습니다. 감사해요.

답변1

디렉토리에는 파일 이름 ⇒ inode 매핑 목록이 포함되어 있습니다. 귀하의 디렉토리에는 (예를 들어) inode 를 가리키는 /home/tim파일 이름이 있는 항목이 포함되어 있습니다 .tim.pdf1234

이 디렉토리에 어떻게 가나요? 음, 디렉토리는 실제로 이러한 항목을 포함하는 특수 파일입니다. 상위 파일을 보면 다른 파일과 마찬가지로 찾을 수 있습니다. 디렉터리 inode를 가리키는 /home파일 이름이 있는 항목이 있을 것입니다 . tim차례로, 우리는 /home그것의 부모를 살펴봄으로써 그것을 찾을 수 있습니다 /.

/뿌리인데 좀 특별하네요. 시스템은 부모가 없기 때문에 직접 액세스하는 방법을 알고 있습니다.

이것이름파일의 로컬 이름은 해당 디렉토리의 로컬 이름입니다: tim.pdf.this파일에 대한 설명은 루트 디렉터리에서 파일에 액세스하는 방법을 설명합니다. /home/tim/tim.pdf원하는 경우 이를 일련의 지침으로 생각할 수 있습니다. 먼저 찾기 /, home그 안에서 찾기 tim, 마지막으로 tim.pdf원하는 항목을 찾으십시오.

모든 경로를 구문 분석하는 것은 실제로 다음 의사 코드를 사용하는 재귀 알고리즘입니다.

inode find_file(inode where_i_am, string[] remaining_path):
    if remaining_path is empty:
         # Nothing more to look at - we've found the file!
         return where_i_am
    current_item = remaining_path[0]
    rest_of_path = remaining_path[1..]
    for entry in directory_entries(where_i_am):
        if entry.filename == current_item:
            return find_file(entry.inode, rest_of_path)
    return file not found

다음을 통해 귀하의 파일을 찾을 수 있습니다:

find_file(inode_of_root, ["home", "tim", "tim.pdf"])

어떤 경우에는 상황이 좀 더 복잡해지고 의사 코드는 이러한 경우를 다루지 않습니다. 그 중 하나는 마운트입니다. 다른 파티션을 마운트할 때 /home시스템은 해당 파티션이 들어올 때 /home다른 파티션으로 이동해야 한다는 것을 기억하고 tim해당 파일 시스템의 루트에서 찾기 시작합니다. 새 파일 시스템에는 자체 inode 세트가 있으므로 실제로 파일 데이터에 액세스하려면 inode와 장치를 알아야 합니다. 실제 구조는 실제로 둘 다로 구성됩니다.

심볼릭 링크는 시스템에 지금 다른 경로를 찾은 다음 해당 새 위치에서 검색을 계속하도록 지시합니다.

또 다른 경우는 하드 링크(오래된 친구)입니다. 일반 파일 inode에는 원하는 수의 하드 링크가 있을 수 있습니다. ln tim.pdf pdf.tim동일한 내용을 가지며 디스크의 동일한 위치에 있는 링크 설정을 사용할 수 있습니다 . pdf.tim동일한 inode를 가리키는 항목이 있는 별도의 디렉토리 항목이 있습니다 . 우리의 알고리즘은 이 경우에 매우 잘 작동합니다. 파일에 대한 하드 링크는 원본 파일과 정확히 동일하며 어떤 식으로든 이를 구별할 필요가 전혀 없습니다. 실제로 하드 링크는 inode의 또 다른 이름일 뿐이므로 파일 시스템 전체에 하드 링크를 만들 수 없습니다.1234tim.pdf

다른 하나는 특별 항목 .... 이는 (일반적으로 파일 시스템에 따라 다름) 실제 디렉토리 항목입니다. 이는 본질적으로 디렉토리 자체와 상위 디렉토리에 대한 하드 링크입니다. 우리의 알고리즘도 이 문제를 처리합니다. 마운트에 관해 흥미로운 점이 있습니다. 기본 파일 시스템은 마운트될 위치를 모르기 때문에 올바른 ..항목을 가질 수 없습니다. 이 문제를 해결하기 위해 시스템은 ..탑재된 파일 시스템의 루트 항목 대신 상위 장치의 디렉터리 항목을 속이고 표시합니다.


따라서 inode 관점에서 보면 다음과 같습니다.

  • 파일 이름특정 디렉터리 내에서 호출되는 특정 인덱스 노드의 이름입니다.
  • 알려진 지점에서 인덱스 노드에 도달하는 방법에 대한 몇 가지 지침이 있습니다.

답변2

존재하다POSIX 용어,ㅏ파일 이름디렉토리 항목의 이름입니다. null 또는 null 을 제외하고 비어 있지 않은 바이트 시퀀스로 구성됩니다 /. "경로 이름 구성 요소"라는 용어는 "파일 이름"과 동의어입니다. ㅏ경로명null이 아닌 바이트를 포함할 수 있고 파일을 찾는 방법을 지정하는 문자열입니다. 경로 이름은 일련의 파일 이름으로 구성되며, 마지막 이름을 제외한 모든 이름은 디렉터리를 나타냅니다.경로명 확인경로 이름에서 파일을 찾는 프로세스입니다.

예를 들어, /home/tim/tim.pdf경로 이름입니다. 경로 이름의 마지막 구성 요소 tim.pdf는 파일 이름입니다. 이는 경로 이름으로 명명된 디렉터리에 있는 항목의 이름입니다 /home/tim. 파일 이름 tim자체는 pathname이라는 디렉토리에 있는 항목의 이름입니다 /home. 파일은 디렉토리입니다. tim.pdf또한 경로 이름: 모든 파일 이름은 단일 구성 요소를 갖는 경로 이름이며 현재 디렉터리에 해당 이름을 가진 파일을 지정합니다.

/루트 디렉터리의 경로 이름을 나타냅니다. .모든 디렉터리에 존재하며 디렉터리 자체를 참조하는 파일 이름입니다. .정확히 단일 구성 요소를 포함하고 현재 디렉터리를 참조하는 경로 이름입니다.

파일 이름은 해당 디렉토리에 있는 파일인 inode에 대한 디렉토리의 포인터로 생각할 수 있습니다. 경로 이름은 inode를 찾을 위치를 지정합니다. 경로 이름의 각 구성 요소는 지금까지 도달한 디렉터리(파일이 존재하는 경우)의 인덱스 노드를 가리키는 파일 이름입니다. 경로 이름은 루트 디렉토리에서 시작됩니다.절대 경로 이름, )로 시작하거나 /현재 디렉토리에 있는 경우상대 경로 이름, )로 시작하지 않습니다 /.

많은 텍스트에서 "파일 이름"(또는 "파일 이름")이라는 용어는 POSIX가 경로 이름이라고 부르는 것을 의미하는 데 사용됩니다.

답변3

일반적으로 말하자면, pathnamefilenames는 동일합니다. 먼저 filenamesPOSIX 문서에서 몇 가지 규칙을 읽어보세요.

4.6 파일 이름

IEEE Std 1003.1-2001을 준수하는 구현 간에 파일 이름을 이식할 수 있으려면 이식 가능한 파일 이름 문자 집합에 정의된 이식 가능한 파일 이름 문자만 포함해야 합니다.

이식 가능한 파일 이름의 첫 번째 문자로 하이픈을 사용할 수 없습니다. 대문자와 소문자는 일관된 구현 간에 고유한 ID를 유지해야 합니다. 이식 가능한 경로 이름의 경우 슬래시 문자도 사용할 수 있습니다.

filename이 섹션에서는 이 두 가지가 사용되고 상호 교환 가능 하다는 것을 알 수 있습니다 pathname.

그들 사이에는 다음과 같은 차이점도 있습니다 Pathname Resolution.

4.11 경로명 결정

파일 계층의 특정 파일에 대한 경로 이름을 확인하는 프로세스에 대해 경로 이름 확인이 수행됩니다. 동일한 파일을 확인하는 경로 이름이 여러 개 있을 수 있습니다.

경로 이름의 각 파일 이름은 이전 파일에서 지정한 디렉터리에 있습니다. 예를 들어 경로 이름 조각 a/b에서 파일 b는 디렉터리 a에 있습니다. 이를 수행할 수 없으면 경로 이름 확인이 실패합니다. 경로명이 슬래시로 시작하는 경우, 경로명의 첫 번째 파일명의 선행자는 프로세스의 루트 디렉토리로 취급됩니다(이러한 경로명은 "절대 경로명"입니다). 경로 이름이 슬래시로 시작하지 않으면 경로 이름의 첫 번째 파일 이름 선행자는 프로세스의 현재 작업 디렉터리로 처리됩니다(이러한 경로 이름은 "상대 경로 이름"입니다).

pathname이전 파일이 지정한 디렉토리에 이름이 있는 파일로 해석됩니다.

노트

관련 정보