Linux - 디렉터리 & 파일(3)

2021. 7. 23. 21:32Linux

이번시간에는 리눅스에서 데이터를 어떤 형태로 관리하고 있는지와 파일의 종류에 대해 알아보겠습니다.

우선 리눅스에선 데이터를 파일 형태로 관리합니다. 그렇기 때문에 저희가 지금까지 디렉터리와 파일로 구분 했던것도 사실은 둘다 파일인데 종류만 달랐던 것입니다. 리눅스에서는 외부장치 또한 파일로 관리를 합니다. 

Linux - 디렉터리 & 파일(1) 에서 dev 디렉터리에 대해 배웠을때 외부장치가 마운트 되면 장치파일 형식으로 dev 디렉터리 안에 보관된다고 언급했었습니다.

이제 파일의 종류에 대해 자세히 알아보겠습니다

파일 구조의 맨 앞을 보면 해당 파일이 무슨 파일인지 알 수 있습니다.

이제 파일의 종류에 대해 자세히 알아보겠습니다

1. - : 일반 파일 : 텍스트 파일과 바이너리 파일이 있습니다.

텍스트 파일 : 사람이 읽을 수 있는 파일 cat more less 명령어로 읽을 수 있습니다.

보통 텍스트 파일을 ASCII 코드로 구성된 파일이라고 합니다.

바이너리 파일 : 0,1 로 이루어진 코드이며 대부분 실행 파일들이며 이미지 파일도 여기에 속합니다.

 

2. d : 디렉터리 파일 : mkdir 명령어로 생성하면 만들어지는 디렉터리를 의미합니다. 파일 리눅스에서는 디렉터리도 파일로 취급됩니다.

 

3. 특수 파일 : b : 블록장치 파일과 c : 문자장치 파일이 있습니다.

b : 블록장치 파일(Block Device File) : 하드디스크, CD-ROM과 같이 읽고 쓰기를 할때 버퍼를 사용하는 장치들을 관리하기 위한 파일입니다. /dev 디렉터리 내에 위치합니다. /dev/sda, /dev/cdrom

c : 캐릭터 장치 파일(Character Device File) : 키보드, 마우스와 같이 데이터를 쓰거나 읽는 즉시 처리 하기 때문에 버퍼를 사용하지 않는 장치들의 파일입니다

 

4. 링크 파일 : 하드 링크 파일과 l : 심볼릭 링크 파일이 있습니다.

우선 링크 파일에 대해 설명하기 전에 i-node에 대해 먼저 설명 하겠습니다.

파일을 생성할 때 각 파일마다 i-node가 생성되기 때문에 모든 파일들은 각각 하나의 i-node를 가지고 있으며 i-node에는 해당 파일의 모든 정보가 담겨 있습니다. i-node는 생성되면 inode list에 등록이 됩니다. 각각 i-node number를 가지고 있고 이 숫자를 통해 각 i-node들을 구별합니다.  i-node의 크기는 64 바이트입니다.

 

하드 링크 파일 : 원본 파일의 i-node를 참조하는 파일입니다. 하드 링크 파일은 원본 파일의 i-node를 공유하고 있기 때문에 새로운 하나의 파일을 생성하는 개념이 아니라 두개의 파일이 하나의 i-node를 가리키고 있다고 생각하면 됩니다.

그렇기 때문에 원본을 수정하면 하드 링크 파일도 자동으로 수정이 되며 반대로 하드 링크 파일을 수정해도 원본 파일이 수정이 됩니다. 파일명만 다른 하나의 파일이라고 생각하면 됩니다. 

직접 하드 링크 파일을 만들어 보며 더 자세한 설명을 하겠습니다. ln 원본 파일명 하드 링크 파일명 형식으로 만들 수 있습니다. 

test와 hardlink는 하나의 i-node를 가리키고 있습니다.  ls-l 명령어에 옵션 i를 사용하면 파일이 가리키고 있는 i-node number를 확인 할 수 있습니다.

이와 같이 test 파일과 hardlink는 같은 i-node number를 공유하고 있다는 것을 확인 할 수 있었습니다. 이번에는 파일 수정을 해보겠습니다. 원본 파일인 test 파일은 touch로 생성한 파일이기 떄문에 아무런 내용이 없는 파일입니다.

둘다 빈 파일인것을 확인한것입니다.

 

 

다음과 같이 test 파일에 내용을 추가 했더니 hardlink도 똑같이 추가 된것을 확인 할 수 있습니다

 

hardlink에 내용을 추가해도 원본 파일 내용이 바뀌는 것을 확인 할 수 있습니다.

 

이제 다시 아까 봤던 사진을 다시 보겠습니다

맨 앞에은 i-node number이라는 것을 배웠습니다. 그럼 3째에 있는 2는 무엇을 의미하는 걸까요?

이것은 링크를 의미하는 것입니다. 9679913 를 가지고 있는 i-node에는 두개의 파일이 연결되어 있다는 것을 의미하는 것입니다. 이 링크에 하나의 파일이라도 연결이 되어 있는 한 사라지지 않습니다. 즉 원본 파일이 삭제 되어도 하드링크 파일이 있으면 해당 파일은 사라지지 않는 것입니다. 

링크가 1로 바뀐것을 볼 수 있습니다

 

하드링크는 동일한 파일 시스템에서만 적용이 되고 디렉터리에는 링크 할 수 없다는 단점이 있습니다. 이러한 단점 때문에 등장 한 것이 심볼릭 링크입니다. 심볼릭 링크에 대해 알아보기 전에 파일 시스템에 대해 먼저 알아보겠습니다.

 

파일시스템이란 파일의 저장이나 검색을 위해 논리적으로 그것들을 어디에 위치시켜야 하는지 등을 나타내는 방법입니다.

도서관으로 비유를 하자면 책을 기준 없이 무작위로 쌓아두면 나중에 책을 찾기 힘듭니다. 그렇게 때문에 일정한 시스템에 따라 책을 정리하고 관리 해야하는 것입니다. OS도 마찬가지로 파일을 정리하고 관리할 때 해당 파일 시스템을 따르는 것입니다.

OS들은 여러개의 파일 시스템을 지원합니다.

Linux : ext3, ext2, xfs 등

Windows : FAT, FAT32, NTFS 등

 

리눅스에서 사용하고 있는 파일시스템 구조는 boot block, super block, i-node list, block data block 로 이루어져 있습니다.

boot block : 운영체제를 부팅하거나 초기화시키기 위해 필요한 코드들을 가지고 있는 블록입니다.

부팅할 때 참조할 만한 파일들을 가지고 있는 블록입니다.

 

super block : 파일시스템을 관리하기 위한 정보를 가지고 있는 블록입니다.

 

i-node list block : 여러개의 i-node들로 이루어져 있습니다. 

 

data block : 실제 파일들의 데이터가 저장되어 있는 블록입니다. i-node가 가리키고 있는 하드디스크의 물리적 주소입니다.

지금까지 파일시스템에 대해 알아보았습니다. 이제 다시 심볼릭 링크에 대해 알아보겠습니다. 

l : 심볼릭 링크 파일 : 윈도우의 바로가기 아이콘과 비슷합니다.

심볼릭 링크로 파일 하나를 생성해보겠습니다. ln -s 원본파일 심볼릭링크파일

그럼 새로운 i-node를 생성하게 되고 새로 생성한 i-node는 원본 파일의 i-node를 가리키는 형식이 됩니다.

원본 파일 -> i-node1 -> data block (-> : 가리킨다는 것을 표현 한 것입니다.) 

심볼릭 링크 파일 -> i-node2 -> i-node1 인 형식이 되는 것입니다.

그렇기 때문에 원본 파일을 삭제시 원본 파일의 i-node도 사라지기 때문에(심볼릭 링크 파일의 i-node가 가리킬 i-node가 사라졌기 떄문에) 링크가 깨지게 됩니다.

 

i-node number 가 서로 다른것을 볼 수 있습니다

 

심볼릭 링크는 디렉터리에도 링크를 걸 수 있습니다 (하드 링크는 불가능)

 

또한 원본을 다른곳으로 이동 시키면 링크가 깨집니다. 심볼릭 링크는 경로를 사용해서 링크를 걸기 때문입니다

이와 같이 원본 파일의 경로를 사용해서 링크를 걸기 때문에 원본 파일의 위치가 달라지면 링크가 끊어집니다.

원본 파일을 가리키던 심볼릭 링크 파일이 원본 파일의 위치를 모르기 때문에 위와 같이 글자가 꺼졌다 켜졌다를 반복 하는 것입니다.

 

최종 정리 하겠습니다.

하드 링크 

원본 파일 -> inode1 -> data block

하드링크 파일 -> inode1

디렉터리 파일에는 링크를 걸 수 없습니다.

동일한 파일 시스템상에서만 링크를 걸 수 있습니다. 

원본 파일이 삭제되어도 i-node에 링크된 파일이 하나 이상 있으면 데이터가 지워지지 않습니다.

경로와는 상관 없습니다. 

i-node를 공유하기 때문에 공간을 차지 하지 않습니다.

 

심볼릭 링크 

원본 파일 -> inode1 -> data block

심볼릭 링크 파일 -> inode2 -> inode1

디렉터리 파일에 링크를 걸 수 있습니다.

서로 다른 파일 시스템상에서도 링크를 걸 수 있습니다.

원본 데이터가 지워지면 링크가 깨지고 데이터도 지워집니다.

원본을 다른 경로로 이동시키면 링크가 깨집니다.(경로를 이용하여 링크를 걸기 때문입니다.)

i-node를 새로 하나 생성하기 때문에 공간을 차지합니다.

 

공통점

원본과 링크 파일 둘중 어느 하나를 수정하면 동일하게 수정됩니다.

 

이상으로 리눅스 디렉터리와 파일에 대한 내용을 3차례 걸쳐 자세하게 알아보았습니다.

'Linux' 카테고리의 다른 글

리눅스 - 리다이렉션(redirection)  (0) 2021.07.28
리눅스 - MAC Time  (0) 2021.07.25
Linux - 디렉터리 & 파일(2)  (0) 2021.07.22
Linux - 디렉터리 & 파일(1)  (0) 2021.07.22
Linux - VI(범위지정, 치환, 다중 파일 편집)  (0) 2021.07.20