파일(File) -...

Preview:

Citation preview

파일(File)

Chapter #4

파일의종류 (1)

파일관리구조트리구조에기반한계층구조

시스템의모든파일이하나의트리구조로구성되어, 계층적으로접근, 관리된다

트리구조의중간노드 : 디렉토리트리구조의단말노드 : 파일

2 Unix System Programming

파일의종류 (2)

3 Unix System Programming

파일의종류 (3)

파일종류디렉토리(Directory)

하나의파일로서상위디렉토리파일에등록되어있음

일반파일(Normal File)스트림파일

특수파일(Special File)장치파일(Device File)

문자장치파일 / 블록장치파일

파이프(Pipe)소켓(Socket) 등

4 Unix System Programming

파일경로명 (1)

파일명영문자나숫자그리고기호(., -, _)를사용하여최대 255문자까지이용하여파일이름을표시서로다른디렉토리에서는같은파일명을사용가능

파일경로명모든파일은고유의경로명을가진다

디렉토리이름까지포함해서파일트리안에서파일을식별하기위해사용디렉토리이름은 ‘/’ 기호를이용하여구분

5 Unix System Programming

파일경로명 (2)

절대경로명루트디렉토리에서시작하여파일이위치한디렉토리까지의경로를표시/home/kohno/doc/schedule.july

상대경로명현재디렉토리를기준으로접근하려는파일의위치를상대적인경로표시‘..’ - 부모디렉토리, ‘.’ - 현재디렉토리../../kohno/doc/schedule.july

6 Unix System Programming

파일경로명 (3)

사용예:$ cp ../../kohno/doc/schedule.july .$ ./test

홈디렉토리 (or 로긴디렉토리)사용자에게사용할수있도록할당된디렉토리로긴하였을때에제일처음위치하는디렉토리‘~’ 기호를이용하여표시예) ~/.bashrc

7 Unix System Programming

파일보호 (1)

파일보호UNIX 시스템: 다중사용자시스템사용자의파일은다른사용자의접근으로부터보호할필요가있음

파일보호모드“ls –al” 명령어의출력

파일의상세정보를표시파일의종류, 보호모드, 링크카운터, 소유자이름, 그룹이름, 크기(바이트수), 최종수정일시파일이름등

파일보호모드파일에대해소유자(owner), 그룹(group) 그리고다른사용자(others)을구분하여접근권한을부여

8 Unix System Programming

파일보호 (2)

파일보호모드파일종류및파일보호모드표시

- 실행 허가에는 ‘x’ 문자 이외에 ‘s’, ‘t’ 문자가 올 수 있다

9 Unix System Programming

파일보호 (3)

파일보호모드디렉토리파일의보호모드

r : 금지되어있으면 ls 명령어볼수없다w : 금지되어있으면새롭게파일을작성하거나기존의파일을삭제할수없다x : 금지되어있으면 cd 명령어로그디렉토리로이동할수없다

파일이생성될때에기본적인보호모드가결정되며, 별도의명령어를이용하여변경가능

파일모드마스크를이용하여초기보호모드를한정할수있다예: $umask 133

10 Unix System Programming

파일보호 (4)

파일보호모드변경chmod(change mode) 명령어사용형식: chmod mode file-namemode 지정

Who u(owner), g(group), o(others), a(all)What r(read), (w(write), x(execute)How +(permit), -(prohibit)예: $chmod g+w list.txt

다른형식의 mode 지정: 세자리의 8진수rwxrwxrwx 777예: $chmod 644 list.txt

11 Unix System Programming

파일보호 (5)

파일소유자및그룹변경chown / chgrp 명령어사용파일의소유자및슈퍼유저(root)만이실행가능형식: chown user-name file-name

chown grp-name file-name예: $chown kinta list8-2.txt

$chgrp students list8-2.txt- chown 명령어로소유자및그룹변경이가능

- 예: $chown kinta:students list8-2.txt

12 Unix System Programming

파일시스템구조 (1)

디스크파티션(Disk Partition)디스크장치는논리적으로연속적인블록(접근단위)의모임연속적인블록영역을몇개의영역으로분할하여관리하는데분할된영역을파티션이라고함논리적으로독립된디스크로취급식별및접근을위해고유의장치파일을할당UNIX에서는일반적으로각파티션에 1개의독립적인파일시스템을만든다

13 Unix System Programming

파일시스템구조 (2)

디스크파티션(Disk Partition)

14 Unix System Programming

파일시스템구조 (3)

일반적인리눅스에서의파티션구성

root 파일시스템안에 root, usr 및home 디렉토리을구성함백업등관리가편리하지만대용량백업장치가필요할뿐만아니라확장성이제한됨

15 Unix System Programming

파일시스템구조 (4)

파일시스템(File System)하나의저장장치에대해파일저장방식및저장정보그리고파일을접근하기위한프로그램모듈을통칭저장장치또는디스크파티션별로개별적인파일시스템을갖는다파일시스템구조(앞의그림참조):

부트블록슈퍼블록inode 블록데이터블록

16 Unix System Programming

파일시스템구조 (5)

파일시스템(File System)Linux ext2 파일시스템

17 Unix System Programming

파일시스템구조 (6)

파일시스템(File System)부트블록(Boot Block)

파일시스템의첫번째블록부트로더등시스템을실행하는프로그램및정보를저장

슈퍼블록(Superblock)파일시스템관리정보를저장

파일시스템유형및전체크기자유블록정보inode 블록정보슈퍼블록수정정보등

18 Unix System Programming

파일시스템구조 (7)

파일시스템(File System)inode 블록

inode(index node) 리스트로구성inode(index node)

파일의관리에필요한정보를저장하며, 하나의파일에대해하나의inode을생성inode 번호를이용하여식별파일속성정보저장: 파일종류, 링크수, 파일소유권, 파일접근권리, 파일접근시간, 바이트단위파일크기, 저장위치정보등

데이터블록일반파일및디렉토리파일내용을저장

19 Unix System Programming

파일시스템구조 (8)

파일시스템(File System)inode의일반적인구조

20 Unix System Programming

파일시스템구조 (9)

파일시스템(File System)Linux ext2 파일시스템에서의 inode 구조

21 Unix System Programming

파일시스템구조 (10)

디렉토리구조 : 파일계층구조

22 Unix System Programming

파일시스템구조 (11)

디렉토리파일저장하고있는파일에대해 inode 번호와파일이름을가진엔트리를기록예: ‘/etc/hosts’ 파일검색예

23 Unix System Programming

파일시스템구조 (12)

디렉토리파일파일링크

같은파일에대해여러개의이름을가질수있다각각의이름을링크(link)라고함ln 명령어를이용하여생성

Hard Link디렉토리파일의엔트리(inode 번호, 파일명)로등록동일한파일시스템내에서만가능디렉토리파일에대한하드링크는허용안됨

Symbolic Link링크정보를저장하는파일이별도로존재

24 Unix System Programming

파일시스템구조 (13)

장치파일장치파일도 inode를가짐inode 내에서데이터블록에대한정보대신에장치번호정보를저장장치번호는커널내의장치드라이버서브루틴을호출할때의맵핑테이블검색인덱스로사용

25 Unix System Programming

파일시스템구조 (14)

파일시스템마운트및언마운트파일시스템마운트(Mount)

분산된파일트리를모아서하나의트리구조로만드는동작하나의저장장치에있는파일을접근하기위해서는저장장치의파일시스템을 root 파일시스템에마운트하여야한다

파일시스템언마운트(Unmount)연속하여모아진트리구조를원래의분산된상태로되돌리는동작사용중인저장장치를분리하기위해서는먼저파일시스템을언마운트하여야한다

파일시스템자동마운트/etc/fstab 설정파일을이용하여부팅시에자동으로마운팅

26 Unix System Programming

파일시스템구조 (14)

파일시스템마운트및언마운트

27 Unix System Programming

파일시스템구조 (16)

파일시스템마운트및언마운트네트워크파일시스템(NFS)Samba

28 Unix System Programming

디바이스스위치 (1)

장치파일(Device File)하드웨어추상화각각메모리또는입출력장치에대응시킨파일스트림파일로취급 일반파일과같은방식으로접급가능

장치파일종류문자장치파일(Character Device File)

바이트단위의입출력버퍼를지원하지않으며, 에러보정에유리키보드, 마우스, 프린터등

블록장치파일(Block Device File)고정크기블록단위입출력버퍼캐시를두어입출력속도를향상랜덤액서스가능한기억장치등

29 Unix System Programming

디바이스스위치 (2)

장치파일식별사용자식별 - 장치파일이름이용시스템식별 – 장치번호(major number/minor number) 이용

장치파일번호시스템에서장치드라이버루틴등장치와관련된내용을접근할때에인덱스등을사용메이저번호(Major number) - 장치의종류를식별(0~255)마이너번호(Minor number) – 같은종류의장치들사이의식별

장치파일생성mknod 명령어사용예: $mknod /dev/fd0 b 2 0

$mknod /dev/test-dev c 255 0$ls –al /dev

30 Unix System Programming

디바이스스위치 (3)

장치드라이버(Device Driver)시스템에접속하고있는장치를직접제어하고데이터를처리하는커널내의소프트웨어모듈일반적으로스트림파일인터페이스(열기, 닫기, 읽기, 쓰기, 제어) 루틴과장치인터럽트처리루틴으로구성

블록형장치 open, close, strategy문자형장치 open, close, read, write, ioctl

장치별함수명을구별하기위해대개의경우장치명을함수명에붙여정의

31 Unix System Programming

디바이스스위치 (4)

디바이스스위치장치파일에대한시스템콜을각장치드라이버루틴과연결시키는역할을수행

32 Unix System Programming

디바이스스위치 (5)

디바이스변환표

블록장치는문자형장치의인터페이스도제공가능블록장치파일을생성할때에문자형장치로등록위의표에서문자형장치변화표의메이저번호 4 항목

불필요하여제공되지않는기능

33 Unix System Programming

디바이스스위치 (6)

마이너장치번호장치드라이버함수의인자로전달장치드라이버함수에서장치별로다르게처리하여할경우에장치식별에사용

34 Unix System Programming

표준입출력 (1)

표준입출력파일UNIX에서프로그램을실행하면프로세스에 3개의기본입출력파일이할당된다표준입력파일 – 프로그램의입력파일, 보통터미널의키보드장치를할당표준출력파일 – 프로그램의출력파일, 보통터미널의화면장치를할당표준에러출력파일 – 프로그램에서발생하는에러메시지출력장치, 보통터미널화면장치를할당표준입력파일에서 EOF(End Of File)

표준입력파일은무한대의크기를가진파일로취급Ctrl-D 입력을 EOF로취급

35 Unix System Programming

표준입출력 (2)

표준입출력변환쉘에서의입출력변환

리다이렉션연산자이용 : >, >>, <파이프연산자이용 : |

리다이렉션(Redirection) 기능표준입출력을파일로변환$sampel > outfile$sample < infile$ sample < in file > outfile표준출력을파일추가로변환$ sampel >> outfile푠준에러출력을파일로변환$ sample 2> outfile$ sample >& outfile

파이프라인(pipeline) 기능표준출력을다른명령어의표준입력으로변환$ sample1 | sampel2 | sampel 3

36 Unix System Programming

파일디스크립터/파일포인터 (1)

파일구조체사용자공간에서열려진파일을관리하기위해파일정보를저장하는구조체입출력헤드파일 : stdio.h

typedef struct _IO_FILE FILEstruct _IO_FILE {

int flags;char * _IO_read_ptr;char * _IO_read_end;char * _IO_read_base;char * _IO_write_ptr;char * _IO_write_end;char * _IO_write_base;int _fileno;

};

사용자파일기술자테이블(User File Descriptor Table)파일구조체를 OPEN_MAX개를준비하여연결리스트로구현한테이블

37 Unix System Programming

파일디스크립터/파일포인터 (2)

파일디스크립터(File Descriptor)open() 시스템콜호출반환값

int fd;fd = open(“inout-file”, O_RDONLY);

열린파일의정보를저장하기사용자파일기술자테이블항목중에몇번째항목이할당되는지지정하는인덱스값open() 시스템콜이외의파일접근시스템콜에서인자로사용fd = 0 표준입력fd = 1 표준출력fd = 2 표준에러파일디스크립터할당은파일기술자테이블에서비어있는항목중에가장인덱스번호가낮은항목을할당한다

새롭게열리는첫파일에대해 fd = 3 값이할당

38 Unix System Programming

디바이스스위치 (3)

파일기술자테이블맵핑

39 Unix System Programming

파일디스크립터/파일포인터 (4)

파일포인터(File Pointer)fopen() 입출력라이브러리함수호출반환값

FILE *fp;fp = fopen(“inout-file”, “r”);

사용자파일기술자테이블에서열린파일의정보를저장하기할당되는파일구조체에대한포인터값표준입출력파일에대한파일포인터

stdin, stdout, stderr

파일디스크립터와파일포인터사이의변환fd = fp->_fileno;fd = fileno(fp);

40 Unix System Programming

파일디스크립터/파일포인터 (5)

파일디스크립터와파일포인터

41 Unix System Programming

터미널제어

콘솔장치/터미널장치장치파일 /dev/console or /dev/tty프로그램실행할때에기본적으로표준입출력장치로서열린다사용자와인터페이스하기위해보다미세한제어가필요

ioctl() 시스템콜을사용송수신전송속도, 화면크기, 에코백유무, 인터럽트문자, EOF 문자등터미널모드상세정보확인 $stty –a

터미널제어터미널모드정보변경stty 명령어사용예: erase 문자를 ‘DEL(0x7e)’에서 ‘BS(0x08)’로변경

$ stty erase ^h

42 Unix System Programming

Recommended