[Linux] How to use the "ln" command
How to use the "ln" command
Window를 사용하다 보면 "바로가기"라는 기능을 사용하곤 합니다. 이는 실제 파일이나 폴더 들은 그곳에 없지만, 마치 내가 원하는 위치에 옮겨 놓은 듯이 클릭하면 실제 파일이나 폴더를 클릭한 것과 동일한 결과가 나오도록 하는 파일입니다.
리눅스 시스템에서는 파일 링크라는 개념이 이와 유사하며, 리눅스 시스템에서 파일 링크는 방식에 따라 두 가지 유형으로 나눠집니다.
파일 링크 | 내용 |
소프트 링크 | 윈도우의 "바로가기" 처럼 실제 파일 또는 디렉토리로 이동하도록 주소만 갖고 있는 파일 링크로(주로 심볼릭 링크라고 부름) |
하드 링크 | 실제 파일과 직접적으로 연결시키는 파일 링크 |
I-node
먼저 파일 링크에 대해 이야기하기 위해서는 파일 또는 디렉토리의디렉터리의 정보를 담고 있는 I-node에 대해 이해해야 합니다. I-node는 리눅스 파일 시스템에서 사용하는 자료구조인데, 각 I-node에는 해당 파일 또는 디렉터리의 권한, 유형 등의 정보와 실제 파일의 위치 정보를 가지고 있습니다.
# 테스트 파일 생성
$> echo "hello royworld" >> file01.txt
# 테스트 폴더 생성
$> mkdir folder01
# I-node 확인
$> ls -li
이 중 눈여겨 볼만게 번째 필드인 i-node 값과, 두 번째 항목인 권한 및 파일 유형에 대한 정보입니다. 각각 다른 파일 I-node값을 가지고 있으며, 두 번째 항목의 첫 번째 문자를 보면 파일은 "-", 디렉터리는 "d"로 표시됨을 알 수 있습니다.
심볼릭 링크 (=소프트 링크)
ln -s <실제 파일 또는 디렉토리 경로> <심볼릭 링크 경로>
# file01.txt의 심볼릭 링크인 file02.txt 생성
$> ln -s file01.txt file02.txt
# folder01의 심볼릭 링크인 folder02 생성
$> ln -s folder01 folder02
# 생성된 I-node 확인
$> ls -li
실제 파일과 파일 링크의 차이는 마지막에 각 링크가 어떤 실제 파일과 연결되었는지 육안으로 확인 가능하며, 두 번째 항목에서 첫 번째 글자가 "l"로 시작하는 것을 알 수 있습니다. 이는 내부 작동 방식을 보면 아래와 같습니다.
- ls -i 명령어로 i-node 번호를 확인하면 원본과 생성된 링크 파일의 번호가 다릅니다.
- 생성된 링크 파일의 크기가 매우 작습니다.
- ls -l 명령 시에 출력되는 권한 여역의 맨 앞에 'l'이라고 표시됩니다.
- 원본이나 링크 파일 중에 어떠한 파일을 수정해도 같이 반영됩니다.
- 원본 파일을 삭제하면 링크 파일은 아무런 구실을 하지 못합니다.
- 디렉터리에 링크 파일을 생성하면 윈도우의 바로가기나 단축 아이콘의 기능과 동일합니다.
- 생성되는 링크 파일의 퍼미션 값은 777로 표시되나, 원본 파일 또는 디렉터리의 퍼미션 값과는 무관합니다.
하드 링크
ln <실제 파일 또는 디렉토리 경로> <심볼릭 링크 경로>
# file01.txt의 하드 링크인 file03.txt 생성
$> ln file01.txt file03.txt
# folder01의 하드 링크인 folder03 생성
$> ln folder01 folder03
# 생성된 I-node 확인
$> ls -li
위 에서 보이듯 하드 링크의 경우 파일은 가능하나 디렉터리는 불가합니다. 또한, ls -li의 첫 번째 항목을 보면 file01.txt와 file03.txt가 동일한 I-node값을 갖고 있음을 알 수 있으며, 두 번째 항목의 첫 문자가 소프트 링크와 달리 "l"이 아닌 "-"로 표기됨을 알 수 있습니다. 이는 내부적으로 아래와 같이 작동합니다.
- ls -i 명령으로 i-node 번호를 확인하면 원본과 생성된 링크 파일의 번호가 같습니다.
- 원본과 링크 파일의 내용과 파일 크기가 같습니다.
- ls -l 명령 시에 출력 되는 링크의 숫자가 올라갑니다.
- 원본이나 링크 파일 중에 어떠한 파일을 수정해도 같이 반영됩니다.
- 원본 파일을 삭제해도 링크 파일은 아무런 영향을 받지 않습니다.
- 하드 링크는 파일만 설정 가능하고, 동일한 파일 시스템에서만 사용 가능합니다.
심볼릭 링크 vs 하드 링크
위 에서 알 수 있듯이 심볼릭 링크는 원본에 직접 연결이 아닌 원본을 가리키는 I-node를 가리키는 방식이기 때문에 원본의 I-node가 삭제되면 심볼릭 링크는 갈 곳을 잃게 되는 반면, 하드 링크의 경우 동일한 I-node를 가리키고 있기 때문에 원본의 I-node인 file01.txt를 삭제하여도 file03.txt가 연결되어 있음을 알 수 있습니다.
# 원본 파일인 file01.txt 삭제
$> rm -ifvr file01.txt
# 원본 디렉토리인 folder01 삭제
$> rm -ivfr folder01
# 목록 확인
$> ls -li
# file01.txt의 소프트 링크인 file02.txt 확인
$> cat file02.txt
# file01.txt의 하드 링크인 file03.txt 확인
$> cat file03.txt
# folder01의 소프트 링크인 folder02로 폴더 이동
$> cd folder02
ln 명령어
주요 옵션 | 내용 | |
-s | --symbolic | 심볼릭 링크(=소프트 링크) 생성 |
-S | --suffix=SUFFIX | 백업 파일 생성 시 원하는 접두어 지정 |
-v | --verbose | 각각의 링크된 파일들의 명을 출력 |
-b | --backup | 대상 파일이 이미 존재할 경우 백업 파일을 만든 후 링크 파일을 생성 |
-f | --force | 링크 파일이 존재하는 경우 삭제하고 생성 |
-i | --inetractive | 대상 파일이 존재할 경우 대상 파일을 지울 것인지 물어 봄 |