최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

ln명령어는 조금 복잡한 파일명이나 경로명을 단순화시켜서 언제든지 쉽게 이용하거나 이동할 때 사용하기 위해 주로 이용한다.

 

윈도우즈의 단축 아이콘과 비슷한 역할을 하지만 실제 더 포괄적인 개념이며 더 많은 기능을 제공한다.

 

링크에는 하드링크(hard link)와 심볼릭링크(symbolic link)가 있다. ln명령어를 옵션없이 실행하면 생성된 파일은 하드 링크이다.

 

일반적으로 심볼릭 링크를 사용하는 경우가 더 많다.

 

 


 

 

심볼릭링크 : 윈도우즈 단축 아이콘과 흡사.

                  생성된 심볼릭링크는 원본파일을 다른곳으로 이동시키면 해당 심볼릭 링크가 깨져서 사용할 수 없다.

 

현재 존재하는 /home 디렉토리를 hhh라는 심볼릭링크로 생성할 경우 cd hhh라는 명령어를 사용하여 home과 똑같은 디렉토리 기능을

하게된다.

 

링크명령어 ln -s aaa bbb : bbb가 aaa를 가리키는 심볼릭링크가 생성된다. 즉 뒤에서 앞을 가리키는 링크 bbb->aaa가 생성된다.

 

위의 내용을 토대로 직접 화면을 보자.

 

[root@localhost home]# ls

homeuser  lost+found

 

이렇게 두개의 폴더가 있었다.

 

[root@localhost home]# ln -s homeuser hhh

[root@localhost home]# ls

hhh   homeuser   lost+found

 

청록색으로 표기된 hhh 심볼릭 링크가 생성되었다.

 

[root@localhost home]# cd hhh

[root@localhost hhh]# ls

Desktop   my01

 

[root@localhost hhh]# cd ..

[root@localhost home]# cd homeuser

[root@localhost homeuser]# ls

Desktop   my01

 

하드링크 : 동일한 파일시스템에서만 생성 가능하며, 동일한 inode를 사용하는 파일이다. 따라서 하드링크로 복제 파일을 수정하게 되면

               원본파일 역시 수정된다. ls명령어에서 -i를 사용하면 해당 파일의 inode번호를 볼 수 있다.

 

현재 디렉토리에 test file이라는 내용이 들어있는 abc라는 텍스트파일을 원본으로 slink라는 이름으로 심볼릭링크를 만들고,

hlink라는 이름으로 하드 링크를 만든후 abc파일을 삭제하면 slink는 해당파일을 찾을 수 없지만, hlink는 abc의 데이터가 존재하는 inode를

공유하므로 abc파일의 데이터 내용을 확인할 수 있다.

 

[root@localhost home]# cat abc

text file

 

[root@localhost home]# ln -s abc slink

[root@localhost home]# ln abc hlink

[root@localhost home]# ls -ali           <- i는 inode와 함께보기

 

합계5

946561 drwx------    3    root    root     4096  9월 9일 11:58 .

        2 drwx--xr-x   20    root    root     4096  9월 9일 11:58 ..

946572  -rw-r--r--   2      root    root       10   9월 9일 11:59 abc

946572  -rw-r--r--   2      root    root       10   9월 9일 11:59 hlink

946572  -rw-r--r--   2      root    root       10   9월 9일 11:59 slink -> abc

 

[root@localhost home]# rm abc

[root@localhost home]# ls -al

 

합계5

946561 drwx------    3    root    root     4096  9월 9일 11:58 .

        2 drwx--xr-x   20    root    root     4096  9월 9일 11:58 ..

946572  -rw-r--r--   2      root    root       10   9월 9일 11:59 abc

946572  -rw-r--r--   2      root    root       10   9월 9일 11:59 hlink

946572  -rw-r--r--   2      root    root       10   9월 9일 11:59 slink -> abc

 

[root@localhost home]# cat slink

cat: slink: 그런 파일이나 디렉토리가 없음

[root@localhost home]# cat hlink

text file

 

inode공유

a라는 텍스트 파일이 존재할 경우 cp a copya라는 명령어로 a를 copya라는 파일을 복사하고, ln a hardlinka라는 명령어로 하드링크 hardlinka 파일을 생성해 보자.

a 파일에 내용 추가 시 파일 hardlinka의 내용은 동일한 inode를 사용하여 동일한 데이터 블록을 참조하므로 변경된 내용이 추가되어

있지만 copya 파일은 다른 inode를 사용하므로 변경된 내용이 추가되지 않는다.

 

하드디스크 용량차지

500MB크기의 datafile을 cp datafile copyfile 명령어로 복사했을 경우 500MB크기의 copyfile이 생성되어 실제로는 하드디스크에 500MB를

더 사용하게된다. 하지만 datafile이라는 hardlinkfile이라는 이름으로 하드링크로 생성할 경우 실제 생성된 하드링크 파일은 크기가 500MB로

나타나지만 데이터 블록 자체를 복사하는 것이 아니기 때문에 실제 하드 디스크공간을 사용하지 않고 inode만 공유하므로 공간크기에는

변화가 없다. 하드링크는 동일한 파일시스템에서만 적용된다. /home 이라는 디렉토리가 포함되어있는 /dev/ak_vol/home 파티션에

500MB크기의 datafile파일을 cp 명령어로 생성한 copyfile 파일과 하드 링크로 생성함 hardlinkfile파일을 비교하여 하드디스크의

변화를 보여준다.

 

추가) inode란

개별 파일은 생성될 때 OS에 의해 고유번호가 부여되며 이러한 번호를 통해 해당 파일을 인식한다.

우리가 알고있는 파일명은 사람의 편의를 위해 이러한 번호와 연결하여 사용하게 된다.

이런한 번호를 아이노드라 부르며 장비에 붙어있는 일련번호와 비슷한 개념이다. OS는 파일을 이름대신 아이노드 번호로 인식하며

파일시스템을 생성할 때 inode 테이블을 형성하여 파일을 생성 할 때 마다 inode번호를 해당 테이블에 기록하여 데이터의 위치를 인식한다.

댓글