###1 링크

link : hard link, symbolic link

i-node

which

readlink , canonical path

#1 하드링크

1) inode  저장된 파일을 접근하기 위한 매개체.

inode는 숫자로 관리되며, 하드링크 하에 inode의 숫자를 관리함으로써 파일에 접근한다.

 

2) HardFile1 (경로명), hardlink에게 입구를 알려주는 것과 동일.

하드링크는 HardFile2처럼 복제 가능. 실제 데이터 용량이 2배가 아닌, 1배이며 I node에 접근하는 하드링크가 2개가 된다.

둘다 오리지날이. 둘다 같은 I-node를 가리키고 있기떄문이다.

#2 심볼링 링크 : 축약시 symlink 라고 함.

1)symlink는 바로가기 와 동일하다. 특정파일의 경로명 위치를 가리킨다.

symlinkHardFile2  가리키고, symlink2를 만들어 HardFile1 을 가리키면 하드링크에선 HardFile1 , HardFile2 가 바로 동일하다는 것을 알 수 있었던 것과는 다르게, Symlink에서는 두 개가 동일한지 끝까지 링크타서 접근봐야지만 안다. 단점은 경로만 알수 있지만, 원본이 삭제됬다가 다시 복구 시 잘 작동하는 장점이 있다.

 

#3 I-node

1)파일은 고유의 I-node1개 가지고 있다.

2)

=>i-node는 파일의 메타정보를 갖고 파일을 관리할 수 있는 객체이다.

=>disk partition(or volume)내에서 유일한 식별자이다. 파티션이 다르면 무의미.

하드링크는 같은 파티션에서만 만들어짐.

==>i-nodeI-node number(약칭 inum)로 매겨져 구별된다. 따라서 partition이나 volume이 다르다면 의미가 없는 번호가 된다.

3) file meta info

=> 시간 관련정보, 사이즈, 소유권,권한 , 파일명 등등 파일을 수식하는 정보들

 

#4 hard vs symbolic

1) hard link 생성

=> 동일한 I-node를 가리키므로 동일 파티션(volume) 내에서만 생성가능.

=>regular file(일반 파일[mp3,,pdf 파일.] <-> 디렉토리, 디바이스파일 == nonregular file)만 하드링크를 생성할 수 있음.

- regular file이 아닌 directorydevice file등은 hard link를 생성할 수 없다.

=>실체를 가진 파일.

2)symbolic link(abbreviation: symlink)

=> 위치(path)만 가리키므로 다른 파티션, 모든 종류의 file에 만들 수 있다.

=>가리키는 대상의 UNIX file mode를 따라가므로 symlink의 권한은 777이며, 의미는 없다.

- symlinkfile mode값은 mask의 의미를 가지므로 큰 의미를 둘 필요는 없다.

 

**abbreviation :  ㅁ -> a   ( 문자, 문장대체 가능. 주로 오타 예방 및 축약어로서 타이핑 편의 도모 목적)

 

hardlink.txt라고 파일을 따로 만드는게 아니다.(touch /catch ..)

 

그냥 ln 하드링크 생성 명령어 타이핑하고 뒤에 경로와 하드링크파일명을 타이핑시  만들어진다. 즉 ln 명령어내 파일을

만드는 기능이 있다.

 

 

하드링크  예제

jlim@jlim-vm:~/work$ chmod 775 ~/work/testdir

jlim@jlim-vm:~/work$ cd ~/work/testdir

//원본이 hello.txt , 새로만들 하드링크 hardlink.txt 한칸위 dir에 하드링크를 만듦.

jlim@jlim-vm:~/work/testdir$ ln hello.txt ../hardlink.txt

jlim@jlim-vm:~/work/testdir$ ls -li

2232971 -rw-rw-r-- 2 jlim jlim 5 11월 2 19:56 hello.txt



jlim@jlim-vm:~/work/testdir$ ls -li ..

//하드링크로 연결된 통로가 2개이다. (하드링크전에는 1개 였음)

2232971 -rw-rw-r-- 2 jlim jlim 5 11월 2 19:56 hardlink.txt

2232937 drwxrwxr-x 2 jlim jlim 4096 11월 2 19:56 testdir

둘 중하나 삭제하면 하드링크갯수는 다시 1로됨.

 

2. symbolic 링크

1)

ln - s 명령어 사용

jlim@jlim-vm:~/work/testdir$ ls -l
합계 4
-rw-rw-r-- 2 jlim jlim 7 11월  5 10:03 hello.txt
jlim@jlim-vm:~/work/testdir$ ln -s ../hardlink.txt symlink.txt
jlim@jlim-vm:~/work/testdir$ ls -l
합계 4
-rw-rw-r-- 2 jlim jlim  7 11월  5 10:03 hello.txt
lrwxrwxrwx 1 jlim jlim 15 11월  5 10:07 symlink.txt -> ../hardlink.txt

hardlink.txt 라는 파일을 symlink가 가리킨다. 즉 hardlink 파일을 바탕화면에서 바로가기 파일 만드는것 그 바로가기 파일이 symlink.txt 라고 보면 된다.

 

2) readlink 관련

1) Symlink가 여러개로 가리키는 파일이 있을 수 있다. symlinkcanonical path를 따라가는 기능이 있다.

A->B->C->D->E

A -> E로 한번에 가는 명령이 readlink다

 

sym3 -> sym2 -> sym1 -> hard1

로 파일을 링킹해보자.

 

 

jlim@jlim-vm:~/work$ touch hardlink
jlim@jlim-vm:~/work$ ls
hardlink  hardlink.txt  testdir
jlim@jlim-vm:~/work$ ln -s hardlink sym1
jlim@jlim-vm:~/work$ ls
hardlink  hardlink.txt  sym1  testdir
jlim@jlim-vm:~/work$ ln -s sym1 sym2
jlim@jlim-vm:~/work$ ln -s sym{2,3}
jlim@jlim-vm:~/work$ ls
hardlink  hardlink.txt  sym1  sym2  sym3  testdir

//sym link 확인 명령어 $ ls -l sym* hardlink
jlim@jlim-vm:~/work$ ls -l
합계 8
-rw-rw-r-- 1 jlim jlim    0 11월  5 10:22 hardlink
-rw-rw-r-- 2 jlim jlim    7 11월  5 10:03 hardlink.txt
lrwxrwxrwx 1 jlim jlim    8 11월  5 10:22 sym1 -> hardlink
lrwxrwxrwx 1 jlim jlim    4 11월  5 10:22 sym2 -> sym1
lrwxrwxrwx 1 jlim jlim    4 11월  5 10:23 sym3 -> sym2
drwxrwxr-x 2 jlim jlim 4096 11월  5 10:19 testdir

//sym2의 최종 절대경로
jlim@jlim-vm:~/work$ readlink -f sym2
/home/jlim/work/hardlink

//sym2의 최종 상대경로
jlim@jlim-vm:~/work$ readlink -e sym2
/home/jlim/work/hardlink
jlim@jlim-vm:~/work$ readlink -f sym3
/home/jlim/work/hardlink
jlim@jlim-vm:~/work$ readlink -e sym3
/home/jlim/work/hardlink

//hardlink 삭제
jlim@jlim-vm:~/work$ rm hardlink
jlim@jlim-vm:~/work$ ls -l
합계 8
-rw-rw-r-- 2 jlim jlim    7 11월  5 10:03 hardlink.txt  // 이전에 실습한 .txt파일이니 hardlink파일아님에 참고!
lrwxrwxrwx 1 jlim jlim    8 11월  5 10:22 sym1 -> hardlink
lrwxrwxrwx 1 jlim jlim    4 11월  5 10:22 sym2 -> sym1
lrwxrwxrwx 1 jlim jlim    4 11월  5 10:23 sym3 -> sym2
drwxrwxr-x 2 jlim jlim 4096 11월  5 10:19 testdir

//f: 절대경로,  e: 상대경로
//hardlink파일은 지워졌지만 -f 의 경우 sym1까지 경로 알려주었다. 반면 상대경로에선 모든 링크가 살아있어야하나, 맨 끝에 링크가 삭제됬기에 fail 뜬다.
jlim@jlim-vm:~/work$ readlink -f sym2
/home/jlim/work/hardlink
jlim@jlim-vm:~/work$ readlink -f sym3
/home/jlim/work/hardlink
jlim@jlim-vm:~/work$ readlink -e sym3
jlim@jlim-vm:~/work$ readlink -e sym2

 

2)Cannoical <blah>란 컴퓨팅환경에서 중요 용어.

컴퓨팅환경에서 실체를 가지는 standard, official의 의미를 가짐.

eg. 옆집 주소 라 하면 누구의 옆집인지 모른다.(상대적임)

이에 철수의 옆짚이라 하면 절대적으로 offical한값으로 해석할 수 있다. 이러한 과정을 canonicalization이라 한다.

 

해당 내용은  프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.

+ Recent posts