1. exit logout 하는 command 는아주간단하다. exit 을커맨드에서입력하고 return 키를누르면 logout 된다. 2. ls & command option 현재 directory 에서 file 의 list 를보는명령어, 즉 DOS 에서의 dir 에해당하는명령어로는 'ls' 가있다. (list 의약어.) ls 커맨드를실행시키면다음과같이표시된다. [user@mlet1 ~]$ ls hello.c practice/ sincos.x* sine.x* hello.x* sincos1.x* sine.c unix-lecture/ 많은유닉스 command 에는수많은 option 들이있는데이는 ls 도마찬가지이다. 이중가장많이사용하 는 option 두가지는 a(all) 와 l(long) 이있다. (unix manual 참조 ) command 에 option 을적용시키기위 해선 - 를붙이면된다. a option 을적용시켰을경우다음과같은출력결과를얻을수있다. [user@mlet1 ~]$ ls -a./.bashrc hello.c sincos1.x*.ssh/.xauthority../.canna hello.x* sincos.x*.tcshrc.xemacs/.bash_logout.emacs.kde/ sine.c unix-lecture/.zshrc.bash_profile.gtkrc practice sine.x*.viminfo 즉, UNIX 에서파일명앞의방점으로표시되는 hidden files 를표시해주는 option 이 a 이다. 또한 l option 을적용시켰을경우출력결과는다음과같다. [user@mlet1 ~]$ ls -l total 80 -rw-r--r-- 1 user1 users 85 2010-07-14 18:02 hello.c -rwxr-xr-x 1 user1 users 12918 2010-07-14 18:02 hello.x drwxr-xr-x 2 user1 users 4096 2010-07-14 18:03 practice -rwxr-xr-x 1 user1 users 12919 2010-07-14 18:05 sincos1.x -rwxr-xr-x 1 user1 users 12919 2010-07-14 18:05 sincos.x -rw-r--r-- 1 user1 users 144 2010-07-14 18:04 sine.c -rwxr-xr-x 1 user1 users 12919 2010-07-14 18:05 sine.x drwxr-xr-x 2 user1 users 4096 2010-07-14 18:05 unix-lecture 여기서앞의 drwxr-xr-x 와같은표시는 directory 여부 (d,-), permission 을나타내며, 기타 DOS 에서 - 1 -
역시볼수있었던 byte 수, 수정시간등을나타내줌을볼수있다. 두옵션을모두적용하기위해선 [user@mlet1 ~]$ ls -al 와같이입력하면된다. 3. file 다루기 Windows에서흔히 file을다룰때이름바꾸기와삭제, 잘라내기, 복사, 붙여넣기등을행한다. UNIX에서도 ( 같은 ' 파일 ' 을다루는것이므로 ) 비슷한일들을행하는데, 이를위한커맨드는 5가지가아닌 3가지이다. 이는잘라내기와이름바꾸기가통합되어있고, Windows에서의 ' 클립보드 ' 를사용하지않기때문이다. 이세가지커맨드를알아보면 1) cp : copy cp [object] [target] 과같이쓴다. 예를들어, [user@mlet1 ~]$ cp sine.c sine1.c 와같이쓰면 sine.c 와같은내용의 sine1.c 를복사시킨다. 2) rm : remove rm [object] 와같이쓴다. 예를들면, [user@mlet1 ~]$ rm sine1.c 와같이쓰면 sine1.c 를지운다. (alias 설정에따라지울것인지묻는경우도있다.) -i, -f 옵션이있 는데, -i 는지울것인지묻고지우는일을, -f 는강제적으로지우는일을행한다. 3) mv : move, rename mv 는 ' 파일을이동하는 ' 명령어이다. 즉, cut&paste, 그리고 Windows 에서의 'rename' 명령을모두행 할수있다. 이의용법은 cp 와같다. 즉, [user@mlet1 ~]$ mv sine.c sine1.c 라고하면 sine.c 는 sine1.c 로바뀐다. 4. directory 현재디렉토리를볼수있는커맨드는 (print working directory) 이다. 예를들면, [user@mlet1 ~]$ /home/user - 2 -
와같이표시된다. / directory 는 root directory 로, 그곳에서모든경로들이시작된다 (Windows 의 ' 내 컴퓨터 ' 와비슷 ). DOS 와같이, cd (change directory) 명령어를이용하면 directory 를바꿀수있다. unix 에서는./ 는현재디렉토리,../ 는상위디렉토리를뜻한다. 디렉토리를만들기위해서는 mkdir, 지우기위해서는 rmdir 명령어를이용한다. 디렉토리안의모든내용이지워지지않았을때에 rmdir 명령어는그것을행하지않으며, 이때에는 rm 명령어를사용하여야한다. 디렉토리안의모든내용과함께 directory를삭제할경우, -r (recursive) 옵션을이용한다. 예를들어 [user@mlet1 ~]$ rm -rf unix-lecture/ 라고입력하면 unix-lecture/ 안의모든파일들을지운다. cp, mv 등의모든명령어에 directory 를넣어행할수있다. 예를들어 [user@mlet1 ~]$ mkdir newdir [user@mlet1 ~]$ cd newdir [jwpk1201@mlet1 ~/newdir]$ cp../sine.c sine.c 와같이입력하면상위디렉토리의 sine.c 가하위디렉토리에복사된다. - 3 -
1. logout, password 1) logout : exit, logout 2) password 변경 : passwd 또한보안에아주중요한 'password 변경 ' 은 UNIX 안에서행하는데, 이는 passwd 커맨드를실행시키면된다. 종전비밀번호와비슷하거나, 숫자로만되거나알파벳으로만된비밀번호는시스템이거부할가능성이크다. 2. file list ls : 숨김파일을제외한파일목록을보여줌 ls -a : 숨김파일을포함한전부를보여줌 ls -l : 파일의자세한정보를보여줌 ls -al과같이쓰면 a와 l 두옵션을모두적용시킨다. ls -t 시간순정렬 4. directory 다루기 : 우선 directory의개념을익힐것! 모든디렉토리는 / 부터출발한다. 가령, /home/user1/unix-lecture처럼. 맨앞의 / 을빼면현재에있는디렉토리에서부터출발한위치를가르친다. : 현재경로를보여줌 mkdir xxx: xxx 디렉토리를만듬 rmdir xxx: xxx 디렉토리를지움 ( 비어있을때만성공 ) cd xxx: xxx디렉토리로옮겨감. xxx를주지않고 cd만하면자신의홈디렉토리로옮겨감 cd /tmp ls cd /usr/local ls -l cd ls -l cd /home/user1/unix-lecture cd.. cd unix-lecture cd.. cd./unix-lecture - 4 -
cd../practice cd 3. file 다루기 copy : cp [object] [target] move : mv [object] [target] remove : rm [filename] rm -r : 디렉토리와디렉토리안의모든것을지움 rm -f : 지울때아무것도묻지않고지움 (default로안물어보고지움 : 지울때주의!!!) rm -i : 지울때지울여부를묻고지움 cp A B copy, A를 B로복사. A or B에경로를지정해줄수있다. -r 디렉토리복사 ex) cp /home/user_1/linux./unix/. 이때첫번째. 은현재경로를, 두번째. 은같은파일이름을뜻한다. rm A remove, 파일지우기. -i interaction, 지울지말지물어보기 -f 묻지않고지우기 -r 디렉토리지우기 -R 디렉토리지우기 ex) rm -rf./linux/unix mv A B move, A 를 B 로옮기기 / A 의이름을 B 로바꾸기 리눅스에서 mv 는먼저파일 A 를지운다음 B 로재생성하는명령어이다. 경로상에같은이름이존재하면덮어씌워버리게된다. cat A A 의내용을화면에출력한다. cat hello.c grep A B B에해당하는파일내부에서 A가사용된 line을보여준다. ex) grep printf *std 이때 * 은모든것을포함하는문자이며, 이경우현재경로내에서이름이 std 로끝나는모든파일을지정한다. grep Hello hello.c grep hello hello.c grep -i hello hello.c grep -i hello hello.c grep -v Hello hello.c grep -E 'Hello stdio' hello.c grep stdio *.c - 5 -
head A A의첫 10줄을화면에출력한다. -n19 첫 19줄을출력 ( 임의의숫자가능 ) head -n 3 hello.c head -3 hello.c tail A A의마지막 10줄을화면에출력한다. -n19 마지막 19줄을출력 ( 임의의숫자가능 ) tail -n 3 hello.c tail -3 hello.c cut -c [num] A 어떤조건을바탕으로각줄의 num번째만큼화면에출력한다. cut -f [num] A 어떤조건을바탕으로각줄의 num번째만큼화면에출력한다. -c [num] character, 글자의개수를기준 -f [num] -d ' ' A field, 를기준으로하는블록에서 num의조건에따라출력 ex) cut -f 1 -d ':' A ':' 을기준으로하는 field의첫번째를출력 num : N N번째필드만출력 ( 구분문자비포함 ) N- N번째이후필드모두출력 ( 첫구분문자비포함 ) -M M번째까지의필드모두출력 ( 마지막구분문자비포함 ) N-M N번째부터 M번째까지의필드모두출력 ( 첫번째와마지막구분문자비포함 ) cut -c 3-5 hello.c cut -c -2 hello.c cut -f 2 -d ' ' hello.c wc - A word count, 단어수세기 -l line 세기 -w 단어수세기 (space로구분된것을하나의단어로간주함 ) -c 문자수세기 wc -l hello.c [CMD] > A 어떠한 comand에의해생긴내용을 A에덮어쓴다. [CMD] >> A 어떠한 comand에의해생긴내용을 A에이어쓴다. cut -f 2 -d ' ' hello.c > test.file cat test.file ls -l >> test.file cat test.file rm test.file sort [inputs] input 들을알파벳순으로정렬한다. sort hello.c uniq 연달아서나오는내용들을축약하여한번만화면에표시한다. - 6 -
uniq hello.c -c 몇번연달아서나왔는지숫자로표시해준다. uniq -c hello.c [CMD1] [CMD2] 어떠한 cmd1에의해생긴내용을 cmd2 의 stdin으로사용한다. ex1) head -n 20 unix tail -n 3 unix라는파일의 18~20번째줄출력 ex2) grep printf *.c cut -f 1 -d':' sort uniq -c.c 로끝나는파일에 printf가각각몇번포함되어있는지정렬 uniq -c hello.c sort find [dir] -name A dir라는이름의 directory아래에서 A라는이름을가진파일을검색 [example] find / -name hello.c man [cmd] 어떠한 cmd 의 manual. [cmd] --help 역시같은기능이다. diff 파일의서로다른부분을확인 -b 띄어쓰기무시하고비교 -q 다른파일의경우다르단메시지만표시 [example] diff sine.c hello.c diff -q sine.c hello.c clear 화면초기화 top 현재컴퓨터 cpu memory 사용량표시 1 누르면컴퓨터내개개의 cpu의동작확인가능 q 종료 ps 실행되고있는프로그램들표시. 아무옵션을주지않으면현재터미널에서수행하는작업만표시. JOB ID라는번호를이용해 kill 명령사용가능 -ef 현재터미널뿐아니라컴퓨터에서돌고있는전체작업표시 kill [signal] [JOB ID] 필요없는작업강제종료 작업을죽일때 kill [JOB ID] 로죽여보고, 실패하면 kill -KILL [JOB ID] 로죽인다. Ctrl+c 실행중프로그램강제종료 Ctrl+z 실행중프로그램일시정지 bg 정지된프로그램을 background 로실행 - 7 -
[example] $qchem file1.in file1.out (Ctrl+z) $bg $ps 출력형태 PID TTY TIME CMD #### pts/2 00:00:00 qchem %%%% pts/2 00:00:00 serial.csh @@@@ pts/2 00:00:00 qcprog.exe 의형태로출력된다. $kill #### %%%% @@@@ qchem이시작한세가지 sequence의프로그램강제종료 *ABOUT VI 리눅스에서는 notepad 와같은에디터로서 vi 를사용한다. vi A 파일 A를 vi로연다. :q vi 종료 :w 현재까지바뀐내용을저장 :q! 저장하지않고종료 :wq 저장하고종료 :0 가장첫줄로이동 :gg 첫번째로이동 :23 23번째줄로이동 ( 임의의숫자가능 ) :G 가장뒷줄로이동 i insert mode, 입력시작 ( 나가기 : Esc) v 블록모드, 글자마다선택가능 V 블록모드, 줄단위로선택가능 Ctrl-v 수직블록모드 y copy, Ctrl+C와같은기능 d cut, Ctrl+X와같은기능 dd 한줄지우기 ( 현재줄 ) yy 한줄복사 ( 현재줄 ) p paste, Ctrl+V와같은기능 P paste, p와복사하는위치가다른것을느껴보도록 u undo, Ctrl+Z와같은기능 c change, v로블록을잡고내용을변경할때유용 Ctrl+r redo, Ctrl+Y와같은기능. macro, 직전에수행한변경내용을반복 Ctrl+b page up과같은기능 Ctrl+f page down과같은기능 / search. 다음찾기 : n / 이전찾기 : N :new filename filename을불러와동시작업가능 - 8 -
Ctrl+w+w 화면간이동 Ctrl+w+n vi 상태에서새vi만들기 :set nu 줄번호보기 :set nonu 줄번호없애기 *ABOUT CODING C로코딩을하려면소스파일이름을보통 *.c로선언해준다. ex) vi sin.c 컴파일러는다음과같이선언된다. cc -o A B B를컴파일하여 A라는실행파일을만든다. 이때실행파일은보통 *.x로선언한다. -l library를컴파일에포함시켜야할때사용한다. -I 헤더파일을컴파일에포함시켜야할때사용한다. 리눅스는일반적으로컴파일시헤더파일을포함하지않는경우가있다. ex) cc -o sin.x sin.c -lm 이때 m은 libm.a를뜻하며, 시스템어디엔가이파일은존재한다. ( 시스템이알고있으므로어디있는지는걱정할필요없음 ) cc -o hello.x hello.c cc -o sine.x sine.c -lm C언어가최초로생겼을때, 이는수학용이아니었다. 따라서, 수학함수는따로라이브러리를만들어두고원할때만사용했다. (-lm을이용해서 ) 요즘은, 수학루틴이매우자주쓰이므로경우에따라 -lm을쓰지않아도되는컴파일러도많다. cc -o sine.x sine.c /[dir]/*.x 컴파일된실행파일을 ( 경로를포함하여 ) 실행해준다. 보통은현재위치에컴파일하므로다음과같이사용한다../sine.x /home/user1/sine.x UNIX는기본으로아무경로도찾지않는다. 따라서실행파일의위치를반드시알려주어야한다. * ABOUT TAR tar는 tape recording이이루어지던시절의연장선이다. 폴더를포함하여모든내용을압축할수있다. 명령어는 tar v(z)f A의형태로구성된다. 이때 vf는압축을포함하지않는경우에사용한다. vzf는압축을포함하는경우사용되며, 파일끝에.gz를관용적으로붙인다. 압축하므로파일크기가달라짐을확인 (ls -l) tar xvf A tar cvf A B tar tvf A 묶음풀기 (extract) B를 A라는이름으로묶기 (concatenate) ex) tar cvf test.tar test test (Test) tar파일내부의내용보기. ls -l의형태로보인다. - 9 -
tar xvzf A 압축풀고묶음풀기 ex) tar xvzf test.tar.gz tar cvzf A B B를 A라는이름으로압축하여묶기 tar tvzf A test, tar.gz파일보기. ls -l의형태로보인다. tar xvzf : 풀기, tar cvzf : 묶기, tar tvzf : 테스트 ( 묶여있는파일들을보여준다.) cf. 옵션표시 는생략가능하며, 압축되어있지않거나압축을하지않을경우는옵션에서z를생략한다. ex. filename.tar.gz (tar: 묶여있음, gz: 압축되어있음을의미 ) ex. tar cvzf filename.tar.gz sourcefiles ( 여러개의 source file들을압축 ) tar cvzf test.tar.gz unix-lecture ls -l tar tvzf test.tar.gz rm -rf unix-lecture ls -l tar xvzf unix-lecture.tar.gz ls -l rm test.tar.gz - 10 -
*ABOUT ALIAS alias는일종의별명으로서, 자주쓰는 cmd들을축약하여사용할수있게한다. 각자의 ID로로그인할때, 저장되어있는 alias를선언하게된다. alias 현재선언되어있는 alias를모두본다. alias A 'B' cmd B를 cmd A로사용한다. ex) alias rm 'rm -i' 파일을지울때항상물어보게된다. unalias A cmd A로선언되어있던 alias를제거한다. *ABOUT SSH, SCP Xshell 을사용하여현재 machine 에서다른 machine 으로접속할수있다. ssh 는원격접속과, scp 는 ftp 와비슷한기능을한다. ssh [login name]@[machine name] login name을 ID로사용하여 machine에접속한다. ex) ssh postechian@singlet4.postech.ac.kr ex) ssh singlet4.postech.ac.kr (ID가동일한경우 ) scp [login name]@[machine name]:[file name] 다운로드 scp [file name] [login name]@[machine name]: 업로드 -r 아래경로까지모두포함하여업 / 다운로드 (recursive) -p 파일의시간으로보존한상태로업 / 다운로드 (preserve) -rp recursive and preserve *piping 1) > file.fil: 앞의결과내용을 file.fil에저장 ) 2) >> file.fil (>> 표시앞의결과내용을 file.fil에덧붙이기 ) 3) stdin exec ( 표시앞의결과를 standard input으로받아그뒤의명령 exec을수행 ) cat unix-lecture/ccsdt2.in head n 20 unix-lecture/ccsdt2.in head n 20 unix-lecture/ccsdt2.in tail n 5 ( 결과적으로 ccsdt2.in의 16~20번째 line출력 ) head -20 unix-lecture/ccsdt2.in tail -3 > filename1 (18 19 20 행을출력해 filename1에저장한다 ) *man : 각종프로그램의매뉴얼을보여준다. 필요한옵션기능을확인할수있다. man ls man grep - 11 -
* UNIX 명령만으로히스토그램만들기 grep ATOM final.pdb cut -c 39-44 sort -n uniq -c * shell 환경변수설정 (set, setenv) setenv MY_ENV "beautiful day" echo $MY_ENV set my_var="beautiful week" echo $my_var setenv : 설정된모든내용프린트 set : 설정된모든내용프린트특별한의미를지니는환경변수 : $path, $PATH, $LD_LIBRARY_PATH * 여러파일에한작업하기 : foreach * 파일의일괄수정 : foreach f (file1 file2 file3... filen) sed -i -e "s/xxx/yyy/g" $f grep -v "LINE to delete" $f > _tmp_ mv _tmp_ $f end 위의 sed -i -e "s/xxx/yyy/g 에서 g 는 global을의미. vi의 s 명령의 syntax 참조 * login때자동으로설정만들기 :.login /.cshrc /.tcshrc path alias set setenv * source * bash 와 tcsh 의차이 - 12 -