정보보안공부

Linux_리눅스 심볼릭링크 / 하드링크 본문

Linux

Linux_리눅스 심볼릭링크 / 하드링크

Steady_sp 2018. 7. 5. 12:58

리눅스 심볼릭링크/하드링크

- 오라클 가상 머신 사용

- CentOS6

 

<심볼릭링크 / 하드링크>

 

#1 심볼릭링크와 하드링크의 차이

            하드링크                                      심볼릭링크

ln 옵션                           없음                                          -s
하드링크 개수                  링크마다 1 증가                           링크 개수 증가 안함.
원본 파일 용량                 용량 X(원본용량)                          용량 있음(파일명이 용량)
다른 파일시스템               링크 불가                                   링크 가능

디렉토리                         링크 불가                                   링크 가능
원본 파일 내용                 접근 가능                                   접근 가능
파일 내용 수정                 원본파일 내용이 수정                    원본파일 내용이 수정
원본 파일 삭제                 삭제후 링크파일 접근 가능             삭제후 링크파일 접근 불가 (고아링크)
퍼미션                            퍼미션 의미있음                          의미없음(원본의 권한을 따름)

 

#2 심볼릭링크

 

심볼릭 링크 파일 만드는 형태 : ln -n 원본파일 링크파일

심볼릭 링크 사용이유 2가지

심볼릭링크는 명령어의 호환성을 유지하기 위해 사용된다.

깊이가 깊은(경로가 복잡한) 디렉토리에 쉽게 들어가기 위해서 사용된다.

 

*** 심볼릭링크는 하드링크와 다르게 링크 개수가 증가하지 않는다.

 

 

-> useradd와 adduser은 심볼릭링크 관계이다. 하드링크와 다르게 링크 개수가 증가하지 않는다.

 

*** 명령어의 호환성을 유지하기 위해 사용된다.

 

 

-> adduser명령어가 useradd를 가리키기 때문에 adduser과 useradd는 같은 명령어로 동작된다.

-> 이처럼 운영체제 별로 같은의미지만 다른단어의 명령어를 심볼릭링크를 통해 통일시킬 수 있다.

 

*** 경로가 복잡한 디렉토리에 쉽게 들어가기 위해서 사용된다.

 

 

-> 경로가 복잡한 디렉토리에 심볼릭 링크를 걸어서 만들고 해당 심볼릭링크에 들어가서 pwd -P 를해보면 원본파일 경로가 나오고 pwd -L을 하면 심볼릭 링크의 경로가 나온다.

 

*** 설정파일의 확장자가 틀린것을 확장자를 하나로 통일할 수 있다.

 

 

-> 아파치 웹서버 설정파일 : /etc/httpd.conf 을 심볼릭 링크를 이용해 확장자(.ini)가 같도록 설정한다.
-> PHP 설정파일 : /etc/php.ini
-> mysql 설정파일 : /etc/my.cnf 을 심볼릭 링크를 이용해 확장자(.ini)가 같도록 설정한다.

 

#3 하드링크

 

*** 하드링크는 해당 파일에만 링크를 걸수 있고 링크를 걸면 하드링크수가 1증가한다.

 

 

-> 하드링크는 심볼릭링크와 다르게 링크를 걸은 만큼 링크 개수가 증가한다.

 

*** 여러개의 명령어를 같은 명령어로 처리할 경우 사용한다.

 

 

-> 5543 : inode번호

-> 5 : 하드링크 갯수

-> inode번호가 같고 하드링크 갯수가 일정한것끼리 하드링크로 연결되어있다.

 

#4 원본 파일이 실행파일일 경우 심볼릭링크와 하드링크 차이

 

 

-> gcc 설치

 

*** test1.c

 

 

-> C언어 코드작성

-> ./test1이 입력되면 test1...을 출력하고 ./test2가 입력되면 test2...를 출력한다.

 

*** 컴파일

 

 

-> gcc컴파일러를 이용해 작성한코드를 test1로 컴파일한다.

-> 컴파일한 test1에 하드링크를 test2로 건다.

-> test2파일은 하드링크파일이지만 원본과 동일하게 작동하므로 위의 C언어 코드와같이 동작한다. ( 하드 링크파일 : 실행파일 동작 o )

-> test3파일은 심볼릭링크파일이므로 원본을 가리키기는 하지만 실행은 되지 않는다. ( 심볼릭 링크파일 : 실행파일 동작 x )

 

#5 하드링크 디렉토리 링크불가 심볼릭링크 디렉토리 링크가능

-> mount -o bind옵션을 이용해 디렉토리에 하드링크효과 ( 원래는 불가능 )

- 심볼릭링크는 다른 파일시스템을 넘어서 링크를 걸수 있다

- 하드링크는 다른 파일시스템을 넘어서 링크를 걸수 없다.

 

*** 디렉토리를 심볼릭링크로 만들기 -> 가능

 

 

*** 디렉토리를 하드링크로 만들기 -> 불가능

 

 

*** mount -o bind

 

 

-> 하드링크는 디렉토리간에 링크가 안되지만 mount -o bind를 이용해 비슷한 효과를 낼수 있다.

 

*** mount해제 : umount

 

 

-> umount를 이용해 해제할 수 있다.

 

#6 원본파일 삭제시 심볼릭링크 파일과 하드링크 파일차이

 

 

-> 심볼릭링크파일은 원본이 삭제될 경우 고아파일이된다.

-> 하드링크파일은 원본이 삭제되어도 원본내용을 출력한다.

 

*** 원본파일 삭제시 하드링크는 링크파일수만 1감소한다.

 

 

Comments