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