ln 명령어에 대해서
NAME ln - make links between files
SYNOPSIS ln [OPTION]... TARGET [LINK_NAME] ln [OPTION]... TARGET... DIRECTORY ln [OPTION]... --target-directory=DIRECTORY TARGET...
DESCRIPTION Create a link to the specified TARGET with optional LINK_NAME. If LINK_NAME is omitted, a link with the same basename as the TARGET is created in the current directory. When using the second form with more than one TARGET, the last argument must be a directory; create links in DIRECTORY to each TARGET. Create hard links by default, symbolic links with --symbolic. When creating hard links, each TARGET must exist. |
■ 파일의 종류 (7가지)
일반 파일(Regular File)
디렉토리 파일(Directory File)
링크 파일(Link File)
하드 링크 파일(Hard Link File)
심볼릭 링크 파일(Symbolic Link File, Soft Link File)
디바이스 파일(Device File)
블럭 디바이스 파일(Block Device File)
캐릭터 디바이스 파일(Character Device File = Raw Device File)
파이프 파일(Pipe File)
소켓 파일(Socket File)
도어 파일(Door File)
■ 링크 파일(Link File) 파일의 종류
- 하드 링크(Hard Link)
- 심볼릭 링크(Symbolic Link, Soft Link)
■ 하드링크에 대한 기본 체계
# ls -l file1
-rw-r--r-- 1 root root 6 8월 25 13:06 file1
(linux200)
- 파일에 대한 하드링크 수는 '1'이 기본값이다.
- 디렉토리에 대한 하드링크 수는 '2'가 기본값이다.
-> 디렉토리안에 들어 있는 디렉토리의 개수
# cd /test && rm -rf /test/*
# echo "hello" > file1
# ls -l file1
-rw-r--r-- 1 root root 6 8월 25 13:06 file1 |
+----------------+
file1 | Inode | Inode(Index Node)
+----------------+
| |
| Data |
| |
| |
+----------------+
파일이 이름이 Inode하나와 맵핑되어있으면 링크카운터가 1이다.
inode안에 1) ls -l 명령어의 결과 정보가 들어간다.
2) 데이터블락을 포인터하는 정보가 들어간다.
# mkdir dir1
# ls -ld dir1
drwxr-xr-x 2 root root 4.0K 8월 25 13:06 dir1/ |
.하고 ..이 있기때문에 2개가 있다는 뜻
디렉토리에 대한 하드링크수는 디렉토리 안에 들어 있는 디렉토리 개수이다.
# ls -al dir1
# mkdir dir1/dir2
# ls -ld dir1
-> 디렉토리의 하드링수는? 3
# mkdir dir1/dir3
# ls -ld dir1
-> 디렉토리의 하드링수는? 4
# mkdir dir1/dir2/dir4
# ls -ld dir1
-> 디렉토리의 하드링수는? 4 (아마 바로 밑에 있는 정보만 포함하고 있는것 같다)
# touch dir1/file2
# ls -ld dir1
-> 디렉토리의 하드링수는? 4 (일반파일의 개수는 무관하다)
# ls -l /
drwxr-xr-x 14 root root 4.0K Oct 9 04:03 lib/
=> lib폴더 바로 아래는 .하고 ..를 포함하여 14개의 디렉토리가 있다는 뜻
==============================================================================
■ ln 명령어 사용법
ln CMD
(하드링크) # ln file1 file2
(심볼릭 링크) # ln -s file1 file2
링크파을 걸어서 같은 데이터정보 블락을 관리하기 위해 링크작업을 하는 것이다.
(하드 링크)
# cd /test && rm -rf /test/*
# echo 1111 > file1
# ls -l file1
-rw-r--r-- 1 root root 5 Aug 14 18:07 file1 |
# ln file1 file2
# ls -l file*
-rw-r--r-- 2 root root 5 8월 25 13:16 file1 -rw-r--r-- 2 root root 5 8월 25 13:16 file2 |
file1과 file2이 같은 inode를 가리키고 있어서 카운트가 2개이다.
+----------------+
file1, file2->| Inode | Inode(Index Node)
+----------------+
| |
| Data |
| |
| |
+----------------+
# ls -li file*
163204 -rw-r--r-- 2 root root 5 8월 25 13:16 file1 163204 -rw-r--r-- 2 root root 5 8월 25 13:16 file2 |
# echo 2222 >> file1
# cat file2
같은 데이터 블럭을 다루기 때문에 내용이 같다.
# rm file1
# cat file2
전부 다 오리지널 파일이기 때문에 상관이 없다.
# ls -l file2
-rw-r--r-- 1 root root 5 8월 25 13:16 file2 |
(심볼릭 링크)
# ln -s file2 file3
# ls -l file*
+----------------+
file2 | Inode (450) | Inode(Index Node)
+----------------+
| |
| Data |
| |
| |
+----------------+
+----------------+
file3 | Inode (451) | Inode(Index Node)
+----------------+
| |
| Data |
| |
| |
+----------------+
-rw-r--r-- 1 root root 5 8월 25 13:16 file2 lrwxrwxrwx 1 root root 5 8월 25 13:23 file3 -> file2 |
=> file2(원본파일)의 permission이 중요하다. 풀퍼미션이지만 의미가 없다.
# ls -li file*
163204 -rw-r--r-- 1 root root 5 8월 25 13:16 file2 163206 lrwxrwxrwx 1 root root 5 8월 25 13:23 file3 -> file2 |
=> inode값이 다르단걸 알 수 있다.
# echo 3333 >> file3
# cat file2
=> file2나 file3에서 작업하던 file2(원본파일)에 작업을 하려고 하는 것 이다.
# rm file2
# cat file3
cat: file3: 그런 파일이나 디렉토리가 없음
■ 심볼릭 링크의 예제
심볼릭 링크 -> 바탕화면 바로가기 아이콘(EX: 한글.lnk)
■ 하드링크 & 심볼릭 링크의 비교
-> 파일시스템을 넘어서 링크를 걸때
-> 디렉토리에 링크 걸때 (심볼릭 링크만 가능)
■ 하드링크 검색 방법
(심볼릭 링크는 검색해서 알 수 있고, 하드링크는 inode가 동일한 것으로 알 수 있다.)
# cd /test && rm -rf /test
# echo 1111 > file1
# ln file1 file2
# ln file1 file3
# ls -li file*
# find . -inum <inode number> -type f
■ 기존에 존재파일에 링크를 거는 경우의 에러 메세지
# cd /test && rm -rf /test/*
# echo 1111 > file1
# echo 2222 > file2
# ln -s file1 file2
ln: creating symbolic link `file2' to `file1': 파일이 존재합니다 |
'Learning > └◆Reversing' 카테고리의 다른 글
[참고] Signal에 대해서(시그널 함수) (0) | 2017.01.29 |
---|---|
06_Level6 -> Level7[FTZ] signal() 함수 취약점 살펴보기 (0) | 2017.01.28 |
05_Level5 -> Level6[FTZ] 레이스 컨디션 스크립트 만들기 (0) | 2017.01.23 |
05_Level4 -> Level5[FTZ] xinetd 방식 여러가지 로컬/원격 백도어 (0) | 2017.01.20 |