혜랑's STORY

[2020-2학기 리눅스 8주차] : 이론 본문

2020 SISS 21기 활동/2학기 리눅스

[2020-2학기 리눅스 8주차] : 이론

hyerang0125 2020. 11. 22. 17:55

#파일 시스템

- 파일 시스템 보기

$ df 파일시스템*
-> 파일 시스템에 대한 디스크 사용 정보를 보여준다.

=> 예시

$ df
Filesystem                  1K-blocks         Used               Available           Use%            Mounted on
/dev/mapper/root        51606140         7570736           41413964         16%               /               
tmpfs                        1030972           676                1030296             1%               /dev/shm
/dev/sda1                  495844            29048              441196              7%               /boot
/dev/mapper/home      424544656       3577668          399401344          1%               /home
  • / : 루트 파일 시스템 현재 16% 정도 사용
  • /dev/shm : 시스템의 가상 공유 메모리를 위한 파일 시스템
  • /boot : 리눅스 커널의 메모리 이미지와 부팅을 위한 파일 시스템
  • /home : 여러 사용자들의 홈 디렉터리를 위한 파일 시스템

- 디스크 사용량 보기

$ du [-s] 파일명*
-> 파일 혹은 디렉터리의 사용량을 보여준다. 파일을 명시하지 않으면 현재 디렉터리 내의 모든 파일들의 사용 공간을 보여준다.

- 파일 시스템 구조

  • 부트 블록(Boot block) : 파일 시스템 시작부에 위치하고 보통 첫 번째 섹터를 차지
  • 슈퍼 블록(Super block) : 전체 파일 시스템에 대한 정보를 저장
  • i-리스트(i-list) : 각 파일을 나타내는 모든 i-노드들의 리스트
  • 데이터 블록(Data block) : 파일의 내용(데이터)을 저장하기 위한 블록들

 

#파일 상태 정보와 i노드

- 파일 상태(file status) : 파일에 대한 모든 정보. (블록 수, 파일 타입, 사용 권한, 링크 수 등)

- stat 명령어

$ stat [옵션] 파일
-> 파일의 자세한 상태 정보를 출력한다.

- i-노드(i-node)

파일 상태 정보 의미
파일 크기 파일의 크기(K 바이트 단위)
파일 종류 파일의 종류를 나타낸다.
접근권한 파일에 대한 소유자, 그룹, 기타 사용자의 읽기/쓰기/실행 권한
하드 링크 수 파일에 대한 하드 링크 개수
소유자 및 그룹 파일의 소유자 ID 및 소유자가 속한 그룹
최종 접근 시간 파일을 최후로 접근한 시간
최종 수정 시간 파일을 생성 혹은 최후로 수정한 시간
데이터 블록 주소 실제 데이터가 저장된 데이터 블록의 주소

- 블록 포인터 : 데이터 블록에 대한 포인터; 파일의 내용을 저장하기 위해 할당된 데이터 블록의 주소

-> 하나의 i-노드 내의 블록 포인터

  • 직접 블록 포인터 10개
  • 간접 블록 포인터 1개
  • 이중 간접 블록 포인터 1개

 

#디렉토리

- 파일 시스템 내에서의 디렉터리 구현

  • 디렉터리도 일종의 파일로 다른 파일처럼 구현된다.
  • 디렉터리도 다른 파일처럼 하나의 i-노드로 표현된다.
  • 디렉터리의 내용은 ㄷ렉터리 엔트리(파일이름, i-노드 번호)

 

#링크의 구현

- 링크 : 기존 파일에 대한 또 하나의 새로운 이름. (하드 링크 / 심볼릭 링크)

$ ln [-s] 파일1 파일2
-> 파일1에 대한 새로운 이름(링크)로 파일2를 만들어 준다. (-s 옵션을 심볼릭 링크)

$ln [-s] 파일1 디렉터리
-> 파일1에 대한 링크를 지정된 디렉터리에 같은 이름으로 만들어 준다.

- 하드 링크(hard link) : 기존 파일에 대한 새로운 이름이라고 생각할 수 있다. 실제로 기존 파일을 대표하는 i-노드를 가리켜 구현한다.

- 하드링크의 구현

- 심볼릭 링크(symbolic link) : 다른 파일을 가리키고 있는 별도의 파일이다. 실제 파일의 경로명을 저장하고 있는 일종의 특수 파일이다. 이 경로명이 다른 파일에 대한 간접적인 포인터 역할을 한다.

 

#파일 입출력

- 시스템 호출(system call) : 유닉스 커널에 서비스를 요청하기 위한 프로그래밍 인터페이스.

- C 언어의 파일 종류

  1. 텍스트 파일(text file) : 사람들이 읽을 수 있는 문자들을 저장하고 있는 파일. 텍스트 파일에서 "한 줄의 끝"을 나타내고 있는 표현은 파일이 읽어 들여질 떄, C내부의 방식으로 변환된다.
  2. 이진 파일(binary file) : 모든 데이터는 있는 그대로 바이트의 연속으로 저장. 이진파일을 이용하여 메모리에 저장된 변수 값 현태 그대로 파일에 저장할 수 있다.

- 파일 열기

  • 파일을 사용하기 위해서는 반드시 먼저 파일 열시(fopen)를 해야한다. 파일 열기를 하면 FILE 구조체에 대한 포인터가 리턴된다. FILE 포인터는 열린 파일을 지정한다.
  • 함수 fopen()
FILE *fopen(const char *filename, const char *mode);
-> 파일 열기를 한다. 열린 파일을 나타내는 FILE 포인터를 반환한다.  오류가 발생하면 NULL을 반환한다.

- fopen() : 텍스트 파일 열기

모드 의미 파일이 없으면 파일이 있으면
"r" 읽기 전용 NULL 반환 정상 동작
"w" 쓰기 전용 새로 생성 기존 내용 삭제
"a" 추가 쓰기 새로 생성 기존 내용 뒤에 추가
"r+" 읽기와 쓰기 NULL 반환 정상 동작
"w+" 읽기와 쓰기 새로 생성 기존 내용 삭제
"a+" 추가를 위한 읽기와 쓰기 새로 생성 기존 내용 뒤에 추가

- 스트림과 FILE 구조체

  • 스트림 : 파일이 열리면 스트림(stram)이라고 한다.
  • FILE 구조체 : 열린 파일의 현재 상태를 나타내는 필드 변수들

- 표준 입출력 스트림

표준 입출력 스트림 설명 가리키는 장치
stdin 표준입력에 대한 FILE 포인터 키보드
stdout 표준출력에 대한 FILE 포인터 모니터
stderr 표준 오류에 대한 FILE 포인터 모니터

- 파일 닫기 : 파일을 열어서 사용한 후에는 파일을 닫아야 한다.

int fclose(FILE *fp);
-> fp가 가리키는 파일을 닫는다. (성공하면 0, 오류일떄는 -1을 반환한다.)

- 파일 입출력 함수

표준 입출력 함수 표준 파일 입출력 함수 기능
getchat() fgetc(), getc() 문자단위로 입력하는 함수
putchar() fputc(), putc() 문자단위로 출력하는 함수
gets() fgets() 문자열을 입력하는 함수
puts() fputs() 문자열을 출력하는 함수
scanf() fscanf() 자료형에 따라 자료를 입력하는 함수
printf() fprintf() 자료형에 따라 자료를 출력하는 함수