510 likes | 722 Views
UNIX Unbounded A Beginning Approach. 이 성 현 Home : nimilx2.hannam.ac.kr E-mail : shlee@netwk.hannam.ac.kr Tel : +82-42-629-7559. 목차. 파일 시스템 개요 UNIX 파일 유형 디렉토리 디렉토리 명령어 파일 내용 화면에 출력하기 파일 내용 프린팅 파일 삭제. 요약 질의 및 응답 실습 예제. 파일 시스템 개요. 개요 파일 시스템 인터페이스는 비교적 안정적 , 점진적으로 발전
E N D
UNIX UnboundedA Beginning Approach 이 성 현 Home : nimilx2.hannam.ac.kr E-mail : shlee@netwk.hannam.ac.kr Tel : +82-42-629-7559
목차 • 파일 시스템 개요 • UNIX 파일 유형 • 디렉토리 • 디렉토리 명령어 • 파일 내용 화면에 출력하기 • 파일 내용 프린팅 • 파일 삭제 • 요약 • 질의 및 응답 • 실습 예제
파일 시스템 개요 • 개요 • 파일 시스템 인터페이스는 비교적 안정적, 점진적으로 발전 • 프레임워크는 초기 버전과 달리 완전히 바뀜 • 초기 유닉스 시스템은 한 타입의 파일 시스템 지원 • 로컬 파일만 지원 • 최근 유닉스 시스템은 여러 시스템 타입을 지원하는 vnode/vfs 인터페이스로 대체 • 로컬 및 원격 파일 지원 • 시스템 V, BSD 4.2 이전은 s5fs 지원 • BSD 4.2는 Fast File System(FFS) 채택
/ bin etc dev usr vmunix local lib passwd passwd hosts 파일 시스템 개요 • 파일에 대한 사용자 인터페이스 • 파일, 디렉토리, 파일 디스크립터, 파일 시스템 등의 개념을 제공
파일 시스템 개요 • 파일과 디렉토리 • 서로 다른 타입의 파일 시스템은 고유 내부 디렉토리 포맷 사용 • POSIX.1 은 디렉토리 연상용의 표준 라이브러리 루틴을 규정 • dirp = opendir (const char *filename); • direntp = readdir (dirp); • rewinddir(dirp); • status = closedir(dirp); • 복귀되는 디렉토리의 포맷은 파일 시스템 독립적 struct dirent { ino_t d_ino ; /* inode 번호*/ char d_name [NAME_MAX+1] ; /* null로 끝나는 파일 이름*/; }
파일 시스템 개요 • 파일 속성 • i-node가 파일의 속성 보관 • i-node의 포맷 및 내용은 파일 시스템 종속적 • Stat와 fstat 시스템 콜이 파일 속성 복귀 • 파일 시스템 독립적 포맷 • 파일 속성을 조작하는 시스템 콜 • link, unlink, utimes, chown, chmod • 일반적인 파일속성 • file type ( 디렉토리, FIFO, 심볼릭 링크, 특수파일) • 하드 링크의 수, - 파일 크기(바이트 수) • 디바이스 id, - inode number • 타임스탬프, 허가 및 모드 플래그 • 세 개의 모드플래그 - suid, sgid, sticky • suid가 on이면 수행시 effective UID를 파일의 소유자로 변경 • 파일이 group-execute 허가 없고, sgid=on이면, mandatory file/record locking이 enable 상태임 • sticky 플래그는 수행 파일 수행 후 프로그램 이미지를 스왑 영역에 유지 요구
file offset fd1 offset fd2 파일 시스템 개요 • 파일 디스크립터 • fd = open(path, oflag, mode); • 파일 디스크립터는 오픈 파일의 핸들(또는 참조 번호) 역할 • 파일 디스크립터는 프로세스별 객체임 • 파일 처음 오픈 시 옵셋=0 으로 설정 • dup, dup2 시스템 콜로 디스크립터 복사가능
파일 시스템 개요 • 파일 디스크립터 • Data structure after Open fd1 = open(“/etc/passwd”, O_RDONLY); fd2 = open(“local”, O_WRONLY); fd3 = open(“/etc/passwd”, O_RDWR);
파일 시스템 개요 • 파일 디스크립터 • Data structure after Two Process Open files (in process B) fd1 = open(“/etc/passwd”, O_RDONLY); fd2= open(“private”, O_RDONLY);
파일 시스템 개요 • 파일 디스크립터 • 알고리즘
파일 시스템 개요 • 파일 디스크립터 • A Reader and a Writer Process
파일 시스템 개요 • 파일 디스크립터 • Table after Closing a File
파일 시스템 개요 • 파일 입출력 • 디폴트는 순차 액세스 • 옵셋 유지 • nread = read(fd, buf, count) • 파일 시스템 • 루트 파일 시스템에 다른 파일 시스템이 마운트 됨 • /usr 디렉토리의 원래 파일들은 hidden(covered) • 원래의 s5fs와 FFS 구현은 마운팅 테이블 사용하여 마운트된 파일 시스템 관리 • 현태의 유닉스는 vfs 리스트 사용
파일 시스템 개요 • 파일 시스템
파일 시스템 개요 • 파일 시스템 • 논리 디스크 • 논리 디스크는 저장장치에 대한 추상화 개념 • 고정 크기, 무작위 액세스 기능 블록의 선형 순서로 구성 • newfs 또는 mkfs가 유닉스 파일 시스템 생성 • 하나의 논리 디스크는 하나의 파일 시스템만 포함 • 일부 논리 디스크는 스왑 공간으로 사용(파일 시스템을 포함하지 않음) • 논리 디스크는 물리 디스크를 다양하게 매핑 • 단순한 경우 : 각 논리 디스크가 하나의 물리 디스크 전체로 매핑 • 일반적인 경우 : 하나의 디스크를 물리적으로 연속된 파타션(하나의 논리 장치)으로 분할 • 현대 유닉스 시스템은 다수의 디스크를 하나의 논리 디스크로 구성 가능
파일 시스템 개요 • 특수 파일 • 파일 추상 개념을 일반화 • 모든 입/출력 관련 객체 • 디렉토리, 심볼릭 링크, 하드웨어 장치, 가상 장치(메모리)와 파이프, 소켓 등을 포함 • 파일을 단순한 바이트 스트림으로 취급 • 심볼릭 링크 • symlink 시스템 콜로 생성 • 다른 파일을 가리키는 특수 파일 • 디렉토리를 링크 가능(파일 트리를 논리적으로 재구성 가능) • 다른 파일 시스템의 파일을 링크 가능
reference count = 1 /usr/joe description of file … foo … /usr/sue reference count = 1 … /usr/joe/foo bar … directories 파일 시스테 개요 • 특수 파일 • 심볼릭 링크
파일 시스템 개요 • 특수 파일 • 파이프와 FIFO • FIFO는 mknod로 생성 • Pipe는 pipe 시스템 콜로 생성 • 파이프는 액티브 리더와 라이터 수를 유지 • BSD 변형들은 소켓으로 파이프 구현 • SVR4 pipe는 양방향임
System calls Vnode layer PC file System 4.2 BSD file System NFS NFS server Network Disk Floppy 파일 시스템 개요 • VFS(Virtual File System) • 다수 파일시스템 타입을 동시 지원(s5fs, vfs, DOS 등) • 디스크 파티션마다 파일 시스템 타입이 다를 수 있음 • 이들이 서로에게 마운트 된 후에는 단일 균질 파일 시스템으로 보여야 함 • 네트워크 상에서 파일 공유 지원 • 새로운 파일 시스템 타입을 쉽게 생성 추가 가능
System open file list struct file struct file *file f_vnode vfs mount list VNODE VNODE rootvfs v_data v_data VFS VFS v_vfsp INODE INODE vfs_next vfs_next v_op v_op vfs_data vfs_data vfs_mountedhere root vnode super block root vnode super block vnodeops vnodeops vfs_op vfs_op vfs_vnodecovered vfsops vfsops vsw_vfsops v_vfsp vfssw[] vnode of mounted on directory in rootvfs 파일 시스템 개요
파일 시스템 개요 • 파일 시스템의 마운팅 • Mount(spec, dir, flags, type, dataptr, datalen) • spec : 파일 시스템을 나타내는 장치 파일 • dir : 마운트 포인트 디렉토리 • type : 파일 시스템 종류 • dataptr : 파일 시스템 의존 인수에 대한 포인터 • datalen : 이들 인수의 전체 길이
UNIX 파일 유형 • 유닉스 파일 • 유닉스 운영체제에서의 파일은 바이트들의 순서를 의미 • 유닉스는 다른 운영체제와 달리 레코드나 필드와 같은 구조를 지원하지 않음 • 유닉스 파일의 범주 • 일반 파일(Regular file) • 프로그래밍 코드, 데이터, 텍스트 등과 같은 바이트들의 순서 • Vi 편집기를 이용하여 생셩한 파일들은 일반 파일로서 사용자가 다루는 대부분의 파일 유형 • 디렉토리 파일(Directory file) • 일반적인 관점에서 다른 파일과 다른점이 없음 • 표준 ASCII 텍스트 파일 형태를 가지고 있지 않다 • 다른 파일에 대한 정보(예: 파일명)가 포함되어 있는 파일 • 운영체제가 지정한 특정 형식으로 여러 개의 레코드로 구성 • 특수 파일(Special file) • 프린터, 디스크 등과 같은 주변장치에 대한 특수 정보가 포함 • 유닉스는 파일로 입/출력 장치를 다루고, 시스템에 있는 프린터, 플로피 디스크, 터미널과 같은 각 장치는 별도의 파일을 소유
디렉토리 • 디렉토리 • 유닉스 파일 시스템의 필수적인 요소 • 디스크 상의 파일을 구성하는 구조를 제공 • 유닉스에서 디렉토리 구조는 계층적인 구조인 레벨로 나누어진다 • 사용자에게 특정 파일을 쉽게 찾을 수 있도록 파일을 구성할 수 있다 • 디렉토리는 사용자 파일에 포함되어 있는 정보가 들어있지는 않지만, 사용자가 파일을 구성하고 찾을 수 있는 참조 경로를 제공
디렉토리 • 중요한 디렉토리들 • 유닉스 시스템 파일을 표현하는 표준이 존재 • 디렉토리 접근 권한 • 일반 사용자는 자신의 홈 디렉토리에 생성한 자신의 디텍로리와 파일에 대해서만 모든 접근 권한을 가짐 • 유닉스 중요 디렉토리 요약 • / • 루트 디렉토리로서 최상위-레벨 디렉토리이며, 다른 모든 디렉토리가 이 디렉토리에서 파생 • /usr • 사용자 홈 디렉토리를 포함 • 대부분의 유닉스 시스템에서 /usr 디렉토리는 /home 디렉토리 • 사용자 중심의 디렉토리를 포함 • /usr/docs • 다양한 문서를 포함 • /usr/man • man 페이지를 포함 • /usr/games • 게임 프로그램을 포함
디렉토리 • /usr/bin • 사용자 중심의 유닉스 프로그램을 포함 • /usr/spool • 전자 우편 파일등을 포함하고 있는 mail과 프린터 파일을 포함하고 있는 spool과 같은 여러 개의 서브 디렉토리를 포함 • /usr/sbin • 시스템 관리 파일을 포함 • 일반 사용자가 접근하기 위해서는 특별한 권한을 가진 사용자로 변경해야 함 • /bin • 다양한 기본적인 유닉스 프로그램 파일을 포함하고 잇다. • /dev • 장치 파일을 포함 • 프린터와 디스크 등의 물리적인 컴퓨터 구성요소를 나타내는 특수한 파일 • /sbin • 유닉스 시스템에 의해 자동적으로 실행되는 시스템 파일을 포함 • /etc • 다양한 유닉스 구성 파일을 포함하고 있는 서브디렉토리들을 포함 • 일반적으로 텍스트로 구성된 파일을 포함 • 시스템 구성을 변경 가능하도록 편집할 수 있는 설정파일들이 존재
디렉토리 • 홈 디렉토리 • 홈 디렉토리란? • 사용자와 연관된 특정 디렉토리 • 사용자가 로그인할 경우 자동적으로 사용자의 홈 디렉토리에 위치 • 작업 디렉토리 • 사용자와 연관된 혹은 작업중인 디렉토리를 작업(working) 디렉토리 또는 현재(current) 디렉토리라고 부름
디렉토리 • 경로와 경로명 이해하기 • 경로명? • 파일 시스템 내의 파일의 위치 • 모든 파일을 경로명을 가진다 • 사용자는 루트 디렉토리부터 중간 디렉토리를 따라가면서 파일까지 경로를 추적하여 파일의 경로를 결정
디렉토리 • 절대 경로명(absolute pathname) • 루트부터 파일까지의 경로를 나타낸다 • 절대 경로는 항상 루트 디렉토리 이름인 /로 시작 • 예 • /usr/david/myfirst • 상대 경로명(relative pathname) • 경로명의 짧은 형식 • 작업 디렉토리로부터 파일까지의 경로 • 많은 디렉토리를 통하여 경로를 설명 • 예 • david/REPORT
디렉토리 • 파일명과 디렉토리 사용 방법 • 모든 일반 파일과 디렉토리 파일은 파일이름(파일명)을 가짐 • 유닉스 파일과 디렉토리 이름은 자유롭게 지을 수 있다 • 파일명이 최대 길이는 유닉스 버전과 시스템 제조사에 따라 다르다 • 모든 유닉스 시스템은 최소한 14자까지 허용하고 대부분 255문자까지 지원 • 사용자는 문자와 숫자를 조합하여 파일명을 결정 • 파일명에서 사용을 피해야 하는 문자 • <>, (), {}, [], *, ?, “, ‘, _, $, ^(탈출문자) • 유닉스 운영체제는 대소문자를 구분 • 일반 파일명과 디렉토리 파일명에 대한 구분이 없다 • 같은 이름을 가지는 디렉토리와 파일이 가능 • 파일명 확장자 • 파일의 내용을 분류하고 설명하는데 도움을 준다 • .c, .cpp 등
디렉토리 명령어 • 디렉토리 경로 보기 : pwd • 사용자의 작업 디렉토리의 절대 경로명을 표시
디렉토리 명령어 • 작업 디렉토리에 잇는 파일 위치 알아내기 • myfirst 파일의 위치 • 현재 작업디렉토리에 존재하므로 /usr/david/myfirst가 절대 경로명이 된다. • 다른 디렉토리에 있는 파일의 위치 알아내기 • 파일이 사용자의 작업 디렉토리와 다른 디렉토리에 잇을 경우, 사용자는 파일이 포함되어 있는 디렉토리를 지정할 필요성이 있다 • 예) • 사용자 작업 디렉토리 : usr • 사용자의 source 디렉토리에 있는 first.c파일의 경로 • david/source/first.c가 상대 경로명이다.
디렉토리 명령어 • 디렉토리 변경 : cd 명령어 • 작업 디렉토리를 지정한 디렉토리로 변경
디렉토리 명령어 • 홈 디렉토리로 돌아가기 • 특정 작업 디렉토리에서 홈 디렉토리로 돌아가기 위해서는 경로 변수를 사용 • $HOME : 홈 디렉토리의 경로를 포함 • cd $HOME
디렉토리 명령어 • 디렉토리 만들기 • 유닉스에는 디렉토리 구조에 대한 제한이 없음 • 효율적인 디렉토리 구조를 생성해야 할 필요성이 있음 • 디렉토리 생성의 이점 • 하나의 디렉토리안에 관련된 파일들을 그룹으로 만들면 해당 파일을 기억하고 액세스하기 쉽다 • 화면에 나타내는 파일들의 목록이 짧을수록 원하는 파일을 보다 빨리 찾을 수 있다 • 서로 다른 디렉토리 안에 저장된 파일에 대해 같은 파일명을 사용할 수 있다 • 디렉토리른 각 사용자에 대해 잘 지정한 공간을 이용하여 다른 사용자와 함께 저장 규모가 큰 디스크를 공유할 수 잇게 만들 수 있다 • 사용자는 디렉토리를 다루는 유닉스 명령어들을 이용할 수 있다
디렉토리 명령어 • 디렉토리 만들기 : mkdir 명령어 • 사용자가 작업 중인 디렉토리 아래나 명령어의 일부분으로 지정한 어떤 디렉토리 아래에 새로운 서브 디렉토리를 만든다.
디렉토리 명령어 • -p 옵션 • 단일 명령문 라인을 이용하여 전체 디렉토리 구조를 만들 수 있다 • 현재 디렉토리 밑에 다른 디렉토리 레벨을 만들기 위해서 사용하는 옵션
디렉토리 명령어 • 디렉토리 없애기 : rmdir 명령어 • 지정된 디렉토리를 삭제 • 반드시 비어 있는 디렉토리를 삭제 • 서브 디렉토리를 포함하지 않는 경우 • . 또는 ..으로 된 디렉토리가 아닌 파일을 포함하고 있지 않은 디렉토리
디렉토리 명령어 • 디렉토리 나열하기 : ls 명령어 • 지정한 디렉토리의 내용을 보여주기 위해서 사용 • 파일명의 알파벳 순서로 정보를 나열 • 목록에는 파일 이름과 디렉토리 이름을 포함
디렉토리 명령어 • ls 명령어의 옵션 • 사용자 파일에 대한 더 많은 정보를 얻거나 다른 형식으로 된 목록을 원할 때 사용
디렉토리 명령어 • ls –l 옵션에 의한 명령어 실행 결과
디렉토리 명령어 • ls 명령어 출력 유형 • 1열 • 10개의 문자로 구성되어 있다. 첫번째 문자는 파일의 유형을 나타내고 나머지는 접근 모드를 나타낸다. • 2열 • 숫자로 된 링크의 개수를 나타낸다. • 3열 • 소유자의 이름을 나타낸다. • 4열 • 그룹의 이름을 나타낸다. • 5열 • 파일의 크기를 바이트로 나타낸다 • 6열 • 파일의 수정한 최근 날짜와 시간을 보여준다. • 7열 • 파일의 이름을 보여준다.
디렉토리 명령어 • 파일 유형 • - : 일반 파일을 나타낸다 • d : 디렉토리 파일을 나타낸다 • b : 디스크와 같은 블록 중심의 특수 파일을 나타낸다 • c : 프린터와 같은 문자 중심의 특수 파일을 나타낸다 • 파일 접근 모드 • r : 읽을 수 있는 접근 권한이 부여됨 • w : 쓸 수 있는 접근 권한이 부여됨 • x : 실행 권한이 부여됨 • - : 접근권한이 부여되지 않음 • 링크의 숫자 • 해당 파일과 연결된 링크의 수 • 파일 소유자 • 파일의 소유자이며, 일반적으로 파일을 만든 사용자 ID와 같다. • 파일 그룹 • 시스템 관리자로부터 할당받은 사용자 ID와 그룹 ID를 표시한다. • 일반적으로 한 프로젝트에서 작업하고 있는 사람들은 동일한 그룹 ID를 얻는다 • 파일 크기 • 날짜와 시간 • 파일명
디렉토리 명령어 • 보이지 않는 파일 • . 으로 시작하는 파일 • . 과 .. 으로 구성된 디렉토리 엔트리 • 자동적으로 생성되는 엔트리 • 현재의 디렉토리와 한단계 상위 디렉토리를 의미 • 다중 옵션 사용하기 • 하나의 명령어 라인에 여러 개의 옵션을 사용할 수 있다. • ls –alr • ls –a –l –r • 명령어 옵션 출력하기
파일 내용 화면에 출력하기 • 파일의 화면 출력 : cat 명령어 • 파일의 출력, 생성, 연결을 위해서 사용
파일 내용 프린팅 • 프린팅 : lp 명령어 • 파일의 하드카피를 만들기 위해 프린터에 파일의 복사본을 보낸다
파일 내용 프린팅 • 명령어 옵션
파일 내용 프린팅 • 프린팅 : 리눅스에서 lpr 명령어 • 리눅스에서 사용하는 프린팅 명령어 • 파일을 지정하여 출력하기 위해서 사용 • 프린팅 요청 취소하기 : cancel 명령어 • 프린터 작업에 대한 요청을 취소하기 위해 사용하는 명령어 • 프린터 상태 보기 : lpstat 명령어 • 프린팅 요청에 관한 정보와 프린터 상태를 알아보기 위해 사용하는 명령어
파일 삭제 • 파일 삭제 : rm 명령어 • 파일을 삭제하기 위한 명령어
요약 • 유닉스 시스템에서의 파일 시스템 구조 • 디렉토리의 의미 • 디렉토리 명령어 이해 및 실습 • 파일 내용의 출력 • 파일 삭제