하드 링크가 생성된 경우 어떤 파일이 원본인지 확인하는 방법

하드 링크가 생성된 경우 어떤 파일이 원본인지 확인하는 방법

예를 들어 파일이 있습니다 . 그런 다음 하드 링크를 만드는 myold_file데 사용합니다 .lnmylink

ln myold_file mylink

그러면 use 를 사용해도 ls -a어느 것이 오래된 것인지 알 수 없습니다.

할 말이 있나요?

답변1

실제로는 동일한 파일이므로 다른 경로를 통해 도달할 수 없습니다. 첫 번째는 특별한 지위가 없습니다.

답변2

이를 수행하는 직접적이고 깨끗한(신뢰할 수 있는) 방법은 없습니다. 그러나 적절한 상황에서는 가능합니다(또는 적어도 가능합니다). 문제는 두 개의 하드 링크가 있지만 파일은 하나뿐이라는 것입니다. 파일(inode)의 변경, 수정 및 (아마도) 생성 시간만 저장되며 디렉토리 항목(하드 링크)은 저장되지 않습니다. 따라서 원하는 정보는 2차 효과를 통해서만 얻을 수 있으며, 이는 파일과 무관한 조작으로 인해 쉽게 파괴될 수 있습니다. 그리고 그것이 파괴되었는지조차 볼 수 없습니다. 이는 귀하의 운영에 대한 정확한 그림을 가지고 있어야만 알 수 있습니다.

링크가 포함된 디렉토리에 대한 쓰기 작업을 통해 하드 링크가 생성됩니다. 그래서 디렉토리의 mtime.만약에

  1. 링크는 다른 디렉토리에 있습니다

  2. 그리고 두 번째 하드 링크가 생성된 이후 이러한 디렉터리 중 어느 것도 변경되지 않았다는 사실(파일 추가, 삭제, 이름 바꾸기 또는 파일 메타데이터 변경)을 알고 있으면 간단히 mtime디렉터리를 비교할 수 있습니다.

특별한 경우: 디렉토리 중 하나가 mtime파일(inode) 앞에 하나가 있고 파일이 mtime생성된 직후에 파일이 기록되었다고 합리적으로 확신할 수 있는 경우 해당 디렉토리에 대한 링크는 이전 링크입니다.

링크가 동일한 디렉토리에 있으면 상황이 더욱 악화됩니다(귀하의 질문에 해당되는 것 같습니다). 그런 다음 사용할 수 있습니다

ls -lU

항목이 생성되는 순서를 이해합니다. 디렉토리 목록 중간에 새 항목을 생성하기 위해 항목이 제거될 수 있으므로 이것이 반드시 올바른 순서는 아닙니다. Giles가 지적했듯이 최신 파일 시스템에서는 작동하지 않습니다.

답변3

디렉토리의 마지막 수정 시간에 의존하고 해당 디렉토리가 언제 어떻게 변경되는지 모르는 경우 mtime에 의존하면 일정 비율의 시간 동안 문제가 발생하게 됩니다. 여기서 문제는 파일이 디렉토리 항목이 아닌 inode로 파일 시스템에 표시된다는 것입니다. 디렉토리 항목(파일 이름)은 파일이 아닌 inode를 가리킵니다.

어떤 디렉토리 항목이 더 오래되었는지 알아야 하는 이유와 그것을 알 필요를 피하는 방법을 생각해 보겠습니다.

답변4

위의 다른 여러 사람들이 제공한 답변의 핵심은 각 파일 이름이 파일에 대한 하드 링크라는 것입니다. 실제로 독창적인 것은 아니며 아마도 첫 번째일 것입니다.

디렉토리를 파일 이름과 inode 번호가 나열된 테이블로 생각하십시오.

각 하드 링크(첫 번째 링크 포함)는 해당 이름으로 파일에 액세스할 수 있도록 inode 번호에 "파일 이름"을 할당하는 디렉토리의 항목입니다.

파일은 디스크의 블록 모음으로, inode에 저장된 메타데이터로 관리되고 추적됩니다. 파일에는 inode 번호가 있습니다.

파일 이름으로 파일 데이터에 액세스하는 것은 3단계 프로세스입니다. 디렉터리에서 파일 이름을 검색하여 inode 번호를 얻습니다. 그런 다음 inode를 참조하여 데이터가 포함된 관련 디스크 블록을 찾습니다. 마지막으로 이러한 블록을 읽고 씁니다.

따라서 이 모든 것에서 기본적으로 중요한 점은 다음과 같습니다. 첫 번째("원본") 하드 링크를 사용하거나 이후에 생성된 하드 링크를 사용하여 파일의 내용에 액세스하는 것에는 전혀 차이가 없습니다.

관련 정보