3.1 계층적파일시스템 3. 파일시스템사용 파일 (file) 디스크에저장되는자료들의모음 파일이름을사용하여자료들을간편하게다룸 계층적파일시스템 디렉토리 (directory) 포함하고있는파일또는디렉토리이름과관련정보보관 (cf) 폴더 (folder) 1 2 파일유형과파일이름 경로이름 파일유형 일반파일 (regular file) 디렉토리파일 특수파일 입출력장치정보보관, 장치파일 (device file) 파일이름 / 를제외한모든출력가능문자사용가능 shell 에서특수한용도로사용하는문자들을사용하지않을것을권장 < > ( ) [ ] { } *? " ' $ ^ 다음문자들중에서선택사용권장 ( 단,. 과.. 은사용할수없음 ) 알파벳문자 (A-Z, a-z) 숫자 (0-9) 밑줄문자 (_), 마침표 (.) 대소문자를구분함 확장자 : 마지막마침표뒤의문자열. 파일의종류를구분하는용도 UNIX/Linux는파일종류에따라서특정확장자를요구하지않음 특정확장자는대개응용프로그램이요구하는것임 3 루트 (root) 디렉토리 계층적파일시스템의꼭대기디렉토리 절대경로이름 : / (root) 에상대적인경로, / 으로디렉토리구분 같은파일이름 4
작업디렉토리 / 홈디렉토리와상대경로이름 작업디렉토리 / 홈디렉토리와상대경로이름 작업디렉토리 (working directory) 프로세스 ( 수행중인프로그램 ) 가현재위치한디렉토리 작업디렉토리의파일은파일이름만사용하여접근가능 현재작업디렉토리, 현재디렉토리라고도함 상대경로이름 작업디렉토리에상대적인위치로파일이름을표기 홈디렉토리 특정사용자에게부여된디렉토리. 이디렉토리아래로계층적으로 현재사용자나특정사용자의홈디렉토리에상대적위치로표기가능. ( 현재 ) 작업디렉토리.. 부모디렉토리 ~ 현재사용자의 home 디렉토리 ~gdhong 사용자 gdhong의 home 디렉토리 5 작업디렉토리 (working directory) 프로세스 ( 수행중인프로그램 ) 가현재위치한디렉토리 작업디렉토리의파일은파일이름만사용하여접근가능 현재작업디렉토리, 현재디렉토리라고도함 상대경로이름 작업디렉토리에상대적인위치로파일이름을표기 홈디렉토리 특정사용자에게부여된디렉토리. 로그인시에기본작업디렉토리로사용됨 현재사용자나특정사용자의홈디렉토리에상대적위치로파일이름표기가능. ( 현재 ) 작업디렉토리.. 부모디렉토리 ~ 현재사용자의 home 디렉토리 ~gdhong 사용자 gdhong의 home 디렉토리 6 전체디렉토리구조 현재디렉토리 리눅스파일시스템계층구조 파일시스템계층구조표준 (FHS) 기반 각디렉토리의용도 교과서 34 쪽참조 7 8
3.2 파일과디렉토리관련유틸리티 표준입출력 (standard input/output) 표준입력 (stdin): keyboard 표준출력 (stdout): 화면 표준에러출력 (stderr): 화면 cat을사용한파일생성 $cat ; 표준입력 (stdin) 을화면 (stdout) 에출력 $ cat > lyrics ; 표준입력 (stdin) 을화면대신에파일 heart로출력을저장 redirection(5장 ) [Enter] 를입력해야입력이프로그램에전달됨 ^D : keyboard 입력끝 ls - 디렉토리목록보기 (list) $ ls 현재디렉토리목록 $ ls /usr /usr 디렉토리목록 $ ls xyz 파일존재여부확인에사용가능 ls 디렉토리목록보기 ls 명령어옵션 -l ; long format -a ; all (hidden file포함 ) (cf) hidden file : 파일이름이. 으로시작하는파일 -F ; file 유형 -s ; KB 단위크기 -t : 수정시간순서 (time) -R ; recursive (subdirectory 내용포함 ) -d ; 디렉토리에대해서디렉토리이름만출력 -m ; 파일목록을컴마로구분 -R : recursive 출력 옵션의혼합사용가능 9 10 파일내용보기 cat 파일내용보기 (concatenate) $ cat lyrics $ cat lyrics /etc/resolv.conf ; 여러파일내용출력 ( 연결 ) $ cat n lyrics ; 줄번호출력 more, less 화면단위로파일내용보기 긴텍스트파일의내용보기에적합 $ more /etc/protocols $ more +20 /etc/protocols more 내에서의명령키 교과서 38쪽참조 space 다음페이지 enter 다음줄 b 이전페이지 h - 도움말 q, ^C 종료 ( 마지막도달시자동종료 ) 파일내용일부보기 head 파일앞부분보기 $ head file ; 처음 10줄표시 $ head -2 file ; 처음 2줄표시 tail 파일의뒷부분보기 $ tail file ; 마지막 10줄표시 $ tail -20 file ; 마지막 20줄표시 $ tail -f file ; 다른프로그램에의해서추가되는내용을계속하여출력 ( 로그파일을계속적으로읽는데주로사용 ) 11 12
디렉토리관련명령어 mkdir - 디렉토리생성 (make directory) $ mkdir newdir $ mkdir -p dir1/dir2 ; 존재하지않는부모디렉토리도생성 cd - 디렉토리이동 (change directory) $ cd dir ; 자식디렉토리 $ cd /usr/bin ; 절대경로사용 $ cd../doc ; 상대경로사용 rmdir - 디렉토리삭제 (remove directory) $ rmdir olddir ; 빈 directory 이어야함 (cf) rm -r 파일관련명령어 cp - 파일복사 (copy) $ cp file1 file2 ; file1을 file2로복사 $ cp file1 dir ; file1을디렉토리 dir로복사 $ cp -i file1 file2 ; 확인기능 $ cp -r dir1 dir2 ; 디렉토리의 recursive 복사 (subdirecty모두복사 ) mv - 파일이름변경 (move) $ mv file1 file2 ; 파일이름변경 $ mv dir1 dir2 ; 디렉토리이름변경 $ mv file1 dir ; 파일을 dir 디렉토리로이동 $ mv -i file1 file2 ; 확인기능 rm - 파일삭제 (remove) $ rm file1 file2... $ rm -i file ; 확인기능 $ rm -r dir ; 디렉토리의 recursive 삭제 ( 비어있지않아도됨 ) 13 14 단어수세기 wc 파일의단어 / 행 / 문자수출력 $ wc file ; line수, word수, char수출력 $ wc -l file ; line수출력 $ wc -wc file ; word, char수출력 3.3 파일속성및관련명령어 파일속성 1) 파일유형및허가권 (read/write/execute) 2) 하드링크수 3) 파일소유자 4) 파일그룹 5) 파일크기 (B) 6) 파일수정시간 7) 파일이름 15 16
기본파일속성 파일허가권 파일수정시간 단순한정보로도의미가있지만 make (10 장 ), find (6 장 ) 와같은여러유틸리티에서사용함 파일소유자 / 그룹 파일소유자 = 파일을생성한프로세스의소유자 파일그룹 = 파일을생성한프로세스의그룹 파일유형 필드 1 의첫째문자 drwxr-xr-x 파일접근권한 ( 허가권 ) 사용자들을소유자 (u), 그룹 (g), 나머지사용자 (o) 의 3 단계로구분 사용자단계마다파일에대한읽기 (r), 쓰기 (w), 실행 (x) 권한별도부여 user group other ; 3단계 rwx rwx rwx ; 의미 rw- r-- r-- ; -는권한( 허가권 ) 이없음을의미 파일유형에따른허가권의미 - : regular d : directory l : symbolic link b : block I/O c : char I/O p : pipe s : socket ( 교과서 47쪽참조 ) 17 18 하드링크수 소유자, 그룹 하드링크 디스크에저장된파일에대한포인터 같은파일이여러경로이름으로하드링크될수있다. 즉, 같은파일에여러경로이름이부여될수있다. 디렉토리의하드링크수 = 2 + ( 자식디렉토리수 ) 디렉토리는최소 2 개의하드링크 ( 자신과부모와링크됨 ) 를가짐 자식디렉토리가있으면자식에서도하드링크를가짐 chown 파일소유자변경 관리자만변경가능 $ chown kim lyrics lyrics2 ; 파일소유자를 kim으로변경 $ chown R kim music ; 디렉토리이하모든파일소유자재귀적변경 groups 그룹목록보기 $ groups ; 사용자가속한그룹출력 chgrp 파일그룹변경 ( 둘이상의그룹에속한사용자에게가능 ) $ chgrp cte lyrics2 $ chgrp R cte music newgrp 셸의그룹변경 ( 둘이상의그룹에속한사용자 ) $.. 현재셸이기본그룹에속함 $ newgrp cte $.. 현재셸이 cte 그룹에속함 ; 새로운셸이생성됨 $ exit ; 기본그룹에속한원래셸로되돌아감 19 20
자세한파일유형 file - 자세한파일유형을출력 $ file filename1 filename2 ASCII text UTF-8 Unicode text directory ELF 64-bit LSB executable, x86-64 symbolic link to chmod 파일허가권변경 형식 : chmod [-R] mode file... mode 기호형식 : [u, g, o, a] [+ = -] [r, w, x, s] (ex) g+w, u-rw, a+x, +x (= u+x) 8 진수형식 : rwxr-xr-x 111 101 101 = 0755 $ chmod g+w file ; group 에 write 허가 ( 파일허가권수정 ) $ chmod 754 file ; rwxr-xr ( 파일허가권지정 ) $ chmod a=rwx,g=rx,o=r file ; 21 22 프로세스의소유자 / 그룹과파일허가권 프로세스의소유자및그룹로그인사용자가실행파일을실행시켜서프로세스를생성할때 프로세스의소유자 = 로그인사용자 프로세스의그룹 = 로그인사용자의현재그룹 프로세스가생성한파일의소유자및그룹 파일을생성한프로세스의소유자와그룹이부여됨 파일허가권규칙 if ( 프로세스의소유자 = 파일소유자 ) 소유자허가권 else if ( 프로세스의그룹 = 파일그룹 ) 그룹허가권 else 나머지사용자허가권 setuid, setgid 허가권 공유파일사용문제 ( 프로세스사용자 / 그룹 ) 을 ( 로그인사용자 / 그룹 ) 으로부여하는방법은여러사용자가쓰기를해야하는공유파일사용에부적합 (ex) passwd 명령어 공유패스워드파일사용 해결책 : set user id, set group id 라는특수한파일허가권사용 setuid (set user id) 과 setgid (set group id) 허가권 다음허가권이부여된실행파일이실행될때에생성된프로세스의소유자와그룹은다음과같이지정됨 setuid 권한 프로세스소유자 = 실행파일소유자 setgid 권한 프로세스그룹 = 실행파일그룹 ls l의파일허가권출력에 x대신 s로표시 ( 실행허가권이없으면 S로 ) (ex) rws r-x r-x ; setuid rws r-s r-x ; setuid, setgid 이허가권을가진실행파일을대개상승된권한을가지고프로그램을실행함 보안에문제가있을경우에는시스템전체보안에문제가될수있으므로보안에유의하여프로그램을작성해야함. 23 24
sticky 허가권 setuid, setgid, sticky 허가권지정 - chmod sticky 허가권 디렉토리에부여되는일반사용자를위한특별한허가권 디렉토리에일반사용자에게쓰기허가권이부여되지만, 파일삭제, 파일이름변경은파일소유자, 디렉토리소유자와관리자만가능함 ( 예 ) /tmp 디렉토리 ( 임시파일저장용 ) ls l의파일허가권출력에 x대신 t로표시 ( 실행허가권이없으면 T로 ) drwxrwxrwt /tmp setuid 허가권지정 $ chmod u+s exefile setgid 허가권지정 $ chmod g+s exefile sticky 허가권지정 $ chmod o+t directory 8 진수를사용한허가권지정 기존 9 비트앞에 3 비트추가하여 setuid, setgid, sticky 허가권을표 4000: set-user-id 2000: set-group-id 1000: sticky $ chmod 4755 file ; rwsr-sr-x $ chmod 6755 file ; rwsrwsr-x $ chmod 1777 dir ; rwxrwxrwt 25 26 umask 기본파일허가권지정 접근제어목록 (ACL) umask 프로세스가생성하는파일허가권미리지정 $ umask 현재의 umask 값출력 0022 ; 000 000 010 010 1 에대응되는허가권제한 ( 그룹과일반사용자쓰기허가권제한 ) $ umask 002 umask 값지정 ; 000 000 010 일반사용자쓰기허가권제한 umask 와 chmod 파일허가권부여대상을지정하지않으면 umask 값으로대상이지정됨 파일의 3 단계접근제어 전통적유닉스 / 리눅스허가권은 3 단계파일접근제어를사용 접근제어목록 (Access Control List: ACL) 특정사용자에대한미세한파일접근제어를위해 ACL 사용가능 ACL 을사용하기위해서는 ACL 기능이추가로설치되어있어야하며, 일부파일시스템에서만이기능사용가능 $ chmod +w file umask=022 이면소유자에게만쓰기허가권부여 umask=002 이면소유자, 그룹에게쓰기허가권부여 27 28
3.4 파일링크 링크파일삭제 ln 명령어 링크생성 기존파일에새로운이름을추가로부여하는것 다른파일이름을추가로사용하거나, 다른디렉토리에서사용하도록할때에유용 하드링크 기존파일에대한포인터를직접생성 $ ln file1 file2 $ ln file1 sub/file2 $ ln file1 sub 같은파티션에있는파일에대해서만생성할수있음 심볼릭링크 ( 소프트링크 ) 연결할파일에대한경로이름을저장 ( 윈도우의바로가기와유사 ) $ ln s file1 file3 $ ls -l lrwxrwxrwx. 1... file3 -> file1 링크파일삭제 file2 file1의 hard link 파일, file3 file1의 symbolic link 파일 $ rm file1 원본파일삭제 $ cat file2 파일접근가능 ( 직접연결되므로 ) $ cat file3 파일접근불가능 ( 연결파일이삭제되었으므로 ) 29 30