하드 링크에 대해 알아보기

하드 링크에 대해 알아보기

내 홈 디렉토리에 파일을 만들었습니다.

touch demo
echo "This is demo" > demo

이제 /tmp에 하드 링크를 만들었습니다.

ln /home/leo/demo demoLink

이제 inode 사용을 확인할 때

ls -ltri demoLink

원본 파일과 동일한 inode 번호를 표시합니다. 나는 이것을 소화할 수 있다. 하지만 하드링크의 파일 형식은 일반입니다! 어떻게 일반 파일이 될 수 있나요? 원본 파일과 어떻게 다른가요? 내가 읽은 파일은 익명의 데이터 덩어리입니다. 그렇다면 이 두 파일은 동일한 데이터를 가리킨다는 건가요? 하드링크와 원본 파일의 파일 크기가 동일합니까?

답변1

하드 링크는 실제로 "링크"가 아닙니다. 동일한 파일 inode를 가리키는 첫 번째, 두 번째, 세 번째 및 N 번째 하드 링크는 모두 서로 동일합니다. "원래 항목"과 "하드 링크" 사이에는 차이가 없습니다.

예를 들어, file1을 생성한 다음 동일한 파일 inode에 하드 링크 file2를 추가하는 경우 해당 inode에 대한 어떤 링크가 원본인지 확인할 방법이 없습니다.

cryo@CryoNest:~ $ touch file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file1

cryo@CryoNest:~ $ ln file1 file2

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ rm file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ ln file2 file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

보시다시피, inode 번호(9505656)와 inode에 저장된 모든 속성은 모든 하드 링크에서 동일합니다. 크기, 날짜, 스타일 등을 포함합니다.

세 번째 필드에 주목하세요. 이는 inode를 가리키는 링크 수입니다. 이 필드는 파일(실제로 하드 링크된 디렉토리 항목 중 하나)이 "삭제"되었지만 공간 사용량은 변경되지 않는 "신비한" 상황을 이해하는 데 사용할 수 있습니다. :)

특정 파일에 대한 모든 하드 링크를 찾으려면 "찾기" 도구에 "-inum" 옵션이 있습니다.

cryo@CryoNest:~ $ ln file1 tmp/file3

cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./tmp/file3
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./file1

관련 정보