본문 바로가기

Learning/└◆Reversing

[참고] ln 명령어의 대해서

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 825 13:06 file1

 

(linux200)

- 파일에 대한 하드링크 수는 '1'이 기본값이다.

- 디렉토리에 대한 하드링크 수는 '2'가 기본값이다.

  -> 디렉토리안에 들어 있는 디렉토리의 개수

 

# cd /test && rm -rf /test/*

# echo "hello" > file1

# ls -l file1

 

-rw-r--r-- 1 root root 6 825 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 825 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 825 13:16 file1

-rw-r--r-- 2 root root 5 825 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 825 13:16 file1

163204 -rw-r--r-- 2 root root 5 825 13:16 file2

 

 

# echo 2222 >> file1

# cat file2

같은 데이터 블럭을 다루기 때문에 내용이 같다.

 

# rm file1

# cat file2

전부 다 오리지널 파일이기 때문에 상관이 없다.

 

# ls -l file2 

-rw-r--r-- 1 root root 5 825 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 825 13:16 file2

lrwxrwxrwx 1 root root 5 825 13:23 file3 -> file2

=> file2(원본파일)의 permission이 중요하다. 풀퍼미션이지만 의미가 없다.

 

# ls -li file*

 

163204 -rw-r--r-- 1 root root 5 825 13:16 file2

163206 lrwxrwxrwx 1 root root 5 825 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': 파일이 존재합니다