UNIX Unbounded A 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 passwd hosts vmunix local lib 파일에 대한 사용자 인터페이스 파일, 디렉토리, 파일 디스크립터, 파일 시스템 등의 개념을 제공 / bin etc dev usr passwd hosts vmunix local lib
파일 시스템 개요 파일과 디렉토리 서로 다른 타입의 파일 시스템은 고유 내부 디렉토리 포맷 사용 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 fd1 offset fd2 파일 디스크립터 fd = open(path, oflag, mode); 파일 디스크립터는 오픈 파일의 핸들(또는 참조 번호) 역할 파일 디스크립터는 프로세스별 객체임 파일 처음 오픈 시 옵셋=0 으로 설정 dup, dup2 시스템 콜로 디스크립터 복사가능 fd1 offset fd2 file
파일 시스템 개요 파일 디스크립터 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) 옵셋 유지 nread = read(fd, buf, count) 파일 시스템 루트 파일 시스템에 다른 파일 시스템이 마운트 됨 /usr 디렉토리의 원래 파일들은 hidden(covered) 원래의 s5fs와 FFS 구현은 마운팅 테이블 사용하여 마운트된 파일 시스템 관리 현태의 유닉스는 vfs 리스트 사용
파일 시스템 개요 파일 시스템
파일 시스템 개요 파일 시스템 논리 디스크 논리 디스크는 저장장치에 대한 추상화 개념 고정 크기, 무작위 액세스 기능 블록의 선형 순서로 구성 newfs 또는 mkfs가 유닉스 파일 시스템 생성 하나의 논리 디스크는 하나의 파일 시스템만 포함 일부 논리 디스크는 스왑 공간으로 사용(파일 시스템을 포함하지 않음) 논리 디스크는 물리 디스크를 다양하게 매핑 단순한 경우 : 각 논리 디스크가 하나의 물리 디스크 전체로 매핑 일반적인 경우 : 하나의 디스크를 물리적으로 연속된 파타션(하나의 논리 장치)으로 분할 현대 유닉스 시스템은 다수의 디스크를 하나의 논리 디스크로 구성 가능
파일 시스템 개요 특수 파일 파일 추상 개념을 일반화 파일을 단순한 바이트 스트림으로 취급 심볼릭 링크 모든 입/출력 관련 객체 디렉토리, 심볼릭 링크, 하드웨어 장치, 가상 장치(메모리)와 파이프, 소켓 등을 포함 파일을 단순한 바이트 스트림으로 취급 심볼릭 링크 symlink 시스템 콜로 생성 다른 파일을 가리키는 특수 파일 디렉토리를 링크 가능(파일 트리를 논리적으로 재구성 가능) 다른 파일 시스템의 파일을 링크 가능
파일 시스테 개요 /usr/joe description of file foo /usr/sue … bar /usr/joe/foo 특수 파일 심볼릭 링크 … bar reference count = 1 description of file foo directories /usr/sue /usr/joe /usr/joe/foo
파일 시스템 개요 특수 파일 파이프와 FIFO FIFO는 mknod로 생성 Pipe는 pipe 시스템 콜로 생성 파이프는 액티브 리더와 라이터 수를 유지 BSD 변형들은 소켓으로 파이프 구현 SVR4 pipe는 양방향임
파일 시스템 개요 VFS(Virtual File System) 다수 파일시스템 타입을 동시 지원(s5fs, vfs, DOS 등) 디스크 파티션마다 파일 시스템 타입이 다를 수 있음 이들이 서로에게 마운트 된 후에는 단일 균질 파일 시스템으로 보여야 함 네트워크 상에서 파일 공유 지원 새로운 파일 시스템 타입을 쉽게 생성 추가 가능 System calls Vnode layer PC file System 4.2 BSD file System NFS NFS server Network Disk Floppy
vnode of mounted on directory in rootvfs vfs_next root vnode super block vfs_data vfsops vfs_op vfssw[] vsw_vfsops vfs mount list VNODE v_data INODE vnodeops v_op struct file *file f_vnode System open file list v_vfsp vnode of mounted on directory in rootvfs vfs_vnodecovered rootvfs vfs_mountedhere 파일 시스템 개요
파일 시스템 개요 파일 시스템의 마운팅 Mount(spec, dir, flags, 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 /usr/sbin /bin 다양한 기본적인 유닉스 프로그램 파일을 포함하고 잇다. 사용자 중심의 유닉스 프로그램을 포함 /usr/spool 전자 우편 파일등을 포함하고 있는 mail과 프린터 파일을 포함하고 있는 spool과 같은 여러 개의 서브 디렉토리를 포함 /usr/sbin 시스템 관리 파일을 포함 일반 사용자가 접근하기 위해서는 특별한 권한을 가진 사용자로 변경해야 함 /bin 다양한 기본적인 유닉스 프로그램 파일을 포함하고 잇다. /dev 장치 파일을 포함 프린터와 디스크 등의 물리적인 컴퓨터 구성요소를 나타내는 특수한 파일 /sbin 유닉스 시스템에 의해 자동적으로 실행되는 시스템 파일을 포함 /etc 다양한 유닉스 구성 파일을 포함하고 있는 서브디렉토리들을 포함 일반적으로 텍스트로 구성된 파일을 포함 시스템 구성을 변경 가능하도록 편집할 수 있는 설정파일들이 존재
디렉토리 홈 디렉토리 작업 디렉토리 홈 디렉토리란? 사용자가 로그인할 경우 자동적으로 사용자의 홈 디렉토리에 위치 사용자와 연관된 특정 디렉토리 사용자가 로그인할 경우 자동적으로 사용자의 홈 디렉토리에 위치 작업 디렉토리 사용자와 연관된 혹은 작업중인 디렉토리를 작업(working) 디렉토리 또는 현재(current) 디렉토리라고 부름
디렉토리 경로와 경로명 이해하기 경로명? 파일 시스템 내의 파일의 위치 모든 파일을 경로명을 가진다 사용자는 루트 디렉토리부터 중간 디렉토리를 따라가면서 파일까지 경로를 추적하여 파일의 경로를 결정
디렉토리 절대 경로명(absolute pathname) 상대 경로명(relative 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 명령어의 옵션 사용자 파일에 대한 더 많은 정보를 얻거나 다른 형식으로 된 목록을 원할 때 사용 옵션 동작 -a 숨겨진 파일을 포함해서 모든 파일들을 나열 -C 다양한 컬럼 형식으로 파일을 나열, 엔트리들은 컬럼에 따라 분류 -F 파일이 디렉토리이면, 각 파일명 다음에 /를 붙이고 실행 파이이면 *를 붙인다 -l 파일에 관한 상세한 정보를 보여주는 긴 형식으로 파일을 나열 -m 컴마(,)에 의해 나누어진 페이지에 따라 파일을 나열 -p 파일이 디렉토리명이면 각 파일명 뒤에 /를 붙이고, 실행 파일의 이름이면 *를 붙인다 -r 알파벳 순서 반대로 파일을 나열 -R 순환적으로 서브디렉토리의 내용을 나열 -s 블록에 들어 있는 각 파일의 크기를 보여준다. -x 복수의 컬럼 형식으로 파일을 나열 엔트리들은 라인으로 분류
디렉토리 명령어 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 명령어 파일의 하드카피를 만들기 위해 프린터에 파일의 복사본을 보낸다
파일 내용 프린팅 명령어 옵션 옵션 동작 -d 지정된 프린터에 출력한다. -m 프린트 요청을 완료한 후에 사용자 메일박스에 메일을 보낸다 -n 지정된 숫자만큼 파일의 복사본을 출력한다 -s 피드백 메시지를 숨긴다 -t 출력 배너 페이지에 지정된 문구를 출력한다 -w 프린터 요청을 완료한 후에 사용자 터미널에 메시지를 보낸다
파일 내용 프린팅 프린팅 : 리눅스에서 lpr 명령어 프린팅 요청 취소하기 : cancel 명령어 리눅스에서 사용하는 프린팅 명령어 파일을 지정하여 출력하기 위해서 사용 프린팅 요청 취소하기 : cancel 명령어 프린터 작업에 대한 요청을 취소하기 위해 사용하는 명령어 프린터 상태 보기 : lpstat 명령어 프린팅 요청에 관한 정보와 프린터 상태를 알아보기 위해 사용하는 명령어
파일 삭제 파일 삭제 : rm 명령어 파일을 삭제하기 위한 명령어 옵션 동작 -i 파일을 삭제하기 전에 확인을 묻는다 -r 지정된 디렉토리와 서브디렉토리에 있는 모든 파일을 지운다
요약 유닉스 시스템에서의 파일 시스템 구조 디렉토리의 의미 디렉토리 명령어 이해 및 실습 파일 내용의 출력 파일 삭제
질의 및 응답
실습