오픈소스소프트웨어개발입문 (CP33992) Linux 명령어사용법 - 계속 부산대학교공과대학정보컴퓨터공학부
파일비교 cmp diff 두파일의동일성을검사하여, 차이가생기는첫번째바이트를보여줌 두파일을비교하여한파일을다른파일로전환하는편집변경을행할때에필요한동작목록을보여줌 2
[ 실습 ] 파일비교 : diff (1) $ vi Hello1.c #include <stdio.h> int main ( void ) { printf("i am a student\n"); return 0; } 3
[ 실습 ] 파일비교 : diff (2) $ vi Hello2.c #include <stdio.h> int main ( void ) { int i; for( i = 0; i < 2; i++ ) printf("i am a student\n"); return 0; } 4
$ diff hello1.c hello2.c > hello.txt $ cat hello.txt 5c5,8 < printf("i am a student\n"); --- > int i; > > for( i = 0; i < 2; i++ ) > printf("i am a student\n"); [ 실습 ] 파일비교 : diff (3) 문자열을보면 5c5, 8 과 "<" ">" 이러한문자가적혀있습니다. "<" 는원래파일 ( hello1.c) 이고 ">" 는바뀐파일 (hello2.c) 이라는뜻 5c5, 8은원래파일 ( hello1.c) 에서 5 라인이 printf("i am a student\n"); 였는데, 바뀐파일 ( hello2.c) 에서는 5~8 번째라인에 int i; for( i = 0; i < 2; i++ ) printf("i am a student\n"); 이내용이추가되었다는의미임. a(append), d(delete), c(change) 5
[ 실습 ] 파일비교 : diff (4) // -u : 변경되는부분과변경된부분의근처의내용도출력 $ diff u hello1.c hello2.c > hello.txt $ cat hello.txt --- 001_hello.c 2011-07-21 00:32:18.247004305-0700 +++ 002_hello.c 2011-07-21 00:31:14.991017749-0700 @@ -2,7 +2,10 @@ int main ( void ) { - printf("i am Hyunki\n"); + int i; + + for( i = 0; i < 2; i++ ) + printf("i am Hyunki\n"); } return 0; "---" 는원래파일 "+++" 바뀐파일 -로표시된라인은제거하고 + 로표시된라인으로대체 6
ps (1) Report process status 현재실행중인프로세스의상태를보여줌 명령어옵션 -e : 현재실행중인모든프로세스에관한정보 -a : 가장빈번하게요구되는프로세스에관한정보 -f : 프로세스상태를 full list 로보여줌 -l : 프로세스상태를 long list 로보여줌 -u uid : 지정 uid를가진프로세스정보를보여줌 -g gid : 지정 gid를가진프로세스정보를보여줌 7
ps (2) 출력형식 (1) F : 프로세스에관련된 flag 00 : 프로세스종료 01 : 시스템프로세스 02 : 부모프로세스가추적프로세스 04 : 추적부모프로세스의신호에의해정지되어있음 08 : 프로세스가현재메모리에있음 10 : 프로세스는메모리에있고 lock 되어있음 S : 프로세스상태 O : 현재실행중 S : 휴식상태 R : 실행가능한상태 I : Idle 상태 Z : Zombie 상태 8
ps (3) 출력형식 (2) UID : 사용자 ID 또는사용자명 GID : 그룹 ID PID : 프로세스 ID PPID : 부모프로세스 ID C : 스케쥴링을위한프로세스소모량 PRI : 프로세스의우선순위 NICE : nice 값 nice 명령어 : 특정프로세스가실행될때우선순위를지정하여서실행속도를높여주는도구 (( 높음 )-20 에서 19 까지 ( 낮음 )) ADDR : 프로세스의메모리주소 SZ : 메모리내에교체가능한프로세스이미지의크기 WCHAN : sleep 또는 SXBRK 상태로되어있는프로세스이벤트주소 TTY : 실행터미널번호 TIME : 프로세스의누적실행시간 9
Process 관련명령어 : ps 10
Terminate or Signal processes Process 관련명령어 - kill 프로세스를강제종료하는경우사용 Signal 번호로 9번 ( 강제종료 ) 을가장많이사용함 Example Make an infinite C Program named mytest #include <stdio.h> int main() { while(1); } $ gcc o mytest mytest.c $./mytest & // Background $ ps l $ kill -9 PID of mytest 11
Job Control (1) 작업의종류 Foreground job 명령어라인을실행시키거나작업을실행시키면작업이종료될때까지블록상태가되어더이상명령을수행할수없는상태 fg 명령어로 Background job을 Foreground job으로바꿀수있음 Background job 새로운프로세스를할당받아작업을실행시키고사용자는터미널에서계속다른작업을할수있는상태 bg 명령어로 Foreground job 혹은 Suspended job을 Background job으로바꿀수있음 12
Job Control (2) Example 13
sleep Suspend execution for an interval 지정된시간동안실행을일시중지 주로쉘스크립트에서많이사용됨 Example 14
Alias 명령어에다른이름을부여하는기능 alias 명령으로별명을부여 unalias 명령으로이미설정되어있는별명을해제 별명을작성할때명령어에공백이포함되면 안에기술해야함 로그아웃되면정의가무효가되기때문에보통로그인설정파일에설정하는경우가많음 15
Pipe & Filter 어떤명령의출력을다른명령어의입력으로사용하는경우 Example 16
Data 압축 : Compressing data The bzip2 utility The utilities in the bzip2 package are: bzip2 for compressing files bzcat for displaying the contents of compressed text files bunzip2 for uncompressing compressed.bz2 files bzip2recover for attempting to recover damaged compressed files 17
bzip2 command $ ls -l myprog -rwxrwxr-x 1 linuxguest linuxguest 4882 2007-09-13 11:29 myprog $ bzip2 myprog $ ls -l my* -rwxrwxr-x 1 linuxguest linuxguest 2378 2007-09-13 11:29 myprog.bz2 $ bunzip2 myprog.bz2 $ ls -l myprog -rwxrwxr-x 1 linuxguest linuxguest 4882 2007-09-13 11:29 myprog $ bzcat test.bz2 This is a test text file. The quick brown fox jumps over the lazy dog. This is the end of the test text file. 18
Data 압축 : gzip command The gzip utility By far the most popular file compression utility in Linux is the gzip utility. This package includes the files: gzip for compressing files gzcat for displaying the contents of compressed text files gunzip for uncompressing files Examples $ gzip myprog $ ls -l my* -rwxrwxr-x 1 linuxguest linuxguest 2197 2007-09-13 11:29 myprog.gz You can also specify more than one filename or even use wildcard characters to compress multiple files at once: $ gzip my* $ ls -l my* -rwxr--r-- 1 linuxguest linuxguest 103 Sep 6 13:43 myprog.c.gz -rwxr-xr-x 1 linuxguest linuxguest 5178 Sep 6 13:43 myprog.gz -rwxr--r-- 1 linuxguest linuxguest 59 Sep 6 13:46 myscript.gz -rwxr--r-- 1 linuxguest linuxguest 60 Sep 6 13:44 myscript~.gz 19
파일보관 : tar (1) tar -cvf [ tarfilename ] filelist -c : filelist에대한 tar형식의백업파일을생성 (create) -v : 진행되는상황을설명 (verbose) -f : tar형식의백업파일이름을지정 (default: /dev/rmt0) -x : 백업파일로부터파일을추출복귀 (extract) 20
파일보관 : tar (2) -t : tar형식의백업파일안에어떤것들이들어있는지목차만보임 (title) -r : filelist를기존의백업파일뒤에무조건덧붙임 (rear) -u : 기존의백업파일에이미포함되어있는 filelist 중수정된파일들만을백업파일의뒤에덧붙임. 디렉토리가있어도 recursive하게적용. 21
파일보관 : tar (3) 예제 $ tar -cvf tarfile. 현재디렉토리를 archive 함 $ tar -tvf tarfile -t tarfile의목차를보여줌 $ tar -rvf tarfile reverse.c -r tarfile끝에 reverse.c를추가 $ tar -uvf tarfile reverse.c -r tarfile끝에 reverse.c가변경되었으면추가 $ tar -vxf tarfile./temp 보관된 tarfile중에 temp 디렉토리를추출 $ tar xvf tarfile reverse.c 보관된 tarfile중에 reverse.c 를추출 $ tar -xvf tarfile 보관된 tarfile 모두추출 22
파일보관 : tar (4) 실습 $ cd ~ $ mkdir test1 $ cd test1 $ touch file1 $ cd.. $ mkdir test2 $ cd test2 $ touch file2 $ cd.. $ tar -cvf test.tar test1 test2 $ rm rf test1 $ rm rf test2 $ tar -xvf test.tar $ ls 23
파일보관과압축을동시에 [ 압축및보관 ] $ tar cvzf filename2.tar.gz. // 현재디렉토리이하모든하위디렉토리포함 [ 압축해제및재배치 ] $ tar xvzf filename2.tar.gz 24
과제물 #1 주기적으로현재실행중인프로세스에대한정보를출력하는프로세스관리도구인 top 명령어를실행해보고출력되는결과에서각필드의의미를조사하여기술하시오. 25