What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 GNU/Linux 박상민 UNIST 슈퍼컴퓨팅센터 sminpark@unist.ac.kr
History ENIAC 1. Simple and elegant 2. Written in the C programmin g language instead of assem bly code 3. Able to recycle code Linus Torvalds 2013-08-21 UNIST 슈퍼컴퓨팅센터 2
Thanks, Richard *Richard Stallman announces GNU. Richard Stallman, a programmer at MIT s Artif icial Intelligence Lab, experienced a significan t shift in attitudes during the late 1970s. Whe reas the MIT hacker culture was one of sharin g and openness, the commercial software wo rld moved towards secrecy and access to sou rce code became ever more restricted. Richard Stallman Stallman set out to develop a free alternative to the popular Unix operating syste m. This operating system called GNU (for Gnu's Not Unix) was going to be free o f charge but also allow users the freedom to change and share it. Stallman found ed the Free Software Foundation (FSF) based on this philosophy in 1985. While the GNU work did not immediately result in a full operating system, it pro vided the necessary tools for creating Linux. The software developed as part of t he GNU project continues to form a large part of Linux, which is why the FSF ask s for it to be called GNU/Linux. 2013-08-21 UNIST 슈퍼컴퓨팅센터 3
Linux OS in TOP500 2013-08-21 UNIST 슈퍼컴퓨팅센터 4
Installation Pre-requisites Hardware Desktop PC Workstation / Server Virtual Machine Software GNU/Linux image RHEL, CentOS, Fedora, Ubuntu, Suse, etc. 2013-08-21 UNIST 슈퍼컴퓨팅센터 5
Linux Structure KERNEL 운영체제의핵심 시스템자원들을관리하는부분 Shell 명령어해석기 사용자와시스템간의명령의전달 File System 계층구조를이루고있음 정보들을저장할수있는장소 여러유저가하나의시스템을공유할수있도록설계 2013-08-21 UNIST 슈퍼컴퓨팅센터 6
Basic Concept Log in Linux 시스템을사용하기위해서는 Linux account(id) 와비밀번호를가지고시스템에로그인해야한다. Linux 2.6.32-220.el6 (lion) Lion login: smpark Password: Last login: Fri Aug 16 11:03:08 2013 from 10.12.8.191 [smpark@lion ~]$ Caution! Don t login as root unless you should Use su command to switch users to root 2013-08-21 UNIST 슈퍼컴퓨팅센터 7
Basic Concept User Users are identified by user identifications(uids) UID is associated with an integer in the range of 0 to 4294967295 UID=0 are given superuser privileges. Users are placed in groups, identified by group identifications(gids) Integer range of GID is same as UIDs 2013-08-21 UNIST 슈퍼컴퓨팅센터 8
Basic Concept Group Groups define functional areas/responsibilities They allow a collection of users to share files A user can belong to multiple groups You can see what groups you belong to using the groups command: 2013-08-21 UNIST 슈퍼컴퓨팅센터 9
Basic Concept adding new user useradd 명령어를이용 passwd 명령어를이용하여비밀번호설정 [root@lion]# useradd ryu [root@lion]# passwd ryu Changing password for user ryu New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully [root@lion]# 2013-08-21 UNIST 슈퍼컴퓨팅센터 10
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 File System
File System Linux 파일들은하나의루트 (root) 에저장된다. 루트하위에계층적으로파일시스템들이존재한다. directories / root home etc usr ryu smpark p001psd passwd inittab user home directories A B 2013-08-21 UNIST 슈퍼컴퓨팅센터 12
Structure of Linux 2013-08-21 UNIST 슈퍼컴퓨팅센터 13
Special Files /home 모든사용자의 home 디렉터리가저장됨 /bin, /usr/bin 시스템명령어위치 /sbin, /usr/sbin 시스템관리자가사용하는명령어위치 /etc 모든종류의설정파일들이위치 /var logs, spool 디렉터리등이위치 /dev 디바이스 (device) 파일위치 /proc 특별한시스템파일이위치 2013-08-21 UNIST 슈퍼컴퓨팅센터 14
File Permissions #1 Every file 누군가가소유 (own) 하고, 그룹에소속되어있으며, 소유자 (owner), 그룹 (group), 다른사용자 (others) 를위한특정한접근권한을갖고있다. Every user uid(login name) 와 gid(login group) 를가지며, 어떤 group 에속한사용자는 group 권한에따라 group 에속한파일에접근할수있다. 2013-08-21 UNIST 슈퍼컴퓨팅센터 15
File Permissions #2 Linux 는 3 가지형태의권한을제공한다. Read 읽기 (read) 권한을가진사용자는파일이나디렉터리리스트를읽을수있다. Write 쓰기 (write) 권한을가진사용자는파일쓰기가가능하고, 디렉터리에새로운파일을추가할수있다. Execute 실행 (execute) 권한을가진사용자는파일을실행시키는것이가능하며, 디렉터리내에있는파일을볼수있다. $ ls -l -rw-r--r-- 1 pedun60 pe0038 10240 Feb 8 09:40 all.tar -rw-r--r-- 1 pedun60 pe0038 156 Feb 8 09:50 all.tar.gz -rw-r--r-- 1 pedun60 pe0038 0 Feb 8 09:20 b -rw-r--r-- 1 pedun60 pe0038 0 Feb 8 09:20 g -rw-r--r-- 1 pedun60 pe0038 0 Feb 8 09:20 r Permissions Owner Group 2013-08-21 UNIST 슈퍼컴퓨팅센터 16
File Permissions #3 -rwxrwxrwx Other permissions Group permissions Owner permissions Directory flag (d=directory; l=link) 2013-08-21 UNIST 슈퍼컴퓨팅센터 17
File Permissions #4 chmod 파일권한변경 User Group Other Read Write execute Read Write execute Read Write execute r w x r w x r w x 400 200 100 40 20 10 4 2 1 chmod 755 file chmod 500 file2 chmod 644 file3 chmod +x file chmod u-r file chmod a+w file # Owner=rwx Group=r-x Other=r-x # Owner=r-x Group=--- Other=--- # Owner=rw- Group=r-- Other=r-- # Add execute permission to file for all # Remove read permission for owner # Add write permission for everyone 2013-08-21 UNIST 슈퍼컴퓨팅센터 18
Starting X-windows GUI 2013-08-21 UNIST 슈퍼컴퓨팅센터 19
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 Linux Command
Linux Commands Linux 명령어의실행을위해서는, command line 에서명령어와 argument 를입력하면된다. Linux 명령어는다양한옵션을사용할수있다. ls l /home Command name Options(flags) Arguments 2013-08-21 UNIST 슈퍼컴퓨팅센터 21
Special Characters Characters / 디렉터리구분. 현재디렉터리 (Current directory).. 한단계상위디렉터리 (Parent directory) ~ 사용자홈디렉터리 Description * 파일, 디렉터리에서 0 또는그이상의 character 표현 ( 예 ) $ ls pic*2012? 파일이름에서단하나의 character 표현 ( 예 ) $ ls hello?.txt & 입력된명령어를 background에서작동하도록한다. 즉시 shell로돌아오기때문에다른작업을할수있다. ( 예 ) $ walk.x > walk.out & ; 명령어구분, 명령어여러개를동시실행 ( 예 ) $ cal ; ls ; date && 위의 ; 와비슷하나, && 는첫번째명령이완료된후에두번째명령이실행 >, < Redirection >> Redirection 을존재하는파일의끝부분에추가 2013-08-21 UNIST 슈퍼컴퓨팅센터 22
Primary Linux Commands ls 디렉터리내의파일목록을보여줌 옵션 의 미 -a 모든파일보기 -l 자세히보기 -k 파일의크기를 KB 단위로보기 -R 하위디렉터리의파일까지보기 -h 파일크기단위로보기 cat text 파일의내용을스크린에보여줌 $ cat memo This is a small file I made. 2013-08-21 UNIST 슈퍼컴퓨팅센터 23
Primary Linux Command rm 파일이나디렉터리삭제 옵션 의 미 -i 삭제할때확인 -f 강제로삭제 -r 디렉터리삭제시하위디렉터리및파일까지 모두삭제 -v rm 명령어진행과정출력 less/more text 파일내용을스크린에출력 ( 페이지단위출력 ) less와 more는내용이긴파일을확인할때용이하며, 둘다거의유사한기능을제공 차이점 : less는파일끝에서 END 메시지를보여주며기다림. q 입력하여종료. more는바로 shell로빠져나감. 2013-08-21 UNIST 슈퍼컴퓨팅센터 24
Primary Linux Command cp 파일복사 $ ls memo $ cp memo memo.copy $ ls memo memo.copy * 주의 : cp 명령으로복사할때, destination-file( 복사본파일명 ) 이이미존재하면, 파일을덮어써버린다. $ cp i orange orange.2 cp: overwrite orange.2? y 2013-08-21 UNIST 슈퍼컴퓨팅센터 25
Primary Linux Command mv 파일, 디렉터리의이름을바꾸거나위치변경 $ ls memo $ mv memo memo.2012 $ ls memo.2012 head 파일의첫부분출력 tail 파일의끝부분출력 wc 줄또는단어개수출력 -l : 라인개수 -w : 단어개수 2013-08-21 UNIST 슈퍼컴퓨팅센터 26
Primary Linux Command grep 매칭되는문자열검색 $ cat memo Stallman set out to develop a free alternative to the popular Unix operating system. This operating system called GNU (for Gnu's Not Unix) was going to be free of charge but also allow users the freedom to change and share it. $ grep GNU memo GNU (for Gnu's Not Unix) was going to be free of charge but 참고 만약, 위 memo 라는파일에 GNU/Linux, GNU 등의단어가포함되어있다면, grep 은이단어들이포함된모든라인을출력해준다. 2013-08-21 UNIST 슈퍼컴퓨팅센터 27
Primary Linux Command (PIPE) 명령어간의 communication 어떤명령어의결과가다른명령어의입력이되도록함 $ cat months grep Feb Feb echo command line 에입력한내용을스크린에출력 $ echo hello world hello world pwd 현재위치 ( 디렉터리 ) 를출력 $ pwd /home/smpark 2013-08-21 UNIST 슈퍼컴퓨팅센터 28
Primary Linux Command mkdir 새로운디렉터리를생성 rmdir 디렉터리를삭제 참고 : 디렉터리삭제는 rm r 도가능 tar file 을묶거나풀어줌 옵션 c x u r v f t z j C 의미 Creat a tar file Extract the contents of tar file Update Replace Verbose output Specify a file name Display a table of contents for the archive Use gzip compression Use bzip2 compression Change directory 2013-08-21 UNIST 슈퍼컴퓨팅센터 29
Primary Linux Command tar examples $ ls l r g b -rw-r--r-- 1 pedun60 pe0038 0 Feb 8 09:20 b -rw-r--r-- 1 pedun60 pe0038 0 Feb 8 09:20 g -rw-r--r-- 1 pedun60 pe0038 0 Feb 8 09:20 r $ tar cvf all.tar r g b r g b $ tar czf all.tar.gz r g b (use gzip) $ ls all.tar all.tar.gz b g r $ tar xvf all.tar $ tar xzvf all.tar.gz r g b $ tar xzvf all.tar.gz C./rgb/ 2013-08-21 UNIST 슈퍼컴퓨팅센터 30
Primary Linux Command which / whereis 명령어의위치를보여준다 $ which tar /bin/tar $ whereis tar tar: /bin/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz locate 파일찾기 $ locate motd /etc/motd /etc/news/motd.news /lib/security/pam_motd.so /lib64/security/pam_motd.so /usr/share/doc/inn-2.4.3/samples/motd.news 2013-08-21 UNIST 슈퍼컴퓨팅센터 31
Primary Linux Command find 파일찾기 하드디스크의파일 ( 파일명, 디렉터리명 ) 을찾는명령어 Syntax find [directory-list] [option] [expression] $ find /home/smpark name *.c /home/smpark 디렉터리또는그하위디렉터리에서.c 로끝나는파일을찾아보여줌 $ find / -name et* type d / 에서 et 로시작되는모든디렉터리를찾아보여줌 $ find /phome01/pedun60 name *.c ls /home/smpark 디렉터리또는그하위디렉터리에서.c 로끝나는파일을찾아 ls 형식으로보여줌 2013-08-21 UNIST 슈퍼컴퓨팅센터 32
Redirection 명령어나프로그램의결과를스크린에보여주는것처럼파일로방향전환을하는기능 파일의입력또는출력으로사용 명령의결과를다른명령의입력으로사용가능 프로그램의결과를파일로출력 $ walk.x > walk.out $ cal > Feb.txt 파일의내용을명령의입력으로사용 $ walk.x < input.walk > walk.out $ mail steve < letter 2013-08-21 UNIST 슈퍼컴퓨팅센터 33
Process Management Linux 시스템에서는모든 process, daemon 들이 PID(process ID) 라불리는고유한 ID 를갖고있음. 사용되지않는 process 를정리해서시스템관리실시 관련 commands ps 실행중인 process 확인 $ ps PID TTY TIME CMD 17379 pts/1 00:00:00 bash 18707 pts/1 00:00:00 ps ps ef : 표준문법을사용하여시스템에작동하는모든프로세스확인 $ ps ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 2011? 00:00:04 init [5] root 2 1 0 2011? 00:00:04 [migration/0] root 3 1 0 2011? 00:00:00 [ksoftirqd/0] 2013-08-21 UNIST 슈퍼컴퓨팅센터 34
Process Management $ ps ef grep smpark root 19414 25061 0 14:34? 00:00:00 sshd: smpark [priv] smpark 19416 19414 0 14:34? 00:00:00 sshd: smpark@pts/1 smpark 19417 19416 0 14:34 pts/1 00:00:00 -bash smpark 19470 19417 0 14:34 pts/1 00:00:00 ps -ef smpark 19471 19417 0 14:34 pts/1 00:00:00 grep smpark top 시스템에서실행되는 process 를실시간으로확인 $ top top - 14:39:28 up 165 days, 20:06, 1 user, load average: 0.19, 0.06, 0.02 Tasks: 168 total, 1 running, 167 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 8245996k total, 6754796k used, 1491200k free, 268052k buffers Swap: 16779884k total, 194848k used, 16585036k free, 5783228k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4921 loadl 15 0 166m 6696 4892 S 0.7 0.1 64:24.80 LoadL_startd 19679 smpark 15 0 10860 1068 760 R 0.3 0.0 0:00.45 top 2013-08-21 UNIST 슈퍼컴퓨팅센터 35
Process Management kill process 죽이기 Syntax : kill [option] PID-list $ sleep 20 & [1] 20307 $ ps PID TTY TIME CMD 19417 pts/1 00:00:00 bash 20307 pts/1 00:00:00 sleep 20308 pts/1 00:00:00 ps $ kill 20307 [1]+ Terminated sleep 20 $ 2013-08-21 UNIST 슈퍼컴퓨팅센터 36
Alias alias 는복잡하거나길이가긴명령어를 ( 일반적으로짧은 ) 이름으로연결하여 shell 작동하게해준다 $ alias alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias 설정은보통사용자의환경설정파인.bashrc (bash),.tcshrc(c shell) 에서포함하여주면된다. $ vi ~/.bashrc alias golion= ssh smpark@10.0.7.40 $ source ~/.bashrc 2013-08-21 UNIST 슈퍼컴퓨팅센터 37
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 Vi Editor
Vi Editor #1 Early form of word processing Not especially easy to use However, exists on all UNIX/LINUX systems Approximately 100 commands 2013-08-21 UNIST 슈퍼컴퓨팅센터 39
Vi Editor #2 파일열기 $ vi filename (edit mode) ( 예 ) $ vi memo $ view filename (read-only mode) ( 예 ) $ view memo modes 입력모드 입력하는모든것이편집버퍼에입력됨 입력모드에서빠져나오기 (to 명령모드 ) : ESC key 명령모드 입력하는모든것이명령어로해석됨 ( 파일열기 / 닫기, 쓰기, 문자열찾기 / 치환, 복사등 ) 2013-08-21 UNIST 슈퍼컴퓨팅센터 40
Vi Editor #3 Insert, Append, Open, Replace, Change Command mode ESCAPE Colon(:) RETURN Last Line mode Input mode 2013-08-21 UNIST 슈퍼컴퓨팅센터 41
Vi Editor #4 moving the cursor Moving the Cursor(Command Mode) 기본단위커서이동 H 커서를한문자왼쪽으로이동 J 커서를아래줄같은컬럼으로이동 K 커서를위줄같은컬럼으로이동 L 커서를한문자오른쪽으로이동 <Enter> 커서를한문자오른쪽으로이동방향키화면단위커서이동 H M L 화면의맨위쪽으로커서이동 화면의중간줄로커서이동 화면의맨아래줄로커서이동 2013-08-21 UNIST 슈퍼컴퓨팅센터 42
Vi Editor #5 단어, 문장, 절단위이동 W 다음단어의첫문자로커서이동 b 커서가위치한앞방향의단어로커서이동 e 커서가위치한단어의끝으로커서이동 ) 다음문장으로커서이동 } 다음절로커서이동 ( ) 와반대 { } 와반대 0 현재줄의첫문자로커서이동 ^ 현재줄의처음으로커서이동 ( 탭이나공백이아닌 ) $ 현재줄의마지막으로커서이동 2013-08-21 UNIST 슈퍼컴퓨팅센터 43
Vi Editor #6 Ctrl + F 한화면아래로이동 Ctrl + B 한화면위로이동 Ctrl + D 반화면아래로이동 Ctrl + U 반화면위로이동 :$ 마지막줄로이동 G ng : 줄번호 n 으로이동 1G : 편집버퍼의첫줄로이동하기 G : 편집버퍼의마지막줄로이동하기 2013-08-21 UNIST 슈퍼컴퓨팅센터 44
Vi Editor #7 input mode 데이터첨가, 삽입, 치환, 해제 a 현재커서위치오른쪽부터데이터첨가 i 현재커서위치의왼쪽부터데이터첨가 o 현재줄아래줄을공백줄로만듦 A 현재줄의마지막에데이터첨가 I 현재줄의첫문자앞에문자삽입 O 현재줄의위줄을공백줄로만듦 r 현재커서가위치한한문자치환 R 현재커서위치에서 <esc> 키를칠때까지문자치환 cw 현재커서위치의단어를다른단어로치환 C 현재커서의위치부터그줄의마지막까지치환 s 현재커서의문자를치환 S 현재커서의줄을치환 cc 현재커서가위치한줄을다른내용으로치환 ~ 현재커서위치의한문자를소문자, 대문자로전환 <ESC> 데이터입력모드에서벗어남 2013-08-21 UNIST 슈퍼컴퓨팅센터 45
Vi Editor #8 데이터삭제 x X dw db dd D 현재커서가위치한한문자삭제현재커서가위치한앞문자를삭제현재커서가위치한오른쪽단어삭제현재커서가위치한왼쪽단어삭제현재커서가위치한줄삭제현재커서가위치한곳에서오른쪽의내용삭제 명령의취소및반복 u 바로앞의행한명령취소 U 한줄내에서행한명령취소. 바로앞에행한명령재수행 2013-08-21 UNIST 슈퍼컴퓨팅센터 46
Vi Editor #9 데이터이동과복사 yw yy ny p P 현재커서가위치한단어를버퍼에복사 현재줄이버퍼에복사 10yy : 10 줄을복사 현재커서위치로부터 n 줄만큼복사 현재커서오른쪽또는아래줄에버퍼내용복사 현재커서의왼쪽또는위줄에버퍼내용복사 줄의결합 J 현재줄과다음줄을연결 2013-08-21 UNIST 슈퍼컴퓨팅센터 47
Vi Editor #10 command mode vi 종료 :x ZZ :wq :wq 파일명 :q! 파일을디스크에저장한후 vi를벗어난다파일을디스크에저장한후 vi를벗어난다기존파일명을새로운파일명에저장하고 vi 벗어남파일을디스크에저장하지않고 vi에서벗어남 기타명령어 :set nu :set nonu vi 상태에있는파일에줄번호를부여 파일에있는줄번호취소 2013-08-21 UNIST 슈퍼컴퓨팅센터 48
Vi Editor #11 vi 옵션들 -t tag tag 를포함하는파일과위치에편집 -r 파일명지정한파일을복구 -Wn 생략시의윈도우크기를 n 으로한다 -R 읽기전용모드 ( 파일의 overwrite 방지 ) + 명령어 편집전에지정한 ex 명령어수행 -L 모든파일의이름이출력 -C 명령어 지정된편집기의명령어를실행함으로써편집시작 view 파일명 파일을 vi의읽기전용모드로화면에표시 vi file1 file2 파일편집을위해 2개파일을 vi로부른다. 2013-08-21 UNIST 슈퍼컴퓨팅센터 49
Vi Editor #12 검색관련키 / 검색어커서가위치한행포함아래로해당검색어검색? 검색어커서가위치한행포함위로해당검색어검색 n or / 커서의위치를검색한검색어의다음위치로이동 N 커서의위치를검색한검색어의이전위치로이동 파일관련명령어 :w 파일명 변경한파일내용저장 (:w 파일명 해당파일명으로저장 ) (1,5w 파일명 1-5 행까지해당파일로저장 ) :q vi 종료 :e 파일명 :r 파일명 vi 실행후특정파일을불러들여편집 :e# 편집했던이전파일을다시연다 특정파일을불러들임 (1,5r 파일명 해당파일의 1-5 행까지만불러들임 ) 2013-08-21 UNIST 슈퍼컴퓨팅센터 50
Vi Editor #13 :s/pattern/replace :%s/old/new/g :%s/^old/new/g :%s/old$/new/g :%s/aaa//g :10,50s/old/new/g 치환관련명령 현재줄에서치환 파일내의특정단어를새로운단어로치환 ( 문장치환시해당문장을 로묶음 ) 파일내의특정단어로시작하는단어만새로운단어로치환 ( 해당단어가중간에포함된단어제외 ) 파일내의특정단어로끝나는단어만새로운단어로치환 ( 해당단어가중간에포함된단어제외 ) 파일내의 aaa 라는단어를삭제 ( 문장삭제시해당문장을 으로묶음 ) 파일내의 10 행에서 50 행사이의특정단어를새로운단어로치환 ( 문장치환시해당문장을 로묶음 ) 2013-08-21 UNIST 슈퍼컴퓨팅센터 51
Vi Editor #14 vi 환경에서 shell 명령수행 명령모드에서 :! 을입력하고원하는 shell 명령어입력 :!ls :!pwd Shell 로돌아가 ls 명령수행 현재작업 directory 보여줌 명령을수행한뒤 (enter 를치면 ) vi 편집기 ( 명령모드 ) 로복귀 2013-08-21 UNIST 슈퍼컴퓨팅센터 52
Vi Editor #8 2013-08-21 UNIST 슈퍼컴퓨팅센터 53
Other Useful Applications Yum Gnuplot Xterm LibreOffice/OpenOffice/NeoOffice/Office Web Apps GIMP/InkScape/Blender Audacity 2013-08-21 UNIST 슈퍼컴퓨팅센터 54
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 Programming on the Linux System
Programming Find problems Make algorithms Open editor vi, emacs, gedit, etc. Write the codes Matrix multiplication Pi calculation Random walk 2013-08-21 UNIST 슈퍼컴퓨팅센터 56
Compiling #1 개요 컴파일의의미 사용자가작성한소스코드를컴퓨터가실행가능하도록바이너리화하는과정. 큰의미에서는이미작성해놓은라이브러리를포함시키는것까지포함. 컴파일러 컴파일작업을수행해주는역할을한다. 사용하는언어의종류에따라표준화되어있으며, 제작업체별로여러가지버전이존재한다. 대표적인 C 컴파일러 icc (Intel), xlc (IBM), gcc (GNU) 대표적인 Fortran 컴파일러 ifort (Intel), xlf (IBM), gfortran (GNU) 2013-08-21 UNIST 슈퍼컴퓨팅센터 57
Compiling #2 환경설정 환경변수확인 Execution platforms ONLY Execution platform 중한가지시스템으로로그인되어있어야함 사용자가원하는컴파일러가사용할준비가되었는지확인 Ex) which gcc 특히 MPI 라이브러리를사용할경우필요한라이브러리를 load 해서환경설정해야함 export PATH=/opt/mpi/intel/bin:$PATH export LD_LIBRARY_PATH=/opt/mpi/intel/lib:$LD_LIBRARY_PATH Environment module toolbox 이용가능 2013-08-21 UNIST 슈퍼컴퓨팅센터 58
Compiling #3 Sequential code OpenMP 지시어나 MPI 라이브러리를사용하지않는일반적인사용자코드컴파일 Platform 별바이너리호환이되지않으므로반드시해당 platform 으로로그인하여수행함 컴파일러종류 다양한컴파일러가설치되어있으므로사용자의용도에맞게선택 Fortran : xlf, ifort, gfortan C : xlc, icc, gcc C++ : xlc, ifort, g++ 컴파일러사용예 $ ifort o exam exam.f90 2013-08-21 UNIST 슈퍼컴퓨팅센터 59
Compiling #4 OpenMP code OpenMP 지시어가포함된사용자코드컴파일 Platform 별바이너리호환이되지않으므로반드시해당 platform 으로로그인하여수행함 컴파일러종류 다양한컴파일러가설치되어있으므로사용자의용도에맞게선택 Fortran : xlf,_r, ifort -openmp, gfortan fopenmp C : xlc_r, icc -openmp, gcc fopenmp C++ : xlc_r, ifort -openmp, g++ -fopenmp 컴파일러사용예 $ ifort o exam openmp exam.f90 2013-08-21 UNIST 슈퍼컴퓨팅센터 60
Compiling #5 MPI code MPI 라이브러리를사용하여작성한사용자코드컴파일 Platform 별바이너리호환이되지않으므로반드시해당 platform 으로로그인하여수행함 컴파일러종류 다양한컴파일러가설치되어있으므로사용자의용도에맞게선택 Fortran : mpif77, mpif90 C : mpicc C++ : mpicc 컴파일러사용예 $ mpif90 o exam exam.f90 2013-08-21 UNIST 슈퍼컴퓨팅센터 61
Random walk on 1D #include <stdio.h> #include <stdlib.h> #define N 3 #define step 1000 int main(){ int i,j,x[step][n]; double rn; } for(i=0;i<step;i++) for(j=0;j<n;j++){ x[i][j] = 0; } srand48(time(null)); for(i=1;i<step;i++){ for(j=0;j<n;j++){ rn = drand48(); } if(rn<0.5)x[i][j]=x[i-1][j]-1; else x[i][j]=x[i-1][j]+1; } printf("%d\t%d\t%d\t%d\n", i,x[i][0],x[i][1],x[i][2]); program random_walk integer,parameter :: N=3, STEP=1000 integer,dimension(0:step,n) :: x integer :: i,j real :: rnd call random_seed() call random_number(rnd) x(0,:)=0 do i=1,step do j=1,n call random_number(rnd) if(rnd<0.5) then x(i,j)=x(i-1,j)+1 else x(i,j)=x(i-1,j)-1 endif enddo print*,i,x(i,:) enddo end program random_walk 2013-08-21 UNIST 슈퍼컴퓨팅센터 62
Compiling Compiler 사용을위한환경설정 직접환경설정 스크립트이용 module 이용.bashrc 파일에추가 Compile ifort random.f90(fortran), icc random.c (c) Execution $./random.x > walk.out $ head walk.out # STEP N= 1 N= 2 N= 3 N= 4 N= 5 1-1 -1-1 1 1 2 0 0 0 2 0 3 1 1-1 3 1 4 0 0 0 4 2 5 1 1 1 5 1 2013-08-21 UNIST 슈퍼컴퓨팅센터 63
Visualization 결과그리기 $ gnuplot gnuplot> plot walk.out u 1:2 w l, walk.out u 1:3 w l, \ walk.out u 1:4 w l, walk.out u 1:5 w l, \ walk.out u 1:5 w l, walk.out u 1:6 w l gnuplot> 2013-08-21 UNIST 슈퍼컴퓨팅센터 64
Pi Calculation using Integration Problem Get PI value using numerical integration 1 4 dd = π 1 + x2 0 f ( x 1 ) f ( x 2 ) f ( x n ) Requirement n π 4 i= 1+ (( i 0.5) 1 ) n 1 2 1 n 1 n... x = (2 0.5) 1 x1 = (1 0.5) n 2 1 n 1 x n = ( n 0.5) n 2013-08-21 UNIST 슈퍼컴퓨팅센터 65
Pi Calculation #include <stdio.h> #include <math.h> int main() { const long num_step=100000000; long i; double sum, step, pi, x; step = (1.0/(double)num_step); sum=0.0; printf( -----------------------------------------------------------\n ); for (i=0; i<num_step; i++) { x = ((double)i - 0.5) * step; sum += 4.0/(1.0+x*x); } pi = step * sum; printf( PI = %5lf (Error = %e)\n, pi, fabs(acos(-1.0)-pi)); printf( -----------------------------------------------------------\n ); return 0; } 2013-08-21 UNIST 슈퍼컴퓨팅센터 66
Pi Calculation PROGRAM Pi_cal3 IMPLICIT NONE!! Number of count INTEGER(KIND=8), PARAMETER :: num_step=100000000 INTEGER(KIND=8) :: i DOUBLE PRECISION :: pi WRITE(*,200) pi = 0.0d0 DO i=0, num_cnt-1 pi = pi + 4.0d0 * (dble(-1)**i/ dble(2*i+1)) ENDDO WRITE(*, 100) pi, dabs(dacos(-1.0d0)-pi) WRITE(*, 200) 100 FORMAT( PI =, F17.15, (Error =, E11.5, ) ) 200 FORMAT( --------------------------------------------------- ) STOP END PROGRAM 2013-08-21 UNIST 슈퍼컴퓨팅센터 67
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 Shell Programming
Shell #1 introduction 목적 Unix/Linux 시스템의기본명령어를반복적으로사용하고자할때유용하게사용 Shell script 는 shell 에서제공하는기능을순차적으로사용하기위하여프로그램처럼동작하도록 script 로만드는것 필요에따라서 shell 용연산자와옵션들을사용할수있음 주요 shell bash(bourne-again Shell) ksh(korn Shell) csh(c shell) 2013-08-21 UNIST 슈퍼컴퓨팅센터 69
Shell #2 introduction Shell script 작성 시스템콜, 여러프로그래밍도구, 유틸리티, 실행파일등을묶어서작성 모든종류의 Unix/Linux 명령어, 유틸리티, 도구사용가능 분기문또는순환문등의 shell 내부명령어를사용가능 Shell script 실행권한 Shell script 파일실행을위해서는읽기 / 실행권한을가져야함 실행권한이없고읽기권한이있는경우에는 sh filename.sh 와같이 s h 명령을통해실행이가능 읽기권한이없는경우는 script 내용을읽을수없기때문에실행자체가불가능 Shell script 구조 첫줄에사용하고자하는 shell 명시 ( 예 ) #!/bin/bash) 실행부분 ( 실제적인프로그래밍부분 ) 프로그램종료를위해 exit 0( 생략가능 ) 2013-08-21 UNIST 슈퍼컴퓨팅센터 70
Shell #3 Examples #!/bin/bash echo hello exit 0 $ sh hello.sh hello $ $ ls -rw-r--r-- 1 pedun60 pe0038 32 Feb 9 13:34 hello.sh $./hello.sh -bash:./hello.sh: Permission denied $ chmod a+x hello.sh $ ls -rwxr-xr-x 1 pedun60 pe0038 32 Feb 9 13:34 hello.sh $./hello.sh hello $ 2013-08-21 UNIST 슈퍼컴퓨팅센터 71
Shell #4 script 성공 / 실패확인 Shell script 성공 / 실패확인 명령어실행이성공하면 $? 에숫자 0 이저장된다. 명령어실행이실패한경우에는종료상태값이 $? 에저장된다. 명령어실행의성공여부에따라다른동작을하게만들고자할때유용하게사용할수있다. Example #!/bin/bash echo hello echo $? ech hello echo $? exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 72
Shell #5 주석 주석 (comment) # 으로시작하는줄은주석으로처리 # 다음부분부터주석처리 단, #! 은사용 shell 을나타내므로주석처리되지않음 Example #!/bin/bash # print hello echo hello echo $? # success, $? is 0 ech hello echo $? # failure, $? is not 0 exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 73
Shell #6 명령어구분자 Shell script 명령어구분자 한줄에 2 개이상의명령어를사용하고자할때, 세미콜론 (;) 을사용하여명령어구분 2 중세미콜론 (;;) 은 case 문의종료를나타냄 Example #!/bin/bash # print hello echo hello; echo world echo $? # success, $? is 0 ech hello echo $? # failure, $? is not 0 exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 74
Shell #7 변수할당과치환 Shell script 에서의변수 변수이름이 variable 이라면변수의값은 $variable 로표현 variable 에값을할당할때는 = 연산자를사용 ( 예 ) variable=0 최초변수타입은꼭정해져있지않아, 변수할당시그값의타입에따라변수타입이정해짐 타입다른변수간의할당이나연산은하지않는것이좋음 Example #!/bin/bash variable1=world echo hello $variable1 variable2=$? echo $variable2 # success, $? is 0 exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 75
Shell #8 변수할당연산자 Shell script 에서의변수할당 변수값을초기화하거나변경 Shell 에서는산술식과문자열을할당해주는역할을모두수행함 할당연산자앞에는빈칸이들어가서는안됨 테스트문에서사용되는비교연산자와는다른의미 Example #!/bin/bash color=red number=12 echo $number apples are $color exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 76
Shell #9 산술연산자 기본산술연산자 더하기 (+), 빼기 (-), 곱하기 (*), 나누기 (/) 제곱 (exponentiation): ** Example #!/bin/bash let a=5 let b=6 let c=a+b**2 echo 5+6^2 = $c exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 77
Shell #10 산술연산자 & 논리연산자 산술연산자 상수값만큼증가 : += 상수값만큼감소 : -= 상수값만큼곱함 : *= 상수값만큼나눔 : /= 상수값으로나눈나머지값 : %= 논리연산자 and : && or : 2013-08-21 UNIST 슈퍼컴퓨팅센터 78
Shell #11 숫자표기 숫자상수표기방법 10 진수 : 64 8 진수 (0 으로시작 ) : 0100 16 진수 (0X 로시작 ) : 0X40 다른진법 ( 진수 # 숫자, 진수는 2~32) : 32#20 Example #!/bin/bash let a=64 let b=0100 let c=0x40 let d=32#20 echo $a $b $c $d exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 79
Shell #12 조건문 if/then/else/fi if 문장의명령어목록의종료상태 ($?) 가 0 인경우 then 문장실행 if 문장의 [ expression ] 이 0 인경우 then 문장실행 그렇지않은경우는 else 문장실행 Example #!/bin/bash let a=1 let b=$a if [ $a eq $b ] then echo a = b else echo a!= b fi exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 80
Shell #13 비교연산자 정수비교 같음 : [ $a eq $b ] 같지않음 : [ $a ne $b ] 더큼 : [ $a gt $b ] 더크거나같음 : [ $a ge $b ] 더작음 : [ $a lt $b ] 더작거나같음 : [ $a le $b ] 2013-08-21 UNIST 슈퍼컴퓨팅센터 81
Shell #14 순환문 for/in/do/done 순환문구조 #!/bin/bash for argument in [list] do commands done exit 0 argument는루트인덱스에해당 list는 argument에할당되는값의목록 argument 값이변화되면서반복적으로 commands 수행 2013-08-21 UNIST 슈퍼컴퓨팅센터 82
Shell #15 조건문 Example #!/bin/bash Ofiles= porion pgaia hamel kigi Nfiles= porion pgaia daisy hamel kigi cheetah for file in $Ofiles do touch $file done for file in $Nfiles do if [ -e $file ] then mv $file ${file}_old else touch ${file}_new fi done exit 0 2013-08-21 UNIST 슈퍼컴퓨팅센터 83
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 Building Applications
Common Procedure Configure has a lot of options configure -h 를통해서확인필수! prefix, FC, CC/CXX, FFLAGS, CFLAGS, LDFLAGS, etc. Make The purpose of the make utility is to determine automatically which p ieces of a large program need to be recompiled, and issue the comm ands to recompile them. Make install installation 2013-08-21 UNIST 슈퍼컴퓨팅센터 85
Parallel Libraries MPI(Message Passing Interface) 분산및병렬처리에서정보의교환에대해기술하는표준 OpenMPI, MPICH, MVAPICH, etc. OpenMPI (http://www.open-mpi.org) Source download : http://www.open-mpi.org/software/ompi/v1.6/ openmpi-1.6.5 (stable) Example(using GNU compiler) $./configure --prefix=path/to/install CC=gcc CXX=g++ FC=gfort ran F77=gfortran $ make $ make install 2013-08-21 UNIST 슈퍼컴퓨팅센터 86
Numerical Analysis Libraries FFTW(http://www.fftw.org) C subroutine library for computing the discrete Fourier transform (DF T) in one or more dimensions, of arbitrary input size, and of both real and complex data MPI support : 2.1.5, 3.3.x or later The API of FFTW 3.x is incompatible with that of FFTW 2.x Single / double precision Example(single precision, non-mpi) $./configure --prefix=path/to/install CC=gcc CXX=g++ FC=gfort ran F77=gfortran --enable-float --enable-shared $ make $ make install 2013-08-21 UNIST 슈퍼컴퓨팅센터 87
What Linux is 2013. 08. 22 ~ 2013. 08. 23, UNIST 슈퍼컴퓨팅센터 Assignment
2013-08-21 UNIST 슈퍼컴퓨팅센터 89