참고자료
파일 시스템의 아이노드 (inode)
우리가 보는 모든 파일은 그것이 실제로 거기에 위치한것이 아니다
우리가 보는 파일은 운영체제가 실제로 관리하고 있는 파일 위치에 포인터, 즉 주소값을 보는것이다
이 주소값에는 실제 파일에 (고유번호, 소유권, 엑세스 모드, 타임스템프) 를 가진다.
파일을 접근하면 실제 파일이 위치한 곳에서 바이너리 데이터를 넘겨주는 식이다.
각 파일시스템(NTFS, FAT32 등) 마다 구현은 다르지만 기본 개념은 똑같다.
File Descriptor 와는 다른개념이니 오해하지 말자
File Descriptor
:- 열려 있는 파일이나 소켓을 관리하기 위해 운영체제가 프로세스에 부여하는 인덱스. 이는 메모리에 할당된 열린 파일들을 식별하고 관리하는 데 사용
inode
:- 저장된 파일을 파일 시스템에서 관리하기 위해 부여되는 고유 식별자.
바로 가기
바로가기는 실제로 해당 파일 위치로 이동하는 .lnk
파일을 생성해 준다
그래서 바로가기를 실행하면 실행된 파일에 위치는 원본 파일이 존재하는 위치이다
바로가기 자체의 경우 디랙토리가 아니라 해당 디렉토리로 리다이렉트 시켜주는 파일에 불과하다
하드 링크
원본 파일과 동일한 주소 값을 가지는 파일을 생성
원본과 동일한 파일을 생성 해주는 건데, 아예 그대로 복사하는게 아니라
포인터 (주소) 값만 복제하여 실제 디스크 할당 없이 동일한 파일을 만들어 낸다
- 만약 원본파일을 수정하면 복제된 하드링크 파일에도 수정사항이 반영
- 하드링크 파일을 수정해도 원본파일에도 수정사항이 반영
원본 파일이 삭제되더라도 상관이 없다
- 실제 파일을 가르키고 있는 포인터가
n
개가 존재하는 거기 때문에 모든 파일들이 제거되야 비로소 디스크에서 재거가 된다
윈도우에서 만들경우 실제 육안으로는 확인이 불가하다 (그냥 파일 처럼 생겼다)
하드 링크의 경우 실행되는 위치는 해당 하드링크 자체 파일에 위치 값
다만 디랙토리는 링크가 불가하다
윈도우
mklink /h <링크파일> <대상파일>
리눅스
ln <대상파일> <링크파일>
심볼릭 링크
원본 파일의 주소값을 참조하는 포인터를 가지는 파일/폴더 를 생성
하드링크와 거의 동일하게 작동하지만 몇가지를 보완
예를들어 원본 파일 index 가 1
이면 새롭게 생성되는 심볼릭 링크 파일의 인덱스는 2
인데 2
인덱스는 1
을 또 참조하게 만든 것
2
→1
→ 파일- 그렇기 때문에 바로가기와 동일하게 실행된 파일에 위치는 원본 파일이 존재하는 위치이다
파일 시스템 (NTFS 같은거)이 달라도 생성이 가능
윈도우에서 만들경우 바로가기 아이콘과 동일한 모양으로 생성된다
다만 원본 파일이 삭제되면 해당 파일에 접근 불가
윈도우
- 파일
mklink <링크파일> <대상파일>
- 폴더
mklink /d <링크파일> <대상파일>
리눅스
ln -s [대상파일] [심볼릭링크파일]