본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스, 유닉스] 파일링크 ln 명령어- 심볼릭 링크(소프트링크)와 하드링크 원리, I-node 아이노드

[리눅스/ 유닉스 완전정복 목차 모음]

 

안녕하세요! 

주인장 양햄찌입니다. 오늘은 파일 링크에 대해서 알아보는 시간을 가질거예요.

 

목차

1. 파일 링크란 무엇인가?

2. 파일 링크 왜 쓰나? 필요한 상황으로 감잡기

3. 파일링크 원리 - 아이노드

4. 심벌릭링크랑 하드링크 차이

5. 파일링크 생성 명령어 ln!

6. ln명령어를 이용한 실습

7.소프트링크와 하드링크 특징 정리

8. 기출문제 

파일 링크란 무엇인가?

리눅스 유닉스에는 파일 링크라는 개념이 있어요. 

말그대로 A에 저장되어 있는 실행파일이 하나 있는데, 이를 실행시키려면 꼭 A까지 가지 않더라도 B에서도 실행시킬 수 있게 하는거예요! 우리가 흔히 알고 있는 바로가기 같은걸 생각하면 돼요.

예로, LOL은 C드라이브 Program Files에 설치되어있는데 바탕화면에서 실행시킬 수 있잖아요! 바로 링크되어 있기 때문이죠!  

 

링크는 거는 방법에 따라 특징이 달라지는데, 하드링크 소프트링크 이렇게 두 가지가 있습니다. 

위의 바로가기처럼 가리키도록 주소 링크만 시켜둔 게 심볼릭(=소프트)링크 이고, 원본 데이터와 직접적으로 연결시켜 만드는 하드링크가 있어요. 자세한것은 밑에서 알아보도록 할게요!

파일 링크 왜 쓰나? 필요한 상황 생각해보기 

그럼 이런 파일링크는 왜쓸까요? 첫 번째, 경로단축을 위해 심볼릭 링크를 설정하는 경우가 있습니다.

실제로, 리눅스에서는 부팅과 관련된 디렉터리는 /etc/rc.d 디렉터리이지만 /etc의 바로 하위로 심볼릭 링크가 설정되어 있어서 절대 경로 입력 시에 rc.d라는 디렉터리 명을 생략해서 사용해도 되게끔 되어있어요. 

 

리눅스 부팅 관련 디렉터리 심볼릭 형태

/etc/init.d -> /etc/rc.d/init.d

/etc/rc3.d -> /etc/rc.d/rc3.d

 

이 외에도 다른 예시를 들어봅시다.

데이터를 안전하게 보관하고 싶을 경우 링크를 사용하기도 해요. 하나의 파일을 사람들과 공유하는데 만약 그 파일을 다른 누군가가 삭제해버렸다고 합시다. 그러면 데이터는 그냥 증발되겠죠! 그러나 그 원본 파일은 내 개인적인 홈 디렉터리에 놔두고, 사람들과 공유하기 위해 하드링크를 걸어 파일을 생성해두면, 어느 하나의 파일이 삭제되어도 어느 한 파일은 남아있게 돼요. (하드링크의 특징) 그리고 같은 데이터에 직접 연결되어 있어 B파일을 변경한게 A파일에도 적용되고 A파일을 변경하면 B파일에도 반영되는 특징이 있습니다.

 

이 외에,,, 또 다른 예시를 생각해보면, 통일성?정합성?을 위해서 또한 많이 사용됩니다.

하나의 큰 시스템이 있는데 이 시스템은 C언어로 짜여있다고 합시다. 컴파일러를 만약 cc를 사용했다고 가정할게요.

그럼 모든 코드들이 cc명령어를 이용해서 짜져있겠죠??

그런데 어느날 컴파일러 gcc를 도입했다고 해봐요. 또 다른 서비스를 수용하기로 했는데 이 서비스가 C++언어라 gcc가 필요했던거죠. 컴파일러를 gcc로 통일시키려 하는데 기존 소스들의 구성은 cc로 짜여있잖아요.

큰 시스템일수록 모든 cc명령어를 gcc로 변경하긴 좀 위험부담이 크겠죠. 그럴 경우, cc에다가 gcc를 링크거는 방법을 생각해볼 수 있어요. cc를 수행해도 gcc가 수행되게끔!

 

몇개의 예시만 생각해봤는데, 파일 링크는 이처럼 유용하게 많이 사용됩니다. 

파일링크 원리 정리 - I-node 아이노드 

리눅스에서 파일이나 디렉터리를 생성하면 I-node라는 번호가 임의로 부여되고 이 번호를 기준으로 관리됩니다.

I-node는 리눅스/유닉스 파일 시스템에서 사용하는 자료구조를 말하는데, 파일이나 디렉터리의 여러가지 정보가 담겨있어요. 각 I-node에는 해당 파일의 소유권, 허가권, 파일 종류 등의 정보와 해당 파일의 실제 데이터가 어디 있는지 위치(=주소)도 있습니다. 암튼 이 번호는 'ls -i' 명령으로 확인할 수 있는데, 파일명이 다르더라도 이 번호가 같다면 내부적으로는 같은 파일로 인식됩니다. 이렇게 하나의 파일을 여러 개의 이름으로 관리하거나 디렉터리 접근 경로를 단축하는 형태를 링크라고 부릅니다. 링크는 크게 하드링크 심볼릭링크로 나뉘어져요~~

심벌릭 링크(소프트 링크)와 하드 링크의 차이 

자 이렇게, 원본 파일이 하나 있다고 합시다. 

원본 파일의 아이노드에 원본파일의 정보와 데이터위치를 가지고 있어요. 

 

소프트 링크 파일

그럼 여기서 소프트링크를 만들면 어떻게 될까요?

소프트링크

이렇게 원본 파일을 가리키는 즉 주소를 링크하고 있는 파일을 하나 만들게 됩니다. 소프트링크 파일은 원본 파일과 다른 아이노드를 갖습니다. 

심볼릭 링크는 하나의 파일을 여러 이름으로 가리키게 하는 것으로 원본과 생성된 링크 파일은 완전히 다른 파일로 관리됩니다. 다른 파일이지만 원본파일 포인터를 가리키고 있어 원본파일을 연결하는 효과를 가져요. 파일이나 디렉터리에 모두 사용 가능하나 일반적으로 디렉터리의 경로 단축이나 변경에 사용돼요.

 

 

이렇게 만들어지는 소프트링크 특성상, 원본 파일이 삭제되면 소프트링크는 아무런 구실을 못합니다.

실제 프로그램이 삭제되면 바탕화면 바로가기가 실행될 수 없는거랑 똑같죠. 

 

하드 링크 파일

이번에는 하드링크 파일 생성 원리를 살펴보면서 소프트링크와 비교해볼게요.

하드링크

하드링크 파일은 원본 파일과 동일한 내용의 다른 파일이라고 할 수 있습니다. 같은 아이노드 값을 가지고 있어요. 원본 파일을 직접적으로 가리키고 있기 때문에 원본 파일을 수정하여도 하드링크파일이 수정되고, 하드링크 파일을 수정하여도 원본 파일에 또한 반영됩니다. 접근하는 실 데이터는 같으니까!!

하드 링크는 하나의 동일한 파일을 디스크의 다른 곳에 배치(복사와 같은 형태)하여 여러 이름으로 사용되는 형식입니다. 하드링크는 파일에만 부여할 수 있는데, 리눅스 초기에는 Sticky-Bit가 설정되지 않는 공유 디렉터리에서 사용했어요. 

 이런 원리로, 소프트링크와 다르게 하드링크의 경우에는 원본 파일이나 또 다른 파일이 삭제되어도 데이터 손실이 일어나지 않아요.

 

소프트링크와 하드링크 한눈에 보는 그림 

하나의 그림에 합쳐봤어요! 이제 다 이해하셨을거라 생각합니다!

링크 생성 명령어 ln

ln 명령어

하드 링크 또는 심볼릭 링크를 생성하는 명령어입니다. 명령 실행 시 옵션 없이 사용하면 하드 링크가 생성되고 -s 옵션을 사용하면 심볼릭 링크를 생성합니다.

 

ln 명령어 사용법 (문법)

$ ln [option] 원본 파일 대상명

 

옵션 OPTIONS

리눅스에서 man ln 결과

옵션 의미
-s (--symbolic) 심볼릭 링크를 생성 시에 사용하는 옵션이다.
-S (--suffix) 백업 파일 생성시 원하는 접무시(suffix)를 지정할 수 있습니다.
-v (--verbose) 링크 만드는 정보를 자세히 출력한다.
-b (--backup) 대상 파일이 이미 존재할 경우에 백업 파일을 만든 후에 링크파일을 생성한다.
-f (--force) 링크 파일 존재 시에 삭제하고 생성한다. 
-i (--interactive) 대상 파일이 존재할 경우 대상 파일을 지울것인지 물어본다.

사용 예시

$ ln test.txt t

→ test.txt라는 파일의 하드링크 파일인 t를 현재 디렉터리에 생성합니다.

 

$ ln -s test t

test라는 파일의 심볼릭 링크 파일인 t를 현재 디렉터리에 생성합니다.

 

$ ln -s /etc/xinetd.d x

/etc/xinetd.d의 심볼릭 링크 파일인 x를 현재 디렉터리에 생성합니다. 

ln 명령어를 이용한 파일링크 실습

먼저 원본파일을 하나 준비합니다.

저는 이전에 정규표현식 포스팅하려고 만들어뒀던 test1파일이 하나 있더라고요 

ln test1 hardlink 
ln -s test1 softlink

ln 명령어와 옵션을 조합해 하드링크와 심볼릭링크 파일을 생성해봅시다.

결과

하드링크와 소프트링크 파일을 생성 후 'ls -il'을 입력하면 위와 같은 결과를 확인해보실 수 있습니다

사진에서 빨간색 부분은 I-node값이예요. 보면 하드링크와 원본파일의 I-node값이 같은 것을 확인할 수 있어요.

파란색 부분은 파일 크기인데요, 보면 softlink는 데이터를 다 가지고 있는게 아니라 링크만 걸려있기 때문에 파일 크기가 매우 작은 것을 확인할 수 있습니다.

또, 소프트링크의 경우, 파일이 아니라 링크가 걸려있다는 의미로 권한부분 보면 파일타입이 'l'로 표기돼요.(lrwxrwxrwx부분)

[원본 파일을 삭제하였을 때!]

원본 파일을 삭제하면, 소프트링크가 빨간색으로 변하나 것을 확인할 수 있어요. 원본파일이 있던데에 없어져, 심볼릭 링크 연결이 끊어졌다는 의미입니다.

그래서 노란색 박스 보면, softlink 파일을 확인하려 하면, 'No such file or directory'가 뜨는 것을 확인할 수 있어요.

반면, 하드링크의 경우 원본 파일이 삭제되었는데도, cat하면 원본파일과 동일한 내용을 확인할 수 있습니다.

소프트링크와 하드링크 특징 정리

위 내용을 다 이해했으면 어렵지 않습니다. 마지막으로 각 링크 방식의 특징을 정리하고 마치도록 할게요!

 

[소프트, 심볼릭 링크 특징]

▶ls -i 명령어로 i-node 번호를 확인하면 원본과 생성된 링크 파일의 번호가 다르다.

▶생성된 링크 파일의 크기가 매우 작다.

▶ls -l 명령 시에 출력되는 권한 영역의 맨 앞에 'l'이라고 표시된다

▶원본이나 링크 파일 중에 어떠한 파일을 수정해도 같이 반영된다. 

▶원본 파일을 삭제하면 링크 파일은 아무런 구실을 하지 못한다.

▶디렉터리에 링크 파일을 생성하면 윈도의 바로가기나 단축 아이콘의 기능과 같다.

▶ 생성되는 링크 파일의 퍼미션 값이 777로 표시되나, 이 값은 원본 파일의 퍼미션과는 무관하다. 

 

[하드 링크 특징]

▶ls -i 명령으로 i-node 번호를 확인하면 원본과 생성된 링크 파일의 번호가 같다.

▶원본과 링크 파일의 내용과 파일의크기가 같다.

▶ls -l 명령 시에 출력되는 링크의 숫자가 올라간다.

▶원본이나 링크 파일 중에 어떠한 파일을 수정해도 같이 반영된다.

▶원본 파일을 삭제해도 링크 파일은 아무런 영향을 받지 않는다.

▶하드 링크는 파일만 설정 가능하고, 동일한 파일 시스템에서만 사용 가능하다.

기출문제

[리눅스마스터 1급 2차 실기 1901회]

다음은 파일 및 디렉터리를 관리하는 과정이다. 조건에 맞게 (괄호) 안에 알맞은 내용을 적으시오.

--------------------------

가. /usr/local/apache/htodcs 디렉터리를 /var/www/html로도 접근이 가능하도록 링크를 설정한다.

# ( ① ) ( ② ) ( ③ )

나. /project/lin.sh 파일의 내용과 동일한 내용이 보존되도록 /backup/lin.sh를 생성한다.

    /project/lin.sh 파일이 삭제되어도 /backup/lin.sh 파일의 내용은 그대로 유지되도록 한다.

# ( ① ) ( ④ )  

--------------------------

■조건

- ①번은 해당 명령어를 기재한다. ①번의 명령어가 틀리면 ②~번은 배점하지 않는다.

- ② ~ ③번은 명령어의 옵션 또는 옵션과 관련된 인자 값을 기재하는데, 옵션과 관련된 인자 값은 하나의 괄호로 처리한다. (예: -d /home/ihduser)

- ④번은 ①번에 기재되는 명령어를 제외하고 나머지 모든 내용을 하나로 기재한다.

답: ln -s /usr/local/apache/htodcs /var/www/html /project/lin.sh /backup/lin.sh

도움이 되셨다면 공감/댓글/광고보답으로 표현해주시는 건 어떤가요?! 글을 작성하는데 큰 힘이 됩니다:0

오늘도 이만 총총.. 다음에 또 놀러오세요~!