본문 바로가기

CentOS/Study

[Study19]리눅스 파일 구조 이해하기 - 파일의 구조 / 일반 파일 / 디렉토리 파일

반응형

파일의 구조

파일의 종류 설명

일반 파일(Egular File) 텍스트, 이미지, 바이너리 등의 데이터를 저장하는 파일
디렉토리 파일(Directory File) 다른 파일과 디렉토리를 포함하는 폴더 역할을 하는 파일
링크 파일(Link File) 다른 파일이나 디렉토리를 가리키는 바로 가기 역할을 하는 파일
장치 파일(Device File) 하드웨어나 소프트웨어와 통신하기 위한 파일
소켓 파일(Socket File) 프로세스 간 통신에 사용되는 파일
도어 파일(Door File) 일부 UNIX 시스템에서 사용하는 특수 파일
파이프 파일(Pipe File) 두 프로세스 간의 통신에 사용되는 파일

파일과 디렉토리를 다루기 위해서는 리눅스에서 기본적인 명령어들에 익숙해져야 합니다.

리눅스 시스템에서 파일은 구조적으로 파일 이름, Inode (Index Node), 그리고 데이터 블록으로 구분됩니다.

파일 이름은 유일해야 하며 대소문자는 다른 문자로 인식합니다.

Inode는 파일의 속성 정보와 데이터 블록을 포인트하는 정보를 포함하고 있으며, ls 명령어에 -l 옵션을 사용하여 대부분의 정보를 확인할 수 있습니다.

데이터 블록에는 실제 파일에 저장되는 내용이 들어갑니다.

일반 파일, 디렉토리, 심볼릭 링크 파일은 모두 하나 이상의 데이터 종류를 저장합니다.

일반 파일은 텍스트나 이미지, 바이너리 등의 데이터를 저장합니다. 디렉토리 파일은 다른 파일과 디렉토리를 포함하는 폴더 역할을 합니다.

심볼릭 링크 파일은 다른 파일이나 디렉토리를 가리키는 바로 가기 역할을 합니다.

장치 파일은 하드웨어나 소프트웨어와 통신하기 위한 파일입니다.

소켓 파일은 프로세스 간 통신에 사용됩니다.

도어 파일은 일부 UNIX 시스템에서 사용하는 특수 파일입니다.

파이프 파일은 두 프로세스 간의 통신에 사용됩니다.

리눅스 파일 시스템에서 파일들은 Inode와 데이터 블록으로 구성됩니다.

Inode는 파일의 속성 정보와 데이터 블록을 포인트하는 정보를 포함합니다.

대부분의 파일 시스템에서 Inode에는 파일의 소유자, 권한, 파일 크기, 생성 시간, 수정 시간, 마지막 접근 시간 등의 정보가 저장됩니다.

데이터 블록은 파일의 실제 내용을 저장합니다.

리눅스 파일 시스템에서는 파일이 저장되는 블록이 크기에 따라 다양한 크기로 나누어집니다.

파일 시스템은 파일과 디렉토리를 저장하는 데 사용되는 메커니즘입니다.

파일 시스템은 파일과 디렉토리를 저장하기 위해 디스크 공간을 할당하고 관리합니다.

리눅스에서는 다양한 파일 시스템이 지원되며, ext4, XFS, Btrfs 등이 널리 사용됩니다.

각 파일 시스템은 특정한 목적에 맞게 설계되었으며, 성능, 안정성, 확장성 등의 측면에서 차이가 있습니다.

파일 시스템을 사용할 때는 파일과 디렉토리의 이름을 지정하는 규칙을 따라야 합니다.

파일 이름은 유일해야 하며 대소문자를 구분합니다.

파일 이름에는 공백이나 특수 문자를 사용할 수 있지만, 일부 특수 문자는 사용할 수 없습니다.

파일 이름의 길이는 파일 시스템에 따라 다르며, 일반적으로 255자 이하입니다.

리눅스에서는 다양한 파일과 디렉토리를 다루기 위한 명령어들이 제공됩니다.

ls 명령어는 파일과 디렉토리의 목록을 보여줍니다.

cp 명령어는 파일을 복사합니다.

mv 명령어는 파일을 이동하거나 이름을 변경합니다.

rm 명령어는 파일을 삭제합니다.

mkdir 명령어는 디렉토리를 생성합니다.

rmdir 명령어는 디렉토리를 삭제합니다.

touch 명령어는 파일의 수정 시간을 업데이트하거나 빈 파일을 생성합니다.

chmod 명령어는 파일의 권한을 변경합니다.

리눅스에서는 파일의 권한이 매우 중요합니다.

파일의 권한은 파일을 소유한 사용자, 그룹, 그리고 나머지 사용자에 대한 읽기, 쓰기, 실행 권한을 결정합니다. 파일의 권한은 chmod 명령어를 사용하여 변경할 수 있습니다.

리눅스에서는 파일의 권한을 쉽게 파악할 수 있도록 ls 명령어에 -l 옵션을 제공합니다.

리눅스에서는 파일 시스템에 대한 자세한 정보를 확인할 수 있는 다양한 명령어들이 제공됩니다.

df 명령어는 파일 시스템의 용량과 사용 가능한 용량을 보여줍니다.

du 명령어는 파일과 디렉토리의 크기를 보여줍니다.

mount 명령어는 현재 마운트된 파일 시스템의 정보를 보여줍니다.

파일 시스템은 리눅스에서 매우 중요한 역할을 합니다.

파일 시스템을 이해하고 파일과 디렉토리를 다루는 데 필요한 명령어들을 익히면 리눅스 시스템을 보다 효율적으로 사용할 수 있습니다.

리눅스 파일 시스템은 일반적으로 트리 구조를 가지고 있으며, 루트 디렉토리(/)를 기준으로 하위 디렉토리와 파일이 계층적으로 구성됩니다.

 

다음은 간단한 예시입니다.

/
├── bin
│   ├── ls
│   ├── mkdir
│   └── rm
├── home
│   ├── user1
│   ├── user2
│   └── user3
├── lib
│   ├── lib1.so
│   ├── lib2.so
│   └── lib3.so
├── tmp
└── var
    ├── log
    ├── mail
    └── www

위의 예시에서, /bin 디렉토리에는 ls, mkdir, rm 등의 실행 파일이 저장되어 있습니다.

/home 디렉토리는 사용자 계정의 홈 디렉토리를 포함하고 있습니다.

/lib 디렉토리에는 라이브러리 파일이 저장되어 있습니다.

/tmp 디렉토리는 일시적으로 생성되는 파일들이 저장되는 임시 디렉토리입니다.

마지막으로, /var 디렉토리는 시스템 로그, 메일, 웹 서버 파일 등 시스템의 다양한 데이터가 저장되는 디렉토리입니다.

이러한 구조를 이해하면, 리눅스 파일 시스템에서 원하는 파일이나 디렉토리를 쉽게 찾을 수 있습니다.

 

일반 파일

리눅스 운영체제에서는 모든 것을 파일로 다룹니다.

이는 리눅스의 가장 기본적인 철학 중 하나이며, 모든 파일은 일반 파일, 디렉토리 파일, 링크 파일 등의 종류로 구분됩니다.

하지만 이러한 파일의 종류는 어떻게 확인할 수 있을까요?

파일의 종류에 대한 정보는 ls 명령어의 -l 옵션을 사용하여 출력되는 화면에서 첫 번째 문자를 확인할 수 있습니다.

이 문자를 통해 파일이 일반 파일인지, 디렉토리 파일인지, 링크 파일인지 등을 알 수 있습니다.

또한 file 명령어에 파일 이름을 인자로 전달하여 파일의 종류를 확인할 수도 있습니다.

파일의 종류에 따라 다르게 작동하는 명령어가 있기 때문에, 파일의 종류를 알고 있는 것은 매우 중요합니다.

예를 들어, 일반 파일에는 cat, more, cp, rm, head, tail 등의 명령어를 사용할 수 있지만, 디렉토리 파일에는 이러한 명령어를 사용할 수 없습니다.

대신, ls, pwd, mkdir, cd, mv 등의 명령어를 사용해야 합니다.

또한 파일의 이름은 파일을 접근하기 위해 사용됩니다.

파일은 Inode와 함께 파일의 구성요소로서 같은 디렉토리 안에서 파일 이름은 유일한 것이어야 합니다.

파일의 이름은 최대 255자까지 생성이 가능하며, 문자와 숫자를 사용할 수 있으며 대소문자를 구별합니다.

파일의 이름으로 .(Dot), _(Underbar), -(Dash)와 같은 특수문자를 사용할 수 있지만, *(Aterisk), /(Slash), \(Back Slash), ,(Comma), '(Single Quote), "(Double Quote) (Semicolon), &(Ampersand), |(Pipeline), <(Angle Blocket)와 같은 특수문자를 사용해서는 안 됩니다. 또한 ".(Dot)"로 시작하는 파일의 이름은 시스템의 환경 파일들이므로 일반 파일의 이름으로 권장되지 않습니다.

Inode는 파일에 대한 정보를 담고 있는 부분입니다. 일반적으로 Inode에는 크게 두 가지 부분을 포함하고 있습니다. 첫 번째는 파일에 대한 속성 정보(Ownership, Groupship, File Permission Mode 등)와 데이터 블록을 가리키는 포인터(Direct/Indirect Pointer)입니다. Inode는 숫자로 되어져 있으며 각 파일 시스템은 자신의 Inode 테이블(Inode Tables)을 가지고 있습니다. 파일이 새로운 파일 시스템에 만들어지는 경우 파일 시스템 안에서는 새로운 Inode 번호를 할당 받습니다.

마지막으로, 데이터 블록은 디스크 공간에 대한 단위로서 데이터를 저장하는 역할을 합니다. 일반 파일, 디렉토리, 심볼릭 파일들은 데이터 블록을 사용하지만 일반 파일과 다른 구조를 가지고 있는 디바이스 파일은 데이터 블록에 데이터를 저장하지 않습니다.

리눅스에서 파일을 생성하거나 접근하는 방법은 여러 가지가 있습니다. 예를 들어, vi 편집기를 사용하여 파일을 생성할 수도 있고, touch 명령어를 사용하여 빈 파일을 생성할 수도 있습니다. 이러한 기본적인 파일 처리 방법을 익혀두면 리눅스를 보다 효율적으로 사용할 수 있습니다.

추가로, 파일 시스템은 파일을 저장하는 방식에 따라 다양한 종류가 있습니다.

리눅스에서는 ext2, ext3, ext4, XFS, JFS, ReiserFS 등의 파일 시스템을 지원합니다.

각 파일 시스템은 장단점이 있으며, 사용하는 용도에 따라 적절한 파일 시스템을 선택해야 합니다.

또한 파일 시스템이 깨지거나 손상되는 경우 파일에 접근할 수 없으므로, 백업이나 복구와 같은 작업이 필요합니다.

파일 시스템에 대한 이해와 백업, 복구 작업의 필요성을 인식하면 더욱 안정적인 파일 관리가 가능해집니다.

 

문자 파일 종류

- 일반 파일(Egular File)
d 디렉토리 파일(Directory File)
b 블록 디바이스 파일 (Block Device File, (예) /dev/sha, /dev/hda, /dev/fd0)
c 문자 디바이스 파일 (Character Device File, 입출력 장치)
l 심볼릭 링크(Symbolic Link File)

 

자주 사용되는 기본 명령어

리눅스 명령어를 사용하여 파일과 디렉토리를 관리하는 것은 매우 중요합니다.

이를 통해 파일과 디렉토리를 효율적으로 조작할 수 있습니다.

이번 섹션에서는 여러 가지 명령어를 살펴보겠습니다.

먼저, 파일을 작성하고 편집할 때 사용되는 명령어를 살펴보겠습니다.

이러한 명령어는 파일을 작성하고 수정할 때 매우 유용합니다.

또한, 파일 및 디렉토리를 복사, 이동 및 삭제하는 데 사용되는 명령어를 살펴보겠습니다.

이러한 명령어를 사용하면 파일과 디렉토리를 효율적으로 관리할 수 있습니다.

또한, 명령어 옵션을 사용하여 명령어의 기능을 확장할 수 있습니다.

이러한 옵션은 명령어를 더욱 유연하게 사용할 수 있도록 해줍니다.

이번 섹션에서는 리눅스 명령어를 다양한 방법으로 사용하는 방법을 배울 수 있습니다.

유형 명령어
디렉토리 ls, pwd, mkdir, cd, mv
파일 cat, more, cp, rm, head, tail
파일 검색 grep, find

 

파일의 이름

리눅스 시스템에서 파일의 이름은 파일을 접근하기 위해 사용됩니다.

파일은 Inode와 함께 파일의 구성 요소로 같은 디렉토리 안에서 파일 이름은 유일해야 합니다.

예를 들어 현재 디렉토리 밑에 존재하는 디렉토리와 같은 이름은 일반 파일을 생성할 수 없습니다.

 

파일의 이름 생성 시 규칙

특수문자 사용 불가
* 파일 이름으로 사용할 수 없음
/ 디렉토리 구분자로 사용됨
\ 디렉토리 구분자로 사용됨
, 사용 불가
' 사용 불가
" 사용 불가
; 사용 불가
& 사용 불가
   
< 사용 불가
> 사용 불가
( 사용 불가
) 사용 불가

 

리눅스 시스템에서 파일 이름으로 사용할 수 없는 특수문자

특수문자 설명
* 와일드카드 문자
/ 디렉토리 구분 문자
\ 디렉토리 구분 문자
, 숫자 구분 문자
' 문자열 구분 문자
" 문자열 구분 문자
; 명령어 구분 문자
& 백그라운드 실행 문자
   
< 입력 리다이렉션 문자
> 출력 리다이렉션 문자

파일의 이름에 공백이나 탭을 사용하는 것을 권장하지 않습니다.

또한 ".(Dot)"로 시작하는 파일의 이름은 시스템의 환경 파일들이므로 일반 파일의 이름으로 권장하지 않습니다.

 

Inode

Inode는 파일에 대한 정보를 담고 있는 부분입니다.

일반적으로 Inode에는 크게 두 가지 부분을 포함하고 있습니다.

첫 번째는 파일에 대한 속성 정보(Ownership, Groupship, File Permission Mode 등)와 데이터 블록을 가리키고 있는 포인터(Direct/Indirect Pointer)입니다.

Inode는 숫자로 되어 있으며 각 파일 시스템은 자신의 Inode 테이블(Inode Tables)을 가지고 있습니다.

파일이 새로운 파일 시스템에 만들어지는 경우 파일 시스템 안에서는 새로운 Inode 번호를 할당 받게 됩니다.

 

정보 내용
파일의 종류(File Type) 일반 파일, 디렉토리 파일, 블록 디바이스 파일, 문자 디바이스 파일, 심볼릭 링크 파일
파일의 퍼미션 모드(File Permission Mode) 소유자, 그룹, 기타 사용자에 대한 읽기, 쓰기, 실행 권한
파일의 소유자, 그룹(File Ownership, Groupship) 파일을 생성한 사용자와 사용자 그룹
파일의 링크 수(Hard Link Count) 파일에 대한 하드 링크의 수
파일의 마지막 접근 시간(Access Time), 수정 시간(Modification Time) 파일에 대한 최근 접근 시간과 수정 시간
파일의 크기(Bytes, 할당된 또는 사용 중인 데이터 블럭의 수) 파일의 크기
두 가지 형태의 포인터(Direct Pointers and Indirect Pointers) 데이터 블록을 가르키는 포인터

Inode는 파일을 찾는 데에도 사용됩니다.

파일 시스템이 Inode를 참조하여 파일을 찾습니다.

 

Data Block

데이터 블록은 디스크 공간에 대한 단위(Units of Disk Space)로서 데이터를 저장하는 역할을 합니다.

일반 파일, 디렉토리, 심볼릭 파일들은 데이터 블록을 사용하지만 일반 파일과 다른 구조를 가지고 있는 디바이스 파일은 데이터 블록에 데이터를 저장하지 않고 주 디바이스 숫자(Major Device Number)와 부 디바이스 숫자(Minor Device Number)를 담고 있습니다.

 

종류 내용
일반 파일 파일의 내용
디렉토리 파일 포함된 파일과 디렉토리 이름

일반 파일은 리눅스에서 찾을 수 있는 거의 대부분의 파일 종류입니다.

데이터 블록에 들어가는 데이터는 많은 형태는 ASCII (American Standard Code for Information Interchange) 텍스트, 바이너리 데이터, 이미지 데이터, 데이터베이스 데이터, 애플리케이션 데이터 등이 있습니다.

일반 파일을 만드는 방법도 많습니다.

예를 들어 vi 편집기를 사용할 수도 있고, 컴파일을 통해 바이너리를 생성할 수도 있고, touch 명령어를 통해 빈 파일을 생성할 수도 있습니다.

 

디렉토리 파일

디렉토리는 파일 시스템에서 매우 중요한 역할을 합니다.

이는 디렉토리가 파일과 디렉토리를 저장할 수 있는 공간이기 때문입니다.

파일 시스템은 이러한 디렉토리를 사용하여 파일을 구조적으로 정리하고 저장합니다.

이를 위해 파일 시스템은 디렉토리의 내용물을 저장하기 위한 디렉토리 파일을 사용합니다.

디렉토리 파일은 디렉토리의 데이터 블록 안에 저장됩니다.

이 데이터 블록에는 실제 디렉토리가 포함하고 있는 파일과 디렉토리 정보가 저장되어 있습니다.

이 정보들은 파일 시스템에서 파일을 관리하는 데 매우 중요한 역할을 합니다.

파일의 이름과 디렉토리의 이름, 그리고 Inode 번호를 포함하고 있어서, 파일 시스템에서 파일을 찾고, 열고, 수정하고, 삭제할 때 사용됩니다.

또한, 디렉토리의 데이터 블록 안에는 어떤 파일 종류든 해당 파일 종류에 맞는 정보가 들어갈 수 있습니다.

이러한 정보는 파일 시스템에서 파일을 식별하고 관리하는 데 필요합니다.

예를 들어, 파일의 종류, 크기, 수정 일자 등의 정보가 있습니다.

이러한 정보는 파일 시스템이 파일을 더욱 쉽게 찾고, 관리할 수 있도록 도와줍니다.

이와 같은 정보들은 파일 시스템에서 파일을 보다 더 효율적으로 관리하는 데 큰 역할을 합니다.

반응형