본문 바로가기

Linux/기타

하드링크 & 심볼릭링크

주제 : 하드링크 & 심볼릭링크 - 더 자세한 내용은 리눅스 파일시스템 구조를 참조할 것




o 하드 링크와 심볼릭 링크를 만드는 이유는 무엇인가 ?

1. 호환성을 유지하기 위해서 만든다. ex) /bin/sh -> /bin/bash /etc/init.d -> /etc/rc.d/init.d

2. useradd, adduser 처럼 햇갈리는 명령어들을 링크를 걸어줌으로써 햇갈리는 명령어를 동일하게 사용할 수 있다. ex) # ln -s /usr/sbin/userdel /usr/sbin/deluser

3. 깊이가 깊은 디렉토리나 파일을 간단하게 접근하기 위해서 ex) /usr/local/apache/conf/httpd.conf -> /etc/httpd.conf 4. /dev/cdrom cdrom 이 달린 장치명으로 접근하는 것이 아니라 어디에 달려 있든 심볼릭 링크를 통해 접근한다.

#ls -l /dev/cdrom lrwxrwxrwx 1 root root 3 Apr 29 09:07 /dev/cdrom -> hdc ( 컴퓨터별로 장치명이 다를 수 있다.)

#ls -l /proc/$$/fd total 0 lrwx------ 1 root root 64 Apr 29 09:23 0 -> /dev/pts/0 lrwx------ 1 root root 64 Apr 29 11:29 1 -> /dev/pts/0 lrwx------ 1 root root 64 Apr 29 11:28 2 -> /dev/pts/0 lrwx------ 1 root root 64 Apr 29 11:29 255 -> /dev/pts/0


o 리눅스 파일시스템 구조 +--+---+---------+---------------+ | | | | | | | | | | +--+---+---------+---------------+ 1 2 3 4 1. 부트블럭 2. 슈퍼블럭 3. inode 블럭 // i-node 하나당 파일 1개가 연결 된다. 4. data 블럭 // 실제 자료가 저장되는 공간

i-node 에는 파일명에 대한 정보가 없다. 파일명은 date 블럭 영역에 저장.


---------------------------------------------------------            심볼릭링크              하드링크 --------------------------------------------------------- 디렉토리         링크가 가능              X --------------------------------------------------------- 파티션          넘어갈 수 있다.             X --------------------------------------------------------- 원본파일     원본파일 삭제하면 사용할 수 없다.      O          (고아링크) --------------------------------------------------------- 아이노드      아이노드가 새로 생성           아이노드가 같다.         ls -l 변화가 없다. (아이노드 갯수가 증가) ---------------------------------------------------------

========================================================================= LAB> 하드링크와 심볼릭링크 만들기 # cd # install -m 700 -d LINKTEST # ls -ld LINKTEST drwx------ 2 root root 4096 May 30 17:19 LINKTEST # cd LINKTEST # cat > a.txt File test ... ^d # df -i - a.txt 파일에 대한 하드 링크를 생성한다. # ln a.txt b.txt // ln 원본파일 링크파일 # ls -li a.txt 1802460 -rw-r--r-- 1 root root 14 Apr 30 05:26 a.txt # ln a.txt b.txt # ls -li a.txt 1802460 -rw-r--r-- 2 root root 14 Apr 30 05:26 a.txt # ls -li total 16 1802460 -rw-r--r-- 2 root root 14 Apr 30 05:26 a.txt 1802460 -rw-r--r-- 2 root root 14 Apr 30 05:26 b.txt # df i - b.txt 파일에 대한 심볼릭 링크를 생성한다. # ln -s b.txt c.txt // ln -s 원본파일 링크파일 # ls -l total 20 -rw-r--r-- 2 root root 14 May 30 17:20 a.txt -rw-r--r-- 2 root root 14 May 30 17:20 b.txt lrwxrwxrwx 1 root root 5 May 30 17:21 c.txt -> b.txt =========================================================================

=========================================================================

LAB> 아래 조건을 가지고 링크 연습을 해보자.

---------------------------------------------------------            심볼릭링크              하드링크 --------------------------------------------------------- 디렉토리         링크가 가능              X --------------------------------------------------------- 파티션          넘어갈 수 있다.             X --------------------------------------------------------- 원본파일     원본파일 삭제하면 사용할 수 없다.       O          (고아링크) --------------------------------------------------------- 아이노드      아이노드가 새로 생성           아이노드가 같다.         ls -l 변화가 없다. (아이노드 갯수가 증가) ---------------------------------------------------------

1. 디렉토리 테스트

#mkdir testdir
#ln -s testdir testdir2
#ln testdir testdir3
ln: `testdir': hard link not allowed for directory

===> 디렉토리는 심볼릭 링크는 되지만 하드링크는 생성되지 않는다.
      (but! mount 명령어를 사용하여 하드링크처럼 사용할 수 있다.)

2. 파티션 테스트

# ln -s /boot/vmlinuz-2.6.18-348.el5 vmlinuz2    <-- O 

# ln /boot/vmlinuz-2.6.18-348.el5 vmlinuz3 <-- X 


3. 원본파일 테스트 - 심볼릭 링크 테스트 --> 원본 파일이 삭제되면 심볼릭 링크로 원본파일에 접근할 수 없다. # echo File test ... > a.txt (고아링크) # ln -s a.txt c.txt # cat a.txt File test ... # cat c.txt File test ... # echo 1234 >> a.txt # cat a.txt File test ... 1234 # cat c.txt File test ... 1234 # rm -fv a.txt # cat a.txt <-- X # cat c.txt <-- X - 하드 링크 테스트 --> 원본 파일이 삭제되도 하드 링크로 원본파일에 접근할 수 있다. # echo File test ... > a.txt # ln a.txt b.txt # ls -li total 16 1802460 -rw-r--r-- 2 root root 14 Apr 30 06:29 a.txt 1802460 -rw-r--r-- 2 root root 14 Apr 30 06:29 b.txt


======================================================          
LAB>  

-- 순서 --
1. 각 디렉토리의 아이노드 번호
2. 각 디렉토리의 하드링크 개수
-- 순서 --

# mkdir /LINKTEST
# ls -lid /

# ls -lia /LINKTEST 
total 16
3768321 drwxr-xr-x  2 root root 4096 Apr 30 10:14 .
      2 drwxr-xr-x 27 root root 4096 Apr 30 10:14 ..

# cd /LINKTEST
# mkdir a b
# ls -ial
total 32
3768321 drwxr-xr-x  4 root root 4096 Apr 30 10:22 .
      2 drwxr-xr-x 27 root root 4096 Apr 30 10:14 ..

# ls -lid a b 
3768322 drwxr-xr-x 2 root root 4096 Apr 30 10:22 a
3768323 drwxr-xr-x 2 root root 4096 Apr 30 10:22 b

# ls -lia b
total 16
3768323 drwxr-xr-x 2 root root 4096 Apr 30 10:22 .
3768321 drwxr-xr-x 4 root root 4096 Apr 30 10:22 ..

2. 각 디렉토리의 하드링크 개수


======================================================     





===========================================================================

$$ : 자신의 프로세스 bash

'Linux > 기타' 카테고리의 다른 글

HDD추가하기  (0) 2015.04.29
JAVA 설치  (0) 2015.04.29
cron#2  (0) 2015.04.29
cron#1  (0) 2015.04.28
quota  (0) 2015.04.27