티스토리 뷰

linux 기초 심볼릭 링크, 하드링크(feat.cp)


  CP ( #>cp [원본] [대상] )

  cp 명령어는 파일을 복사하는 명령어이다. 용량 20M인, 파일 A라는 파일을 파일 B라는 파일로 복사한다면

 ( #>cp A B )  -> A( 20M ) 라는 원본 파일 복사하여 만든 B( 20M ) 라는 파일이 만들어지고, 결과적으로 하드

디스크에는 40M의 용량을  차지하게 된다. 파일 A와 파일 B는 아무런 관계가 없는 독립된 파일이 된것이다.

 때문에 어느 한쪽을 수정 및 삭제를 가해도 다른 파일에는 아무런 영향이 없다.


 ↑ 파일 A와 파일 B는 아무런 관계가 없는 독립된 파일이다.



  심볼릭 링크( ln -s [원본] [심볼릭 링크 파일명)

  심볼릭 링크란 어떤파일을 가리키고 있는 파일을 말한다. 파일 A의 심볼릭 링크를 만든다면, ' ln -s A B  '를 

이용해 만들 수 있다. 


 ↑ ln -s 명령어를 이용해 A파일의 심볼릭 링크  B를 생성

  

  심볼릭 링크  B의 경우에는 맨앞에 심볼릭 링크를 뜻하는 ' l ' 가 붙어 있고,  → 라는 표시로 A를 가리키고 있다. 

  심볼릭 링크 B는 단지 파일 A를 가리키고 있을뿐 B파일을 호출하게 되면 파일 A로 연결 해주는 역활을 한다.

  생성한 심볼릭링크는 원본 파일 A를 가리키고 있는것에 불과하므로 A를 삭제하면 B가 가리키는 파일이 없어 

  지게 된다.  이런경우 심볼릭 링크 B를 무용지물이 된다. 


  이는 파일을 수정하는 경우에도 마찬가지다. 파일 A를 수정하면 심볼릭 링크 B도 수정된다. 

 게다가심볼릭 링크 B를 수정해도 원본 파일인 A가 수정된다.


 ↑ 파일 A를 삭제할 경우 심볼릭 링크인 B는 가리키는 대상이 사라지기 때문에 그 기능을 잃는다.


  

 ↑ 파일 A와 심볼릭 링크 B의 내용이 같다.


 ↑ 파일 A의 내용을 수정할 경우 심볼릭 링크 B도 내용이 수정된다.


 ↑ ※ 심볼릭 링크 B의 내용을 수정해도 원본파일 A의 내용을 수정할 수 있다.






  하드 링크( ln  [원본] [하드 링크 파일명)

  하드 링크 명령을 해보면 cp 명령과 별다른 차이가 없음을 알 수 있다. 하지만 하드링크와 cp명령어는 다른 

 명령어이므로 주의 해야한다. 파일 A( 20M )를 생성하고 하드링크 B를 생성하면, 각각의 폴더가 20M씩 용량을 

 차지 하는것 처럼 보이지만A,B파일이 전체 용량을 차지하는건 10M밖에 되지 않는다. 이는 하드링크는 

파일을 가리키는 이름을 하나 더 만드는 이라고 생각하면 된다. 이런 경우 원본인 파일 A를 지우더라도 

 하드 링크 B는 내용을 간직하고 있다. 


 ↑ 파일 A의 하드링크 B를 생성 



 ↑ 하드링크도 심볼릭 링크와 마찬가지로 수정 시 서로에게 영향을 준다.


 ↑ 하드링크 B를 수정하면 원본 파일인 A도 수정된다.





즉, 파일 A를 생성하고 저장하면 하드 드라이브에 A의 내용이 기록된다. 파일 A의 위치정보 역시 헤더 부분에 

저장된다. A라는 파일의 이름은 헤더에 있는 위치정보만을 가지고 있게 되는 것이다. 파일 A를 열때 이 파일이 

가지고 있는 위치 정보를 이용해 하드에서 내용을 찾아서 사용하게된다.


하드링크는 이 위치정보를 가지고 있는 이름을 여러개 생성한다고 생각하면 된다. 그렇기 때문에 하나의 파일을 

지워도 그것이 원본파일 여부에 상관없이 하드에서 내용을 찾아 갈 수 있는 것이다.  따라서 하드링크의 파일을 

지우고자 한다면 두개의 파일 모두를 지워야 한다.

 

하지만 심볼릭 링크는 위치정보를 가지고 있는 파일명을 또한번 다른 이름으로 연결하는 것이다. 그렇지 때문에 

원본 파일이 삭제되면 심볼릭 링크의 위치 정보가 사라지기 때문에 쓸모없는 파일이 된다.