나는 몇 가지 기본적인 Unix 명령과 다음을 가지고 놀고 있었습니다.
- "a" 파일을 생성합니다
- "2"에서 "1"로의 링크 만들기(
ln one two
) - "one" 파일을 편집하고 단어(one, two, three, four)를 다른 줄에 입력합니다.
- "둘 다"의 내용을 확인했습니다. 지금까지는 내용이 동일하므로 매우 좋습니다.
- 하나의 소프트 링크에 "3개"를 만듭니다. 3개도 같은 내용이에요
- 확인 링크 수량을 사용하세요
ls -l
. - "one" 파일을 편집하고 "five"라는 단어를 별도의 줄에 추가합니다.
- 파일 "2"와 "3"이 동일한 내용을 가지고 있는지 확인하세요. 지금까지는 괜찮습니다.
- 소프트 링크 3(
vim three
)을 편집하고 끝에 "six"라는 단어를 추가했습니다. - 확인한 결과 이제 세 개의 문서에는 모두 1~6개의 단어가 포함되어 있습니다.
질문 - 파일 "1"이 "3" 파일의 내용을 가져오는지 알고 있습니다. 그런데 왜 파일 "2"도 해당 파일을 가져오는 걸까요?
이렇게 하면 ls -l
파일 1과 파일 2에는 28바이트가 있는 반면 파일 3에는 3바이트(가능한 6바이트 중)만 있는 것을 볼 수 있습니다. 그 이유는 무엇입니까?
이제 "1" 파일을 삭제하면 세 개가 여전히 하나에 연결된 것으로 표시되지만 cat three
파일이 존재하지 않는다는 오류가 표시되지 않습니다. 그런데 왜 ls
명령에 표시됩니까?
답변1
파일 "2"도 왜 가져오나요?
ln(1)
매뉴얼 페이지에 따르면 하드 링크는 기본적으로 생성되며 "two"는 "one"에 대한 하드 링크입니다.
파일에 대한 하드 링크는 원래 디렉토리 항목과 구별할 수 없습니다. 파일에 대한 모든 변경 사항은 실제로 파일을 참조하는 이름과 무관합니다.
ls -l을 수행하면 파일 1과 2에는 28바이트가 있는 반면 파일 3에는 3바이트(가능한 6바이트 중)만 있는 것을 볼 수 있습니다. 그 이유는 무엇입니까?
아래와 같이 파일 내용이 28바이트이기 때문입니다.
$ wc -c <<<'one two three four five six'
28
공백으로 대체된 개행 문자는 제외됩니다.
파일 "3"의 경우 심볼릭 링크입니다. 심볼릭 링크에는 링크되는 파일의 이름이 포함됩니다. 따라서 "3"의 크기는 "1"이라는 파일 이름과 동일하며 3바이트입니다.
이제 "one" 파일을 삭제하면 3개가 여전히 1개에 연결된 것으로 표시되지만 3개를 인식할 수 없고 파일이 존재하지 않는다는 오류가 발생합니다. 그런데 왜 ls 명령에 표시됩니까?
"one" 파일을 삭제하면 "3" 파일은 깨진 심볼릭 링크가 됩니다. 심볼릭 링크는 명시적으로 삭제하지 않는 한 링크된 파일이 삭제될 때 사라지지 않는 특정 파일 형식입니다.