-
심볼릭 링크 알아보기 ( Symbolic Link )System 2024. 6. 9. 08:17728x90반응형
- 목차
들어가며.
파일 시스템을 사용하다 보면 심볼릭 링크(Symbolic Link) 라는 용어를 종종 접하게 됩니다.
심볼릭 링크는 "파일의 또 다른 이름" 처럼 보이지만, 실제로는 파일 시스템에서 데이터를 효율적으로 관리하고 파일 경로를 참조하는 중요한 역할을 합니다.
이 글에서는 심볼릭 링크가 무엇인지, 어떻게 동작하는지, 그리고 어떤 상황에서 활용할 수 있는지 자세히 알아보겠습니다.
심볼릭 링크란 ?
심볼릭 링크(Symbolic Link) 는 파일이나 디렉토리의 경로(Path)를 참조하는 별도의 파일입니다.
심볼릭 링크 자체는 데이터를 저장하지 않으며, 원본 파일의 위치 정보를 문자열로 저장하여 이를 통해 원본 데이터에 접근합니다.
마치 Windows 의 "바로 가기" 와 유사하게 동작하지만, 심볼릭 링크는 훨씬 더 강력하고 유연한 기능을 제공합니다.
하드 링크와 심볼릭 링크의 차이점.
리눅스 파일 시스템에서는 주로 심볼릭 링크(Symlink) 와 하드 링크(Hard Link) 라는 두 가지 링크 유형을 지원합니다.
심볼릭 링크는 위에서 설명드린 것처럼 참조하는 특정 파일의 File Path 에 의존합니다.
그래서 아래와 같은 방식으로 심볼릭 링크를 만들게 되면,
ln -s /home/user/original.txt /home/user/link.txt
- 원본 파일 : /home/user/original.txt
- 심볼릭 링크 : /home/user/link.txt
와 같은 2가지 파일이 공존하게 됩니다.
아래의 상태와 같이 link.txt 는 /home/user/original.txt 를 참조하게 되죠.
lrwxrwxrwx 1 root root 23 Nov 24 00:11 link.txt -> /home/user/original.txt -rw-r--r-- 1 root root 7 Nov 24 00:11 original.txt
하드 링크(Hard Link) 또한 심볼릭 링크 처럼 원본 파일을 참조하는 기능을 수행합니다.
하지만 그 방식에서 차이점이 있습니다.
리눅스 파일 시스템에서 하드 링크(Hard Link) 는 원본 파일과 동일한 inode를 공유합니다.
inode 는 파일 시스템과 디스크 스토리지 사이를 연결하는 중간 매체 역할을 합니다.
리눅스 파일 시스템에서 모든 파일과 디렉터리는 단순히 메타데이터를 포함하고 있으며, 데이터 자체는 디스크의 블록 단위로 저장됩니다.파일 시스템의 메타데이터
파일 시스템에 존재하는 파일과 디렉터리의 메타데이터는 다음과 같은 정보를 포함합니다:
- 파일 이름: 사용자가 파일을 식별하는 이름.
- 파일 크기: 파일의 데이터 크기(바이트 단위).
- 파일 위치: 디스크 상에서 파일 데이터가 저장된 위치.
- 생성/수정/액세스 시간: 파일이 생성되거나 수정된 시간 정보.
- 소유자 정보: 파일 소유자와 그룹 정보.
- 파일 권한: 읽기, 쓰기, 실행 권한.
실질적인 파일 데이터 저장 방식
실제 파일의 데이터는 디스크 스토리지에 블록 단위로 저장됩니다. 파일 시스템은 이러한 데이터 블록의 위치를 추적하고 파일과 연결하기 위해 inode를 사용합니다.
inode의 역할
inode는 파일 시스템과 디스크 스토리지 사이에서 파일과 실제 데이터 블록을 연결하는 역할을 수행합니다.
즉, inode는 메타데이터와 디스크 상의 데이터 블록 사이의 다리 역할을 하며, 파일의 데이터에 효율적으로 접근할 수 있도록 합니다.이러한 관점에서 하드 링크(Hard Link) 는 원본 파일과 inode 를 공유하게 됩니다.
아래의 내용은 하드 링크를 생성하는 리눅스 명령어와 그 결과입니다.
아래처럼 하드 링크는 온전한 개별 파일로 표현됩니다.
하지만 그 내면에는 hardlink.txt 와 original.txt 는 inode 를 공유하게 되죠.
ln /home/user/original.txt /home/user/hardlink.txt
-rw-r--r-- 2 root root 7 Nov 24 00:11 hardlink.txt lrwxrwxrwx 1 root root 23 Nov 24 00:11 link.txt -> /home/user/original.txt -rw-r--r-- 2 root root 7 Nov 24 00:11 original.txt
심볼릭 링크는 단순히 File Path를 저장한다.
심볼릭 링크는 단순히 "원본 파일의 데이터" 를 참조하지 않습니다.
실제로는 원본 파일의 경로(Path) 만 저장하고, 이를 기반으로 파일에 접근합니다.
심볼릭 링크의 크기(size)는 바로 이 경로의 길이에 의해 결정됩니다.
파일 및 디렉토리 구조는 아래와 같습니다.
original.txt 라는 파일을 총 4개를 생성했구요.
/home/user/original.txt /home/user/first/original.txt /home/user/first/second/original.txt /home/user/first/second/third/original.txt
아래의 명령어를 통해서 심볼릭 링크를 생성합니다.
ln -s /home/user/original.txt /home/user/link_0.txt ln -s /home/user/first/original.txt /home/user/link_1.txt ln -s /home/user/first/second/original.txt /home/user/link_2.txt ln -s /home/user/first/second/third/original.txt /home/user/link_3.txt
생성된 심볼릭 링크의 사이즈를 확인해보면 참조하는 File Path 의 길이만큼 심볼릭 링크의 크기가 결정되는 것을 확인할 수 있습니다.
link_0.txt 는 /home/user/original.txt 를 참조하기 때문에 총 23개의 문자의 크기에 따라 23 bytes.
link_1.txt 는 /home/user/first/original.txt 를 참조하기 때문에 총 29개의 문자의 크기에 따라 23 bytes.
link_2.txt 는 /home/user/first/second/original.txt 를 참조하기 때문에 총 36개의 문자의 크기에 따라 23 bytes.
link_3.txt 는 /home/user/first/second/third/original.txt 를 참조하기 때문에 총 42개의 문자의 크기에 따라 23 bytes.
lrwxrwxrwx 1 root root 23 Nov 24 00:30 link_0.txt -> /home/user/original.txt lrwxrwxrwx 1 root root 29 Nov 24 00:30 link_1.txt -> /home/user/first/original.txt lrwxrwxrwx 1 root root 36 Nov 24 00:30 link_2.txt -> /home/user/first/second/original.txt lrwxrwxrwx 1 root root 42 Nov 24 00:30 link_3.txt -> /home/user/first/second/third/original.txt
이처럼 심볼릭 링크는 원본 파일의 File Path 에 의존합니다.
원본 파일의 File Path 가 변경되거나 파일이 삭제된다면 ?
만약 원본 파일의 File Path 가 변경되거나 파일이 삭제된다면 심볼릭 링크는 제 기능을 상실하게 됩니다.
아래의 스크립트와 같이 원본 파일의 위치가 변경된 이후에 심볼릭 링크에 접근하게 된다면 아래와 같은 파일 접근 에러가 발생합니다.
mv /home/user/original.txt /home/user/original_2.txt cat link_0.txt cat: link_0.txt: No such file or directory
반응형'System' 카테고리의 다른 글
Standard Input (표준입력) 이해하기 (0) 2023.10.16 RPC (Remote Procedure Call) 알아보기 (0) 2023.10.14 IPC Signal 알아보기 (0) 2023.10.07 Shared memory communication 알아보기 (0) 2023.10.07 [memory management] page 알아보기 (0) 2023.09.22