IT 그리고 정보보안/Knowledge base

리눅스 파일 분류

plummmm 2021. 4. 14. 13:21
반응형

보통 알고있는 파일의 종류는

그냥 파일(정규파일..regular file)과 디렉토리인데,

사실 디렉토리도 파일의 일종이다.

파일은 여러가지 종류가 있다. 음.. 이건 기본적으로 알아야 한다고 생각한다.

 

1. 정규 파일(Regular file)

우리가 알고있는 파일이다. 웬만한 파일이 다 정규 파일이다.

다만 실행파일은 다름.. (ELF 파일 포맷을 따른다.)

리눅스에서는 이 파일이 텍스트인지 바이너리인지 구분을 하지 않는다. 그냥 냅다 읽어버릴뿐

그니까 정규 파일의 형식은 응용프로그램 단에서 결정하는 것임.

 

2. 디렉토리 파일(Directory file)

디렉토리도 파일의 일종이라고 했었다.

디렉토리 파일은 다른 파일의 이름과 그 파일들에 대한 정보를 가르키는 포인터들을 담은 파일이다.

 

3. 블록 특수 파일(Block Special File)

디스크 드라이브 같은 장치 버퍼링 I/O 접근, 즉 디스크에 쓸 때 사용되는 버퍼 파일?정도로 보면된다.

이건 고정크기이다.

 

4. 문자 특수 파일(Character Special File)

장치에 대한 가변 크기 단위의 비버퍼링 I/O 접근을 제공하는 파일이다.

키보드나 마우스 입출력에 관련된 파일이다.

 

5. FIFO

프로세스간의 통신에 쓰이는 파이프. 이름이 있는 파이프 파일을 FIFO 피포?라고 한다.

다음에 따로 빼서 포스팅 하겠음.

 

6. 소캣(Socket)

네트워크 통신에 필요한 파일이다. Network programming 카테고리에서 자~세하게 포스팅함.

 

7. 심볼릭 링크 파일(Symbolic Link File)

윈도우로 치면 바로가기, 다른 파일을 가르키는 파일이다.

 

 

파일의 종류별로 리눅스 시스템에 차지하는 비율을 보면 아래와 같다.

단일 사용자 시스템 기준이다. 당연한 결과지만 정규 파일이 압도적으로 많음

 

 

파일의 종류에 대한 내용들은 stat 구조체에 st_mode 멤버에 정의되어 있다.

 

이번에는 파일과 디렉토리 관리에 대한 시스템콜 함수들을 알아보자.

 

i-node를 포스팅할 때 설명을 했었는데, 파일 시스템은

데이터(file data) + 파일 속성(file attribute)

이렇게 구성되어있다. 이 포스팅에서는 파일 속성에 대한 함수를 알아본다.

stat 계열 함수인데,

얘네들은 파일의 속성을 보는 함수들이다.

stat 부터 하나씩 알아보겠다.

 

1. stat()

 

stat 함수는 뭐 말그대로 파일의 속성을 보는 함수 이다.

만약 파일에 심볼릭 링크가 걸려있다면 원본파일의 속성을 보는 것이다.

보여지는 파일 속성은 stat구조체 내용이 버퍼에 담긴다. 나머지 함수 2개 설명 다하고

stat 구조체 원형을 보겠음.

 

2. fstat() 

 

파일이 실행되고 있을 때 파일의 속성을 알아보고 싶을 때 fstat()함수를 사용하면 된다. 

실행 중인 파일이니.. 파일 디스크립터가 인자로 들어온다.

 

 

3. lstat()

 

이녀석은 stat과 비슷하지만.. 만약 속성을 보고 싶은 파일이 심볼릭 링크 파일이라면

stat은 원본 파일의 정보를 받아오지만, lstat은 심볼릭 링크 파일 자체의 정보를 받아온다.

 

그럼 stat 구조체를 보자.

속성에 대한 정보는 stat 구조체에 정의된 대로 가져온다.

 

 

 

뭐 보면 보통 st_mode에 대한 내용을 확인한다.

예제 코드도 st_mode 받아오는 코드임..

 

st_mode 맴버에 대해 잠시 알아보자면..

일단 구조는 아래와 같다.

 

 

순서 대로 보자면 일단 권한(permission)에 관한 내용이 있다.

그리고 special bit, file type에 대한 내용이 순서대로 정의되어 있음.

 

먼저 파일 타입에 대한 비트는 아래와 같이 정의 되어 있다.

 

이전 포스트에서 설명했듯이 여러 파일 종류가 매크로로 정의되어 있다.

15-12 비트 사이에 들어가는 값들이다.

 

다음은 special bit 즉, 특수 비트에 대해 한번 보자.

 

setuid와 setgid 그리고 sticky bit 에 대한 내용이 정의돼 있음..

솔직히 보안 공부하는 입장에서 이거 모르면 간첩이라서.

설명은 다른 포스트에 따로 되어 있다. ( 나 이과목좀 날로먹는듯??)

 

스티키 비트에 대한 얘기만 잠깐 하자면, 파일의 접근권한에 관계없이

소유자와 관리자만 파일을 수정할 수 있도록 하는 것이다.

/tmp 같은 다중 사용자가 사용할 수 있는 디렉토리를 관리할 때 좋은 특수권한이다.

 

마지막 권한에 대한 비트이다.

 

설명할거 없다. 그냥 보는 그대로 권한에 대한 옵션..

chmod 명령어 하면서 배운 777 755 이런것들이 다 여기서 비롯된 것임

 

이제 예제 코드를 한번 봅시다.

 

st_mode 맴버를 받아와

파일의 종류대로 표준출력으로 찍어내는 코드이다.

반응형