파일 (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-name mode 지정 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
파일시스템 (File System) 파일시스템구조 (4) 하나의저장장치에대해파일저장방식및저장정보그리고파일을접근하기위한프로그램모듈을통칭 저장장치또는디스크파티션별로개별적인파일시스템을갖는다 파일시스템구조 ( 앞의그림참조 ): 부트블록 슈퍼블록 inode 블록 데이터블록 16 Unix System Programming
파일시스템 (File System) Linux ext2 파일시스템 파일시스템구조 (5) 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
파일시스템 (File System) inode 의일반적인구조 파일시스템구조 (8) 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
장치파일 (Device File) 디바이스스위치 (1) 하드웨어추상화 각각메모리또는입출력장치에대응시킨파일 스트림파일로취급 일반파일과같은방식으로접급가능 장치파일종류 문자장치파일 (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 FILE struct _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