하드 링크 이해

하드 링크 이해

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

touch demo
echo "This is demo" > demo

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

ln /home/leo/demo demoLink

이제 다음을 사용하여 inode를 확인할 때

ls -ltri demoLink

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

답변1

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

예를 들어, file1을 생성한 다음 하드 링크 file2를 동일한 파일 inode에 추가하면 해당 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

관련 정보