출처 : http://funnymins.tistory.com/133
1. 파일 링크의 개념
i-node는 파일의 생성과 동시에 임의로 부여되며, 번호확인은 ls -i 로 확인할 수 있다. 또한 리눅스에서는 모든 디바이스나 디렉토리를 파일개념으로 인식하기 때문에 전부 inode를 부여받는다. 만약 inode가 같은 파일이 있다면 파일 이름이 다르더라도 이 파일은 같은 파일이 된다.
[하드 링크]
하드 링크는 일반 파일을 링크할 때 주로 이용하며, 옵션없이 ln 명령으로 링크시키면 된다. 생성된 링크 파일은 원래 파일의 inode(index node라 하며 파일에 대한 정보가 저장된 레코드)를 그대로 참조하기에 원 파일이 지워져도 아무런 문제가 되지 않는다.
[심볼릭 링크 - ln -s 명령으로 링크]
심볼릭 링크는 주로 디렉토리를 링크할 때 사용한다. 원 파일이 삭제되면 실제 데이터 블럭을 참조하던 inode도 삭제되어, 심볼릭 링크된 파일은 의미가 없어진다.
2. ln 명령어
[option]
-s : 심볼릭링크(소프트링크)를 생성한다. 만약 이 옵션이 없으면 하드링크가 생성된다.
-v : 링크를 만드는 정보를 자세히 출력한다.
[예제]
# ln -s /directory/* linkdir : /directory/디렉토리 안의 모든 파일의 링크 파일을 linkdir 디렉토리에 생성
# ln -s ./sourcefile ./linkfile : 링크생성
# ls -ld linkfile : 링크확인
# unlink(또는 rm) linkfile : 링크해제
/etc/xinetd.d 라는 디렉토리를 자주간다면 현재 나의 홈디렉토리에 링크해보자.
ln -s /etc/xinetd.d xx => /etc/xinetd.d라는 디렉토리를 현재 디렉토리의 xx라는 것으로 링크한다. ls xx 하면 ls /etc/xinetd.d의 내용과 동일한 내용이 나타나고 또한 cd xx하면 그 디렉토리안으로 들어간 것과 같다.
Usage: ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
or: ln [OPTION]... TARGET (2nd form)
or: ln [OPTION]... TARGET... DIRECTORY (3rd form)
or: ln [OPTION]... -t DIRECTORY TARGET... (4th form)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
When creating hard links, each TARGET must exist.
긴 옵션에서 꼭 필요한 인수는 짧은 옵션에도 꼭 필요합니다.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-d, -F, --directory allow the superuser to attempt to hard link
directories (note: will probably fail due to
system restrictions, even for the superuser)
-f, --force remove existing destination files
-n, --no-dereference treat destination that is a symlink to a
directory as if it were a normal file
-i, --interactive prompt whether to remove destinations
-s, --symbolic make symbolic links instead of hard links
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file
-v, --verbose print name of each file before linking
--help 이 도움말을 표시하고 끝냅니다
--version 버전 정보를 출력하고 끝냅니다
The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off never make backups (even if --backup is given)
numbered, t make numbered backups
existing, nil numbered if numbered backups exist, simple otherwise
simple, never always make simple backups
[ 개념 ]
리눅스에서 링크의 종류로는 질문하신 심볼릭링크와 하드링크가 있습니다.
1. 심볼릭링크는 어떤 파일을 가리키고 있는 파일을 뜻 합니다.
test.txt 라는 파일이 있을 때...
ln -s test.txt hello.txt
위와 같은 명령을 이용해서 hello.txt 라는 파일을 만들게 됩니다. 하지만 hello.txt 라는 파일은 이름만 존재 할 뿐 내용은 아무것도 없다고 생각하시면 됩니다. 이 파일은 단지 test.txt 파일을 가리키고 있을 뿐이고 hello.txt 파일을 호출하게 되면 test.txt 파일로 연결을 해주는 역활을 합니다.
이런 심볼릭 링크의 경우 원본(test.txt) 파일을 삭제 하게 되면 hello.txt 파일은 무용지물이 되고 만답니다.
2. 하드링크는 하드에 저장되어 있는 어떤 자료에 이름을 여러개 부여한다고 생각하시면 됩니다. 간단한 예로...위와 같이 test.txt 파일을 저장했습니다. 그리고...
ln test.txt hello.txt
위와 같이 -s 옵션을 빼고 링크명령을 내리게 되면 hello.txt 파일이 생성이 됩니다.
하지만 이경우는 위의 심볼릭 링크와 조금 다릅니다. 위에서는 hello.txt 파일이 test.txt 파일을 가리키고 있었지만 이번에는 hello.txt 라는 파일명은 test.txt 의 또 다른 이름이 되는 것입니다. 이런 경우 원본인 test.txt 파일을 지우더라도 hello.txt 파일은 내용을 간직하고 있답니다.
위의 내용을 확실히 이해하시려면 하드에 파일이 저장되는 방식을 조금 공부하시면 많은 도움이 되실 겁니다. 저장방식을 간략히 설명드리면....
어떤 파일 test.txt 를 저장하게 되면...하드드라이브의 어떤 부분에 test.txt 내용을 기록하게 됩니다. 그리고 그 위치정보를 헤더에 저장을 하는 것이구요. 즉 test.txt 라는 이름은 단지 헤더에 있는 위치정보만을 가지고 있게 됩니다. 우리가 test.txt 파일을 콜하게 되면 이 파일이 가지고 있는 위치정보를 이용해서 하드에서 내용을 찾아 사용하게 되는 것입니다.
이제 위에 링크를 생각해 보세요. 하드링크는 이 위치정보를 가지고 있는 이름을 여러개 생성한다고 생각하면 됩니다. 그렇기 때문에 어떤 하나를 지우더라도 하드에서 내용을 찾아 갈수 있는 것입니다.
하지만 심볼릭링크는 위치정보를 가지고 있는 파일명을 또 한번 다른 이름으로 연결을 시키는 것입니다. 그렇기 때문에 원본 파일을 삭제 하게 되면 심볼릭링크 파일들은 위치정보가 없기 때문에 무용지물이 된다는 것입니다.
음 위에 간단히 설명을 하긴 했는데 도움이 되었는지 모르겠네요.
그럼 즐거운 하루되세요.