Linux/Linux OS

Symbolic Link

값진 2021. 4. 17. 14:01

링크

기존 파일에 대한 또 하나의 새로운 이름이 생긴다.

ln -s 파일1 파일2
//파일 1에 대한 새로운 이름(링크)으로 파일2를 만들어준다 (-s 는 심볼릭 링크)
ln -s 파일1 디렉터리
//파일 1에 대한 링크를 지정된 디렉터리에 같은 이름으로 만들어준다.

예) 하드디스크에 hello.txt 가 있는데, hi.txt를 원본파일 hello.txt인것 처럼 사용할 수 있다.

 

hard link

ln hello.txt hi.txt

실행 결과 hi.txt가 생기며, 원본파일의 내용도 동일하다.

하나의 파일을 두개의 이름으로 공유하고 있는 것과 마찬가지이다.

또 크기와 파일개수, i노드번호도 동일하다. hi.txt를 수정하면 원본파일 또한 수정된다.

단, 원본파일을 삭제해도 hi 가 지워지진 않는다. (i노드는 그대로이기때문에. ls -i * 하면 i노드의 번호를 볼 수 있다)

 

Symbolic link

ln -s hello.txt hi.txt

i노드 번호가 다르다. ls -l 해보면 링크가 되었다는 것을 알려준다(첫글자l, ->)

소프트링크는 윈도우즈에서 바로가기와 마찬가지이다. 바로가기를 지웠다고 원본이 사라지진 않는다

ls -f(파일 형식을 보여주는 옵션) 해보면 hi.txt 뒤에 @이 붙어있다. 오른쪽에서 왼쪽으로 링크를 시키는 것.

원본을 지우면 원본만 사라진다. link는 없어짐 

 

원래 있는 디렉터리(tmp/sym.txt)를 지금의 위치(LINUX)에 심볼릭 링크 시키면?지금 링크시킨 디렉터리 안의 파일을 수정하면 원래의 파일(sym.txt)이 수정된 것이다.

지금 위치에서 cd tmp 하면 LINUX가 아닌 원래의 tmp위치로 가게된다. (바로가기)

LINUX에서 rm tmp 하면 원본은 그대로이다.

 

일반 파일 뿐만이 아니라 명령어도 링크해 사용할 수 있다.

일단, 명령어의 위치 파악하기 : which gcc (/usr/bin/gcc)

지금 위치에서 gcc를 cc로 쓸 것이다. ln -s /usr/sbin/gcc cc

ls -l 하면 cc -> /usr/sbin/gcc 링크가 되었음을 알 수 있다.

cp SUB2/sum.c . 지금 위치에 sub2 안에 있던 파일을 복사

gcc 실행하기 : cc -o sum sum.c

실제론 /usr/sbin안에 있는 gcc가 실행된 것. cc를 이용해 링크시켜서 사용한 것이다.