12. 리눅스 파일 시스템
- df : 파일 시스템에 대한 디스크 사용 정보 보기
12345678whan@HappyLinux:/etc$ dfFilesystem 1K-blocks Used Available Use% Mounted onudev 4008296 0 4008296 0% /devtmpfs 807712 2076 805636 1% /run/dev/sdc1 47797752 6975008 38365004 16% /tmpfs 4038548 113156 3925392 3% /dev/shm/dev/sdc4 64893532 1120696 60446628 2% /home/dev/sdc3 192559 6197 186363 4% /boot/efi - du : 디스크 사용량 보기
1234567891011whan@HappyLinux:/etc$ du16 ./firefox24 ./pulse52 ./mysql176 ./systemd...340 ./sane.d452 ./fonts8 ./.java200 ./init.d14588 . - stat : 파일의 자세한 상태 정보를 출력
123456789whan@HappyLinux:~/C$ stat main.cFile: main.cSize: 444 Blocks: 8 IO Block: 4096 일반 파일Device: 824h/2084d Inode: 266953 Links: 1Access: (0644/-rw-r--r--) Uid: ( 1000/ whan) Gid: ( 1000/ whan)Access: 2018-11-23 15:25:22.685949391 +0900Modify: 2018-11-23 15:25:19.849794052 +0900Change: 2018-11-23 15:25:19.853794272 +0900Birth: - - FAT와 i-node
- FAT : FAT16, FAT32, … (출처: http://forensic.korea.ac.kr/DFWIKI/index.php/FAT )
- i-node
- FAT : FAT16, FAT32, … (출처: http://forensic.korea.ac.kr/DFWIKI/index.php/FAT )
- i-node
- 하나의 파일은 하나의 i-node를 갖는다
- 파일에 대한 모든 정보를 가지고 있음
- 파일 크기
- 파일 종류
- 접근 권한
- 하드 링크 수
- 소유자 및 그룹
- 파일 크기
- 최종 접근 시간
- 최종 수정 시간
- 데이터 블록 주소
- 하나의 i-node 내의 블록 포인터
- 파일의 상태 정보
- 직접 블록 포인터 10개
- 간접 블록 포인터 1개
- 이중 간접 블록 포인터 1개
- 디렉터리 : 파일과 같음
- 하드 링크(hard link)
- 기존 파일에 대한 새로운 이름
- 실제로 기존 파일을 대표하는 i-node를 가리킨다.
- 심볼릭 링크(symbolic link)
- 다른 파일을 가리키고 있는 별도의 파일
- 실제 파일의 경로명을 저장하고 있는 일종의 특수 파일
- 파일 입출력
- cat.c
12345678910111213141516171819202122#include <stdio.h>/* 텍스트 파일 내용을 표준출력에 프린트 */int main(int argc, char *argv[]){FILE *fp;int c;if (argc < 2) // 명령줄 인수가 없으면 표준입력 사용fp = stdin;elsefp = fopen(argv[1],"r"); // 읽기 전용으로 파일 열기c = getc(fp); // 파일로부터 문자 읽기while (c != EOF) { // 파일끝이 아니면putc(c, stdout); // 읽은 문자를 표준출력에 출력c = getc(fp); // 파일로부터 문자 읽기}fclose(fp);return 0;} - copy.c
123456789101112131415161718192021222324252627#include <stdio.h>/* 파일 복사 프로그램 */int main(int argc, char *argv[]){char c;FILE *fp1, *fp2;if (argc !=3) {fprintf(stderr, "사용법: %s 파일1 파일2\n", argv[0]);return 1;}fp1 = fopen(argv[1], "r");if (fp1 == NULL) {fprintf(stderr, "파일 %s 열기 오류\n", argv[1]);return 2;}fp2 = fopen(argv[2], "w");while ((c = fgetc(fp1)) != EOF)fputc(c, fp2);fclose(fp1);fclose(fp2);return 0;}
- cat.c