<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6722011313761774920</id><updated>2011-11-27T17:33:43.874-08:00</updated><title type='text'>리눅스 백과사전</title><subtitle type='html'>Linux, RHCE, RHCT, Redhat, CentOS, Fedora, Suse, Solaris, Unix, OpenSource, SAMBA, NFS, Route, iptables, firewall</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default?start-index=101&amp;max-results=100'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>158</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1002102263805883380</id><published>2010-07-07T18:59:00.001-07:00</published><updated>2010-07-07T18:59:46.921-07:00</updated><title type='text'>[SSL] openssl 인증서 생성 방법</title><content type='html'>[key 파일 생성]&lt;br /&gt;openssl genrsa -des3 -out filename.key 1024&lt;br /&gt;암호&lt;br /&gt;-- 암호 없이 할려면 openssl genrsa -out filename.key 1024&lt;br /&gt;-- 암호를 추가 할려면 openssl rsa -in filename.key -des3 -out new_filename.key&lt;br /&gt;-- 암호 제서시 openssl rsa -in filename.key -out new_filename.key&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[csr생성]&lt;br /&gt;openssl req -new -key filename.key -out filename.csr&lt;br /&gt;일반적인 값을 입력하고 common Name에 원하는 도메인 값입력&lt;br /&gt;email주소에 도메인 관리자 메일 주소입력&lt;br /&gt;&lt;br /&gt;[crt생성]&lt;br /&gt;openssl req -key filename.key -x509 -nodes -sha1 -days 365 -in filename.csr -out filename.crt&lt;br /&gt;내용보기&lt;br /&gt;openssl x509 -noout -text -in filename.crt&lt;br /&gt;openssl req -noout -text -in filename.csr&lt;br /&gt;openssl rsa -noout -text -in filename.key&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ex)&lt;br /&gt;&lt;br /&gt;Key 생성&lt;br /&gt;&lt;br /&gt;openssl genrsa -des3 -out mail.test.com.key 1024&lt;br /&gt;&lt;br /&gt;[root@www ~/ssl/]# openssl genrsa -des3 -out mail.test.com.key 1024&lt;br /&gt;Generating RSA private key, 1024 bit long modulus&lt;br /&gt;....++++++&lt;br /&gt;.................++++++&lt;br /&gt;e is 65537 (0x10001)&lt;br /&gt;Enter pass phrase for mail.test.com.key: 패스워드 입력&lt;br /&gt;Verifying - Enter pass phrase for mail.test.com.key: 동일 패스워드 입력&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Csr 생성 &lt;br /&gt;&lt;br /&gt;openssl req -new -key mail.test.com.key -out mail.test.com.csr&lt;br /&gt;&lt;br /&gt;[root@www ~/ssl/]# openssl req -new -key mail.test.com.key -out mail.test.com.csr&lt;br /&gt;Enter pass phrase for mail.test.com.key:&lt;br /&gt;You are about to be asked to enter information that will be incorporated&lt;br /&gt;into your certificate request.&lt;br /&gt;What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;There are quite a few fields but you can leave some blank&lt;br /&gt;For some fields there will be a default value,&lt;br /&gt;If you enter '.', the field will be left blank.&lt;br /&gt;-----&lt;br /&gt;Country Name (2 letter code) [GB]:kr&lt;br /&gt;State or Province Name (full name) [Berkshire]:Seoul&lt;br /&gt;Locality Name (eg, city) [Newbury]:Gangnamgu&lt;br /&gt;Organization Name (eg, company) [My Company Ltd]:Test Copr&lt;br /&gt;Organizational Unit Name (eg, section) []:supper&lt;br /&gt;Common Name (eg, your name or your server's hostname) []:mail.test.com&lt;br /&gt;Email Address []:admin@test.com&lt;br /&gt;&lt;br /&gt;Please enter the following 'extra' attributes&lt;br /&gt;to be sent with your certificate request&lt;br /&gt;A challenge password []: 엔터&lt;br /&gt;An optional company name []:ucert&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Cst 생성&lt;br /&gt;&lt;br /&gt;openssl req -key mail.test.com.key -x509 -nodes -sha1 -days 3650 -in mail.test.com.csr -out mail.test.com.crt&lt;br /&gt;&lt;br /&gt;[root@www ~/ssl/]# openssl req -key mail.test.com.key -x509 -nodes -sha1 -days 3650 -in mail.test.com.csr -out mail.test.com.crt&lt;br /&gt;Enter pass phrase for mail.test.com.key: 패스워드 입력&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;위와같이 생성 하면 됩니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;이젠 아파치 설정에서 ssl.conf 파일을 수정 하면 된다.&lt;br /&gt;&lt;br /&gt;        SSLEngine on&lt;br /&gt;&lt;br /&gt;        SSLCipherSuite ALL:!ADH:!EXORT56:RC+RSA:+HIG:+MEDM:+LOW:+SSLv2:+EXP:+eNULL&lt;br /&gt;        SSLCertificateFile /apachedomains/conf/ssl/mail.test.com.crt&lt;br /&gt;        SSLCertificateKeyFile /apachedomains/conf/ssl/mail.test.com.key&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그리고 재가동 하면 확인 끝&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1002102263805883380?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1002102263805883380/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1002102263805883380' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1002102263805883380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1002102263805883380'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2010/07/ssl-openssl.html' title='[SSL] openssl 인증서 생성 방법'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3965518945617906568</id><published>2010-04-06T19:18:00.000-07:00</published><updated>2010-04-06T19:19:32.941-07:00</updated><title type='text'>FTP 접근 사용자 접근 정보를 한곳에서 처리하는 방법(netrc)</title><content type='html'>FTP 접근 사용자 접근 정보를 한곳에서 처리하는 방법(netrc)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- 보통 리눅스에서는 .netrc파일을 통해 접속하고자하는 원격지의 아이디와 암호를 관리할 수 있습니다. .netrc 파일을 $HOME 디렉토리에 만드시면 되는데, 그 내용을 다음과 같이 구성됩니다.&lt;br /&gt;&lt;br /&gt;사용자 계정 홈 디렉토리에 .netrc 만들어 아래 와 같이 작성한다.&lt;br /&gt;- 형식&lt;br /&gt;machine "호스트 정보" login "계정" password "패스워드"&lt;br /&gt;ex)&lt;br /&gt;vi /home/test/.netrc&lt;br /&gt;&lt;br /&gt;machine 192.168.1.5 login test password 123456&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[test@localhost ~]$ cat .netrc&lt;br /&gt;machine domainname login user_id password user_pass&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;계정정보가 들어간 FTP 쉘 스크립트&lt;br /&gt;============================================================================================================&lt;br /&gt;#!/bin/sh&lt;br /&gt;USERNAME="test"&lt;br /&gt;PASSWORD="123456"&lt;br /&gt;HOST="192.168.1.5"&lt;br /&gt;PENSION_DATA_DIR="/data/source/"&lt;br /&gt;GET_FILE="*.*"&lt;br /&gt;#&lt;br /&gt;echo `date +%Y'-'%m'-'%d`&lt;br /&gt;mkdir $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`&lt;br /&gt;cd $PENSION_DATA_DIR&lt;br /&gt;mv $PENSION_DATA_DIR/$GET_FILE $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`&lt;br /&gt;&lt;br /&gt;{ echo $USERNAME $PASSWORD&lt;br /&gt;echo cd /batch/smd&lt;br /&gt;echo bin&lt;br /&gt;echo prompt&lt;br /&gt;echo mget $GET_FILE&lt;br /&gt;echo bye&lt;br /&gt;} | ftp -n -v $HOST &gt;&gt; /home/test/batchftp.log&lt;br /&gt;#&lt;br /&gt;ls -al $PENSION_DATA_DIR&lt;br /&gt;============================================================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;netrc를 사용한 FTP 쉘 스크립트&lt;br /&gt;============================================================================================================&lt;br /&gt;#!/bin/sh&lt;br /&gt;HOST="192.168.1.5"&lt;br /&gt;PENSION_DATA_DIR="/data/source"&lt;br /&gt;GET_FILE="*.*"&lt;br /&gt;#&lt;br /&gt;echo `date +%Y'-'%m'-'%d`&lt;br /&gt;mkdir $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`&lt;br /&gt;cd $PENSION_DATA_DIR&lt;br /&gt;mv $PENSION_DATA_DIR/$GET_FILE $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`&lt;br /&gt;&lt;br /&gt;{ &lt;br /&gt;echo cd /batch/smd&lt;br /&gt;echo bin&lt;br /&gt;echo prompt&lt;br /&gt;echo mget $GET_FILE&lt;br /&gt;echo bye&lt;br /&gt;} | ftp -v $HOST &gt;&gt; /home/test/batchftp.log&lt;br /&gt;#&lt;br /&gt;ls -al $PENSION_DATA_DIR&lt;br /&gt;============================================================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;기타 TIP&lt;br /&gt;&lt;br /&gt;.netrc 제대로 만들었는데도 ftp 접속이 자동으로 안될 경우에는 권한을 600 으로 주었는지 확인한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.netrc &lt;br /&gt;&lt;br /&gt;.my.cnf&lt;br /&gt;&lt;br /&gt;.login   &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;위의 파일들은 사용자 홈계정에 위치하는 조금은 생소한 환경설정 파일이다.  (솔라리스8 리눅스는 확인 못했음)&lt;br /&gt;&lt;br /&gt;각각의 역할은 다음과 같다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;.netrc - 자동으로 ftp 에 로그인하게 하는 역할을 한다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;machine    서버이름    login    계정    password     패스워드&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;.my.cnf  - 자동으로 원격지 mysql에 접속하는 역할을 한다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[client]&lt;br /&gt;&lt;br /&gt;user=계정&lt;br /&gt;&lt;br /&gt;password=패스워드&lt;br /&gt;&lt;br /&gt;[mysqld]&lt;br /&gt;&lt;br /&gt;language=korean&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;.login - 잘은 모르겠는데 사용자 환경에 있어 .cshrc 보다 먼저 읽히는거 같다. 아래의 내용이 들어가있다.&lt;br /&gt;&lt;br /&gt;stty erase "^H"&lt;br /&gt;stty kill "^U"&lt;br /&gt;stty intr "^C"&lt;br /&gt;stty eof "^D"&lt;br /&gt;stty susp "^Z"&lt;br /&gt;stty stop "^-"&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;쉘프로그램 돌릴때 stty 어쩌구 에러가 나면 위의 내용이 중복 처리된 부분이다. 이럴때 뒤져보면&lt;br /&gt;&lt;br /&gt;.cshrc 와 .login 안에 중복 처리되있는 경우가 있다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3965518945617906568?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3965518945617906568/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3965518945617906568' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3965518945617906568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3965518945617906568'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2010/04/ftp-netrc.html' title='FTP 접근 사용자 접근 정보를 한곳에서 처리하는 방법(netrc)'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1872399829608523634</id><published>2009-11-09T18:30:00.001-08:00</published><updated>2009-11-09T18:30:51.267-08:00</updated><title type='text'>[find] 명령어</title><content type='html'>[find] 명령어&lt;br /&gt;&lt;br /&gt;find ---주어진 파일명과 동일한 파일을 찾고, 그 경로를 출력한다. &lt;br /&gt;&lt;br /&gt;# find / -name newbie -print &lt;br /&gt;&lt;br /&gt;최상위 루트 디렉토리부터 검색하여 검색된 파일을 한 행에 하나씩 표준 출력 &lt;br /&gt;&lt;br /&gt;# find . -name newbie -print &lt;br /&gt;&lt;br /&gt;현제의 작업 디렉토리에서 검색 &lt;br /&gt;&lt;br /&gt;# find / -size +1000 -print &lt;br /&gt;&lt;br /&gt;최상위 루트에서 크기가 1000블록 이상인 파일 검색 &lt;br /&gt;&lt;br /&gt;# find . -size -1000 -print &lt;br /&gt;&lt;br /&gt;현 디렉토리에서 크기가 1000블록 이하인 파일 검색 &lt;br /&gt;&lt;br /&gt;# find . -mtime +10 -print &lt;br /&gt;&lt;br /&gt;10일 이전에 수정된 파일 검색 &lt;br /&gt;&lt;br /&gt;# find . -mtime -10 exec rm {} : &lt;br /&gt;&lt;br /&gt;10일 이내에 수정한 파일을 검색하여 모두 지운다 &lt;br /&gt;&lt;br /&gt;# find / -cmin 5 -print &lt;br /&gt;&lt;br /&gt;5분전에 마지막으로 수정된 파일을 찾을 수 있다. &lt;br /&gt;&lt;br /&gt;# find /home -empty -print &lt;br /&gt;&lt;br /&gt;/home 디렉토리에 용량이 0인 파일과 디렉토리를 찾는다. &lt;br /&gt;&lt;br /&gt;# find / -perm -4000 -print &lt;br /&gt;&lt;br /&gt;퍼미션이 4000 이상인 파일을 모두 출력한다. &lt;br /&gt;출처 : http://www.linuxno1.com/ &lt;br /&gt;  &lt;br /&gt;find ./ -name "*.jsp" -exec grep "request" {} ; -print &lt;br /&gt;디렉토리내에(하위디렉토리포함) *.jsp라는 파일안에 request라는 단어가 있는 지 찾아서 뿌려줍니다. &lt;br /&gt;  &lt;br /&gt;find ./ -name "*.jsp" -exec perl -pi -e "s/search/replace/g" {} ; -print &lt;br /&gt;디렉토리내에 *.jsp라는 파일명을 가진 파일을 찾고 그 안에 search라는 단어가 포함되어 있을경우, replace로 수정합니다. &lt;br /&gt;문자열안에 " 이 들어갈 경우 x22로 써줍니다. &lt;br /&gt;  &lt;br /&gt;find ./ -mtime 0 &lt;br /&gt;24시간 내에 수정된 파일을 뿌려줍니다. &lt;br /&gt;  &lt;br /&gt;아쉽게도 출력되는 것에 대한 제어는 잘 모르겠습니다. ㅡ.ㅡ; &lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;특정 용량 이상의 파일을 찾고 싶을때 &lt;br /&gt;find /home/ -size +2000000 &lt;br /&gt;&lt;br /&gt;특정 확장자의 파일을 찾고 자동으로 지우고 싶을때 &lt;br /&gt;find /home/ -name *.asf -exec rm -rf {} ; &lt;br /&gt;&lt;br /&gt;퍼미션 706인 디렉토리를 차자서 707로 변환 &lt;br /&gt;find /home/ -perm 706 -type d -exec chmod 707 {} ; &lt;br /&gt;chmod 707 `find -perm 706` &lt;br /&gt;&lt;br /&gt;사용자 계정에서 환경설정 파일 검색했나 확인 &lt;br /&gt;find /home/ -maxdepth 2 -name .bash_history -exec grep -H .conf {} ; | &lt;br /&gt;less &lt;br /&gt;&lt;br /&gt;3일 이내 동안 수정된 파일 확인 &lt;br /&gt;find /home/ -mtime -3 &lt;br /&gt;&lt;br /&gt;3시간 이내 동안 수정된 파일 확인 &lt;br /&gt;find /home/ -mmin -3 &lt;br /&gt;&lt;br /&gt;수정된지 3시간 이후된 파일 &lt;br /&gt;find /home/ -mmin +3 &lt;br /&gt;&lt;br /&gt;현재폴더에서 수정된지 1시간 이내의 파일들만 압축 &lt;br /&gt;tar cvzf filename.tgz $( find ./ -type f -mmin -60 )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1872399829608523634?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1872399829608523634/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1872399829608523634' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1872399829608523634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1872399829608523634'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/11/find.html' title='[find] 명령어'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-9022143441103356712</id><published>2009-11-03T22:35:00.001-08:00</published><updated>2009-11-03T22:35:49.467-08:00</updated><title type='text'>리눅스 특정 파일 확장자 한번에 변경 스크립트</title><content type='html'>리눅스 특정 파일 확장자 한번에 변경 스크립트 입니다.&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;for i in `find -name *.jad`&lt;br /&gt;do&lt;br /&gt;echo $i `echo $i|sed 's/.jad/.java/'`&lt;br /&gt;mv $i `echo $i|sed 's/.jad/.java/'`&lt;br /&gt;done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-9022143441103356712?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/9022143441103356712/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=9022143441103356712' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/9022143441103356712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/9022143441103356712'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/11/blog-post.html' title='리눅스 특정 파일 확장자 한번에 변경 스크립트'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-2157530665595958354</id><published>2009-10-08T00:08:00.001-07:00</published><updated>2009-10-08T00:08:52.492-07:00</updated><title type='text'>[Oracle] 함수 계산 누적 값 더하기</title><content type='html'>Quiz&gt; 아래와 같이 결과 값을 만들어라.&lt;br /&gt;COL1       COL2&lt;br /&gt;---- ----------&lt;br /&gt;A            10&lt;br /&gt;C            20&lt;br /&gt;D            10&lt;br /&gt;B            30&lt;br /&gt;&lt;br /&gt;COL1       COL2        SUM&lt;br /&gt;---- ---------- ----------&lt;br /&gt;A            10         10&lt;br /&gt;C            20         30&lt;br /&gt;D            10         40&lt;br /&gt;B            30         70&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[풀이]&lt;br /&gt;SQL&gt; create table exam1(&lt;br /&gt;  2  id varchar2(2),&lt;br /&gt;  3  num number)&lt;br /&gt;  4  ;&lt;br /&gt;SQL&gt; insert into exam1 values('A',10);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into exam1 values('C',20);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into exam1 values('D',10);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into exam1 values('B',30);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&gt; select * from exam1;&lt;br /&gt;&lt;br /&gt;ID          NUM&lt;br /&gt;---- ----------&lt;br /&gt;A            10&lt;br /&gt;C            20&lt;br /&gt;D            10&lt;br /&gt;B            30&lt;br /&gt;&lt;br /&gt;SQL&gt;&lt;br /&gt;  1  select min(y.id) col1, min(y.num) col2, sum(x.num) sss&lt;br /&gt;  2  from exam1 x, exam1 y&lt;br /&gt;  3  where x.rowid&lt;=y.rowid&lt;br /&gt;  4  group by y.rowid&lt;br /&gt;  5* order by sss&lt;br /&gt;&lt;br /&gt;COL1       COL2        SSS&lt;br /&gt;---- ---------- ----------&lt;br /&gt;A            10         10&lt;br /&gt;C            20         30&lt;br /&gt;D            10         40&lt;br /&gt;B            30         70&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-2157530665595958354?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/2157530665595958354/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=2157530665595958354' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2157530665595958354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2157530665595958354'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/10/oracle.html' title='[Oracle] 함수 계산 누적 값 더하기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-617209542361683719</id><published>2009-10-07T02:33:00.001-07:00</published><updated>2009-10-07T02:33:14.764-07:00</updated><title type='text'>[아이피 대역 계산법]</title><content type='html'>[아이피 대역 계산법]&lt;br /&gt;4.16.5.0 ~ 5.7.4.0  AA&lt;br /&gt;&lt;br /&gt;1. (4*256*256*256)+(16*256*256)+(5*256)+0 = 67108864+1048576+1280+0&lt;br /&gt;2. (5*256*256*256)+(7*256*256)+(4*256)+0 =  83886080+458752+1024+0&lt;br /&gt;&lt;br /&gt; -&gt; 68158720 ~ 84345856 = 여기까지의 숫자가 AA의 IP 대역이라 계산할 수 있다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-617209542361683719?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/617209542361683719/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=617209542361683719' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/617209542361683719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/617209542361683719'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/10/blog-post.html' title='[아이피 대역 계산법]'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-532541275805290877</id><published>2009-09-14T22:06:00.003-07:00</published><updated>2009-09-14T22:06:46.327-07:00</updated><title type='text'>[Oracle] 함수 기능</title><content type='html'>* 단일 행 함수&lt;br /&gt;&lt;br /&gt;-함수가 정의된 SQL문이 실행될 때 각각의 ROW에 대해 수행되며 ROW 당 하나의 결과를 리턴 해줍니다.&lt;br /&gt;&lt;br /&gt;-인수로는 상수,변수,표현식들이 사용될 수 있습니다.&lt;br /&gt;&lt;br /&gt;-SELECT,WHERE,ORDER BY 절에 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    구 분    |      함수         |                      내 용&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;                 LOWER             모든 문자를 소문자로&lt;br /&gt;&lt;br /&gt;                 UPPER              모든 문자를 대문자로&lt;br /&gt;&lt;br /&gt;                 INITCAP            첫 글자는 대문자,나머지는 소문자로&lt;br /&gt;&lt;br /&gt;                 CANCAT            첫 번째 문자와 두 번째 문자를 연결&lt;br /&gt;&lt;br /&gt;                 SUBSTR            문자의 길이를 리턴할 때&lt;br /&gt;&lt;br /&gt;                 LENGTH            문자의 길이를 리턴할 때&lt;br /&gt;&lt;br /&gt;                 NVL                  널값을 다른 값으로 대체할 때&lt;br /&gt;&lt;br /&gt;                 NVL2                조건에 의해 널값을 다른 값으로 대체할 때&lt;br /&gt;&lt;br /&gt;                 SUBSTR            특정 문자의 문자열중 필요 부분만 선별하여 사용&lt;br /&gt;&lt;br /&gt;    문자       RTRIM               서브 스트림의 정확한 위치와 길이를 요구(오른쪽)&lt;br /&gt;&lt;br /&gt;    함수       LTRIM               서브 스트림의 정확한 위치와 길이를 요구(왼쪽)&lt;br /&gt;&lt;br /&gt;                 RPAD                문자열을 제외한 공간에 지정한 문자열로 대체(오른쪽)&lt;br /&gt;&lt;br /&gt;                 LPAD                문자열을 제외한 공간에 지정한 문자열로 대체(왼쪽)&lt;br /&gt;&lt;br /&gt;                 TRANSLATE       첫 문자는 탐색집합의 첫 문자로 대체(2번째도 동일)&lt;br /&gt;&lt;br /&gt;                 REPLACE          특정 문자열을 다른 문자열로 대체&lt;br /&gt;&lt;br /&gt;                 SOUNDX            같은 단어 또는 유사한 사운드 단어를 음성학적으로&lt;br /&gt;&lt;br /&gt;                 LENGTH            문자의 실제 길이를 변환할 때&lt;br /&gt;&lt;br /&gt;                 LENGTHB          문자열의 실제 길이를 변환할 때&lt;br /&gt;&lt;br /&gt;                 INTSTR             문자열 내의 특정 스트림의 위치&lt;br /&gt;&lt;br /&gt;                 NULLIF             조건이 같으면 NULL,다르면 지정된 값을 리턴할 때&lt;br /&gt;&lt;br /&gt;                 COALESCE       조건에 따라 여러 가지 값을 리턴할 때&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; 시스템       USER               현재 DB 사용자&lt;br /&gt;&lt;br /&gt;   함수        USERID            현재 DB 사용자에게 할당되는 사용자번호&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*문자함수의 예제&lt;br /&gt;&lt;br /&gt;EX) -2개의 문자값을 결합합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt;SELECT CONCAT(CONCAT(ename,  ' is a '),job)&lt;br /&gt;&lt;br /&gt;              FROM emp;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;              CONCAT(CONCAT(ENAME,'ISA&lt;br /&gt;&lt;br /&gt;              ---------------------------------&lt;br /&gt;&lt;br /&gt;              SMITH is a CLERK&lt;br /&gt;&lt;br /&gt;              ALLEN is a SALESMAN&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;     -정의된 문장 단어의 첫 번째 문자를 대문자로 변환&lt;br /&gt;&lt;br /&gt;      SOL&gt; SELECT INITCAP( 'the soap') FROM DUAL;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;               INITCAP(&lt;br /&gt;&lt;br /&gt;              -----------&lt;br /&gt;&lt;br /&gt;               The Soap&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;     -정의된 문장의 왼쪽 나머지 공간을 지정한 문자로 채웁니다.&lt;br /&gt;&lt;br /&gt;       SQL&gt; SELECT LPAD( 'Page 1' , 15 , '*.') FROM DUAL;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;                LPAD( 'PAGE1',15&lt;br /&gt;&lt;br /&gt;               ---------------------&lt;br /&gt;&lt;br /&gt;                *.*.*.*.*Page 1&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의된 문장의 왼쪽부터 지정된 단어가 발견되면 제거합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT LTRIM( 'xyxXxyLAST WORD','xy') FROM DUAL;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;               LTRIM('XYXXX&lt;br /&gt;&lt;br /&gt;              -------------------&lt;br /&gt;&lt;br /&gt;               XxyLAST WORD&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의된 문장에서 해당 문자가 발견되면 지정된 문자로 변경합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT REPLACE( 'JACK and JUE' , 'J' , 'BL') FROM DUAL;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;               REPLACE( 'JACKA&lt;br /&gt;&lt;br /&gt;              -----------------------&lt;br /&gt;&lt;br /&gt;               BLACK and BLUE&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;   -정의된 문자의 오른쪽 나머지 공간을 지정한 문자로 채웁니다.&lt;br /&gt;&lt;br /&gt;     SQL&gt; SELECT RPAD(ename, 11 ,'ab' ) FROM emp WHERE ename = 'TURNER' ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;              RPAD(ENAME , 11 ,'AB')&lt;br /&gt;&lt;br /&gt;             ---------------------------&lt;br /&gt;&lt;br /&gt;              TURNERababa&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의된 문자의 오른쪽부터 지정된 단어가 발견되면 제거합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT RTRIM( 'TURNERyxXxy' , 'xy') FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;               RTRIM( 'TU&lt;br /&gt;&lt;br /&gt;              -------------&lt;br /&gt;&lt;br /&gt;               TURNERyxX&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의된 문장의 지정된 위치부터 해당 길이 만큼만 추출합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT SUBSTR( 'ABCDEFG' , 3 , 2 ) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;               SU&lt;br /&gt;&lt;br /&gt;              -------&lt;br /&gt;&lt;br /&gt;               CD&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;     -정의된 문장의 뒤에서부터 지정된 위치의 해당 길이 만큼만 추출합니다.&lt;br /&gt;&lt;br /&gt;       SQL&gt; SELECT SUBSTR ( 'ABCDEFG' , -3 , 2 ) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;                SU&lt;br /&gt;&lt;br /&gt;               --------&lt;br /&gt;&lt;br /&gt;                EF&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;     -문자 'Q'를 ASCII 코드로 변환합니다.&lt;br /&gt;&lt;br /&gt;       SQL&gt; SELECT ASCII ( 'Q' ) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;                ASCII ( 'Q' )&lt;br /&gt;&lt;br /&gt;               ---------------&lt;br /&gt;&lt;br /&gt;                       81&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;     -정의된 문장에서 지정된 위치에 존재하는 문자의 위치 값을 찾아 줍니다.&lt;br /&gt;&lt;br /&gt;       SQL&gt; SELECT INSTR ( 'CORPORATE FLOOR' , 'OR' ,3 ,2 ) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;                INSTR ( 'CORPORATEFLOOR' , 'OR' , 3 , 2 )&lt;br /&gt;&lt;br /&gt;               ---------------------------------------------&lt;br /&gt;&lt;br /&gt;                14&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의된 문장의 길이를 변환합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT LENGTHB ( '가나다라마바사') FROM DUAL ;&lt;br /&gt;&lt;br /&gt;               LENGTH( '가나다라마바사' )&lt;br /&gt;&lt;br /&gt;              ---------------------------&lt;br /&gt;&lt;br /&gt;                               14&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의된 단어 중에 가장 높은 값을 찾아줍니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT GREATEST ( 'HARRY' , 'HARIOT' ,'HALORD' ) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;               GREAT&lt;br /&gt;&lt;br /&gt;              ---------&lt;br /&gt;&lt;br /&gt;               HARRY&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    -정의한 컬럼이 NULL이면 지정한 값으로 대체합니다.&lt;br /&gt;&lt;br /&gt;      SQL&gt; SELECT NVL (sal , 0 ) , NVL( ename , '*' ) , NVL(hiredate , '01-JAN-02' ) FROM emp ;&lt;br /&gt;&lt;br /&gt;               NVL(SAL , 0 )     NVL(ENAME ,          NVL(HIRE&lt;br /&gt;&lt;br /&gt;              ------------------------------------------------&lt;br /&gt;&lt;br /&gt;                     800                 SMITH                  80/12/17&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*시스템 함수&lt;br /&gt;&lt;br /&gt;  -현재 어떤 사용자로 데이터 베이스에 접속하였는지 알 수 있습니다.&lt;br /&gt;&lt;br /&gt;    SQL&gt; SELECT USER FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;             USER&lt;br /&gt;&lt;br /&gt;            -------&lt;br /&gt;&lt;br /&gt;             SCOTT&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* 숫자함수/날짜함수&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;   구 분           함 수                                 내 용&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;                   ROUND             해당 소수점 자리에서 반올림할 때&lt;br /&gt;&lt;br /&gt;                   TRUNC             해당 소수점 자리에서 절삭할 때&lt;br /&gt;&lt;br /&gt;                   MOD(m/n)        m을 n으로 나누고 남은 나머지를 리턴할 때&lt;br /&gt;&lt;br /&gt;                   ABS                 숫자 값을 절대값으로 바꾼다&lt;br /&gt;&lt;br /&gt;                   SIGN                숫자가 양수:+1, 음수:-1, 0:0&lt;br /&gt;&lt;br /&gt; 숫자함수      FLOOR             실수값을 정수값으로&lt;br /&gt;&lt;br /&gt;                   CEIL                그 수보다 가장 크거나 작은값을 리턴&lt;br /&gt;&lt;br /&gt;                   POWER            해당 수에 대한 지수값을 표현&lt;br /&gt;&lt;br /&gt;                   LOG                로그값으로 변환&lt;br /&gt;&lt;br /&gt;                   SIN                  SIN값&lt;br /&gt;&lt;br /&gt;                   COS                COS값&lt;br /&gt;&lt;br /&gt;                   TAN                 TAN값&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;                   SYSDATE         현재 시스템 날짜를 보여줄 때&lt;br /&gt;&lt;br /&gt;                   ADD_MONTHS   지정한 날짜에 몇 월을 추가한 결과의 월을 계산할 때&lt;br /&gt;&lt;br /&gt;                   LAST_DAY        해당 월의 마지막 날짜를 알고자 할 때&lt;br /&gt;&lt;br /&gt; 날짜함수      NEW_TIME        해당 표준시로 시간을 변환할 때&lt;br /&gt;&lt;br /&gt;                   NEXT_DAY        해당 날짜의 다음 지정한 날짜로 현환할 때&lt;br /&gt;&lt;br /&gt;                   NONTH_BETWEEN   지정된 월 간의 월수를 알고자 할 때&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* 숫자함수 예제....&lt;br /&gt;&lt;br /&gt;-정의된 값을 절대값으로 변환 합니다&lt;br /&gt;&lt;br /&gt;  SQL&gt; SELECT ABS(-15) FROM DUAL ;&lt;br /&gt;&lt;br /&gt;           ABS(-15)&lt;br /&gt;&lt;br /&gt;         -----------&lt;br /&gt;&lt;br /&gt;               15&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 값의 올림된 값으로 변환합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT CEIL(15.7) FROM DUAL ;&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;          CEIL(15.7)&lt;br /&gt;&lt;br /&gt;       -------------&lt;br /&gt;&lt;br /&gt;              16&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 값의 내림된 값으로 변환합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT FLOOR(15.7) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          FLOOR(15.7)&lt;br /&gt;&lt;br /&gt;        ---------------&lt;br /&gt;&lt;br /&gt;               15&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 산술식의 COSINE 값으로 변환합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT COS(180*3.14/180) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          COS(180*3.14/180)&lt;br /&gt;&lt;br /&gt;        --------------------&lt;br /&gt;&lt;br /&gt;                     -.99999873&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 숫자의 지수승값을 계산합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT EXP(4) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          EXP(4)&lt;br /&gt;&lt;br /&gt;        ---------&lt;br /&gt;&lt;br /&gt;          54.59815&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-뒤에 정의된 수로 앞에 정의된 수를 나눈 나머지 값을 반환합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT MOD(11,4) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          MOD(11,4)&lt;br /&gt;&lt;br /&gt;        ------------&lt;br /&gt;&lt;br /&gt;                3&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 수를 지정한 자리 수에서 반올림합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT ROUND(15.193 , 1) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          ROUND(15.193 , 1)&lt;br /&gt;&lt;br /&gt;        -------------------&lt;br /&gt;&lt;br /&gt;                  15.2&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 값이 음수이면 -1 , 0 이면 0, 양수이면 1을 리턴합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT SIGN(-15) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          SIGN(-15)&lt;br /&gt;&lt;br /&gt;        ------------&lt;br /&gt;&lt;br /&gt;               -1&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 수를 지정한 자리 수 에서 절삭합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT TRUNC(15.97 , 1) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          TRUNC(15.79 , 1)&lt;br /&gt;&lt;br /&gt;         -----------------&lt;br /&gt;&lt;br /&gt;                  15.7&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* 날짜 함수 예제&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-현재 시스템 날짜를 제공합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT SYSDATE FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          SYSDATE&lt;br /&gt;&lt;br /&gt;        -----------&lt;br /&gt;&lt;br /&gt;          06/11/13&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-해당 날짜에 지정한 달 수만큼 더합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT HIREDATE , ADD_MONTHS(HIREDATE , 1)&lt;br /&gt;&lt;br /&gt;          FROM EMP WHERE EMPNO = 7782 ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          HIREDATE     ADD_MONT&lt;br /&gt;&lt;br /&gt;        --------------------------&lt;br /&gt;&lt;br /&gt;          81/06/09         81/07/09&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 날짜의 달에서 마지막 일이 몇 일인지 알 수 있습니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT HIREDATE , LAST_DAY(HIREDATE)&lt;br /&gt;&lt;br /&gt;          FROM EMP WHERE EMPNO = 7782 ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          HIREDATE     LAST_DAY&lt;br /&gt;&lt;br /&gt;       --------------------------&lt;br /&gt;&lt;br /&gt;            81/06/09       81/06/30&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 두 날짜간의 차이 값을 알 수 있습니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT HIREDATE , MONTHS_BETWEEN(SYSDATE , HIREDATE)&lt;br /&gt;&lt;br /&gt;          FROM EMP WHERE EMPNO = 7782 ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          HIREDATE          MONTHS_BETWEEN(SYSDATE , HIREDATE)&lt;br /&gt;&lt;br /&gt;        ------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;           81/06/09                                                     252.930883&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 날짜를 녀도 값을 기준으로 반올림 합니다&lt;br /&gt;&lt;br /&gt; SQL &gt; SELECT&lt;br /&gt;&lt;br /&gt;           ROUND(TO_DATE(' 27-OCT-98' , 'DD-MON-YY' ) ,&lt;br /&gt;&lt;br /&gt;           'YEAT' ) FROM DUAL ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;           ROUND(TO&lt;br /&gt;&lt;br /&gt;          ------------&lt;br /&gt;&lt;br /&gt;              99/01/01&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;변환 함수&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;    구 분           함 수                                내 용&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;                   TO_CHAR       숫자,날짜 타입의 Data를 varchar2타입으로 변환&lt;br /&gt;&lt;br /&gt;  변환함수     TO_NUMBER   숫자를 포함하는 문자 String을 number 타입으로 변환&lt;br /&gt;&lt;br /&gt;                   TO_DATE        문자 String을 날짜 타입으로 변환&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*날짜 형식 요소&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;   형식 요소                                           설 명&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;       MM                달 수(ex : 10)&lt;br /&gt;&lt;br /&gt;      MON               월 이름을 3자리 문자로 표현(ex : JAN , FEB , MAR 등)&lt;br /&gt;&lt;br /&gt;     MONTH            월 이름(ex : JANUARY,FEBUARY,MARCH 등)&lt;br /&gt;&lt;br /&gt;        DD                날짜 (ex : 14)&lt;br /&gt;&lt;br /&gt;         D                 주의 일수 (ex : 4)&lt;br /&gt;&lt;br /&gt;        DY                요일 이름을 3자리 문자로 표현(ex : SUN , MON , TUE 등)&lt;br /&gt;&lt;br /&gt;       DAY               요일 이름(ex : SUNDAY , MONDAY 등)&lt;br /&gt;&lt;br /&gt;      YYYY              년도 4자리 수 (ex : 2002)&lt;br /&gt;&lt;br /&gt;        YY                년도의 마지막 2자리(ex : 02)&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*시간 형식 요소&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;     형식 요소                                       설 명&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;          9                숫자(ex : 9999 → 1534)&lt;br /&gt;&lt;br /&gt;          0                자리 수가 비면 0으로 채워줌 ( ex : 09999 → 01534 )&lt;br /&gt;&lt;br /&gt;          $                금액에 $를 표시해줌 (ex : $99999 → $1534 )&lt;br /&gt;&lt;br /&gt;          .                 명시한 위치에 소수점을 표시함 (ex : 99999.99 → 1534.00 )&lt;br /&gt;&lt;br /&gt;          ,                 명시한 위치에 콤마를 표시함 (ex : 999,999 → 1,534 )&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;변환 함수 예제들.....&lt;br /&gt;&lt;br /&gt;-현재 날짜가 한 주에서 몇번째 일인지 알 수 있습니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT SYSDATE , TO_CHAR ( SYSDATE , 'D' )&lt;br /&gt;&lt;br /&gt;          FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;         SYSDATE        TO_CHAR&lt;br /&gt;&lt;br /&gt;       --------------------------&lt;br /&gt;&lt;br /&gt;         02/09/26                5&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 날짜의 출력 포맷을 DD-MM-YY로 출력합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT ename , TO_CHAR(hiredate , 'DD-MM-YY' ) HIREDATE&lt;br /&gt;&lt;br /&gt;          FROM emp ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          ENAME          TO_CHAR(hiredate , 'DD-MM-YY' )&lt;br /&gt;&lt;br /&gt;         ------------------------------------------------&lt;br /&gt;&lt;br /&gt;          SMITH                17         11                90&lt;br /&gt;&lt;br /&gt;          ALLY                  20         02                91&lt;br /&gt;&lt;br /&gt;          ......................&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-일자를 출력할 때 0 값을 제거합니다(09 → 9 , 01 → 1)&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT ename , TO_CHAR (hiredate , 'fmDD-MM-YY' ) HIREDATE&lt;br /&gt;&lt;br /&gt;          FROM emp ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          ENAME         TO_CHAR(hiredate , 'fmDD-MM-YY' )&lt;br /&gt;&lt;br /&gt;        ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;           ....................................&lt;br /&gt;&lt;br /&gt;           MARTIN              9           09                   91&lt;br /&gt;&lt;br /&gt;           ....................................&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-문자 100을 숫자값으로 출력합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT TO_NUMBER ( '100' ) FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          TO_NUMBER&lt;br /&gt;&lt;br /&gt;         --------------&lt;br /&gt;&lt;br /&gt;                 100&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-현재 시간을 AM , PM 표기법으로 출력합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT TO_CHAR( SYSDATE , 'AM HH:MI ' )&lt;br /&gt;&lt;br /&gt;          FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          TO_CHAR(&lt;br /&gt;&lt;br /&gt;         -----------&lt;br /&gt;&lt;br /&gt;          오전 10 : 10&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-숫자값을 출력할 때 금액표시를 합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT TO_CHAR( 12506 , '$9099,999' ) FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          TO_CHAR(&lt;br /&gt;&lt;br /&gt;         -----------&lt;br /&gt;&lt;br /&gt;          $010,234&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 날짜를 지정한 포맷으로 출력합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT TO_DATE( '01-JUL-99' , 'DD-MM-YY' )&lt;br /&gt;&lt;br /&gt;          FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          TO_DATE(&lt;br /&gt;&lt;br /&gt;         -----------&lt;br /&gt;&lt;br /&gt;           99/07/01&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-정의된 시간을 지정한 포맷으로 출력합니다&lt;br /&gt;&lt;br /&gt; SQL&gt; SELECT TO_DATE( '01:30' , 'HH24:MI' ) FROM dual ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;          TO_DATE&lt;br /&gt;&lt;br /&gt;         ----------&lt;br /&gt;&lt;br /&gt;           13:30&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 단일행함수&lt;br /&gt;* NVL2 ( Colum, Express1, Express2 )&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-해당 컬럼이 null이면 Express-2 의 값을 , null이 아니면 Express-1의 값을 리턴해 줍니다.&lt;br /&gt;&lt;br /&gt;  오라클 이전 버전에서 사용되던 NVL함수는 정의된 컬럼의 값이 null인 경우 지정한 값으로&lt;br /&gt;&lt;br /&gt;  대체하는 기능을 가지고 있었습니다. 반대로, NVL2 함수는 정의된 컬럼의 값이 지정한&lt;br /&gt;&lt;br /&gt;  값인 경우 null값으로 대체된다.&lt;br /&gt;&lt;br /&gt;  NVL2 함수는 해당 컬럼이 null 값이 아니면 Express2의 값을 리턴해 주고 null 값이면&lt;br /&gt;&lt;br /&gt;  Express3의 값을 리턴해 주는 기능을 가지고 있습니다.&lt;br /&gt;&lt;br /&gt;  SQL&gt; SELECT empno, ename, nv12( comm, comm.*1.1, 0 )&lt;br /&gt;&lt;br /&gt;           FROM emp ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    EMPNO    ENAME     COMM     NVL2( COMM, COMM*1.1, 0 )&lt;br /&gt;&lt;br /&gt;  ----------------------------------------------------------&lt;br /&gt;&lt;br /&gt;      7369       SMITH                                          0&lt;br /&gt;&lt;br /&gt;      7499       ALLEN        300                           330&lt;br /&gt;&lt;br /&gt;      7521       WARD         500                           550&lt;br /&gt;&lt;br /&gt;      7566       JONES                                         0&lt;br /&gt;&lt;br /&gt;      ..............................................&lt;br /&gt;&lt;br /&gt;-&gt;COMM이 null인 경우 null이 아닌 경우&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* NULLIF ( Express1, Express2 )&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-Express-1과 Express-2의 값을 비교하여 그 값이 같으면 null을 리턴하고 다르면 Express-1의&lt;br /&gt;&lt;br /&gt; 값을 리턴해 줍니다.&lt;br /&gt;&lt;br /&gt;  NULLIF 함수는 Express-1 과 Express-2 의 값을 비교하여 그 값이 같으면 null 값을 리턴하고&lt;br /&gt;&lt;br /&gt;  서로 다른 값을 가지고 있으면 Express-1의 값을 리턴해 주는 함수입니다.&lt;br /&gt;&lt;br /&gt;  LENGTH(first_name)의 값과 LENGTH(last_name)의 값을 NULLIF 함수로 비교하여 같으면&lt;br /&gt;&lt;br /&gt;  null 값을 화면에 출력하고 다르면 LENGTH(first_name)의 값을 화면에 출력합니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;  SQL&gt; SELECT empno, ename, nullif( comm, 0 )&lt;br /&gt;&lt;br /&gt;           FROM emp ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;     EMPNO     ENAME    COMM     NULLIF( COMM, 0 )&lt;br /&gt;&lt;br /&gt;  --------------------------------------------------&lt;br /&gt;&lt;br /&gt;       7369        SMITH&lt;br /&gt;&lt;br /&gt;       7370        ALLEN        300                300&lt;br /&gt;&lt;br /&gt;       7521        WARD         500                500&lt;br /&gt;&lt;br /&gt;       7566        JONES  &lt;br /&gt;&lt;br /&gt;       7654        MARTIN      1400               1400&lt;br /&gt;&lt;br /&gt;       .....................................&lt;br /&gt;&lt;br /&gt;-&gt;COMM이 NULL이므로 NULL, COMM이 NULL이 아니므로 COMM값으로...&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*COALLESCE 함수&lt;br /&gt;&lt;br /&gt;이 함수는 EXPRESS-1의 값이 NULL값이 아니면 EXPRESS-1의 값을 화면에 출력해 주고&lt;br /&gt;&lt;br /&gt;NULL 값이면 EXPRESS-2의 값을 EXPRESS-1의 값과 EXPRESS-2의 값모두 NULL이면&lt;br /&gt;&lt;br /&gt;EXPRESS-N의 값을 화면에 출력해 주는 함수입니다. 문법에서 정의된 각 컬럼에서 NULL이&lt;br /&gt;&lt;br /&gt;아닌 첫 번째 컬럼의 값을 돌려줍니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SQL&gt; SELECT coalesce( comm,sal ) FROM emp ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;      COALESCE( COMM,SAL )&lt;br /&gt;&lt;br /&gt;     -------------------------&lt;br /&gt;&lt;br /&gt;                   800&lt;br /&gt;&lt;br /&gt;                   300&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SQL&gt; SELECT coalesce ( comm, 100 ) FROM emp ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;       COALESCE( COMM,100 )&lt;br /&gt;&lt;br /&gt;     -------------------------&lt;br /&gt;&lt;br /&gt;                   100&lt;br /&gt;&lt;br /&gt;                   300&lt;br /&gt;&lt;br /&gt;                   500&lt;br /&gt;&lt;br /&gt;-&gt;이 문법은 COALESCE([컬럼],[값]) 문법에서 정의된 컬럼이 NULL이면 정의된 값을&lt;br /&gt;&lt;br /&gt;더한 결과를 돌려줍니다. 원래 NULL이지만 100을 더한 값이 출력됩니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*TRIM함수&lt;br /&gt;&lt;br /&gt;이 함수는 오라클 8i 버전에서 추가된 함수이며 이전 버전에서 제공되던 LTRIM 함수와&lt;br /&gt;&lt;br /&gt;RTRIM 함수를 결합한 형태의 함수입니다. TRIM 함수는 문자값의 왼쪽 또는 오른쪽 부분에&lt;br /&gt;&lt;br /&gt;정의한 문자값이 존재하면 그 문자를 절삭시키는 기능을 가지고 있습니다. TRIM 함수는&lt;br /&gt;&lt;br /&gt;3가지 종류의 기능을 가지고 있습니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-먼저,LEADING은 이전의 LTRIM 함수와 동일한 기능을 가지고 있습니다.정의된 컬럼의 값&lt;br /&gt;&lt;br /&gt;왼쪽에 해당 문자열이 존재하면 문자값을 절삭시켜서 화면에 출력합니다.&lt;br /&gt;&lt;br /&gt;SQL&gt; SELECT ename, TRIM( LEADING 'A' FROM ename ) as TRIM&lt;br /&gt;&lt;br /&gt;         FROM emp&lt;br /&gt;&lt;br /&gt;         WHERE ename LIKE 'A%' ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        ENAME                  TRIM&lt;br /&gt;&lt;br /&gt;      -------------------------&lt;br /&gt;&lt;br /&gt;        ALLEN                   LLEN&lt;br /&gt;&lt;br /&gt;        ADAMS                  DAMS&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-TRAILING은 이전의 RTRIM 함수의 기능을 가지고 있으며 컬럼값의 오른쪽에 존재하는 문자값을&lt;br /&gt;&lt;br /&gt;절삭해줍니다.&lt;br /&gt;&lt;br /&gt;SQL&gt; SELECT ename, TRIM( TRAILING 'N' FROM ename ) as TRIM&lt;br /&gt;&lt;br /&gt;         FROM emp&lt;br /&gt;&lt;br /&gt;         WHERE ename LIKE '%N' ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        ENAME            TRIM&lt;br /&gt;&lt;br /&gt;      ---------------------&lt;br /&gt;&lt;br /&gt;        ALLEN             ALLE&lt;br /&gt;&lt;br /&gt;        MARTIN           MARTI&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-BOTH는 왼쪽, 오른쪽에 해당 문자열이 있으면 절삭해 주는 기능을 가지고 있습니다.&lt;br /&gt;&lt;br /&gt;SQL&gt; SELECT ename, TRIM( BOTH 'A' FROM ename ) as TRIM&lt;br /&gt;&lt;br /&gt;         FROM emp&lt;br /&gt;&lt;br /&gt;         WHERE ename LIKE 'A%' ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;       ENAME          TRIM&lt;br /&gt;&lt;br /&gt;     --------------------&lt;br /&gt;&lt;br /&gt;       ALLEN           LLEN&lt;br /&gt;&lt;br /&gt;       ADAMS          DAMS&lt;br /&gt;&lt;br /&gt;-&gt;ENAME 컬럼에서 마지막 문자가 'A'인 값은 발견되지 않았고 첫번째 문자가 'A'인 사원은 ALLEN과 ADAMS&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-532541275805290877?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/532541275805290877/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=532541275805290877' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/532541275805290877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/532541275805290877'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/09/oracle.html' title='[Oracle] 함수 기능'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-6516646440799788330</id><published>2009-09-14T16:41:00.001-07:00</published><updated>2009-09-14T16:41:45.750-07:00</updated><title type='text'>^M문자없애기</title><content type='html'>^M문자없애기&lt;br /&gt;&lt;br /&gt;      vi로 문서를 보다 보면 줄끝마다 ^M 이 보이는 경우가 있습니다.&lt;br /&gt;      이는 윈도우시리즈(도스포함)에서 작성된 문서를 유닉스로 볼때 생기는 현상 입니다.&lt;br /&gt;&lt;br /&gt;      이런 현상이 왜 생기는 이유는 윈도우와 유닉스에서의 ASCII화일 형식이 서로 다릅니다.&lt;br /&gt;&lt;br /&gt;      일단 윈도우에서는 엔터시에 한줄을 내리고 커서를 앞으로 보내주지만 즉,엔터 한번으로 &lt;br /&gt;      두 명령이 입력되는거죠..&lt;br /&gt;&lt;br /&gt;      하지만 유닉스에서는 엔터치면 단지 줄만 바뀌죠..즉 한번의 엔터는 단지 한번의 명령일 뿐 입니다..^^; &lt;br /&gt;&lt;br /&gt;      그래서 도스파티션에 있는 화일을 그냥 카피하면 ^M자들이 지저분하게 보이죠..&lt;br /&gt;&lt;br /&gt;      반대로 유닉스용 화일을 도스로 카피해서 도스용 에디터로 보면 전부 한줄로 붙어서 나타나게 된답니다.&lt;br /&gt;&lt;br /&gt;      아래는 몇가지 방법입니다.&lt;br /&gt;&lt;br /&gt;      1. vi 에디터를 이용해서 ^M 문자 없애는 방법&lt;br /&gt;&lt;br /&gt;             1) tr 을 이용합니다.&lt;br /&gt;                vi 에디터에서 다음과 같이 입력합니다. 여기서 1G는 첫라인으로 간다는 &lt;br /&gt;                뜻이고, 느낌표부터는 쉘명령 tr을 이용한다는 겁니다.&lt;br /&gt;&lt;br /&gt;                1G!Gtr -d ^M&lt;br /&gt;&lt;br /&gt;             2) ed 명령을 사용합니다.&lt;br /&gt;                vi 에디터에서 다음과 같이 입력합니다. 여기서 : 는 아시다시피 &lt;br /&gt;                명령모드로 가는 거구, 1은 첫라인을 $는 마지막 라인을 의미합니다. &lt;br /&gt;                그러므로 여기서 1,$ 는 첫라인부터 마지막라인까지라는 뜻이겠죠? &lt;br /&gt;                s는 substitute의 약자로써 다음의 /피대체어/대체어/ 에서 &lt;br /&gt;                피대체어를 대체어로 바꾼다는 것입니다. 여기서는 ^M을 없애라는 &lt;br /&gt;                뜻이겠죠? 마지막의 g는 global의 약자로 각 라인에서 해당문자열이 &lt;br /&gt;                나올때마다 몽땅 바꾸라는 의미.&lt;br /&gt;&lt;br /&gt;                :1,$s/^M//g&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      2. perl 을 이용하는 방법&lt;br /&gt;&lt;br /&gt;             perl -pi -e 's/\r//' inputfile &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      3. sed 를 이용하는 방법&lt;br /&gt;&lt;br /&gt;             1 번 vi 에디터를 이용하는 방법에서 언급 되었습니다. 커맨드라인상에서 &lt;br /&gt;             바로 수정하는 방법.&lt;br /&gt;&lt;br /&gt;             sed 's/^M//g' inputfile &gt; outputfile &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      4. awk 를 이용하는 방법&lt;br /&gt;&lt;br /&gt;             print $0 는 문서전체를 의미합니다.&lt;br /&gt;&lt;br /&gt;             awk '{print $0,"\r"}' inputfile &gt; outputfile&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      5. tr 을 이용하는 방법&lt;br /&gt;&lt;br /&gt;             1 번 vi 에디터를 이용하는 방법에서도 언급되었지만 에디터를 부르지 &lt;br /&gt;             않고 커맨드라인상에서 바로 고치는 방법입니다. -d 옵션은 delete를 의미.&lt;br /&gt;&lt;br /&gt;             tr -d '\015' &lt; inputfile &gt; outputfile&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      6. mcopy 이용시 옵션을 주는 방법&lt;br /&gt;&lt;br /&gt;             -t 옵션을 이용하면 mcopy로 복사할때 ^M 문자가 없어지고 copy됩니다. &lt;br /&gt;          &lt;br /&gt;             mcopy -t a:/test.cap .&lt;br /&gt;&lt;br /&gt;      7. fromdos 명령을 이용하는 방법&lt;br /&gt;&lt;br /&gt;             간단히 리눅스에 포함되어있는 유틸리티를 이용하는 방법입니다. fromdos는&lt;br /&gt;             도스용 문서를 리눅스(유닉스)용으로, todos는 리눅스에서 도스용으로 변환&lt;br /&gt;             할때 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;             fromdos inputfile&lt;br /&gt;&lt;br /&gt;             &lt;br /&gt;      참고 : ^M 의 입력은 [Ctrl+V][Ctrl+M] 입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      또다른 방법하나.&lt;br /&gt;&lt;br /&gt;      //g$s/&lt;br /&gt;      요렇게 하면 몽땅 지워집니다.&lt;br /&gt;      1 은 첫라인부터&lt;br /&gt;      $ 은 마지막라인까지&lt;br /&gt;      s 는 다음과 같이 바꾸는데...&lt;br /&gt;      ^M 은 입력할때 Ctrl+V M 요렇게 해야허구...&lt;br /&gt;      // 는 원래 요사이에 뭔 string이 들어가야하지만&lt;br /&gt;        없애야하기에 암껏두 안썼음.&lt;br /&gt;      g 는 문서전체에 걸쳐 몽땅...&lt;br /&gt;&lt;br /&gt;      이게 귀찮으시면 그냥 fromdos 명령 사용하세요~&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      저는 보통 vi 편집기 명령모드에서 :1,$s/^M//g 이걸로 ^M을 없애고 있습니다..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-6516646440799788330?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/6516646440799788330/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=6516646440799788330' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/6516646440799788330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/6516646440799788330'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/09/m.html' title='^M문자없애기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1708332103634436657</id><published>2009-08-19T02:22:00.001-07:00</published><updated>2009-08-19T02:22:53.215-07:00</updated><title type='text'>wget 을 웹소스 땡기기</title><content type='html'>다운받는 경로&lt;br /&gt;&lt;br /&gt;http://www.gun.org/software/&lt;br /&gt;&lt;br /&gt;(리눅스용은 대부분 디폴트로 깔려있습니다.)&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;설치 방법&lt;br /&gt;&lt;br /&gt;# tar xvfz wget-5.x.x.tar.gz&lt;br /&gt;&lt;br /&gt;# ./configure&lt;br /&gt;&lt;br /&gt;# make install&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;사용 방법&lt;br /&gt;&lt;br /&gt;# wget http://www.naver.com/index.html&lt;br /&gt;&lt;br /&gt;현재 디렉토리에 index.html 파일을 가져옵니다.&lt;br /&gt;&lt;br /&gt;index.html 파일에 링크되어 있는 것까지 가져오려면 -r 옵션을 사용합니다.&lt;br /&gt;&lt;br /&gt;# wget -r http://www.naver.com/index.html&lt;br /&gt;&lt;br /&gt;-r 옵션은 재귀적을 의미하는 recursive 입니다. 디렉토리 구조와 파일을 그대로 가져옵니다.&lt;br /&gt;&lt;br /&gt;재귀적 탐색의 깊이 레벨은 기본값이 5로 설정되어 있으며, -l depth 옵션을 사용하여 바꿀수 있습니다.&lt;br /&gt;&lt;br /&gt;기본갑이 -l 5 인데 이 레벨이 증가함에 따라 복사해오는 파일은 지수 함수적으로 증가하게 됩니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;특정페이지와 링크된 것만 받고싶으면&lt;br /&gt;&lt;br /&gt;# wget -r www.naver.com/index.html/doc/lecture/lecture.html&lt;br /&gt;&lt;br /&gt;이렇게 하면 lecture.html과 이파일과 링크된 파일들을 복사해 옵니다. 이 과정에서 링크된 파일 중 상위 디렉토리에 있는 것도 있는데, 이 파일들을 빼고 원하는 파일이 있는 디렉토리와 그 이하에서만 받아오려면 아래와 같은 명령을 수행 합니다.&lt;br /&gt;&lt;br /&gt;# wget -r -np www.naver.com/index.html/doc/lecture/lecture.html&lt;br /&gt;&lt;br /&gt;-np 옵션은 no-parent를 의미합니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;사이트에서 이미지나 오디오 파일 등을 제외하고 html 문서만 가져오고 싶으면&lt;br /&gt;&lt;br /&gt;# wget -r -np -A html, htm www.naver.com/index.html&lt;br /&gt;&lt;br /&gt;-A 옵션은 accept를 의미합니다. 만약 이와 반대로 일부 파일을 제외하고 싶으시면 -R 옵션을 사용 합니다. reject를 의미합니다.&lt;br /&gt;&lt;br /&gt;# wget -r -R gif, jpg, jpeg www.naver.com/index.html&lt;br /&gt;&lt;br /&gt;gif, jpg, jpeg만 제외하고 나머지만 가져옵니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-L 옵션은 상대주소를 이용한 링크들만 불러옵니다. 타 호스트에 있는 자료는 불러오지 않습니다.&lt;br /&gt;&lt;br /&gt;대부분 html내의 링크는 상대주소를 이용하기 때문에 크게 중요하지는 않습니다.&lt;br /&gt;&lt;br /&gt;# wget -r -L www.naver.com/index.html&lt;br /&gt;&lt;br /&gt;만약 타 호스트의 자료까지 재귀적 탐색에 넣고싶으면 H 옵션을 씁니다. span-hosts를 의미합니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;- 참고 -&lt;br /&gt;&lt;br /&gt;wget -r http://대상사이트/  --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020529&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;위 명령어대로 실행시키면 해당 사이트에 끊임없이 접속해서 그곳의 파일들을 긁어옵니다.&lt;br /&gt;&lt;br /&gt;(F5 새로고침을 계속 누르는 것 이상으로 효과적이라도 함)&lt;br /&gt;&lt;br /&gt;실행해보면 당해 디렉토리에 공격대상사이트의 이름으로 된 폴더가 생기게 되고 그곳에 파일이 계속 저장됩니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;p.s 브라우져에서 보이는 것만 긁어온다.  소스자체를 긁어오는 것이 아니다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1708332103634436657?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1708332103634436657/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1708332103634436657' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1708332103634436657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1708332103634436657'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/08/wget.html' title='wget 을 웹소스 땡기기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-529387757535589309</id><published>2009-08-18T23:06:00.000-07:00</published><updated>2009-08-18T23:13:45.782-07:00</updated><title type='text'>리눅스 명령어 알고싶어요</title><content type='html'>alias(명령어 간소화하기)&lt;br /&gt;apropos(관련된 명령어 찾기)&lt;br /&gt;arch(컴퓨터 종류 알기)&lt;br /&gt;arp(같은 서브넷의 IP 보여주기)&lt;br /&gt;at(작업 시간 정하기)&lt;br /&gt;atd(계획성 있는 작업 실행하기)&lt;br /&gt;awk(특정 패턴 문자 처리하기)&lt;br /&gt;a2p(펄 파일로 바꾸기)&lt;br /&gt;badblocks(배드 블럭 검사하기)&lt;br /&gt;bc(계산기)&lt;br /&gt;biff(메일 수신 소리로 확인하기)&lt;br /&gt;bg(후면작업; 배경화면 설정)&lt;br /&gt;bind(키나 함수 순서 결합하기)&lt;br /&gt;break(루프 빠져나가기)&lt;br /&gt;cal(달력보기)&lt;br /&gt;builtin(내부 명령어 알아보기)&lt;br /&gt;case(조건 처리하기)&lt;br /&gt;cat(화면상에서 파일 보기)&lt;br /&gt;cd(디렉토리 변경하기)&lt;br /&gt;cfdisk(디스크 설정하기)&lt;br /&gt;chattr(파일 속성 변경하기)&lt;br /&gt;chfn(사용자 정보 변경하기)&lt;br /&gt;chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)&lt;br /&gt;chmod(파일 권한 바꾸기)&lt;br /&gt;chown(파일 주인 바꾸기)&lt;br /&gt;chsh(지정된 셸 바꾸기)&lt;br /&gt;cksum(CRC값을 점검한다)&lt;br /&gt;clear(화면 청소하기)&lt;br /&gt;clock(CMOS 시각을 조정하기)&lt;br /&gt;cmp(파일 비교하기)&lt;br /&gt;colcrt(문자 변환 필터)&lt;br /&gt;colrm(열 삭제하기)&lt;br /&gt;column(가로 정렬하기)&lt;br /&gt;comm(파일 비교 출력하기)&lt;br /&gt;command(명령어 알아보기)&lt;br /&gt;continue(루프 계속돌기)&lt;br /&gt;cp(파일 복사하기)&lt;br /&gt;cpio(복사본 만들기)&lt;br /&gt;crontab(cron을 관리한다)&lt;br /&gt;csplit(파일에 서식, 규칙 정하기)&lt;br /&gt;cut(필요한 필드만 출력하기)&lt;br /&gt;date(날짜 보기)&lt;br /&gt;dd(블럭장치 읽고 쓰기)&lt;br /&gt;debugfs(ext2 파일 시스템 디버깅하기)&lt;br /&gt;declare(변수 선언하기)&lt;br /&gt;df(파일 시스템의 사용량 보기)&lt;br /&gt;dirs(디렉토리 목록 표시하기)&lt;br /&gt;dmesg(부팅 메시지 보기)&lt;br /&gt;dnsdomainname(DNS 이름 출력)&lt;br /&gt;domainname(NIS 이름 출력&amp;설정)&lt;br /&gt;du(디렉토리와 파일의 용량 파악하기)&lt;br /&gt;dumpe2fs(파일 시스템 정보 보기)&lt;br /&gt;echo(표준 출력하기)&lt;br /&gt;eject(장치 해제하기)&lt;br /&gt;elm(메일 관련)&lt;br /&gt;enable(내부 명령어 지정)&lt;br /&gt;env(환경변수 출력하기)&lt;br /&gt;eval(인수 읽기)&lt;br /&gt;exec(셸 명령어 실행하기)&lt;br /&gt;exit(종료하기)&lt;br /&gt;expand(탭을 공백으로 변환하기)&lt;br /&gt;export(변수 지정하기)&lt;br /&gt;e2fsck(파일 시스템 복구하기)&lt;br /&gt;fc(지정된 편집기 받기)&lt;br /&gt;fdformat(플로피 디스크 포맷하기)&lt;br /&gt;fdisk(파티션 나누기)&lt;br /&gt;fg(지정된 작업을 전면 프로세스로 시작하기)&lt;br /&gt;file(파일 종류 보기)&lt;br /&gt;find(파일 찾기)&lt;br /&gt;finger(사용자 정보 알기)&lt;br /&gt;fold(정형화하기)&lt;br /&gt;fmt(정형화하기)&lt;br /&gt;for(반복 실행하기)&lt;br /&gt;free(메모리 사용량 알아보기)&lt;br /&gt;fsck(파일 시스템 검사하기)&lt;br /&gt;fstab(파일 시스템에 대한 고정적인 정보 저장하기)&lt;br /&gt;ftp(파일 전송 프로그램)&lt;br /&gt;fuser(프로세스 ID 출력)&lt;br /&gt;getkeycodes(매핑 테이블 출력하기)&lt;br /&gt;grep(특정 문자(열) 검색하기)&lt;br /&gt;gzexe(실행 파일 압축하기)&lt;br /&gt;gzip(압축하기)&lt;br /&gt;halt(시스템 종료하기)&lt;br /&gt;hash(기억해 두기; index 역할)&lt;br /&gt;head(파일의 앞부분 출력하기)&lt;br /&gt;help(도움말 보여주기)&lt;br /&gt;host(호스트 정보 보기)&lt;br /&gt;history(사용 명령어 목록보기)&lt;br /&gt;hostname(서버 이름 알기)&lt;br /&gt;id(계정 정보 알기)&lt;br /&gt;if(조건문 실행하기)&lt;br /&gt;ifconfig(랜카드에 주소 할당하기)&lt;br /&gt;imolamod(모듈 설치하기)&lt;br /&gt;inetd(인터넷 서비스의 최상위 데몬)&lt;br /&gt;init(실행 단계 정하기)&lt;br /&gt;ispell(철자법 검사하기)&lt;br /&gt;jobs(수행중인 프로세스 알기)&lt;br /&gt;kbd_mode(키보드 모드 출력하기)&lt;br /&gt;kill(프로세스 죽이기)&lt;br /&gt;klogd(커널 로그 데몬)&lt;br /&gt;ldd(공유 라이브러리의 의존성 알기)&lt;br /&gt;less(페이지 단위로 출력하기)&lt;br /&gt;let(정규식 표현하기)&lt;br /&gt;lilo(부팅하기)&lt;br /&gt;ln(링크하기)&lt;br /&gt;locate(패턴에 맞는 파일 찾기)&lt;br /&gt;login(로그인하기)&lt;br /&gt;logger(시스템 로그 기록하기)&lt;br /&gt;logname(사용자 로그인명 보여주기)&lt;br /&gt;logout(로그인 셸 종료하기)&lt;br /&gt;look(특정 단어 검색하기)&lt;br /&gt;losetup(중복 장치 확인하기)&lt;br /&gt;lpd(프린트 데몬)&lt;br /&gt;lpq(현재 프린트 작업 상태 출력하기)&lt;br /&gt;lpr(출력하기)&lt;br /&gt;lprm(대기열에 있는 문서 삭제하기)&lt;br /&gt;ls(디렉토리 내용보기)&lt;br /&gt;lsattr(파일 시스템의 속성 보여주기)&lt;br /&gt;lsdev(하드웨어 장치 출력하기)&lt;br /&gt;lsmod(모듈 정보 출력하기)&lt;br /&gt;mail(메일 관련)&lt;br /&gt;make(컴파일하기)&lt;br /&gt;man(매뉴얼 보기)&lt;br /&gt;mattrib&lt;br /&gt;mbadblocks&lt;br /&gt;mcd&lt;br /&gt;mcopy&lt;br /&gt;mdel&lt;br /&gt;mdeltree&lt;br /&gt;mdir&lt;br /&gt;mesg(메시지를 받을 수 있는지 확인하기)&lt;br /&gt;mformat&lt;br /&gt;minfo&lt;br /&gt;mkdir (디렉토리 만들기)&lt;br /&gt;mke2fs(파일 시스템 생성하기)&lt;br /&gt;mkfs(파일 시스템 만들기)&lt;br /&gt;mknod(특수 파일 만들기)&lt;br /&gt;mkswap(스왑 영역 지정하기)&lt;br /&gt;mlabel&lt;br /&gt;mmd&lt;br /&gt;mmount&lt;br /&gt;mmove&lt;br /&gt;mpartition&lt;br /&gt;mount(장치 연결하기)&lt;br /&gt;more(화면 단위로 출력하기)&lt;br /&gt;mrd&lt;br /&gt;mren&lt;br /&gt;mtoolstest&lt;br /&gt;mtype&lt;br /&gt;mutt(메일 관련)&lt;br /&gt;mv(파일 옮기기)&lt;br /&gt;mzip&lt;br /&gt;netstat(현재 네트웍 상황 보기)&lt;br /&gt;nice(프로세스 우선 순위 변경하기)&lt;br /&gt;od(8진수로 파일 보기)&lt;br /&gt;passwd(암호 입력하기)&lt;br /&gt;pidof(실행중인 프로그램의 프로세스 ID 찾기)&lt;br /&gt;pine(메일 관련)&lt;br /&gt;ping(네트웍 확인하기)&lt;br /&gt;popd(pushd 취소)&lt;br /&gt;ps(프로세스 상태 알기)&lt;br /&gt;pstree(프로세스 상관관계 알기)&lt;br /&gt;pwd(절대경로 보여주기)&lt;br /&gt;quota(디스크 한계량 알기)&lt;br /&gt;rarp(rarp 테이블 관리하기)&lt;br /&gt;rcp(원격 호스트에 파일 복사하기)&lt;br /&gt;rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)&lt;br /&gt;rdate(네트웍으로 시간 설정하기)&lt;br /&gt;reboot(재부팅하기)&lt;br /&gt;rmmod(모듈 지우기)&lt;br /&gt;readonly(읽기 전용으로 표시하기)&lt;br /&gt;renice(프로세스 우선 순위 바꾸기)&lt;br /&gt;reset(터미널 초기화하기)&lt;br /&gt;restore(다시 저장하기)&lt;br /&gt;rlogin(바로 접속하기)&lt;br /&gt;rm(파일 지우기)&lt;br /&gt;rmdir (디렉토리 지우기)&lt;br /&gt;route(라우팅 테이블 추가/삭제하기)&lt;br /&gt;rpm(프로그램 추가/삭제)&lt;br /&gt;rpm2cpio(rpm을 cpio로 변환하기)&lt;br /&gt;rsh(원격으로 명령어 실행하기)&lt;br /&gt;rup(호스트 상태 출력하기)&lt;br /&gt;rusers(호스트에 로그인한 사용자 출력하기)&lt;br /&gt;rwall(호스트 사용자에게 메시지 뿌리기)&lt;br /&gt;script(기록하기)&lt;br /&gt;set(변수값 설정하기)&lt;br /&gt;setup(시스템 관련 설정하기)&lt;br /&gt;showmount(호스트의 마운트 정보 보여주기)&lt;br /&gt;shutdown(전원 끄기)&lt;br /&gt;sleep(잠시 쉬기)&lt;br /&gt;source(스크립트 번역하기)&lt;br /&gt;split(파일 나누기)&lt;br /&gt;ssh(암호화된 원격 로그인하기)&lt;br /&gt;stty(터미널라인 설정 보여주기)&lt;br /&gt;su(계정 바꾸기)&lt;br /&gt;suspend(셸 중단하기)&lt;br /&gt;swapoff (스왑 해제하기)&lt;br /&gt;swapon(스왑 활성화하기)&lt;br /&gt;sync(버퍼 재설정하기)&lt;br /&gt;syslogd(로그인 과정 설정하기)&lt;br /&gt;tac(거꾸로 보기)&lt;br /&gt;tail(문서 끝부분 출력하기)&lt;br /&gt;talk(이야기하기)&lt;br /&gt;tar(파일 묶기)&lt;br /&gt;tcpdchk(tcp wrapper 설정하기)&lt;br /&gt;tcpmatch(네트웍 요청에 대해 예측하기)&lt;br /&gt;tee(표준 입력으로부터 표준 출력 만들기)&lt;br /&gt;telnet(원격접속하기)&lt;br /&gt;test(테스트하기)&lt;br /&gt;times(셸에서의 사용자와 시스템 시간 출력하기)&lt;br /&gt;top(cpu 프로세스 상황 보여주기)&lt;br /&gt;tr(문자열 바꿔주기)&lt;br /&gt;true(종료 코드 리턴하기)&lt;br /&gt;type(유형 보기)&lt;br /&gt;ul(밑줄 처리해서 보여주기)&lt;br /&gt;ulimit(제한하기)&lt;br /&gt;umask(매스크 모드 설정하기)&lt;br /&gt;umount(장치 해제하기)&lt;br /&gt;unalias(별명 제거하기)&lt;br /&gt;uname(시스템 정보 보기)&lt;br /&gt;unexpand(공백 문자를 탭으로 변환하기)&lt;br /&gt;uniq(중복된 문장 찾기)&lt;br /&gt;useradd(사용자 계정 만들기)&lt;br /&gt;userdel(계정 삭제하기)&lt;br /&gt;usermod(사용자 계정정보 수정하기)&lt;br /&gt;unset(설정 변수 해제)&lt;br /&gt;uptime(시스템 부하 평균 보여주기)&lt;br /&gt;users(로그인된 사용자 보여주기)&lt;br /&gt;w(시스템에 접속한 사용자 상황 알아보기)&lt;br /&gt;wait(프로세스 기다리기)&lt;br /&gt;wall(모든 사용자에게 메시지 보내기)&lt;br /&gt;wc(문자, 단어, 라인수 세기)&lt;br /&gt;whatis(명령어의 간단한 설명보기)&lt;br /&gt;while(루프 명령어)&lt;br /&gt;who(사용자 알기)&lt;br /&gt;write(콘솔 상에서 간단한 메시지 보내기)&lt;br /&gt;xcopy(반복적으로 복사하기)&lt;br /&gt;XFree86&lt;br /&gt;ypchfn(NIS에서 사용하는 chfn 명령어)&lt;br /&gt;ypchsh(NIS에서 사용하는 chsh 명령어)&lt;br /&gt;yppasswd(NIS에서 사용하는 passwd 명령어)&lt;br /&gt;zcat(압축 파일 보기)&lt;br /&gt;zcmp(압축 파일 비교하기)&lt;br /&gt;zforce(강제로 gz 만들기)&lt;br /&gt;zgrep(압축 상태에서 grep 실행하기)&lt;br /&gt;zmore(압축 상태에서 more 실행하기)&lt;br /&gt;znew(.Z 파일을 .gz로 다시 압축하기)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-529387757535589309?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/529387757535589309/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=529387757535589309' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/529387757535589309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/529387757535589309'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/08/blog-post.html' title='리눅스 명령어 알고싶어요'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-2129297685525963472</id><published>2009-07-27T22:38:00.000-07:00</published><updated>2009-07-27T22:41:38.927-07:00</updated><title type='text'>[Shell] FTP 자동 접근 스크립트</title><content type='html'>1&lt;br /&gt;==============================================================================&lt;br /&gt;#!/bin/ksh&lt;br /&gt;&lt;br /&gt;IP=""&lt;br /&gt;ID=""&lt;br /&gt;PASS=""&lt;br /&gt;SRC_PATH="/home/ems2/bin"&lt;br /&gt;&lt;br /&gt;echo "----------------------------------"&lt;br /&gt;echo "[$IP]와 FTP통신 하기"&lt;br /&gt;echo "ID=$ID, PASSWORD=$PASS"&lt;br /&gt;echo "----------------------------------"&lt;br /&gt;&lt;br /&gt;echo "=&gt; FTP 파일 전송(s) or 수신(r) : "\\c&lt;br /&gt;read sor&lt;br /&gt;&lt;br /&gt;LIST=""&lt;br /&gt;TEMP_PATH=""&lt;br /&gt;getNput=""&lt;br /&gt;&lt;br /&gt;if [ "$sor" = "S" ] || [ "$sor" = "s" ]&lt;br /&gt;then&lt;br /&gt;   echo "=&gt; FTP로 전송 할 파일들 입력 : "\\c&lt;br /&gt;   read LIST&lt;br /&gt;&lt;br /&gt;   TEMP_PATH="./"&lt;br /&gt;   getNput="mput"&lt;br /&gt;else&lt;br /&gt;   echo "=&gt; FTP로 수신 할 파일들 입력 : "\\c&lt;br /&gt;   read LIST&lt;br /&gt;&lt;br /&gt;   echo "=&gt; FTP로 수신 할 패스 입력(default : /home/ems2/bin) : "\\c&lt;br /&gt;   read TEMP_PATH&lt;br /&gt;&lt;br /&gt;   getNput="mget"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;if [ -n "$TEMP_PATH" ]&lt;br /&gt;then&lt;br /&gt;   SRC_PATH=$TEMP_PATH&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;ftp -n $IP &lt;&lt; EOF&lt;br /&gt;user $ID $PASS&lt;br /&gt;prompt&lt;br /&gt;passive&lt;br /&gt;hash&lt;br /&gt;bin&lt;br /&gt;cd $SRC_PATH&lt;br /&gt;$getNput $LIST&lt;br /&gt;bye&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;echo "전송 완료!!"&lt;br /&gt;&lt;br /&gt;PERM="755"&lt;br /&gt;&lt;br /&gt;if [ "$sor" = "R" ] || [ "$sor" = "r" ]&lt;br /&gt;then&lt;br /&gt;   echo "=&gt; 수신한 파일들의 퍼미션 입력(default : 755) : "\\c&lt;br /&gt;   read TEMP_PERM&lt;br /&gt;&lt;br /&gt;   if [ -n "$TEMP_PATH" ]&lt;br /&gt;   then&lt;br /&gt;      PERM=$TEMP_PERM&lt;br /&gt;   fi&lt;br /&gt;&lt;br /&gt;   chmod $PERM $LIST&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;exit 0&lt;br /&gt;&lt;br /&gt;==============================================================================&lt;br /&gt;&lt;br /&gt;2&lt;br /&gt;==============================================================================&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;IP=""&lt;br /&gt;ID=""&lt;br /&gt;PASS=""&lt;br /&gt;SRC_PATH="/supp1/webapps/ims_domain/ims/ims_webapps/pid/server"&lt;br /&gt;&lt;br /&gt;/home/wlogic81/nam/pid_monitor/.ws_01a_pid.sh &gt; /home/wlogic81/nam/pid_monitor/logs/ws_01a_`date +%Y%m%d`.xml;&lt;br /&gt;&lt;br /&gt;cp /home/wlogic81/nam/pid_monitor/logs/ws_01a_`date +%Y%m%d`.xml /home/wlogic81/nam/pid_monitor/ws_01a.xml;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ftp -n -v $IP &lt;&lt; EOF&lt;br /&gt;user $ID $PASS&lt;br /&gt;prompt&lt;br /&gt;passive&lt;br /&gt;hash&lt;br /&gt;bin&lt;br /&gt;cd $SRC_PATH&lt;br /&gt;mput ws_01a.xml&lt;br /&gt;bye&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;==============================================================================&lt;br /&gt;&lt;br /&gt;3&lt;br /&gt;==============================================================================&lt;br /&gt;#!/bin/sh&lt;br /&gt;FILENAME=/hom&lt;br /&gt;for user in $(cut -d: -f1 $FILENAME)&lt;br /&gt;do&lt;br /&gt;   aaa=$user                           // 오늘날짜를 aaa라는 변수에 담아요&lt;br /&gt;done&lt;br /&gt;/usr/kerberos/bin/ftp -vn &lt;&lt; END   // crontab에서는 ftp라고 부르면 오류나요. 파일이 실제 존재하는 곳&lt;br /&gt;open 211.xx.xx.xx&lt;br /&gt;user user_id  "password"&lt;br /&gt;&lt;br /&gt;as&lt;br /&gt;hash&lt;br /&gt;prompt&lt;br /&gt;lcd /home/uploading                     //업로드하려는 파일이 존재하는 폴더 (서버상에서)&lt;br /&gt;put upfile_${aaa}.txt                      // upfile_20080721.txt 오늘날짜라면..&lt;br /&gt;bye&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;==============================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4 : 기타 순차 출력 방법&lt;br /&gt;==============================================================================&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;##cnt=1&lt;br /&gt;&lt;br /&gt;##while [ $cnt -lt `cat list.txt | wc -l` ]&lt;br /&gt;##do&lt;br /&gt;        #echo $cnt&lt;br /&gt;##      echo `cat -n list.txt | grep $cnt`&lt;br /&gt;##      cnt=`expr $cnt + 1`&lt;br /&gt;##      echo&lt;br /&gt;&lt;br /&gt;#       if [ $cnt == `cat list.txt | grep $cnt` ]&lt;br /&gt;#       then&lt;br /&gt;#               echo ""&lt;br /&gt;#       fi&lt;br /&gt;##done&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for line in `cat list.txt | tr -d '1'`;&lt;br /&gt;do&lt;br /&gt;&lt;br /&gt;        echo $line&lt;br /&gt;&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;==============================================================================&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-2129297685525963472?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/2129297685525963472/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=2129297685525963472' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2129297685525963472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2129297685525963472'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/07/shell-ftp.html' title='[Shell] FTP 자동 접근 스크립트'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1672820745972366393</id><published>2009-07-19T21:35:00.001-07:00</published><updated>2009-07-19T21:35:56.279-07:00</updated><title type='text'>[Windows] Console Command</title><content type='html'>명령어 ----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;clipbrd (클립보드에 복사된 내용 표시)&lt;br /&gt;control (제어판)&lt;br /&gt;&lt;br /&gt;winver (윈도우 버전확인)&lt;br /&gt;osk 화상키보드&lt;br /&gt;pbrush 또는 mspaint (그림판)&lt;br /&gt;ping 사이트주소(핑테스트 해당 사이트의 인터넷연결 유무 확인) &lt;br /&gt;explorer 탐색기&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;shutdown -i             : GUI화면으로 시스템 종료, 재부팅 가능 &lt;br /&gt;shutdown -a            : 종료 설정 중지&lt;br /&gt;netstat                    : 인터넷 접속 상황&lt;br /&gt;ipconfig /all             : ip주소,게이트웨이,서브넷마스크, &lt;br /&gt;                                 DNS서버주소,physical주소 &lt;br /&gt;dxdiag                     : 다이렉트 - X 상태 정보 화면&lt;br /&gt;cleanmgr.exe          : 디스크 정리 &lt;br /&gt;regedit                    : 레지스트리 편집기&lt;br /&gt;mstsc.exe               : 원격 데스크톱 연결&lt;br /&gt;netsetup.exe          : 네트워크 설정 마법사&lt;br /&gt;&lt;br /&gt;실행창 명령어&lt;br /&gt;&lt;br /&gt;일반명령어&lt;br /&gt;&lt;br /&gt;calc (계산기)&lt;br /&gt;charmap 문자표&lt;br /&gt;cleanmgr 디스크정리&lt;br /&gt;dfrg.msc 디스크 조각모음&lt;br /&gt;dxdiag (다이렉트X 진단도구 및 그래픽과 사운드의 세부정보를 보여줌)&lt;br /&gt;eudcedit 사용자 정의 문자 편집기&lt;br /&gt;magnify 돋보기&lt;br /&gt;mobsync 동기화&lt;br /&gt;msconfig(시작프로그램 제어등 많은기능 제공) &lt;br /&gt;msinfo32 시스템정보&lt;br /&gt;mstsc 원격 데스크톱 연결&lt;br /&gt;netstat -na(현재 열린포트와 TCP/IP 프로토콜정보를 보여줌) &lt;br /&gt;         열린포트로 트라이목마형 바이러스 침투 유무확인가능 &lt;br /&gt;notepad 메모장&lt;br /&gt;ntbackup 백업 및 복원 마법사&lt;br /&gt;regedit(레지스트리 편집기)&lt;br /&gt;sfc(시스템 파일 검사기) &lt;br /&gt;   -시스템 파일을 검사한후 깨지거난 손실된 파일을 원본 압축파일에서 찾아서 복원시켜줌 . 단, &lt;br /&gt;&lt;br /&gt;윈2000에서는 cmd실행 후 sfc사용 - 마지막 설정된 값을 다음 윈도우부팅시 곧바로 실행됨[수정] &lt;br /&gt;sndrec32 녹음기&lt;br /&gt;sndvol32 (시스템 사운드 등록정보,볼륨조절)&lt;br /&gt;sysedit(autoexec.bat, config.sys, win.ini, system.ini 시스템구성편집기) &lt;br /&gt;systray(사운드 볼륨설정 노란색 스피커 아이콘을 트라이목록에 띄움)&lt;br /&gt;telnet open 사이트주소(텔넷접속명령어)&lt;br /&gt;tourstart (윈도우 기능안내 html 문서표시)&lt;br /&gt;wab 주소록&lt;br /&gt;winipcfg(인터넷에 접속된 자신의 아이피 주소를 보여줌) 단, 윈2000은 ipconfig로 변경됨&lt;br /&gt;winmine (지뢰찾기)&lt;br /&gt;wmplayer (윈도우 미디어 플레이어)&lt;br /&gt;wordpad 워드패드&lt;br /&gt;wscui.cpl 보안센터&lt;br /&gt;wupdmgr 윈도우업데이트&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;MSC명령어&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;certmgr.msc : 인증서 관리&lt;br /&gt;ciadv.msc : 인덱싱 서비스&lt;br /&gt;compmgmt.msc : 컴퓨터 관리&lt;br /&gt;devmgmt.msc : 장치관리자&lt;br /&gt;dfrg.msc : 디스크 조각 모음&lt;br /&gt;diskmgmt.msc : 디스크 관리&lt;br /&gt;eventvwr.msc : 이벤트 뷰어 (이벤트 로그)&lt;br /&gt;fsmgmt.msc : 공유 폴더 (공유 폴더 관리)&lt;br /&gt;gpedit.msc : 그룹 정책&lt;br /&gt;lusrmgr.msc : 로컬 사용자 및 그룹&lt;br /&gt;ntmsmgr.msc : Removable Storage&lt;br /&gt;ntmsoprq.msc : 이동식 저장소 운영자 요청&lt;br /&gt;perfmon.msc : 성능&lt;br /&gt;rsop.msc : 정책의 결과 집합&lt;br /&gt;secpol.msc : 로컬 보안 설정&lt;br /&gt;services.msc : 서비스&lt;br /&gt;wmimgmt.msc : WMI 서비스 구성&lt;br /&gt;comexp.msc : comexp 구성 요소 서비스&lt;br /&gt;control userpasswords2 : 사용자 계정  &lt;br /&gt;gpedit.msc            : 도메인 또는 액티브 디렉토리나 PC에 저장되어 있는   &lt;br /&gt;                               조직 단위에 연결된 그룹정책개체를 편집하는 &lt;br /&gt;                               '로컬 컴퓨터 정책'을 연다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1672820745972366393?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1672820745972366393/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1672820745972366393' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1672820745972366393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1672820745972366393'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/07/windows-console-command.html' title='[Windows] Console Command'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-7055147087475300532</id><published>2009-06-11T18:16:00.000-07:00</published><updated>2009-06-11T18:21:36.038-07:00</updated><title type='text'>캐리지 리턴 문자 없애기</title><content type='html'>vi &lt;br /&gt;:%s/^M//g&lt;br /&gt;&lt;br /&gt;find `pwd` -name "*.*" | xargs grep "^M"&lt;br /&gt;&lt;br /&gt;find `pwd` -name "*.*" -exec perl -pi -e 's/^M//g' {} \; -print&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-7055147087475300532?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/7055147087475300532/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=7055147087475300532' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7055147087475300532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7055147087475300532'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/06/blog-post.html' title='캐리지 리턴 문자 없애기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-8898961269403933242</id><published>2009-05-21T00:07:00.000-07:00</published><updated>2009-05-21T00:15:46.559-07:00</updated><title type='text'>[Shell] 구구단 및 별 출력 스크립트</title><content type='html'>&lt;strong&gt;[1] 구구단 출력 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;dan=2&lt;br /&gt;while [ $dan -lt 10 ]&lt;br /&gt;do&lt;br /&gt;echo " $dan 단"&lt;br /&gt;echo "======"&lt;br /&gt;num=1&lt;br /&gt;while [ $num -lt 10 ]&lt;br /&gt;do&lt;br /&gt;answer=`expr $dan \* $num`&lt;br /&gt;if [ $answer -lt 10 ]; then&lt;br /&gt;answer=" $answer"&lt;br /&gt;fi&lt;br /&gt;echo "${dan}x${num}=${answer}"&lt;br /&gt;num=`expr $num + 1`&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;dan=`expr $dan + 1`&lt;br /&gt;echo ""&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt; 2 단&lt;br /&gt;======&lt;br /&gt;2x1= 2&lt;br /&gt;2x2= 4&lt;br /&gt;2x3= 6&lt;br /&gt;2x4= 8&lt;br /&gt;2x5=10&lt;br /&gt;2x6=12&lt;br /&gt;2x7=14&lt;br /&gt;2x8=16&lt;br /&gt;2x9=18&lt;br /&gt;&lt;br /&gt;.....&lt;br /&gt;&lt;br /&gt; 9 단&lt;br /&gt;======&lt;br /&gt;9x1= 9&lt;br /&gt;9x2=18&lt;br /&gt;9x3=27&lt;br /&gt;9x4=36&lt;br /&gt;9x5=45&lt;br /&gt;9x6=54&lt;br /&gt;9x7=63&lt;br /&gt;9x8=72&lt;br /&gt;9x9=81&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[2] 구구단 출력  가로&lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;num=1&lt;br /&gt;while [ $num -lt 10 ]&lt;br /&gt;do&lt;br /&gt;    dan=2&lt;br /&gt;    while [ $dan -lt 6 ]&lt;br /&gt;    do&lt;br /&gt;        answer=`expr $dan \* $num`&lt;br /&gt;           if [ $answer -lt 10 ]; then&lt;br /&gt;               answer=" $answer"&lt;br /&gt;           fi&lt;br /&gt;           echo -n "${dan}x${num}=${answer}  "&lt;br /&gt;           dan=`expr $dan + 1`&lt;br /&gt;       done&lt;br /&gt;&lt;br /&gt;       num=`expr $num + 1`&lt;br /&gt;       echo ""&lt;br /&gt;   done&lt;br /&gt;&lt;br /&gt;      echo ""&lt;br /&gt;&lt;br /&gt;      num=1&lt;br /&gt;      while [ $num -lt 10 ]&lt;br /&gt;      do&lt;br /&gt;          dan=6&lt;br /&gt;          while [ $dan -lt 10 ]&lt;br /&gt;          do&lt;br /&gt;              answer=`expr $dan \* $num`&lt;br /&gt;              if [ $answer -lt 10 ]; then&lt;br /&gt;                  answer=" $answer"&lt;br /&gt;              fi&lt;br /&gt;              echo -n "${dan}x${num}=${answer}  "&lt;br /&gt;              dan=`expr $dan + 1`&lt;br /&gt;          done&lt;br /&gt;&lt;br /&gt;          num=`expr $num + 1`&lt;br /&gt;          echo ""&lt;br /&gt;      done&lt;br /&gt;      echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;2x1= 2  3x1= 3  4x1= 4  5x1= 5&lt;br /&gt;2x2= 4  3x2= 6  4x2= 8  5x2=10&lt;br /&gt;2x3= 6  3x3= 9  4x3=12  5x3=15&lt;br /&gt;2x4= 8  3x4=12  4x4=16  5x4=20&lt;br /&gt;2x5=10  3x5=15  4x5=20  5x5=25&lt;br /&gt;2x6=12  3x6=18  4x6=24  5x6=30&lt;br /&gt;2x7=14  3x7=21  4x7=28  5x7=35&lt;br /&gt;2x8=16  3x8=24  4x8=32  5x8=40&lt;br /&gt;2x9=18  3x9=27  4x9=36  5x9=45&lt;br /&gt;&lt;br /&gt;6x1= 6  7x1= 7  8x1= 8  9x1= 9&lt;br /&gt;6x2=12  7x2=14  8x2=16  9x2=18&lt;br /&gt;6x3=18  7x3=21  8x3=24  9x3=27&lt;br /&gt;6x4=24  7x4=28  8x4=32  9x4=36&lt;br /&gt;6x5=30  7x5=35  8x5=40  9x5=45&lt;br /&gt;6x6=36  7x6=42  8x6=48  9x6=54&lt;br /&gt;6x7=42  7x7=49  8x7=56  9x7=63&lt;br /&gt;6x8=48  7x8=56  8x8=64  9x8=72&lt;br /&gt;6x9=54  7x9=63  8x9=72  9x9=81&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[3] 별 출력 &lt;/strong&gt; &lt;br /&gt;   #!/bin/bash&lt;br /&gt;   echo ""&lt;br /&gt;   echo -n "Number : "&lt;br /&gt;   read su&lt;br /&gt;   echo ""&lt;br /&gt;&lt;br /&gt;   i=1&lt;br /&gt;   while [ $i -le $su ]&lt;br /&gt;   do&lt;br /&gt;       j=1&lt;br /&gt;       while [ $j -le $i ]&lt;br /&gt;       do&lt;br /&gt;           echo -n "*"&lt;br /&gt;           j=`expr $j + 1`&lt;br /&gt;       done&lt;br /&gt;&lt;br /&gt;       i=`expr $i + 1`&lt;br /&gt;       echo ""&lt;br /&gt;   done&lt;br /&gt;   echo ""&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;*&lt;br /&gt;**&lt;br /&gt;***&lt;br /&gt;****&lt;br /&gt;*****&lt;br /&gt;******&lt;br /&gt;*******&lt;br /&gt;********&lt;br /&gt;*********&lt;br /&gt;**********&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[4] 별 출력 &lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;echo -n "Number : "&lt;br /&gt;read su&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    k=`expr $su - $i`&lt;br /&gt;    while [ $j -le $su ]&lt;br /&gt;    do&lt;br /&gt;        if [ $j -le $k ]&lt;br /&gt;        then&lt;br /&gt;            echo -n " "&lt;br /&gt;        else&lt;br /&gt;            echo -n "*"&lt;br /&gt;        fi&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    i=`expr $i + 1`&lt;br /&gt;    echo ""&lt;br /&gt;done&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;         *&lt;br /&gt;        **&lt;br /&gt;       ***&lt;br /&gt;      ****&lt;br /&gt;     *****&lt;br /&gt;    ******&lt;br /&gt;   *******&lt;br /&gt;  ********&lt;br /&gt; *********&lt;br /&gt;**********&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[5] 별 출력 &lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;echo -n "Number : "&lt;br /&gt;read su&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    k=`expr $su - $i`&lt;br /&gt;    l=`expr $su + $i - 1`&lt;br /&gt;    while [ $j -le $l ]&lt;br /&gt;    do&lt;br /&gt;        if [ $j -le $k ]&lt;br /&gt;        then&lt;br /&gt;            echo -n " "&lt;br /&gt;        else&lt;br /&gt;            echo -n "*"&lt;br /&gt;        fi&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    i=`expr $i + 1`&lt;br /&gt;    echo ""&lt;br /&gt;done&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;         *&lt;br /&gt;        ***&lt;br /&gt;       *****&lt;br /&gt;      *******&lt;br /&gt;     *********&lt;br /&gt;    ***********&lt;br /&gt;   *************&lt;br /&gt;  ***************&lt;br /&gt; *****************&lt;br /&gt;*******************&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[6] 별 출력 &lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;echo -n "Number : "&lt;br /&gt;read su&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    k=`expr $su - $i + 1`&lt;br /&gt;    while [ $j -le $k ]&lt;br /&gt;    do&lt;br /&gt;        echo -n "*"&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    i=`expr $i + 1`&lt;br /&gt;    echo ""&lt;br /&gt;done&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;**********&lt;br /&gt;*********&lt;br /&gt;********&lt;br /&gt;*******&lt;br /&gt;******&lt;br /&gt;*****&lt;br /&gt;****&lt;br /&gt;***&lt;br /&gt;**&lt;br /&gt;*&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[7] 별 출력 &lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;echo -n "Number : "&lt;br /&gt;read su&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    while [ $j -le $su ]&lt;br /&gt;    do&lt;br /&gt;        if [ $j -lt $i ]&lt;br /&gt;        then&lt;br /&gt;            echo -n " "&lt;br /&gt;        else&lt;br /&gt;            echo -n "*"&lt;br /&gt;        fi&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    i=`expr $i + 1`&lt;br /&gt;    echo ""&lt;br /&gt;done&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;**********&lt;br /&gt; *********&lt;br /&gt;  ********&lt;br /&gt;   *******&lt;br /&gt;    ******&lt;br /&gt;     *****&lt;br /&gt;      ****&lt;br /&gt;       ***&lt;br /&gt;        **&lt;br /&gt;         *&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[8] 별 출력 &lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;echo -n "Number : "&lt;br /&gt;read su&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    k=`expr $su \* 2 - $i`&lt;br /&gt;    while [ $j -le $k ]&lt;br /&gt;    do&lt;br /&gt;        if [ $j -lt $i ]&lt;br /&gt;        then&lt;br /&gt;            echo -n " "&lt;br /&gt;        else&lt;br /&gt;            echo -n "*"&lt;br /&gt;        fi&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;   i=`expr $i + 1`&lt;br /&gt;   echo ""&lt;br /&gt;done&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;*******************&lt;br /&gt; *****************&lt;br /&gt;  ***************&lt;br /&gt;   *************&lt;br /&gt;    ***********&lt;br /&gt;     *********&lt;br /&gt;      *******&lt;br /&gt;       *****&lt;br /&gt;        ***&lt;br /&gt;         *&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[9] 별 출력 &lt;/strong&gt; &lt;br /&gt;#!/bin/bash&lt;br /&gt;echo ""&lt;br /&gt;echo -n "Number : "&lt;br /&gt;read su&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    k=`expr $su - $i`&lt;br /&gt;    l=`expr $su - 1 + $i`&lt;br /&gt;    while [ $j -le $l ]&lt;br /&gt;    do&lt;br /&gt;        if [ $j -le $k ]&lt;br /&gt;        then&lt;br /&gt;            echo -n " "&lt;br /&gt;        else&lt;br /&gt;            echo -n "*"&lt;br /&gt;        fi&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    i=`expr $i + 1`&lt;br /&gt;    echo ""&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while [ $i -le $su ]&lt;br /&gt;do&lt;br /&gt;    j=1&lt;br /&gt;    k=`expr $su \* 2 - $i - 1`&lt;br /&gt;    while [ $j -le $k ]&lt;br /&gt;    do&lt;br /&gt;        if [ $j -le $i ]&lt;br /&gt;        then&lt;br /&gt;            echo -n " "&lt;br /&gt;        else&lt;br /&gt;            echo -n "*"&lt;br /&gt;        fi&lt;br /&gt;        j=`expr $j + 1`&lt;br /&gt;&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    i=`expr $i + 1`&lt;br /&gt;    echo ""&lt;br /&gt;done&lt;br /&gt;echo ""&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;출력 :&lt;/strong&gt;&lt;br /&gt;Number : 10&lt;br /&gt;&lt;br /&gt;         *&lt;br /&gt;        ***&lt;br /&gt;       *****&lt;br /&gt;      *******&lt;br /&gt;     *********&lt;br /&gt;    ***********&lt;br /&gt;   *************&lt;br /&gt;  ***************&lt;br /&gt; *****************&lt;br /&gt;*******************&lt;br /&gt; *****************&lt;br /&gt;  ***************&lt;br /&gt;   *************&lt;br /&gt;    ***********&lt;br /&gt;     *********&lt;br /&gt;      *******&lt;br /&gt;       *****&lt;br /&gt;        ***&lt;br /&gt;         *&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-8898961269403933242?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/8898961269403933242/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=8898961269403933242' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8898961269403933242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8898961269403933242'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/05/shell.html' title='[Shell] 구구단 및 별 출력 스크립트'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3206598441255016803</id><published>2009-05-20T20:48:00.001-07:00</published><updated>2009-05-20T20:48:24.299-07:00</updated><title type='text'>grep, egrep, fgrep</title><content type='html'>grep, egrep, fgrep&lt;br /&gt;&lt;br /&gt;grep(egrep, fgrep) [option] “pattern” filename&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-i : 대소문자 구별을 하지 않는다. &lt;br /&gt;-v : pattern 을 포함하지 않는 행만 출력한다. &lt;br /&gt;-n : 행번호를 출력한다. &lt;br /&gt;-l : 파일명만 출력한다. &lt;br /&gt;-c : 패턴과 일치하는 라인의 갯수만 보여준다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;grep : 강력한 패턴 매칭 템플릿을 정의하기 위해 "정규 표현식"을 사용할 수 있다.   &lt;br /&gt;egrep [옵션] "패턴|패턴|..." [대상파일들] : 확장된 정규 표현식을 사용하며, 찾아낼 패턴을 여러개 지정할 수 있다. '|'기호는 불린 연산자 "OR"에 해당하므로, 정해진 패턴들에 포함되는 모든 라인을 보여준다.  &lt;br /&gt;&lt;br /&gt;fgrep [옵션] 패턴 [대상파일들] : 패턴과 정확히 일치하는 것만을 찾아 준다.  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;많은 시스템 관리 명령들과 파이프(pipe)를 이용해서 사용할 수 있다. 흔히 사용하는 것은 프로세스 확인이다. &lt;br /&gt;$ ps aux | grep httpd &lt;br /&gt;위와 같이 현재 시스템의 프로세스중 httpd 만 검색해 낸다. &lt;br /&gt;만일 pipe 를 이용하여 검색할경우 검색 패턴이 한개 이상일 경우엔 egrep을 이용하여 검색할수 있다.&lt;br /&gt;&lt;br /&gt;$ ps aux | egrep 'httpd|mysql' &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ grep -v "^[ ^I]*$" 파일명 //공백을 제거한 파일 내용 살펴보기 &lt;br /&gt;$ grep -v "^#*$" 파일명 //주석을 제거한 파일 내용 살펴보기 &lt;br /&gt;&lt;br /&gt;만일 현재 디렉토리와 그 하위 디렉토리까지 grep 패턴 검색을 하고자 할땐 find 명령을 이용하면 된다. &lt;br /&gt;$ find . -exec grep "pattern" {} \;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3206598441255016803?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3206598441255016803/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3206598441255016803' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3206598441255016803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3206598441255016803'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/05/grep-egrep-fgrep.html' title='grep, egrep, fgrep'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-591634973934359576</id><published>2009-04-22T01:27:00.003-07:00</published><updated>2009-04-22T01:27:55.297-07:00</updated><title type='text'>VIM 이미 읽은 파일의 인코딩 변경하기</title><content type='html'>출처 : http://kldp.org/node/32987&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VIM 이미 읽은 파일의 인코딩 변경하기 (charset encoding)&lt;br /&gt;The image verification code you entered is incorrect.&lt;br /&gt;kwon37xi 씀 (금, 2004/04/02 - 10:19am) 강좌 &lt;br /&gt;요즌 페도라에서 UTF-8 로 사용하다보니 한글 인코딩 문제에 자주 부딪힙니다.&lt;br /&gt;특히 텍스트 파일 읽을 때 짜증이 이만저만이 아닙니다.&lt;br /&gt;&lt;br /&gt;암튼, VIM 에서 파일을 읽어보니 문자 인코딩이 깨져 있을 때, 다음과 같이 하면 곧바로 인코딩을 바꿔서 화면에 표시합니다.&lt;br /&gt;&lt;br /&gt;:e ++enc=euc-kr&lt;br /&gt;&lt;br /&gt;이 상태에서... 파일의 인코딩을 바꿔서 저장하려면&lt;br /&gt;&lt;br /&gt;:set fileencoding=utf-8&lt;br /&gt;&lt;br /&gt;한뒤에 :w 해보세요. euc-kr 이던 파일이 utf-8 로 저장됩니다.&lt;br /&gt;&lt;br /&gt;MS949 를 시도해봤는데 안되더군요. UHC 로 해야 MS-Windows 의 확장한글코드가 되는것 같습니다. - 맞는건가요? 확실치 않아서리...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-591634973934359576?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/591634973934359576/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=591634973934359576' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/591634973934359576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/591634973934359576'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/vim.html' title='VIM 이미 읽은 파일의 인코딩 변경하기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1271192482828986943</id><published>2009-04-22T01:27:00.001-07:00</published><updated>2009-04-22T01:27:27.060-07:00</updated><title type='text'>리눅스 환경에서 한글 설정하는 방법</title><content type='html'>[Ctrl + Alt + T] 키를 눌러 터미널을 엽니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;언어 환경설정 파일을 수정합니다.&lt;br /&gt;참고1 : http://wiki.eeeuser.com/howto:changelanguage&lt;br /&gt;참고2 : http://www.chitsol.com/455 &lt;br /&gt;참고3 : http://debianusers.org/DebianWiki/wiki.php/%C3%CA%BA%B8%B0%A3%B4%DC%C7%D1%B1%DB%B0%A1%C0%CC%B5%E5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;로케일 설정을 담당하는 /etc/locale.gen 을 수정합니다.&lt;br /&gt;&lt;br /&gt;sudo vi /etc/locale.gen &lt;br /&gt;    ko_KR.UTF-8 UTF-8&lt;br /&gt;&lt;br /&gt;다음 명령을 실행합니다&lt;br /&gt;&lt;br /&gt;sudo locale-gen&lt;br /&gt;sudo update-locale LANG=ko_KR.UTF-8&lt;br /&gt;   -&gt; 이 명령을 실행하면 /etc/default/locale 이라는 파일이 생성됩니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;한글 입력기 설치를 위해 프로그램 설치 저장소를 추가합니다. 앞으로 다양한 응용프로그램 설치시에도 이용됩니다.&lt;br /&gt;&lt;br /&gt;sudo vi /etc/apt/sources.list&lt;br /&gt;    deb http://xnv4.xandros.com/xs2.0/upkg-srv2 etch main contrib non-free&lt;br /&gt;    deb http://dccamirror.xandros.com/dccri/ dccri-3.0 main&lt;br /&gt;    deb http://www.geekconnection.org/ xandros4 main&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;아래의 명령을 순서대로 실행하여 입력기인 scim과 한글 폰트를 설치합니다.&lt;br /&gt;&lt;br /&gt;wget http://download.tuxfamily.org/eeepcrepos/key.asc &lt;br /&gt;sudo apt-key add key.asc &lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install scim scim-hangul scim-tables-ko ttf-alee ttf-unfonts&lt;br /&gt;&lt;br /&gt;작업이 완료되면 재부팅을 합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;다중언어입력기 SCIM의 환경을 설정합니다.&lt;br /&gt;&lt;br /&gt;오른쪽 아래의 트레이영역에서 입력기 아이콘(input method 라고 풍선도움말이 표시됨)에서 오른쪽 마우스를 클릭하여 SCIM 설정을 선택합니다.&lt;br /&gt;  [입력기엔진] -&gt; [전체 설정] -&gt; [설치된 입력기 서비스들:] 에서&lt;br /&gt;     [한국어] - [두벌식]과 [한자]만 선택하고(또는 각 개인이 사용하는 자판 형식) 나머지는 모두 선택을 해제 합니다.&lt;br /&gt;  설정을 적용하고 환경설정을 끝냅니다.&lt;br /&gt;&lt;br /&gt;영어 입력 상태에서 한글 입력을 할려면 왼쪽 Ctrl + Space 키를 누르면 입력 상태가 전환됩니다. 반대의 경우도 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;** 콘솔에서 한글이 표시 되지 않고 영어가 표시되게 설정하는 방법입니다.&lt;br /&gt;   참고1 : http://kldp.org/node/78712&lt;br /&gt;   참고2 :  http://safari.oreilly.com/0596526784/using_initialization_files_correctly&lt;br /&gt;&lt;br /&gt;vi .bashrc (만약 전체 사용자에게 동일하기 적용할려면 /etc/bash.bashrc 파일을 맨 끝에 아래 내용을 추가하면 됩니다.)&lt;br /&gt;    export LANGUAGE="ko_KR:ko:en_GB:en"&lt;br /&gt;    export LC_MESSAGES="POSIX"&lt;br /&gt;    export LC_ALL=""&lt;br /&gt;&lt;br /&gt;locate 명령으로 설정된 값을 확인합니다.&lt;br /&gt;&lt;br /&gt;LANG=ko_KR.UTF-8&lt;br /&gt;LC_CTYPE="ko_KR.UTF-8"&lt;br /&gt;LC_NUMERIC="ko_KR.UTF-8"&lt;br /&gt;LC_TIME="ko_KR.UTF-8"&lt;br /&gt;LC_COLLATE="ko_KR.UTF-8"&lt;br /&gt;LC_MONETARY="ko_KR.UTF-8"&lt;br /&gt;LC_MESSAGES=POSIX&lt;br /&gt;LC_PAPER="ko_KR.UTF-8"&lt;br /&gt;LC_NAME="ko_KR.UTF-8"&lt;br /&gt;LC_ADDRESS="ko_KR.UTF-8"&lt;br /&gt;LC_TELEPHONE="ko_KR.UTF-8"&lt;br /&gt;LC_MEASUREMENT="ko_KR.UTF-8"&lt;br /&gt;LC_IDENTIFICATION="ko_KR.UTF-8"&lt;br /&gt;LC_ALL=&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1271192482828986943?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1271192482828986943/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1271192482828986943' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1271192482828986943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1271192482828986943'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_4636.html' title='리눅스 환경에서 한글 설정하는 방법'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1999305472265187205</id><published>2009-04-22T01:26:00.001-07:00</published><updated>2009-04-22T01:26:15.157-07:00</updated><title type='text'>공유기를 사용할때 IP확인</title><content type='html'>http://www.whatismyip.com/에 접속하면 접속한 PC의 실제 IP를 표시해준다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1999305472265187205?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1999305472265187205/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1999305472265187205' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1999305472265187205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1999305472265187205'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/ip.html' title='공유기를 사용할때 IP확인'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-907863457302671710</id><published>2009-04-22T01:25:00.001-07:00</published><updated>2009-04-22T01:25:31.875-07:00</updated><title type='text'>VNC 서버 설정</title><content type='html'>1. VNC 서버 설치&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;yum install vnc-server&lt;br /&gt;&lt;br /&gt;service vncserver start&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;2. 설정&lt;br /&gt;&lt;br /&gt;/etc/sysconfig/vncserver&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* root로 원격에서 접속가능하게 설정하기&lt;br /&gt;&lt;br /&gt;VNCSERVERS="2:root"&lt;br /&gt;VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* 패스워드 설정&lt;br /&gt;&lt;br /&gt;vncpasswd 명령을 실행&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* 그놈으로 VNC 원격 열기&lt;br /&gt;&lt;br /&gt;~/.vnc/xstartup 수정&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# Uncomment the following two lines for normal desktop:&lt;br /&gt;# unset SESSION_MANAGER&lt;br /&gt;# exec /etc/X11/xinit/xinitrc&lt;br /&gt;&lt;br /&gt;[ -x /etc/vnc/xstartup ] &amp;&amp; exec /etc/vnc/xstartup&lt;br /&gt;[ -r $HOME/.Xresources ] &amp;&amp; xrdb $HOME/.Xresources&lt;br /&gt;xsetroot -solid grey&lt;br /&gt;vncconfig -iconic &amp;&lt;br /&gt;#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &amp;&lt;br /&gt;#twm &amp;&lt;br /&gt;&lt;br /&gt;export GTK_IM_MODULE=scim    &lt;- 한글 입력을 위해&lt;br /&gt;gnome-session &amp;   &lt;- 그놈 데스크탑 실행&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;3. 클라이언트 접속&lt;br /&gt;&lt;br /&gt;   UltraVNC를 설치하여 UltraVNC Viewer 를 실행 &lt;br /&gt;&lt;br /&gt;   VNC Server : 에 www.junix.pe.kr:2 를 입력하고 vncpasswd에서 지정한 암호 입력&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-907863457302671710?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/907863457302671710/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=907863457302671710' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/907863457302671710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/907863457302671710'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/vnc.html' title='VNC 서버 설정'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-800075888351219946</id><published>2009-04-22T01:24:00.002-07:00</published><updated>2009-04-22T01:25:11.627-07:00</updated><title type='text'>logwatch 7.2.1 on fc5</title><content type='html'>1. 설치&lt;br /&gt;yum install logwatch&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. 설정&lt;br /&gt;vi /etc/logwatch/conf/logwatch.conf&lt;br /&gt;&lt;br /&gt;########################################################&lt;br /&gt;# This was written and is maintained by:&lt;br /&gt;#    Kirk Bauer &lt;kirk@kaybee.org&gt;&lt;br /&gt;#&lt;br /&gt;# Please send all comments, suggestions, bug reports,&lt;br /&gt;#    etc, to kirk@kaybee.org.&lt;br /&gt;#&lt;br /&gt;########################################################&lt;br /&gt;&lt;br /&gt;# NOTE:&lt;br /&gt;#   All these options are the defaults if you run logwatch with no&lt;br /&gt;#   command-line arguments.  You can override all of these on the&lt;br /&gt;#   command-line.&lt;br /&gt;&lt;br /&gt;# You can put comments anywhere you want to.  They are effective for the&lt;br /&gt;# rest of the line.&lt;br /&gt;&lt;br /&gt;# this is in the format of &lt;name&gt; = &lt;value&gt;.  Whitespace at the beginning&lt;br /&gt;# and end of the lines is removed.  Whitespace before and after the = sign&lt;br /&gt;# is removed.  Everything is case *insensitive*.&lt;br /&gt;&lt;br /&gt;# Yes = True  = On  = 1&lt;br /&gt;# No  = False = Off = 0&lt;br /&gt;&lt;br /&gt;# Default Log Directory&lt;br /&gt;# All log-files are assumed to be given relative to this directory.&lt;br /&gt;LogDir = /var/log&lt;br /&gt;&lt;br /&gt;# You can override the default temp directory (/tmp) here&lt;br /&gt;TmpDir = /var/cache/logwatch&lt;br /&gt;&lt;br /&gt;# Default person to mail reports to.  Can be a local account or a&lt;br /&gt;# complete email address.&lt;br /&gt;MailTo = jongjun 보고서를 받을 메일 계정&lt;br /&gt;# Default person to mail reports from.  Can be a local account or a&lt;br /&gt;# complete email address.&lt;br /&gt;MailFrom = Logwatch&lt;br /&gt;&lt;br /&gt;# If set to 'Yes', the report will be sent to stdout instead of being&lt;br /&gt;# mailed to above person.&lt;br /&gt;Print = Yes&lt;br /&gt;&lt;br /&gt;# if set, the results will be saved in &lt;filename&gt; instead of mailed&lt;br /&gt;# or displayed.&lt;br /&gt;#Save = /tmp/logwatch&lt;br /&gt;&lt;br /&gt;# Use archives?  If set to 'Yes', the archives of logfiles&lt;br /&gt;# (i.e. /var/log/messages.1 or /var/log/messages.1.gz) will&lt;br /&gt;# be searched in addition to the /var/log/messages file.&lt;br /&gt;# This usually will not do much if your range is set to just&lt;br /&gt;# 'Yesterday' or 'Today'... it is probably best used with&lt;br /&gt;# Archives = Yes&lt;br /&gt;# Range = All&lt;br /&gt;&lt;br /&gt;# The default time range for the report...&lt;br /&gt;# The current choices are All, Today, Yesterday&lt;br /&gt;Range = yesterday&lt;br /&gt;&lt;br /&gt;# The default detail level for the report.&lt;br /&gt;# This can either be Low, Med, High or a number.&lt;br /&gt;# Low = 0&lt;br /&gt;# Med = 5&lt;br /&gt;# High = 10&lt;br /&gt;Detail = Low&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# The 'Service' option expects either the name of a filter&lt;br /&gt;# (in /usr/share/logwatch/scripts/services/*) or 'All'.&lt;br /&gt;# The default service(s) to report on.  This should be left as All for&lt;br /&gt;# most people.&lt;br /&gt;Service = All&lt;br /&gt;# You can also disable certain services (when specifying all)&lt;br /&gt;Service = "-zz-network"     # Prevents execution of zz-network service, which&lt;br /&gt;                            # prints useful network configuration info.&lt;br /&gt;# If you only cared about FTP messages, you could use these 2 lines&lt;br /&gt;# instead of the above:&lt;br /&gt;#Service = ftpd-messages   # Processes ftpd messages in /var/log/messages&lt;br /&gt;#Service = ftpd-xferlog    # Processes ftpd messages in /var/log/xferlog&lt;br /&gt;# Maybe you only wanted reports on PAM messages, then you would use:&lt;br /&gt;#Service = pam_pwdb        # PAM_pwdb messages - usually quite a bit&lt;br /&gt;#Service = pam             # General PAM messages... usually not many&lt;br /&gt;&lt;br /&gt;# You can also choose to use the 'LogFile' option.  This will cause&lt;br /&gt;# logwatch to only analyze that one logfile.. for example:&lt;br /&gt;#LogFile = messages&lt;br /&gt;# will process /var/log/messages.  This will run all the filters that&lt;br /&gt;# process that logfile.  This option is probably not too useful to&lt;br /&gt;# most people.  Setting 'Service' to 'All' above analyizes all LogFiles&lt;br /&gt;# anyways...&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# By default we assume that all Unix systems have sendmail or a sendmail-like system.&lt;br /&gt;# The mailer code Prints a header with To: From: and Subject:.&lt;br /&gt;# At this point you can change the mailer to any thing else that can handle that output&lt;br /&gt;# stream. TODO test variables in the mailer string to see if the To/From/Subject can be set&lt;br /&gt;# From here with out breaking anything. This would allow mail/mailx/nail etc..... -mgt&lt;br /&gt;mailer = "sendmail -t"&lt;br /&gt;&lt;br /&gt;#&lt;br /&gt;# With this option set to 'Yes', only log entries for this particular host&lt;br /&gt;# (as returned by 'hostname' command) will be processed.  The hostname&lt;br /&gt;# can also be overridden on the commandline (with --hostname option).  This&lt;br /&gt;# can allow a log host to process only its own logs, or Logwatch can be&lt;br /&gt;# run once per host included in the logfiles.&lt;br /&gt;#&lt;br /&gt;# The default is to report on all log entries, regardless of its source host.&lt;br /&gt;# Note that some logfiles do not include host information and will not be&lt;br /&gt;# influenced by this setting.&lt;br /&gt;#&lt;br /&gt;#HostLimit = Yes&lt;br /&gt;&lt;br /&gt;# vi: shiftwidth=3 tabstop=3 et&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 보고서 작성&lt;br /&gt;/usr/sbin/logwatch 실행&lt;br /&gt;&lt;br /&gt;4. 확인&lt;br /&gt;Logwatch로 부터 jongjun으로 온 메일 확인&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-800075888351219946?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/800075888351219946/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=800075888351219946' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/800075888351219946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/800075888351219946'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/logwatch-721-on-fc5.html' title='logwatch 7.2.1 on fc5'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-7502961257459374705</id><published>2009-04-22T01:24:00.001-07:00</published><updated>2009-04-22T01:24:44.825-07:00</updated><title type='text'>swatch 사용</title><content type='html'>로그 감시툴을 swatch를 사용해 보았다.&lt;br /&gt;&lt;br /&gt;yum install swatch&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;테스트용 설정파일 설정&lt;br /&gt;vi ~/.swatchrc&lt;br /&gt;watchfor  /.*/&lt;br /&gt;        echo&lt;br /&gt;        mail=jongjun@junix.pe.kr, subject=----PLEASE INVESTIGATE SSH ACCESS----&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;실행&lt;br /&gt;swatch --config-file=/root/.swatchrc --tail-file=/var/log/secure&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;동작 확인&lt;br /&gt;ssh를 하나 더 열어서 로그인 실패 상황을 만들고 실패에 대한 보고 메일이 왔는지 확인한다.&lt;br /&gt;제목:       ----PLEASE INVESTIGATE SSH ACCESS----&lt;br /&gt;내용:&lt;br /&gt;Aug 29 23:44:45 junix sshd[1431]: Invalid user hjhkj from 222.117.139.98&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;man swatch를 참조하여 추가 설정한다.&lt;br /&gt;추가할 내용 : 오류별로 구분, 메일 통보 시간 조절, 다양한 로그 감시&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-7502961257459374705?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/7502961257459374705/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=7502961257459374705' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7502961257459374705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7502961257459374705'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/swatch.html' title='swatch 사용'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3794656181569877366</id><published>2009-04-22T01:23:00.002-07:00</published><updated>2009-04-22T01:24:02.531-07:00</updated><title type='text'>서버 모니터링 도구들</title><content type='html'>phpsysinfo -  웹에서 시스템 자원 모니터링&lt;br /&gt;http://phpsysinfo.sourceforge.net/&lt;br /&gt;&lt;br /&gt;iptables stat&lt;br /&gt;http://www.phildev.net/iptstate/&lt;br /&gt;&lt;br /&gt;htop&lt;br /&gt;http://htop.sourceforge.net/&lt;br /&gt;&lt;br /&gt;apache top&lt;br /&gt;http://www.fr3nd.net/projects/apache-top/&lt;br /&gt;&lt;br /&gt;iptraf&lt;br /&gt;http://iptraf.seul.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3794656181569877366?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3794656181569877366/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3794656181569877366' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3794656181569877366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3794656181569877366'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_8525.html' title='서버 모니터링 도구들'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-2945497085187675135</id><published>2009-04-22T01:23:00.001-07:00</published><updated>2009-04-22T01:23:44.550-07:00</updated><title type='text'>에러 로그를 저장하는 방법</title><content type='html'>startx &gt;&amp; /tmp/x.log&lt;br /&gt;&lt;br /&gt;또는&lt;br /&gt;&lt;br /&gt;startx &gt; /tmp/x.log 2&gt;&amp;1&lt;br /&gt;&lt;br /&gt;로그확인은 cat /tmp/x.log&lt;br /&gt;[출처] 에러 로그를 저장하는 방법|작성자 쭌&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-2945497085187675135?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/2945497085187675135/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=2945497085187675135' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2945497085187675135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2945497085187675135'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_7624.html' title='에러 로그를 저장하는 방법'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-7451406870417437027</id><published>2009-04-22T01:04:00.001-07:00</published><updated>2009-04-22T01:04:33.080-07:00</updated><title type='text'>호주 퍼스 가기위한 준비</title><content type='html'>ㅇ 여권&lt;br /&gt;경기도 여권민원실 : http://minwon.gyeonggi.go.kr/jsp/func/menu/user/view/AAVframe.jsp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ㅇ 항공권 싸게 알아보기 &lt;br /&gt;투어익스프레스 : http://www.tourexpress.com/&lt;br /&gt;투어캐빈 : http://www.tourcabin.com/&lt;br /&gt;** 주의사항 : 편도가 왕복의 1/2 가격은 아니라는 것. 1년 일정이면 왕복이 쌀수 있음&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ㅇ 퍼스 정보 제공(여행, 숙박, 교통 등등)&lt;br /&gt;Virtual Tourist : &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.virtualtourist.com/travel/Australia_and_Oceania/Australia/State_of_Western_Australia/Perth-1871231/TravelGuide-Perth.html&lt;br /&gt;LOOK AT PERTH : http://www.lookatwa.com.au/index.php&lt;br /&gt;Beautiful Perth : http://www.beautifulperth.com/&lt;br /&gt;Perth Portal &amp; Web Site Directory : http://www.inperth.com.au/perth.shtml&lt;br /&gt;Perth Local Directory : http://www.streetsofperth.com.au/&lt;br /&gt;Perth Tourist Centre Online : http://www.perthtouristcentre.com.au&lt;br /&gt;Your Guide to Perth and Fremantle : http://www.countrywide.com.au/&lt;br /&gt;What's On in Perth, Fremantle and Surrounds : http://www.whatson.com.au&lt;br /&gt;http://www.totaltravel.com.au/travel/wa/pertharea/perth&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ㅇ 숙소 알아보기 (백패커, 홈스테이는 현지 어학원 또는 영어학교를 통해서)&lt;br /&gt;&lt;br /&gt;호텔예약 TravelStar : http://www.travelstar.co.kr/&lt;br /&gt;&lt;br /&gt; - 한국 홈페이지. 더블룸 5일 숙박이 보통 50만원 한다.&lt;br /&gt;YHA AUSTRALIA : http://www.yha.com.au&lt;br /&gt;Hostel Times : http://www.hosteltimes.com/Kr/index.asp&lt;br /&gt;&lt;br /&gt;VIP Backpackers : http://www.vipbackpackers.com/&lt;br /&gt;hostelworld : http://www.hostelworld.com/&lt;br /&gt;퍼스 정보 : http://www.totaltravel.com.au/travel/wa/pertharea/perth/directory/accommodation&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;괜찮아 보이는 곳&lt;br /&gt;&lt;br /&gt;http://www.billabongresort.com.au&lt;br /&gt;&lt;br /&gt;  - 아침제공, 공항 픽업서비스 제공&lt;br /&gt;&lt;br /&gt;Comfort Hostel : http://www.comfortbackpackers.com/&lt;br /&gt;  - 아침제공, 3일이상이면 공항 픽업서비스 제공&lt;br /&gt;&lt;br /&gt;http://www.townsend.wa.edu.au/index.php&lt;br /&gt;http://www.ymcajewellhouse.com/&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ㅇ 여행용품 한국에서 미리준비하기&lt;br /&gt;&lt;br /&gt;http://www.withtour.co.kr/ (기내용 가방 괜찮아보임)&lt;br /&gt;http://www.travelmate.co.kr&lt;br /&gt;http://www.safetour.co.kr&lt;br /&gt;http://www.tntmall.co.kr/&lt;br /&gt;http://www.travelwiz.co.kr/&lt;br /&gt;http://www.back-packer.co.kr/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ㅇ 퍼스 영어 학교&lt;br /&gt;* Western Australian Private Education and Training Industry Association Members : http://www.wapetia.org.au/members.html&lt;br /&gt;* ENGLISH AUSTRALIA : http://www.englishaustralia.com.au &lt;br /&gt;* http://studylink.com/index.html&lt;br /&gt;셋다 무슨 영어 교육협회인듯 한데..퍼스 학교 리스트를 알수 있다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PHOENIX Academy : http://www.phoenixacademy.com.au/&lt;br /&gt;Embassy CES : http://www.embassyces.com/english/&lt;br /&gt;Australian College of English(ACE) : http://www.ace.edu.au/tperth.htm&lt;br /&gt;Milner International College of English : http://www.milner.wa.edu.au/&lt;br /&gt;P.I.C.E Perth International College of English : http://www.pice.com.au/&lt;br /&gt;Murdoch Language Institute : http://www.alexander.wa.edu.au/mli.htm&lt;br /&gt;Cambridge International College Perth : http://www.cambridgecolleges.com/&lt;br /&gt;St Marks International College(GEOS Perth) : http://www.stmarksperth.com.au&lt;br /&gt;Education &amp; Training International (ETI) : http://www.eti.wa.edu.au/&lt;br /&gt;Eurocentres schools :&lt;br /&gt;&lt;br /&gt;http://www.eurocentres.com/en/language_schools/Perth/General,8,14,x38,1.html&lt;br /&gt;Centre for English Language Teaching (CELT) : http://www.celt.uwa.edu.au/&lt;br /&gt;Perth Institute of Business and Technology (PIBT) : http://www.pibt.wa.edu.au&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ㅇ 퍼스영어학교 소개 동영상(모 유학원서 제작함)&lt;br /&gt;http://www.tagstory.com/video/video_tag.aspx?tag=%C6%DB%BD%BA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ㅇ 호주 일자리 알아보기&lt;br /&gt;JOB SEARCH : http://jobsearch.gov.au&lt;br /&gt;&lt;br /&gt;Go West Now - WA's Working : http://www.gowestnow.com/&lt;br /&gt;&lt;br /&gt;농장 정보(과일따기) : http://www.tourinfocentre.com.au/work/work6.htm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ㅇ 퍼스 교통&lt;br /&gt;기차 : http://www.railpage.org.au/railmaps/&lt;br /&gt;&lt;br /&gt;버스 :  http://www.transperth.wa.gov.au&lt;br /&gt;&lt;br /&gt;공항 : http://www1.perthairport.net.au/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;택시(택시는 이회사 말고 하나 더 있음) : http://www.swantaxis.com.au/&lt;br /&gt;&lt;br /&gt;호주 항공사 : http://www.virginblue.com.au/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ㅇ 퍼스 날씨 : http://weatherreports.com/Perth,_Australia?units=c&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;ㅇ 기타&lt;br /&gt;&lt;br /&gt;구글 어스 퍼스 지도 :&lt;br /&gt;&lt;br /&gt;http://www.worldmapfinder.com/Map_EarthMap.php?ID=/Kr/Oceania/Australia/Perth&lt;br /&gt;&lt;br /&gt;호주 퍼스 정보 :&lt;br /&gt;&lt;br /&gt;http://www.hiviva.net/HTML/Travelinfo/travelinfo_04.htm?SELECT_TRAVEL_DESTINATION_INFO_AREA_UID=15&lt;br /&gt;ATM기기 사용방법 :&lt;br /&gt;&lt;br /&gt;http://www.hanabank.com/online/contents/card/guide/guid_04/guid_0401/1451_index.jsp&lt;br /&gt;&lt;br /&gt;학생전문여행사 : http://kises.co.kr/&lt;br /&gt;&lt;br /&gt;신한은행 제공 호주 뉴스 :&lt;br /&gt;http://shinhan.eduhouse.net/common/news/news_list.asp?sel_nation=4&lt;br /&gt;호주 CVA &amp; 여행 준비하기 : http://blog.daum.net/iboyoung/5595490&lt;br /&gt;[출처] 호주 퍼스에 가기 위한 북마크|작성자 쭌&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-7451406870417437027?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/7451406870417437027/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=7451406870417437027' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7451406870417437027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7451406870417437027'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_22.html' title='호주 퍼스 가기위한 준비'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-678990876756079031</id><published>2009-04-07T00:02:00.000-07:00</published><updated>2009-04-07T00:03:39.994-07:00</updated><title type='text'>[리눅스]  F T P 전송</title><content type='html'>(1) 먼저 파일을 받는 client 에 전송할 데이터의 directory와 동일한 구조의 directory를 생성&lt;br /&gt;&lt;br /&gt;     #Source Server] find /home/user -type d -depth -print &gt; dir.list&lt;br /&gt;&lt;br /&gt;                             dir.list 파일을 target Server로 옮김&lt;br /&gt;&lt;br /&gt;                             [주의]여기서 path는 절대 path를 생성해야 해야 함&lt;br /&gt;&lt;br /&gt;     #Target Server] cat dir.list | awk '{ print " mkdir -p -mode 755 " $1 }' | sh -x&lt;br /&gt;&lt;br /&gt;                            [참고] Permission은 구지 명시하지 않아도 되며,&lt;br /&gt;&lt;br /&gt;                                      Source Server와 동일한 mode로 만들고자 하면,&lt;br /&gt;&lt;br /&gt;                                      Script하나 더 만들면 됨                            &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;(2) FTP로 모든 파일을 전송하는 다음의 script를 생성하고 동작시키면 됨&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;while read line&lt;br /&gt;do&lt;br /&gt;cd $line&lt;br /&gt;pwd&lt;br /&gt;ftp -n 211.45.5.251 &lt;&lt; +&lt;br /&gt;prompt off&lt;br /&gt;user root staff0&lt;br /&gt;cd $line&lt;br /&gt;pwd&lt;br /&gt;mput *&lt;br /&gt;+&lt;br /&gt;done &lt; dir.list&lt;br /&gt;&lt;br /&gt;수행결과를 log 파일로 남길려면 &lt;br /&gt;# Source Server] ftp.sh &gt;  log&lt;br /&gt;실행하는 위치는 아무것에나 상관없음. dir.list 에 디렉토리 경로가 절대 경로이므로&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-678990876756079031?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/678990876756079031/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=678990876756079031' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/678990876756079031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/678990876756079031'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/f-t-p.html' title='[리눅스]  F T P 전송'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3546818377149727685</id><published>2009-04-06T02:22:00.001-07:00</published><updated>2009-04-06T02:22:46.275-07:00</updated><title type='text'>리눅스 रूट 패스워드</title><content type='html'>리눅스에는 시스템의 사용 모드를 나타내는 ‘runlevel’이라는 것이 있는데 &lt;br /&gt;============================================&lt;br /&gt;0 - 시스템 종료&lt;br /&gt;1 - Single-User 모드&lt;br /&gt;2 - Multi-User 모드(네트워크 사용 불가)&lt;br /&gt;3 - Multi-User 모드&lt;br /&gt;5 - Multi-User 모드(그래픽 화면 로그인)&lt;br /&gt;6 - 시스템 재시작 (멀티유저모드)&lt;br /&gt;============================================&lt;br /&gt;&lt;br /&gt;solaris 의경우 재시작할때 shutdown -r0 -y0 -i6 &lt;br /&gt;싱글유저로 갈때는 shutdown -r0 -y0 -s&lt;br /&gt;&lt;br /&gt;HP의 경우 일단 OK 모드(대기모드?) &lt;br /&gt;에서 init 명령어나 shutdown 명령어로 이동을 한다&lt;br /&gt;&lt;br /&gt;Linux (fedora, redhat) 에서는&lt;br /&gt;shutdown -r 재기동&lt;br /&gt;shutdown -s 싱글유저&lt;br /&gt;&lt;br /&gt;싱글유저 모드란 별도의 로그인 과정 없이 root 계정으로 시스템로긴하는 모드이다. &lt;br /&gt;(설정에따라서 로그인하는 경우가 있음)&lt;br /&gt;이 모드로 부팅하면 root 권한으로 로긴을 하는 것이기때문에 passwd 명령어로 &lt;br /&gt;쉽게 root 패스워드를 변경할 수 있다.&lt;br /&gt;&lt;br /&gt;부팅을 하기전에 부트로더에서 부팅 파라미터를 수정해서 싱글유저로 들어갈수가 있는데&lt;br /&gt;1. GRUB이 떠서 디폴트로 지정된 OS로 부팅하려고 할 때, 엔터를 쳐서 선택 메뉴로 들어간다.&lt;br /&gt;&lt;br /&gt;2. 부팅하고자 하는 것을 선택하고 e를 눌러 Edit 모드로 들어간다. 시스템마다 차이는 있겠지만 보통 다음과 같은 형식으로 나올 것이다.&lt;br /&gt;&lt;br /&gt;============================================&lt;br /&gt;root (hd0,0)&lt;br /&gt;kernel /boot/vmlinuz-2.6.14-41hs ro root=/dev/hda2&lt;br /&gt;initrd /boot/initrd-2.6.14-41hs.img &lt;br /&gt;============================================&lt;br /&gt;&lt;br /&gt;3. kernel이 있는 줄을 선택하고 다시 e를 누른다. 그럼 다음과 같이 부팅 파라미터를 수정할 수 있는데 끝에 1 또는 single을 입력하고 엔터를 누른다.&lt;br /&gt;&lt;br /&gt;=============================================&lt;br /&gt;grub edit&gt; kernel /boot/vmlinuz-2.6.14-41hs ro root=/dev/hda2 1 &lt;br /&gt;=============================================&lt;br /&gt;&lt;br /&gt;4. 다시 2번의 화면으로 돌아오게 되는데 b를 누르면 부팅을 시작한다.&lt;br /&gt;&lt;br /&gt;5. 별도의 로그인 화면이 뜨지 않고 다음과 같이 프롬프트가 뜰 것이다. 이제 root 패스워드를 원하는 것으로 바꿀 수 있다.&lt;br /&gt;&lt;br /&gt;===============================================&lt;br /&gt;sh-3.00# passwd&lt;br /&gt;Changing password for user root.&lt;br /&gt;New UNIX password: _ &lt;br /&gt;================================================&lt;br /&gt;&lt;br /&gt;6. 시스템을 재부팅한다.&lt;br /&gt;&lt;br /&gt;=================================================&lt;br /&gt;sh-3.00# reboot &lt;br /&gt;=================================================&lt;br /&gt;&lt;br /&gt;이상 GRUB를 사용한 싱글유저로긴 방법을 알아보았는데&lt;br /&gt;실제 업무에서는 이 방법을 쓰지 않는다.&lt;br /&gt;게다가 서버관리자가 루트패쓰워드를 해킹당하거나, 뭐였는지&lt;br /&gt;기억을 못한다는건 있어서는 않되는일이며,&lt;br /&gt;다른 관리자에게 물어보는것은 더더욱 않되는 일이다&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3546818377149727685?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3546818377149727685/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3546818377149727685' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3546818377149727685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3546818377149727685'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_06.html' title='리눅스 रूट 패스워드'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1391067235626204047</id><published>2009-04-03T02:48:00.005-07:00</published><updated>2009-04-03T02:48:54.421-07:00</updated><title type='text'>방화벽 스크립트 사용하기</title><content type='html'>FD 코리아에서는 외부 방화벽 이외에 OS내에 iptables 가 동작하도록 스크립트를 기본적으로 제공해 드리고 있습니다. &lt;br /&gt;방화벽 스크립트의 위치는 /etc/rc.d/ 디렉토리입니다. &lt;br /&gt;&lt;br /&gt;[root@server21010910231 root]# cd /etc/rc.d/&lt;br /&gt;[root@server21010910231 rc.d]# ls&lt;br /&gt;init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.firewall  rc.local  rc.sysinit&lt;br /&gt;[root@server21010910231 rc.d]#&lt;br /&gt;&lt;br /&gt;/etc/rc.d/ 디렉토리 안에서 보시면 rc.firewall 파일을 확인 하실 수 있습니다. rc.firewall 스크립트는 부팅시 자동으로 동작 하도록 아래와 같은 내용이 /etc/rc.local 파일에 등록 되어 있습니다. &lt;br /&gt;&lt;br /&gt;if [ -e /etc/rc.d/rc.firewall ];then&lt;br /&gt;sh /etc/rc.d/rc.firewall&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;스크립트 상에서는 기본적으로 20, 21, 22, 25, 53, 80, 110, 143, 443, 953, 3306 포트가 열려 있으며, 나머지 포트는 막혀 있습니다. rc.firewall 스크립트상에서 아래 부분이 해당 포트들을 허용하도록 설정 한 부분입니다.&lt;br /&gt;&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 20:22 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 953 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;&lt;br /&gt;열려포트를 막기를 원하신다면, 해당 포트에 대한 라인을 삭제하시거나 주석(#) 처리 하시면 됩니다.&lt;br /&gt;그리고 특정 아이피 주소에서만 포트 접속이 가능하게 설정을 하시려면 해당 라인에 --source 아이피를 입력하시면 됩니다. 아래의 예는 210.109.102.31번의 아이피 에서만 ssh(22번 포트)로 접속 할수 있게 수정 한 것입니다. &lt;br /&gt;&lt;br /&gt;$IPTABLES -A INPUT -p tcp --source 210.109.102.31 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;&lt;br /&gt;추가로 다른 포트를 허용하려면, 위와 같은 라인에 허용할 포트에 대한 스크립트 한줄만 추가 하면 됩니다. 아래 스크립트는 8080포트 허용을 위한 스크립트 입니다.&lt;br /&gt;$IPTABLES -A INPUT -p tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;&lt;br /&gt;스크립트 수정이 완료되셨다면, /etc/rc.d/rc.firewall 명령을 실행 시키시면 iptables 룰셋이 적용되게 됩니다. &lt;br /&gt;적용된 룰셋을 확인 하시려면 아래와 같이 iptables -L 명령으로 확인 하실수 있습니다.&lt;br /&gt;&lt;br /&gt;[root@server21010910231 rc.d]# iptables -L&lt;br /&gt;Chain INPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;ACCEPT     all  --  anywhere             anywhere&lt;br /&gt;DROP       all  --  anywhere             anywhere           state INVALID&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           state RELATED,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpts:ftp-data:ssh state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:smtp state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:domain state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:http state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:pop3 state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:imap state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:https state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:rndc state NEW,ESTABLISHED&lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere           tcp dpt:mysql state NEW,ESTABLISHED&lt;br /&gt;DROP       tcp  --  anywhere             anywhere&lt;br /&gt;&lt;br /&gt;Chain FORWARD (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;ACCEPT     all  --  anywhere             anywhere&lt;br /&gt;DROP       all  --  anywhere             anywhere           state INVALID&lt;br /&gt;DROP       tcp  --  anywhere             anywhere           tcp dpts:6666:ircd&lt;br /&gt;[root@server21010910231 rc.d]#&lt;br /&gt;&lt;br /&gt;그리고 아래와 같이 iptables -F 명령을 입력하시면 적용된 룰셋이 삭제 되며, 이경우 서버를 재부팅 하거나, /etc/rc.d/rc.firewall 명령을 재실행 하기 전까지 룰셋이 적용되지 않게 됩니다. &lt;br /&gt;&lt;br /&gt;[root@server21010910231 rc.d]# iptables -F&lt;br /&gt;[root@server21010910231 rc.d]# iptables -L&lt;br /&gt;Chain INPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;&lt;br /&gt;Chain FORWARD (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;[root@server21010910231 rc.d]#&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1391067235626204047?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1391067235626204047/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1391067235626204047' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1391067235626204047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1391067235626204047'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_9772.html' title='방화벽 스크립트 사용하기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-5887694887258044098</id><published>2009-04-03T02:48:00.003-07:00</published><updated>2009-04-03T02:48:38.102-07:00</updated><title type='text'>디렉토리 크기 알아내기</title><content type='html'>리눅스/유닉스에서 디렉토리내의 파일들의 총 크기를 알고 싶은 경우 du 명령어를 사용하면 된다. du 명령의 사용법은 아래와 같다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;(1) 파일의 크기를 byte 로 계산하여서 보여준다.&lt;br /&gt;&lt;br /&gt;   # du -ab&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;(2) 파일의 크기를 사람이 보기 편하도록 보여준다.&lt;br /&gt;   # du -abh&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;(3) 현재의 디렉토리의 총 크기만 보고 싶으면 아래와 같이 실행한다.&lt;br /&gt;&lt;br /&gt;   # du -abch | grep -v "./" &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   # du --max-depth=1 -h .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-5887694887258044098?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/5887694887258044098/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=5887694887258044098' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/5887694887258044098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/5887694887258044098'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_2621.html' title='디렉토리 크기 알아내기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-2133789154874876229</id><published>2009-04-03T02:48:00.001-07:00</published><updated>2009-04-03T02:48:21.470-07:00</updated><title type='text'>특정포트 죽이기</title><content type='html'>유닉스/리눅스 계열에서 특정 포트를 사용하는 프로세스 죽이기&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;아.. 힘겹게 알아냈는데 결국엔 삽질이 되었고나.&lt;br /&gt;&lt;br /&gt;아까워서라도 적어놔야지..  (나중에 써먹을때가 있을테야 ㅎㅎ)&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;kill `netstat -lnp | awk '{print $4, $7}' | grep $PORT | awk '{print $2}' | awk -F/ '{print $1}'`&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-2133789154874876229?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/2133789154874876229/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=2133789154874876229' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2133789154874876229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2133789154874876229'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_7727.html' title='특정포트 죽이기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-2467708470612228000</id><published>2009-04-03T02:47:00.004-07:00</published><updated>2009-04-03T02:48:05.277-07:00</updated><title type='text'>TCPDUMP</title><content type='html'>TCPDUMP User Guide &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Date : January 1999&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;written by Kwon, YongChul&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;-. 이 문서의 저작권은 저자(권용철:godslord@sparcs.kaist.ac.kr)에게 있습니다. 본문의 무단 인용, 복사는 저자와의 협의 없이 절대 불가능합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Table of Contents &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 문서를 보기 전에 알아야 할 사전 지식&lt;br /&gt;&lt;br /&gt;Tcpdump란?&lt;br /&gt;&lt;br /&gt;Tcpdump의 패키지 구하기&lt;br /&gt;&lt;br /&gt;Tcpdump의 설치&lt;br /&gt;&lt;br /&gt;Tcpdump Source의 간략한 설명&lt;br /&gt;&lt;br /&gt;Tcpdump의 옵션들&lt;br /&gt;&lt;br /&gt;조건식&lt;br /&gt;Tcpdump의 사용 예제들&lt;br /&gt;&lt;br /&gt;Tcpdump의 평가&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;이 문서를 보기 전에 알아야 할 사전 지식 &lt;br /&gt;이 문서는 네트워크의 패킷들을 잡아내는 Tcpdump라는 프로그램에 대해서 설명하고 있다. 프로그램의 특성상, 네트워크에 관련된 많은 용어들과 특히 TCP/IP에 대한 내용 이 많이 나온다. 따라서 보다 잘 이해하기 위해서는 네트워크 설비 자료나, 네트워크 프로그래밍 가이드, 혹은 네트워크 프로토콜(TCP/IP)에 관련된 책들을 참조하는 것이 좋을 것이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump란? &lt;br /&gt;Tcpdump는 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들 을 출력해 주는 프로그램이다. 프로그램의 특성상, 네트워크 인터페이스를 아주 심도 있게 사용하기 때문에, 실행하는 사람은 반드시 네트워크 인터페이스에 대한 읽기 권 한이 있어야만 한다.&lt;br /&gt;OS dependent)&lt;br /&gt;위에서 말하는 읽기 권한을 가지고 있어야 하는 파일, 혹은 Tcpdump의 퍼미션 이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SunOS : /dev/nit, /dev/bpf*&lt;br /&gt;&lt;br /&gt;Solaris(SunOS 5.x) : /dev/le 등&lt;br /&gt;&lt;br /&gt;HP-UX &amp; IRIX &amp; Linux : root에서 실행하거나, root로 setuid를 설정해야 함&lt;br /&gt;&lt;br /&gt;Ultrix &amp; Digital UNIX : root가 pfconfig를 이용하여, promiscuous-mode를 가능하게 설정하면 어떤 유저라도 사용할 수 있다.&lt;br /&gt;&lt;br /&gt;BSD : /dev/bpf* &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump의 패키지 구하기 &lt;br /&gt;Tcpdump는 ftp://ftp.ee.lbl.gov/tcpdump.tar.Z에서 최신 버전을 구할 수 있다. 유명 한 프로그램이기 때문에, 시스템소프트웨어를 패키지형태로 제공해 주는 OS들의 경우 Vendor에서 패키징된(컴파일된) 버전으로도 구할 수 있을 것이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump의 설치 &lt;br /&gt;Tcpdump는 libpcap(Protocol Capture Library)라는 것을 사용한다. 이 라이브러리는 Platform에 상관없이 동일한 방법으로 사용자 레벨에서 패킷들을 캡춰할 수 있게 해 준다. 따라서 이 라이브러리가 없다면, ftp://ftp.ee.lbl.gov/libpcap.tar.Z에서 구하 여 설치하도록 한다. &lt;br /&gt;&lt;br /&gt;ANSI C 컴파일러는 아마 대부분의 시스템에서 구비하고 있을 것이다. 만약 없다면 ftp://prep.ai.mit.edu/pub/gnu/gcc.tar.gz를 받아서 설치하기 바란다. &lt;br /&gt;&lt;br /&gt;libpcap라이브러리가 완벽하게 설치되었다는 가정하에서 다음의 절차에 따라 설치를 시작한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Makefile.in의 BINDEST와 MANDEST 항목에 각각, tcpdump 실행파일과 메뉴얼 페이 지가 설치될 디렉토리들을 입력해 준다. &lt;br /&gt;Tcpdump 패키지와 함께 제공되는 ./configure 스크립트를 실행시킨다. 이 스크립트는 현재 시스템의 환경들을 검사하고 이에 맞추어서 Makefile을 생성해 준다. &lt;br /&gt;make를 실행한다. &lt;br /&gt;컴파일이 다 됐으면, make install을 수행하여 실행파일을 설치하고, make install-man을 실행하여 메뉴얼 페이지도 설치한다. &lt;br /&gt;tcpdump의 퍼미션이 제대로 되었는지를 검사한다. setgid가 설정되어 있기 때문에, 원하지 않는 사람이 실행하게 된다면 위험하다. &lt;br /&gt;위에서 설명한 절차를 그대로 옮겨 본다. &lt;br /&gt;# vi Makefile.in&lt;br /&gt;# ./configure&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;# make install-man&lt;br /&gt;&lt;br /&gt;OS dependent)&lt;br /&gt;&lt;br /&gt;DEC/OSF and BSD/386, etc : tcpdump가 OS와 함께 제공되는 경우가 있다. 이럴 경우 tcpdump를 업그레이드 하기 전에 반드시 기존의 tcpdump를 백업해 두도록 하자.&lt;br /&gt;&lt;br /&gt;Linux : libpcap 라이브러리는 2.0.25 커널에서 테스트 됐다. 2.0.x 대 커널 에서 25이하의 버전에서는 실행이 아마 가능할 것이다. 그러나 1.x대의 커널에서는 동작 여부가 입증되지 않았으므로 주의해야 한다.&lt;br /&gt;&lt;br /&gt;OSF 4 : OSF4에서는 stack C 컴파일러에 치명적인 버그가 있다. 이 버그를 피해가려면, ./configure를 실행한 후 컴파일 하기 전에 Makefile에서 다음의 문장을 삭제한 후 컴파일해 주면 된다.&lt;br /&gt;&lt;br /&gt;            -DETHER_HEADER_HAS_EA=1 -DETHER_ARP_HAS_EA=1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump Source의 간략한 설명 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump의 옵션들 &lt;br /&gt;&lt;br /&gt;-a : Network &amp; Broadcast 주소들을 이름들로 바꾼다.&lt;br /&gt;&lt;br /&gt;-c Number : 제시된 수의 패킷을 받은 후 종료한다.&lt;br /&gt;&lt;br /&gt;-d : comile된 packet-matching code를 사람이 읽을 수 있도록 바꾸어 표준 출력으로 출력하고, 종료한다.&lt;br /&gt;&lt;br /&gt;-dd : packet-matching code를 C program의 일부로 출력한다.&lt;br /&gt;&lt;br /&gt;-ddd : packet-matching code를 숫자로 출력한다.&lt;br /&gt;&lt;br /&gt;-e : 출력되는 각각의 행에 대해서 link-level 헤더를 출력한다.&lt;br /&gt;&lt;br /&gt;-f : 외부의 internet address를 가급적 심볼로 출력한다(Sun의 yp server와의 사용은 가급적 피하자).&lt;br /&gt;&lt;br /&gt;-F file : filter 표현의 입력으로 파일을 받아들인다. 커맨드라인에 주어진 추가의 표현들은 모두 무시된다.&lt;br /&gt;&lt;br /&gt;-i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지저되지 않으면 시스템의 인터페이스 리스트를 뒤져서 가장 낮은 번호를 가진 인터페이스를 선택한다(이 때 loopback은 제외된다).&lt;br /&gt;&lt;br /&gt;-l : 표준 출력으로 나가는 데이터들을 line buffering한다. 다른 프로그램에서 tcpdump로부터 데이터를 받고자 할 때, 유용하다.&lt;br /&gt;&lt;br /&gt;-n : 모든 주소들을 번역하지 않는다(port,host address 등등)&lt;br /&gt;&lt;br /&gt;-N : 호스트 이름을 출력할 때, 도메인을 찍지 않는다.&lt;br /&gt;&lt;br /&gt;-O : packet-matching code optimizer를 실행하지 않는다. 이 옵션은 optimizer에 있는 버그를 찾을 때나 쓰인다.&lt;br /&gt;&lt;br /&gt;-p : 인터페이스를 promiscuous mode로 두지 않는다.&lt;br /&gt;&lt;br /&gt;-q : 프로토콜에 대한 정보를 덜 출력한다. 따라서 출력되는 라인이 좀 더 짧아진다.&lt;br /&gt;&lt;br /&gt;-r file : 패킷들을 '-w'옵션으로 만들어진 파일로 부터 읽어 들인다. 파일에 "-" 가 사용되면 표준 입력을 통해서 받아들인다.&lt;br /&gt;&lt;br /&gt;-s length: 패킷들로부터 추출하는 샘플을 default값인 68Byte외의 값으로 설정할 때 사용한다(SunOS의 NIT에서는 최소가 96Byte이다). 68Byte는 IP,ICMP, TCP, UDP등에 적절한 값이지만 Name Server나 NFS 패킷들의 경우에는 프로토콜의 정보들을 Truncation할 우려가 있다. 이 옵션을 수정할 때는 신중해야만 한다. 이유는 샘플 사이즈를 크게 잡으면 곧 패킷 하나하나를 처리하는데 시간이 더 걸릴 뿐만아니라 패킷 버퍼의 사이즈도 자연히 작아지게 되어 손실되는 패킷들이 발생할 수 있기 때문이다. 또, 작게 잡으면 그만큼의 정보를 잃게되는 것이다. 따라서 가급적 캡춰하고자 하는 프로토콜의 헤더 사이즈에 가깝게 잡아주어야 한다.&lt;br /&gt;&lt;br /&gt;-T type : 조건식에 의해 선택된 패킷들을 명시된 형식으로 표시한다. type에는 다음과 같은 것들이 올 수 있다. rpc(Remote Procedure Call), rtp(Real-Time Applications protocol), rtcp(Real-Time Application control protocal), vat(Visual Audio Tool), wb(distributed White Board)&lt;br /&gt;&lt;br /&gt;-S : TCP sequence번호를 상대적인 번호가 아닌 절대적인 번호로 출력한다.&lt;br /&gt;&lt;br /&gt;-t : 출력되는 각각의 라인에 시간을 출력하지 않는다.&lt;br /&gt;&lt;br /&gt;-tt : 출력되는 각각의 라인에 형식이 없는 시간들을 출력한다.&lt;br /&gt;&lt;br /&gt;-v : 좀 더 많은 정보들을 출력한다.&lt;br /&gt;&lt;br /&gt;-vv : '-v'보다 좀 더 많은 정보들을 출력한다.&lt;br /&gt;&lt;br /&gt;-w : 캡춰한 패킷들을 분석해서 출력하는 대신에 그대로 파일에 저장한다.&lt;br /&gt;&lt;br /&gt;-x : 각각의 패킷을 헥사코드로 출력한다.&lt;br /&gt;&lt;br /&gt;조건식(expression) &lt;br /&gt;&lt;br /&gt;옵션의 제일 마지막인 조건식은 어떤 패킷들을 출력할지를 선택하는데 쓰인다. 조건식이 주어지지 않는 다면 모든 패킷들이 그 대상이 될 것이다. 일단 주어지면, 아무리 패킷들이 많아도 조 건식에 부합하는 패킷만을 출력한다. &lt;br /&gt;&lt;br /&gt;조건식들은 하나 또는 몇 개의 primitive들로 구성되어 있다. primitive들은 보통 하나 혹은 몇개의 qualifier들 다음에 오는 하나의 값으로 이루어진다. Qualifier들은 모두 3 종류이며 다음과 같다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;type : 주어진 값의 종류가 무엇인지를 나타낸다. 가능한 type들은 'host', 'net', 'port'가 있다. type이 없는 값들은 type을 host라 가정한다.&lt;br /&gt;&lt;br /&gt;dir : id로 부터의 어떤 특정한 전송 방향을 나타낸다. 가능한 방향은 'src', 'dst', 'src or dst', 'src and dst'이다. 만약 방향이 정해지지 않았다면, src or dst라 가정한다. "For `null' link layers (i.e. point to point protocols such as slip) the inb ound and out bound qualifiers can be used to specify a desired direction."&lt;br /&gt;&lt;br /&gt;proto : 매칭을 특정 프로토콜에 한해서 수행한다. 가능한 프로토콜들은 ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp이다. 만약 프로토콜이 명시되지 않았다면, 해당하는 값의 type에 관련된 모든 프로토콜들이 그 대상이 된다.&lt;br /&gt;&lt;br /&gt;이 밖에도 위의 패턴을 따르지 않는 Primitive들이 존재한다(gateway, broadcst, less, greater, 산술식). &lt;br /&gt;&lt;br /&gt;좀 더 정교한 조건식들을 사용하려면, 'and(&amp;&amp;)', 'or(||)', 'not(!)'들을 사용하여 여러 primitive들을 연결하면 된다. 같은 표현들은 생략될 수 있다. &lt;br /&gt;&lt;br /&gt;사용 가능한 Primitive들 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;dst host HOST&lt;br /&gt;packet의 IP destination 항목이 HOST일때 참이 된다. &lt;br /&gt;src host HOST&lt;br /&gt;packet의 IP source 항목이 HOST일때 참이 된다. &lt;br /&gt;host HOST&lt;br /&gt;IP source, IP destination 항목 중 어느 하나라도 HOST이면 참이다. &lt;br /&gt;ether dst ehost&lt;br /&gt;ethernet destination 주소가 ehost일 때 참이다. &lt;br /&gt;ether src ehost&lt;br /&gt;ethernet source 주소가 ehost일 때 참이다. &lt;br /&gt;ether host ehost&lt;br /&gt;ethernet source, destination 항목들 중 어느 하나라도 ehost이면 참이다. &lt;br /&gt;gateway host&lt;br /&gt;패킷이 host를 게이트웨이로 사용하면 참이다. 이 말의 의미는 ethernet sour ce나 destination 항목은 host이지만, IP source와 destination은 host가 아닐 때를 말한다. &lt;br /&gt;dst net NET&lt;br /&gt;패킷의 IP destination 주소가 NET의 network number를 가지고 있을 때 참이 다. &lt;br /&gt;src net NET&lt;br /&gt;패킷의 IP source 주소가 NET의 network number를 가지고 있을 때 참이다. &lt;br /&gt;net NET&lt;br /&gt;패킷의 IP source 주소 혹은 destination 주소가 NET의 network number를 가 지고 있을 때 참이다. &lt;br /&gt;net netmask mask&lt;br /&gt;IP 어드레스가 지정된 netmask를 통해서 net과 매칭되면 참이다. &lt;br /&gt;net net/len&lt;br /&gt;IP 어드레스가 netmask와 len 비트만큼 매치되면 참이다. &lt;br /&gt;dst port PORT&lt;br /&gt;패킷이 ip/tcp, ip/udp 프로토콜의 패킷이고 destination port의 값이 PORT일 때 참이다. port는 /etc/services에 명시된 이름일 수도 있고 그냥 숫자일 수도 있다. 만약 이름이 사용됐다면 port 번호와 프로토콜이 같이 체크될 것이다. 만약 숫자나 불 확실한 이름이 사용됐을 경우에는 port 번호만이 체크될 것이다. &lt;br /&gt;src port PORT&lt;br /&gt;패킷의 source port의 값으로 PORT를 가지면 참이다. &lt;br /&gt;port PORT&lt;br /&gt;패킷의 source, destination port 중에 하나라도 PORT이면 참이다. &lt;br /&gt;less length&lt;br /&gt;패킷이 length보다 짧거나 같으면 참이다.(len &lt;= length) &lt;br /&gt;greater length&lt;br /&gt;패킷이 length보다 짧거나 같으면 참이다.(len &gt;= length) &lt;br /&gt;ip proto protocol&lt;br /&gt;패킷이 지정된 종류의 프로토콜의 ip패킷이면 참이다. Protocol은 icmp, igrp, udp, nd, tcp 중의 하나 혹은 몇 개가 될 수 있다. 주의할 점은 tcp, udp, icmp들은 '\'로 escape되어야 한다. &lt;br /&gt;ehter broadcast&lt;br /&gt;패킷이 ethernet broadcast 패킷이라면 참이다. ehter는 생략 가능하다. &lt;br /&gt;ip broadcast&lt;br /&gt;패킷이 IP broadcast 패킷이라면 참이다. &lt;br /&gt;ether multicast&lt;br /&gt;패킷이 IP multicast 패킷이라면 참이다. &lt;br /&gt;ether proto protocol&lt;br /&gt;패킷이 ether type의 protocol이라면 참이다. protocol은 ip, arp, rarp 중에 하나 혹은 몇개가 될 수 있다. ip proto protocol에서와 마찬가지로 ip, arp, rarp는 escape 되어야 한다. &lt;br /&gt;decnet src host&lt;br /&gt;만약 DECNET의 source address가 host이면 참이다. 이 어드레스는 '10.123'이 나 DECNET의 host name일 수 있다. DECNET host name은 DECNET에서 돌아가도록 설정된 Ultrix 시스템에서만 사용 가능하다. &lt;br /&gt;decnet dst host&lt;br /&gt;DECNET destination address가 host이면 참이다. &lt;br /&gt;decnet host HOST&lt;br /&gt;DECNET source, destination address중의 하나라도 HOST이면 참이다. &lt;br /&gt;ip, arp, rarp, decnet&lt;br /&gt;ether proto [ip|arp|rarp|decnet]의 약어 &lt;br /&gt;lat, moprc, mopdl&lt;br /&gt;ether proto [lat|moprc|mopdl]의 약어 &lt;br /&gt;tcp, udp, icmp&lt;br /&gt;ip proto [tcp|udp|icmp]의 약어 &lt;br /&gt;expr relop expr&lt;br /&gt;&lt;br /&gt;EXPR&lt;br /&gt;proto [expr:size]의 형식을 띤다. proto, expr, size에 올 수 있는 것들은 다음과 같다. &lt;br /&gt;proto : ether, fddi, ip, arp, rarp, tcp, udp, icmp &lt;br /&gt;expr : indicate Byte offset of packet of proto &lt;br /&gt;size : optional. indicate the size of bytes in field of interest &lt;br /&gt;default is one, and can be two or four &lt;br /&gt;RELOP&lt;br /&gt;!=, =, &lt;=, &gt;=, etc. &lt;br /&gt;이 조건식을 사용하기 위해서는 먼저 해당하는 Protocol(proto)의 헤더에 관련된 것들을 자세히 알아야만 한다. proto에는 대상이 될 프로토콜을 지정한다. expr에는 프로토콜 헤더의 처음부터의 Byte Offset을 지정하는 식이 들어가게 된다. Size는 Option이며 지정이 안 되어 있을 경우에는 자동으로 1byte를 지칭한다. 따라서 이 조건식을 사용하게 되면 헤더에 포함된 정보를 Bitmask를 사용하여 직 접 원하는 패킷인지를 가려낼 수 있기 때문에, 보다 정밀한 사용이 가능하게 된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump의 사용 예제들 &lt;br /&gt;&lt;br /&gt;security라는 호스트로부터 날아오고, 날아가는 패킷들을 출력&lt;br /&gt;# tcpdump host security &lt;br /&gt;security와 mazinga, getarobo 사이에 날아다니고 있는 패킷들을 출력&lt;br /&gt;# tcpdump host security and \( mazinga or getarobo \) &lt;br /&gt;security에서 elgaim을 제외한 모든 호스트로 날아다니는 IP 패킷들을 출력&lt;br /&gt;# tcpdump ip host security and not elgaim &lt;br /&gt;gateway amurorei를 거치는 ftp에 관련된 패킷들을 출력&lt;br /&gt;# tcpdump 'gateway amurorei and ( port ftp or ftp-data )' &lt;br /&gt;local호스트가 아닌 호스트와 로컬호스트가 맺는 TCP 커넥션의 시작과 마지막 패 킷들을 출력한다(SYN, FIN 패킷).&lt;br /&gt;# tcpdump 'tcp[13] &amp; 3 != 0 and not src and dst net non-local' &lt;br /&gt;gateway amurorei를 지나는 576Byte보다 큰 패킷들을 출력한다&lt;br /&gt;# tcpdump 'gateway amurorei and ip[2:2] &gt; 576' &lt;br /&gt;Ethernet boradcast 혹은 multicast를 통해서 보내진 것이 아닌, IP broadcast 혹 은 multicast 패킷들을 출력한다.&lt;br /&gt;# tcpdump 'ehter[0] &amp; 1 = 0 and ip[16] &gt;= 224' &lt;br /&gt;Echo request/reply가 아닌 ICMP 패킷들을 모두 출력한다.&lt;br /&gt;# tcpdump 'icmp[0] != 8 and icmp[0] != 0' &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Tcpdump의 평가 &lt;br /&gt;TCPDUMP는 여러모로 좋은 툴이다. libpcap을 거의 100% 활용한 프로그램의 예이며, 실제로 많은 툴들이 TCPDUMP와 병행하여 돌아가거나, TCPDUMP를 기반으로 제작되었다. TCPDUMP의 막강한 packet filter는 현재 로컬 네트워크 상에서 날아다니고 있는 특정한 패킷들을 실시간으로 기록해 줄 수 있으며, 이를 이용하여 네트워크에서 벌어지는 일들을 네트워크 관리자가 원하는 대로 뽑아 볼 수 있게 해 준다. 또한, 시스템 관리자들에게는 로컬 유저의 외부로의 커넥션들을 감시하고, 또 특정 침입자가 침투 경로로 자주 이용하는 호스트, 혹은 원하지 않는 호스트로부터의 커넥션을 실시간으로 감시할 수 있게 해 준다. libpcap을 이용하여 비슷한 툴을 제작하고자 하는 사람들에게도 TCPDUMP는 가장 훌륭한 예제가 될 것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;References &lt;br /&gt;&lt;br /&gt;TCP dump Manual page : written by Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. &lt;br /&gt;TCP dump Document included in TCP dump package&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-2467708470612228000?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/2467708470612228000/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=2467708470612228000' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2467708470612228000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/2467708470612228000'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/tcpdump.html' title='TCPDUMP'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-756737641252637766</id><published>2009-04-03T02:47:00.003-07:00</published><updated>2009-04-03T02:47:50.815-07:00</updated><title type='text'>IPv6 비활성화 시키기</title><content type='html'>/etc/modprobe.conf 파일에 아래와 같이 입력한다.&lt;br /&gt;&lt;br /&gt;alias net-pf-10 off&lt;br /&gt;alias ipv6 off&lt;br /&gt;&lt;br /&gt;/etc/sysconfig/network 파일을 아래와 같이 수정한다.&lt;br /&gt;&lt;br /&gt;NETWORKING_IPV6=no&lt;br /&gt;&lt;br /&gt;위와 같이 설정한 후, 재부팅하거나 /etc/init.d/network restart 를 실행한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-756737641252637766?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/756737641252637766/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=756737641252637766' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/756737641252637766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/756737641252637766'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/ipv6.html' title='IPv6 비활성화 시키기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-5781375034535063831</id><published>2009-04-03T02:47:00.001-07:00</published><updated>2009-04-03T02:47:26.316-07:00</updated><title type='text'>NFS 사용을 위한 방화벽 설정</title><content type='html'>NFS가 사용하는 포트들을 iptables rule chain에 추가한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;foo# /sbin/iptables -A INPUT -p tcp --dport 111 -j ACCEPT&lt;br /&gt;foo# /sbin/iptables -A INPUT -p udp --dport 111 -j ACCEPT&lt;br /&gt;foo# /sbin/iptables -A INPUT -p tcp --dport 2049 -j ACCEPT&lt;br /&gt;foo# /sbin/iptables -A INPUT -p udp --dport 2049 -j ACCEPT&lt;br /&gt;foo# /sbin/iptables -A INPUT -p tcp --dport 32766 -j ACCEPT&lt;br /&gt;foo# /sbin/iptables -A INPUT -p tcp --dport 32767 -j ACCEPT&lt;br /&gt;foo# /sbin/iptables -A INPUT -p tcp --dport 32769 -j ACCEPT&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-5781375034535063831?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/5781375034535063831/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=5781375034535063831' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/5781375034535063831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/5781375034535063831'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/nfs_03.html' title='NFS 사용을 위한 방화벽 설정'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3272835761559946311</id><published>2009-04-03T02:46:00.004-07:00</published><updated>2009-04-03T02:47:06.268-07:00</updated><title type='text'>SELINUX 비활성화시키기</title><content type='html'>/etc/sysconfig/selinux 파일에서 SELINUX 를 disabled 로 설정하면 된다. /etc/sysconfig/selinux 설정 예제는 아래와 같다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SELINUX=disabled&lt;br /&gt;&lt;br /&gt;SELINUXTYPE=targeted&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3272835761559946311?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3272835761559946311/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3272835761559946311' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3272835761559946311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3272835761559946311'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/selinux.html' title='SELINUX 비활성화시키기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1044512523351655748</id><published>2009-04-03T02:46:00.003-07:00</published><updated>2009-04-03T02:46:43.774-07:00</updated><title type='text'>NFS 설정</title><content type='html'>리눅스에서 여러분의 홈디렉토리를 통해 자신의 모든 설정파일들 - 예를 들어 넷스케이프 북마크들, 여러분의 전자우편을(여러분이 컴퓨터마다 모두 같은 전자우편 프로그램을 사용한다고 가정하고) 공유하는 것은, 여러분이 컴퓨터와 컴퓨터 사이에서 옮겨 다닐 때 윈도우 매니저가 사용자 환경에 적절하게 맞춰졌던 것처럼 여러분 네트워크에 강력함을 더해준다.&lt;br /&gt;&lt;br /&gt;리눅스 그리고 유닉스는 일반적으로 파일시스템을 공유하기 위해 nfs(network file system)라는 이름을 가진 프로그램을 사용한다. nfs는 몇 가지 보안 구멍이 알려져 있으므로 방화벽 컴퓨터 뒤에 nfs를 숨기는 것이 좋다. NFS Howto는 이 기사를 읽은 다음에 꼼꼼하게 읽어보아야 할 중요한 리소스이다.&lt;br /&gt;&lt;br /&gt;UDI:    &lt;br /&gt;&lt;br /&gt;어떤 사용자가 접근했었는지 nfs가 기억하게 만드는 방법 가운데 하나는 UID - 사용자 식별 번호이다.  UID는 패스워드 파일의 세 번째 항목에 기록된다.  내 시스템에서 이 파일은 다음과 같다:&lt;br /&gt;  jpollman:IxmI/XXxxrg/Y:501:100:JC Pollma &lt;br /&gt;n:/home/jpollman:/bin/bash &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;501이라는 숫자가 있는 자리가 UID이다. 어떤 한 사용자를 위한 UID는, nfs를 사용하는 다른 모든 머신에서 항상 같아야 한다. 여러분은 패스워드 파일을 이용하여 모든 머신에서 같은 UID를 가지도록 할 수도 있고, NIS - 이 글의 주제를 넘어서는 것인데 - 를 사용할 수도 있다.  여러분이 UID를 바꾼다면 사용자 소유의 파일들에 대해서, chown 명령으로 소유권을 모두 설정해 주어야 한다. 꽤 성가신 일이기는 하지만, 딱 한 번만 해주면 된다.&lt;br /&gt;&lt;br /&gt;서버쪽에서 NFS:&lt;br /&gt;&lt;br /&gt;여러분이 실행해야 하는 프로그램이 몇 개 있다. 그리고, 커널도 필요한 옵션을 설정하여 컴파일해 두어야 한다.&lt;br /&gt;&lt;br /&gt;여러분의 커널에서: &lt;br /&gt;&lt;br /&gt;커널은 반드시 nfs 기능을 포함하여 컴파일되어야 한다. 다행스럽게도, 대부분의 배포판이 nfs를 지원하도록 컴파일된 커널을 가진다. 만약 여러분이 자신의 커널을 바꿀 계획이라면 Network File Systems 아래에서 다음 옵션들에 꼭 YES라고 답해야 한다.&lt;br /&gt;&lt;br /&gt;NFS filesystem support &lt;br /&gt;NFS server support &lt;br /&gt;&lt;br /&gt;No라고 답해야 하는 것은: &lt;br /&gt;&lt;br /&gt;Root filesystem on NFS&lt;br /&gt;&lt;br /&gt;그 다음에 커널을 컴파일하고, 새로 만들어진 커널을 여느 때처럼 설치한다.&lt;br /&gt;&lt;br /&gt;portmap: &lt;br /&gt;&lt;br /&gt;여러분의 시스템에 portmap 프로그램이 반드시 설치되어 실행되고 있어야 한다. 일반적으로 portmap 프로그램은 배포판을 설치할 때 기본적으로 설치된다. 다음 명령으로 portmap이 실행 중인지 확인할 수 있다:&lt;br /&gt;&lt;br /&gt;ps ax|grep port [Enter]&lt;br /&gt;&lt;br /&gt;이미 실행했다면, 제대로 동작하고 있는지 다음 명령으로 점검할 수 있다:&lt;br /&gt;&lt;br /&gt;rpcinfo -p [Enter]&lt;br /&gt;&lt;br /&gt;portmap 프로그램은 /etc/host.allow와 /etc/host.&lt;br /&gt;deny 파일을 이용하므로, rpcinfo -p 명령이 실패하더라도 여러분의 portmapper는 이들 파일이 있는지 점검해서 여러분이 원하는 대로 실행된다.&lt;br /&gt;&lt;br /&gt;nfsd and mount: &lt;br /&gt;&lt;br /&gt;nfsd와 mount 프로그램들이 반드시 여러분의 서버에 설치되어 있어야 한다. nfs 프로그램들은 커널 2.2에서는 knfsd라 불리고, 그 이전의 커널에서는 nfs-server2.2란 이름을 가지고 있었다.&lt;br /&gt;&lt;br /&gt;exports: &lt;br /&gt;&lt;br /&gt;/etc/exports 파일에는 nfs를 통해 다른 컴퓨터에 마운트 될 수 있는 디렉토리들을 설정한다. exports는 각각의 줄마다 마운트 될 수 있는 디렉토리와 허용된 사용자, 퍼미션 등으로 구성된 텍스트 파일이다. 내 시스템에 있는 exports 파일은 다음과 같다:&lt;br /&gt;&lt;br /&gt;/home *.kulai.org(rw)&lt;br /&gt;&lt;br /&gt;이 줄에서 첫 번째 항목은, 우리 네트워크의 다른 컴퓨터에서 마운트해서 홈디렉토리로 사용할 수 있는 디렉토리이다. 그 옆, 두 번째 아이템은 어떤 시스템에서 디렉토리를 마운트 할 수 있도록 할 것인지 정한 리스트이다.  우리는 kulai.org 네트워크에 속하는 모든 컴퓨터들이(*.kulai.org) 첫 번째 항목에서 설정한 디렉토리들을 마운트 할 수 있도록 설정했다. 세 번째는(괄호로 싸여 있는) 퍼미션을 설정한다. export 파일 설정에 대한 더 많은 정보가 필요하면, man 5 exports 명령을 실행한다. 여러분의 exports 파일을 바꾼 다음에는 설정 내용을 다시 읽어들이도록 nfsd와 mountd 데몬을 다시 시작해야 한다.&lt;br /&gt;&lt;br /&gt;마지막 점검: &lt;br /&gt;&lt;br /&gt;exports 파일을 고치고 필요한 데몬을 모두 다시 시작한 다음에는, 다음 명령을 실행한다:&lt;br /&gt;&lt;br /&gt;rpcinfo -p [Enter]&lt;br /&gt;&lt;br /&gt;명령을 실행하면 아래와 비슷한 메시지를 보게 될 것이다.(여러분이 다른 서비스들을 가동 중에 있고 mountd 포트가 다르다면 더 많은 메시지들을 보게 될지도 모르겠다):&lt;br /&gt;  program  vers  proto       port &lt;br /&gt;100000    2   tcp 111  portmapper &lt;br /&gt;100000    2   udp 111  portmapper &lt;br /&gt;100005    1   udp 745   mountd &lt;br /&gt;100005    1   tcp 747   mountd &lt;br /&gt;100003    2   udp 2049    nfs &lt;br /&gt;100003    2   tcp 2049     nfs &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;클라이언트 쪽에서 NFS: &lt;br /&gt;&lt;br /&gt;여러분은 반드시 nfs 클라이언트 프로그램들을 설치해야 한다: mountd와 portmap는 물론, 커널도 nfs를 지원하도록 설정되어야 한다. 이런 것들은 대부분의 배포판에서 처음 설치할 때 따라서 설치된다. 조건이 모두 갖추어진 다음, nfs 서버 - master.kulai.org - 를 루트로 마운트하기 위해서는, 클라이언트 머신에서 다음 명령을 실행한다:&lt;br /&gt;&lt;br /&gt;mount -t nfs master.kulai.org:/home /mnt [Enter]&lt;br /&gt;&lt;br /&gt;만약 모든 설정이 제대로 되었다면, 프롬프트가 다시 나타날 것이다. 그 다음, /mnt 디렉토리로 cd 하고, 디렉토리에서 ls 해보아 리스트가 보이면 모든 작업이 잘 된 것이다. 만약, 파일 시스템을 마운트하는 대신, mount 프로그램이 ‘mount:master.kulai.org://home failed’와 비슷한 에러 메시지를 보여준다면, 서버 쪽에 그 원인이 있는 것이다: exports 파일 설정이 잘못되어 접근권한이 없거나, exports 파일을 편집한 다음에 nfsd와 mountd 데몬을 다시 시작하는 것을 잊은 것이다. 만약 mount clntudp_create :RPC:Program not registered 라는 메시지가 보인다면 nfsd나 mountd 데몬이 서버에서 구동되지 않았다는 뜻이다. 또는 앞서 말했던 문제가 hosts.{allow,deny} 파일에 있는 것이다.  &lt;br /&gt;&lt;br /&gt;마운트된 파일시스템을 해제하기 위해서는 다음 명령을 사용한다:&lt;br /&gt;&lt;br /&gt;umount /mnt [Enter]&lt;br /&gt;&lt;br /&gt;마운트 작업들을 자동화하려면, 아래 항목을 여러분의 클라이언트 머신에 있는 /etc/fstab 파일에 추가한다 - 물론, master.kulai.org 대신 여러분 서버의 이름을 넣어야 한다.&lt;br /&gt;  master.kulai.org:/home   /home    nfs   rw  0  0 &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;흥미롭게도, 여러분이 다른 컴퓨터로부터 /home 디렉토리를 nfs 마운트 할 때, 여러분 하드 드라이브에서 /home 디렉토리는  사라진다 : 여전히 그 곳에 있지만, umount /home 할 때까지 여러분의 /home 디렉토리는 보이지 않는다.&lt;br /&gt;&lt;br /&gt;이제, 모든 것들이 잘 동작하면, 여러분의 서버와 클라이언트 머신 둘 다 다시 부트 하는게 좋겠다. 리눅스 구루들이(Linux gurus) “reboot”를 보고 내게 포화를 쏘아 대겠지만, 여기서 시스템을 다시 부트하는 데는 그만한 까닭이 있다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1044512523351655748?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1044512523351655748/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1044512523351655748' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1044512523351655748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1044512523351655748'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/nfs.html' title='NFS 설정'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-4428236664897662752</id><published>2009-04-03T02:46:00.001-07:00</published><updated>2009-04-03T02:46:18.372-07:00</updated><title type='text'>IPTABLES</title><content type='html'>명령어순례 &lt;br /&gt;&lt;br /&gt;iptables 명령은 리눅스 IPv4 방화벽을 설정하는 명령어이다. 1.1 시리즈 부터 리눅스 커널은 패킷 필터링을 포함하기 시작했다. 제 1세대는 BSD의 ipfw를 기본으로 했고 1994년 후반기에 알란 콕스(Alan Cox) 에 의해서 포트 됐다. &lt;br /&gt;이것은 리눅스 2.0에서 Jos Vos와 다른이들에 의해서 개선됐고 커널의 필터링 규칙을 제어하는 사용자 툴로는 'ipfwadm'이 사용됐다. &lt;br /&gt;1998년 중반에 리눅스 2.2를 위해 사용자 툴로 'ipchains'를 내놓았다. 마지막으로, 제 4세대 툴이 'iptables'이고 리눅스 2.4를 위해 1999년 중반에 커널을 재작성했다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;리눅스매거진 편집부&gt; &lt;br /&gt;&lt;br /&gt;  패킷 필터란? 네트워크를 통하는 모든 것은 패킷의 형태를 가지며, 패킷의 앞부분에는 패킷이 어디서 왔는지 어디로 향하는지, 어떤 프로토콜을 이용하는지 등과 같은 정보를 가지고 있다. 패킷 필터는 이렇게 지나가는 패킷의 헤더를 보고 패킷을 ‘DROP'(마치 전혀 전달되지 않는 것처럼 패킷을 거부) 하거나 ’ACCEPT‘(패킷이 지나가도록 내버려 둠)하는 등의 작업을 하는 프로그램을 말한다. iptables은 이런 패킷 필터링 기능을 설정하는데 사용할 수 있는 프로그램이다. 자신의 시스템에 설치돼 있는 iptables의 버전을 확인하는 방법은 아래명령을 통해 가능하다. &lt;br /&gt;&lt;br /&gt;# iptables --version &lt;br /&gt;&lt;br /&gt;iptables 1.2.4 &lt;br /&gt;&lt;br /&gt;커널은 3가지의 방화벽 체인(chain)을 기본적으로 가지고 패킷 필터링을 시작한다. 파이어월 체인 혹은 체인이라 부르는 이 3가지는 입력(Input), 출력(Output), 전달(Forward)이다. 입력체인은 들어오는 패킷을 조사하고 전달체인은 외부의 다른 시스템으로 전달될 패킷을 조사한다. 마지막으로 출력체인은 외부로 나가는 패킷을 조사한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 패킷검사방법 &lt;br /&gt;&lt;br /&gt;1. 패킷이 커널에 도착하면 그 패킷의 목적지를 확인한다. 이것을 '라우팅' 이라고 한다. &lt;br /&gt;&lt;br /&gt;2. 패킷의 목적지가 이곳이면, 패킷은 전달돼 입력체인에 도달한다. 패킷이 입력체인을 통과하면 패킷을 기다리고 있던 프로세서가 받게 된다. &lt;br /&gt;&lt;br /&gt;3. 그렇지 않고 커널이 포워딩 불능이나, 패킷을 어떻게 포워딩해야 하는가를 알지못하면, 그 패킷은 ‘DROP‘ 된다. 포워딩이 가능하게 돼있고 다른 곳이 목적지이면 패킷은 그림의 오른쪽 방향으로 전달돼 포워딩 체인으로 간다. 이 체인이 ’ ACCEPT‘ 하게 되면 이것은 포워딩 할 네트워크로 보내진다. &lt;br /&gt;&lt;br /&gt;4. 마지막으로, 로컬에서 수행하던 프로그램은 네트워크 패킷을 전송할 수 있다. &lt;br /&gt;이 패킷은 즉시 출력 체인에 보내지며 이 체인이 ‘ACCEPT’되면 이 패킷은 그 목적지가 어디든지 보내진다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:::: 사 용 법 :::: &lt;br /&gt;&lt;br /&gt;iptables -[ADC] chain rule-specification [options] &lt;br /&gt;&lt;br /&gt;iptables -[RI] chain rulenum rule-specification [options] &lt;br /&gt;&lt;br /&gt;iptables -D chain rulenum [options] &lt;br /&gt;&lt;br /&gt;iptables -[LFZ] [chain] [options] &lt;br /&gt;&lt;br /&gt;iptables -[NX] chain &lt;br /&gt;&lt;br /&gt;iptables -P chain target [options] &lt;br /&gt;&lt;br /&gt;iptables -h (print help information) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Commands &lt;br /&gt;&lt;br /&gt;-A : 새로운 규칙을 추가한다.(--append) &lt;br /&gt;&lt;br /&gt;-D : 규칙을 삭제한다.(--delete) &lt;br /&gt;&lt;br /&gt;-C : 패킷을 테스트한다.(--check) &lt;br /&gt;&lt;br /&gt;-R : 새로운 규칙으로 교체한다.(--replace) &lt;br /&gt;&lt;br /&gt;-I : 새로운 규칙을 삽입한다.(--insert) &lt;br /&gt;&lt;br /&gt;-L : chain에 설정된 규칙을 출력한다.(--list) &lt;br /&gt;&lt;br /&gt;-F : chain으로부터 규칙을 모두 방출(삭제)한다.(--flush) &lt;br /&gt;&lt;br /&gt;-Z : 모든 chain의 패킷과 바이트 카운터 값을 0으로 만든다.(--zero) &lt;br /&gt;&lt;br /&gt;-N : 새로운 chain을 만든다.(--new) &lt;br /&gt;&lt;br /&gt;-X : chain을 삭제한다.(--delete-chain) &lt;br /&gt;&lt;br /&gt;-P : 기본정책을 변경한다.(--policy) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# chain &lt;br /&gt;&lt;br /&gt;INPUT : 입력에 대한 사용 &lt;br /&gt;&lt;br /&gt;OUTPUT : 출력에 대한 사용 &lt;br /&gt;&lt;br /&gt;FORWARD : 전달(forwarding)에 대한 사용 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Options &lt;br /&gt;&lt;br /&gt;-s : 패킷의 발신지를 명시한다.(--source) &lt;br /&gt;&lt;br /&gt;-p : 패킷의 프로토콜을 명시한다.(--protocol) &lt;br /&gt;&lt;br /&gt;-d : 패킷의 도착지를 명시한다.(--destination) &lt;br /&gt;&lt;br /&gt;-i : 규칙을 적용할 인터페이스 이름을 명시한다.(--interface) &lt;br /&gt;&lt;br /&gt;-j : 규칙에 맛는 패킷을 어떻게 처리할 것인가를 명시한다.(-jump) &lt;br /&gt;&lt;br /&gt;-y : 접속 요청 패킷인 SYN패킷을 허용하지 않는다.(--syn) &lt;br /&gt;&lt;br /&gt;-f : 두 번째 이후의 조각에 대해서 규칙을 명시한다.(--fragment) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# 사용예 &lt;br /&gt;&lt;br /&gt;127.0.0.1 IP 주소로부터 오는 모든 ICMP 패킷을 무시하는 경우 사용되는 프로토콜은 ICMP이고 발신 주소는 127.0.0.1 이어야 한다. 그리고 패킷 필터의 목표는 드롭(DROP)이다. 테스트하는 프로그램은 ping이며 ping은 단순히 ICMP type 8로 반응요구를 보내며 이에 협조하는 대상 호스트는 ICMP 타입 0 (echo reply)를 보내어 응답하도록 돼 있다. 이제 iptables의 패킷필터를 통해 로컬호스트가 ping 명령에 반응하지 않도록 하겠다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# ping -c 1 127.0.0.1 &lt;br /&gt;&lt;br /&gt;  PING 127.0.0.1 (127.0.0.1): 56 data bytes &lt;br /&gt;&lt;br /&gt;  64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms &lt;br /&gt;&lt;br /&gt;  --- 127.0.0.1 ping statistics --- &lt;br /&gt;&lt;br /&gt;  1 packets transmitted, 1 packets received, 0% packet loss &lt;br /&gt;&lt;br /&gt;  round-trip min/avg/max = 0.2/0.2/0.2 ms &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP &lt;br /&gt;&lt;br /&gt;; `INPUT' 체인에 127.0.0.1로부터 오고(`-s 127.0.0.1') ICMP(`-p &lt;br /&gt;ICMP') 패킷에 대해 DROP로 점프하라는 (`-j DROP') 규칙을 추가(-A). &lt;br /&gt;&lt;br /&gt;# ping -c 1 127.0.0.1 &lt;br /&gt;&lt;br /&gt;  PING 127.0.0.1 (127.0.0.1): 56 data bytes &lt;br /&gt;&lt;br /&gt;  --- 127.0.0.1 ping statistics --- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  1 packets transmitted, 0 packets received, 100% packet loss &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 설정된 iptables 규칙의 삭제 &lt;br /&gt;&lt;br /&gt;지금 현재 입력돼 있는 chain이 하나밖에 없으므로 숫자를 지정하는 명령으로 삭제가 가능하며, 앞의 명령과 똑같이 하되 -A를 -D로 바꾸어 지우는 방법이 있다. &lt;br /&gt;&lt;br /&gt;#iptables -D INPUT 1 &lt;br /&gt;&lt;br /&gt;#iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 체인 규칙 나열하기 &lt;br /&gt;&lt;br /&gt;설정돼 있는 체인의 규칙을 모두 볼 수 있다. 명령으로 -L을 사용해 가능하며 -v 옵 &lt;br /&gt;션과 같이 사용해 각 체인에 대한 패킷과 바이트 카운터 등의 자세한 정보를 함께 &lt;br /&gt;볼 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP &lt;br /&gt;&lt;br /&gt;# iptables -L -v &lt;br /&gt;&lt;br /&gt;Chain INPUT (policy ACCEPT 709 packets, 35362 bytes) &lt;br /&gt;&lt;br /&gt;pkts bytes target     prot opt in       out     source               &lt;br /&gt;destination &lt;br /&gt;&lt;br /&gt;  0     0 DROP       icmp --  any    any     localhost.localdomain   &lt;br /&gt;anywhere &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) &lt;br /&gt;&lt;br /&gt;pkts bytes target     prot opt in       out     source               &lt;br /&gt;destination &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT 423 packets, 39549 bytes) &lt;br /&gt;&lt;br /&gt;pkts bytes target     prot opt in       out     source               &lt;br /&gt;destination       &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 체인 비우기 &lt;br /&gt;&lt;br /&gt;하나의 체인 안의 모든 규칙을 비우는 것은 ‘-F’ 명령을 사용해 간단하게 할 수 &lt;br /&gt;있다. 체인을 지정하지 않으면 모든 체인의 규칙을 지울 수 있다. &lt;br /&gt;&lt;br /&gt;# iptables -F INPUT &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 출처와 목적지 지정 &lt;br /&gt;&lt;br /&gt;출처('-s', '--source', '--src')와 목적지('-d', '--destination', '--dst') IP 주소를 지정하는데 4가지 방법이 있다. 가장 보편적인 방법은 'www.linuzine.com', 'localhost'처럼 도메인 네임을 이용하는 것이다. 두번째 방법은 '127.0.0.1'과 같은 IP 주소를 이용하는 것이다. &lt;br /&gt;&lt;br /&gt;세번째와 네번째 방법은 IP 주소의 그룹을 지정하는 것으로 '199.95.207.0/24' 또는 '199.95.207.0/255.255.255.0' 같은 형태이다. 이 둘은 모두 199.95.207.0 &lt;br /&gt;부터 199.95.207.255 사이의 모든 IP 주소를 지정한다. '/' 다음의 숫자는 IP 주 &lt;br /&gt;소의 어떤 부분이 의미 있는가를 나타낸다. '/32' 나 '/255.255.255.255' 가 기 &lt;br /&gt;본 값이다.(IP 주소의 모든 부분이 일치해야 한다.) 모든 IP 주소를 지정하는 &lt;br /&gt;데 '/0' 가 사용된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# iptables -A INPUT -s 0/0 -j DROP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;많은 지시자들('-s'나 '-d' 같은)은 일치하지 않는 주소를 나타내기 위해 '!'('not'을 의미한다)로 시작하는 설정을 할 수 있다. 예로, '-s ! localhost' 는 localhost로부터 오는 패킷이 아닌 경우를 나타낸다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 프로토콜 지정 &lt;br /&gt;&lt;br /&gt;프로토콜은 '-p' 지시자로 지정할 수 있다. 프로토콜을 숫자가 될 수 있고(IP의 프로토콜 번호를 알고 있다면) 'TCP', 'UDP', 'ICMP' 같은 이름이 될 수도 있다. &lt;br /&gt;그리고 'tcp'는 'TCP'와 같은 역할을 한다. 프로토콜 이름 지정에도 '!'을 이용 &lt;br /&gt;할 수 있다. '-p ! TCP' &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ TCP 확장 &lt;br /&gt;&lt;br /&gt;TCP 확장은 '--protocol tcp' 가 지정되고 다른 적용이 지정되지 않으면 자동으로 적재된다. 이것은 다음과 같은 옵션을 제공한다. &lt;br /&gt;&lt;br /&gt;--tcp-flags &lt;br /&gt;뒤에 두개의 단어를 사용한다. 첫번째 것은 검사하고자 하는 지시자 리스트의 마스크이다. 두번째 단어는 지시자에게 어떤 것이 설정 될 것인지를 말해준다. &lt;br /&gt;&lt;br /&gt;# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP &lt;br /&gt;&lt;br /&gt;이것은 모든것이 검사돼야 함을 말한다. 그러나 SYN과 ACK만 설정된다. &lt;br /&gt;&lt;br /&gt;--syn &lt;br /&gt;'!' 옵션이 선행될 수 있다. 이것은 '--tcp-flags SYN,RST,ACK,SYN'의 약어이다. &lt;br /&gt;&lt;br /&gt;--source-port, &lt;br /&gt;'!' 옵션이 선행될 수 있다. 이후에 하나의 TCP 포트나 포트의 범위를 지정한다. &lt;br /&gt;&lt;br /&gt;--sport &lt;br /&gt;/etc/services 에 기록된 것과 같은 포트 이름이 사용될 수 도 있고 숫자로 나타낼 수도 있다. 범위는 두 개의 포트 이름을 '-'으로 연결해서 사용하거나 하나의 포트 뒤에 '-'를 사용하거나 하나의 포트 앞에 '-' 를 덧붙일 수 있다. &lt;br /&gt;&lt;br /&gt;--destination-port, --dport &lt;br /&gt;위의 내용과 같으나 목적지를 지정한다. &lt;br /&gt;&lt;br /&gt;--tcp-option &lt;br /&gt;'!' 나 숫자가 옵션에 선행될 수 있는데 숫자가 앞에 올 경우 그 숫자 와 TCP 옵션이 같은 경우의 패킷을 검사한다. TCP 옵션을 검사하려 할 때 완전한 TCP 헤더를 갖지 않는 것은 자동으로 드롭 된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ iptables를 통한 포트관리 &lt;br /&gt;&lt;br /&gt;iptables는 테이블 형식으로 관리를 한다. 그리고 먼저 등록된 것이 효력을 발생하기 때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저 오게 되면 그 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저 오고 나서 거부하는 정책이 와야 한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;iptables -A INPUT -p tcp --dport 25 -j ACCEPT &lt;br /&gt;&lt;br /&gt;iptables -A INPUT -p tcp --dport 22:30 -j DROP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 먼저 25번 포트로 들어오는 것을 허용하고 난 후에 다른 것을 막아내기 때문에 제대로 된 설정이 된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;iptables -A INPUT -p tcp --dport 22 -j ACCEPT &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;등록된 라인은 ssh를 사용하는 것을 허용하는 것이다. 출처(source)와 목적지 (destination)는 명시하지 않았기 때문에 전체포트와 IP가 대상이 된다. -dport 는 패킷이 대상으로 삼는 포트를 명시한 것이다 여기에서 22라고 표기한 것은 ssh서비스 포트이다. 그리고 마지막에 -j ACCEPT는 허용하도록 정책을 정하는 것이다. &lt;br /&gt;따라서 여기로의 ssh서비스를 요청하는 패킷은 허용되도록 설정을 한 것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ 전체적인 설정 &lt;br /&gt;&lt;br /&gt;#!/bin/sh &lt;br /&gt;&lt;br /&gt;# iptables 모듈 등록하기 &lt;br /&gt;&lt;br /&gt;modprobe iptable_filter &lt;br /&gt;&lt;br /&gt;# ssh 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# httpd 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# pop3 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 109 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# pop2 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# imap 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# mysqld 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# ftpd 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# ftp-data 열기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# ircd 열어주기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 6667 -j ACCEPT &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p udp --dport 6667 -j ACCEPT &lt;br /&gt;&lt;br /&gt;# 전부 거절하기 &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP &lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p icmp --icmp-type echo-request -j &lt;br /&gt;DROP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  이처럼 허용하는 서비스가 한정적이다. 우선 ssh, http, pop3, pop2, imap, &lt;br /&gt;mysql, ftp, ircd를 위해서 서비스를 요청하는 패킷은 허용하고 나머지는 전부 거부하는 설정이다. 이 설정을 자세히 보면 tcp와 icmp를 대상으로 했다. 거절하는 줄인 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/usr/local/bin/iptables -A INPUT -p tcp --dport 1:30000 -j DROP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 라인에서 --dport 다음에 1:30000 으로 지정돼 있다. 이 부분은 서버를 경유해서 다른 곳으로 가고자하는 경우에 클라이언트 프로그램이 사용할 포트를 남겨주기 위함이다. 1번포트에서 30000번 포트까지는 완전히 tcp에 대해서 막는 것이다. &lt;br /&gt;&lt;br /&gt;만약에 서버에서 나갈 이유가 없으면 전부 막으면 된다. 1:65535 로 설정하면 전체포트가 막힌다. iptables 설정은 조금만 공부를 하면 쉽게 습득이 가능하다. 그러므로 문서를 보는 것이 중요하다. 이 설정은 기본이므로 좀더 많은 것은 관련 문서를 이용하기를 바란다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-4428236664897662752?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/4428236664897662752/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=4428236664897662752' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/4428236664897662752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/4428236664897662752'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/iptables.html' title='IPTABLES'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-8454895473794058400</id><published>2009-04-03T02:45:00.002-07:00</published><updated>2009-04-03T02:46:02.867-07:00</updated><title type='text'>CVS 세팅 작업</title><content type='html'>1. 저장소 만들기.&lt;br /&gt;&lt;br /&gt; # cvs -d /home/hotyoung/cvs/ init&lt;br /&gt; # chgrp -R cvs /home/hotyoung/cvs/&lt;br /&gt; # chmod -R g+w /home/hotyoung/cvs/&lt;br /&gt;&lt;br /&gt; * 여기서 hotyoung 디렉토리에 대해서 cvs group 이 읽고 실행할 수 있는 권한을 부여해야 한다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;2. 새로운 프로젝트 시작.&lt;br /&gt;&lt;br /&gt; cvs import -m "[Message]" [project name] [project leader name or group] start&lt;br /&gt;&lt;br /&gt;  - "test" 란 이름의 프로젝트를 시작할 경우.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; # cvs import -m "test project" test my-test start&lt;br /&gt;&lt;br /&gt;  - 주의할 점은 이미 프로젝트가 있는 경우에 기존에 있는 프로젝트 파일이 지워진다는 것이다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;3. 프로젝트 작업 공간 생성.&lt;br /&gt;&lt;br /&gt; cvs checkout [project name]&lt;br /&gt;&lt;br /&gt; - "test" 란 이름의 프로젝트의 작업공간을 생성할 경우.&lt;br /&gt;&lt;br /&gt; # cvs checkout test &lt;br /&gt;  &lt;br /&gt; - 이 때 주의할 점은 현재의 디렉토리에 쓰기 권한이 있어야 한다.&lt;br /&gt; - test 란 디렉토리가 생성되고 프로젝트의 모든 소스와 CVS 디렉토리가  생성된다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;4. 작업 내용 저장.&lt;br /&gt;&lt;br /&gt; cvs commit -m "[message]" [file name]&lt;br /&gt;&lt;br /&gt; # cvs commit -m "test3" ex1.c&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;5. 저장소에서 파일 가져오기.&lt;br /&gt;&lt;br /&gt; cvs update&lt;br /&gt;&lt;br /&gt; # cvs update&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;6. 파일 추가&lt;br /&gt;&lt;br /&gt; cvs add [file name]&lt;br /&gt;&lt;br /&gt; # cvs add ex2.c&lt;br /&gt;&lt;br /&gt; --&gt; 실제로 저장소에 저장되기 위해서는 commit 명령을 사용하여야 한다.&lt;br /&gt; &lt;br /&gt; 문서가 아닌 바이너리를 넣을 경우에는 -kb 옵션을 준다.&lt;br /&gt; &lt;br /&gt; # cvs add -kb test.gif&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;7. 파일 삭제 &lt;br /&gt;&lt;br /&gt; cvs delete [file name]&lt;br /&gt;&lt;br /&gt; # cvs delete ex2.c&lt;br /&gt;&lt;br /&gt; --&gt; 실제로 저장소에 저장되어 있는 파일을 지우기 위해서는 commit 명령을 사용하여야 한다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;8. 작업 기록 보기&lt;br /&gt;&lt;br /&gt; cvs log [file name]&lt;br /&gt;&lt;br /&gt; # cvs log ex1.c&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;9. Remote 에서 사용하는 방법.&lt;br /&gt;&lt;br /&gt; 9.1. 환경 설정.&lt;br /&gt;&lt;br /&gt;  - ".bash_profile" 에 아래의 라인을 추가한다.&lt;br /&gt;&lt;br /&gt;   # for CVS&lt;br /&gt;   CVSROOT=/home/hotyoung/cvs&lt;br /&gt;   export CVSROOT&lt;br /&gt;&lt;br /&gt;   CVS_RSH=ssh&lt;br /&gt;   export CVS_RSH&lt;br /&gt;&lt;br /&gt;  - 위에서 설정한 환경이 적용되도록 한다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; 9.2. 새로운 프로젝트 시작.&lt;br /&gt;&lt;br /&gt;  cvs -d :ext:[user id]@[cvs server name or ip]:[cvs directory] import -m "[Message]" [project name] [?] start&lt;br /&gt;&lt;br /&gt;  - "test" 란 이름의 프로젝트를 시작할 경우.&lt;br /&gt;&lt;br /&gt;   # cvs -d :ext:hotyoung@192.168.2.201:/home/hotyoung/cvs import -m "test project" test my-test start&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; 9.3. 프로젝트 작업 공간 생성.&lt;br /&gt;&lt;br /&gt;  cvs -d :ext:[user id]@[cvs server name or ip]:[cvs directory]  checkout [project name]&lt;br /&gt;&lt;br /&gt;  - "test" 란 이름의 프로젝트의 작업공간을 생성할 경우.&lt;br /&gt;&lt;br /&gt;   # cvs -d :ext:hotyoung@192.168.2.201:/home/hotyoung/cvs checkout test&lt;br /&gt;  &lt;br /&gt;  - 이 때 주의할 점은 현재의 디렉토리에 쓰기 권한이 있어야 한다.&lt;br /&gt;  - test 란 디렉토리가 생성되고 프로젝트의 모든 소스와 CVS 디렉토리가  생성된다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. 파일에 CVS 관련 자료 남기기&lt;br /&gt; - 파일에 아래와 같은 사항을 넣어주면 된다.&lt;br /&gt;  $Id$ &lt;br /&gt;  $Date$ &lt;br /&gt;  $Revision$ &lt;br /&gt;  $Log$ &lt;br /&gt;  &lt;br /&gt;11. Snapshot 생성하기&lt;br /&gt; - A 라는 프로그램이 a.c, b.c, c.c 라는 소스 파일로 구성되어 있을때 현재의 파일 들에게 REL_1_0 이라는 꼬리표를 붙인다.  &lt;br /&gt;  &lt;br /&gt;  # cvs commit&lt;br /&gt;  # cvs tag REL_1_0&lt;br /&gt;  &lt;br /&gt;12. Snapshot 에서 꺼내오기&lt;br /&gt; - 이후 A 프로그램의 Version 1.0 은 계속 개발이 진행되더라도 REL_1_0 꼬리표를 사용해서 CVS 저장소로부터 꺼낸다. &lt;br /&gt;  &lt;br /&gt; # cvs co -rREL_1_0 prog_a&lt;br /&gt; &lt;br /&gt; 이제 prog_a 디렉토리에 REL_1_0 에 대한 소스코드가 존재한다.&lt;br /&gt; &lt;br /&gt;13. 해당 버전의 파일 가져오기.&lt;br /&gt;&lt;br /&gt; # cvs update -p -r 1.4 test.c &gt; filename1.c&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;14. 현재 최종 번호를 확인하기.&lt;br /&gt;&lt;br /&gt; # cvs status -v test.c&lt;br /&gt; &lt;br /&gt;15. 일정 시간에 변경된 파일 리스트 보기.&lt;br /&gt;&lt;br /&gt; 변경된 사항을 보기 위해서는 history -report 기능을 사용하여야 하고, 특정&lt;br /&gt; 기간을 입력하기 위해서는 -D 옵션을 주어야 한다. 즉, 이틀전에 변경된 파일의&lt;br /&gt; 리스트를 보기 위해서는 아래와 같이 실행하면 된다.&lt;br /&gt;&lt;br /&gt; # cvs history -report -c -D "2 days ago"&lt;br /&gt;&lt;br /&gt; --&gt; 이는 자신의 history 만 보여준다...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-8454895473794058400?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/8454895473794058400/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=8454895473794058400' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8454895473794058400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8454895473794058400'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/cvs.html' title='CVS 세팅 작업'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3250634712416236996</id><published>2009-04-03T02:45:00.001-07:00</published><updated>2009-04-03T02:45:43.377-07:00</updated><title type='text'>웹로직 지원 진단 패턴</title><content type='html'>추가 지원 패턴(http://kr.bea.com/support/customer_support/service_pattern/pattern/startWLSPattern.html#2_Embedded_LDAP_:_Loss_of_Admin)&lt;br /&gt; &lt;br /&gt;    WLS 시작 인증 오류    &lt;br /&gt;&lt;br /&gt;문제 설명&lt;br /&gt;WebLogic Server가 시작되지 않고 관리자 암호, 관리자 인증 또는 LDAP에 대한 오류를 발생합니다.&lt;br /&gt; &lt;br /&gt;  문제 해결&lt;br /&gt;다음 항목을 모두 수행해야 하는 것은 아닙니다. 어떤 경우에는 다음 중 일부만 수행하여도 해결할 수 있습니다. &lt;br /&gt;&lt;br /&gt;항목 바로가기&lt;br /&gt;문제 발생 원인 &lt;br /&gt;유효하지 않은 부팅 ID(WLS 7.0 및 WLS 8.1) &lt;br /&gt;Embedded LDAP: 관리자 암호 손실(WLS 7.0 및 WLS 8.1) &lt;br /&gt;Embedded LDAP: 관리자 암호가 변경된 후 메니지드 서버가 시작되지 않음(WLS 7.0 및 WLS 8.1) &lt;br /&gt;&gt;WebLogic Server를 LDAP 서버에 연결할 수 없음(WLS 7.0 및 WLS 8.1) &lt;br /&gt;LDAP 서버: 연결 오류(WLS 7.0 및 WLS 8.1) &lt;br /&gt;LDAP 서버: WebLogic 관리자에게 서버 부팅이 거부됨(WLS 7.0 및 WLS 8.1) &lt;br /&gt;NT 서비스로 WebLogic: 오류 1058 &lt;br /&gt;NT 서비스로 WebLogic: 오류 1067 &lt;br /&gt;파일 영역에 시스템 사용자 암호 손상됨(WLS 6.1) &lt;br /&gt;디버그 플래그 설정 방법 &lt;br /&gt;&lt;br /&gt;알려진 WebLogic Server 문제 &lt;br /&gt;&lt;br /&gt;문제 발생 원인 &lt;br /&gt;WebLogic Server 인스턴스를 시작하려면 서버 시작이 허용된 사용자의 자격 증명을 제공해야 합니다. &lt;br /&gt;자격 증명은 파일 영역, LDAP, RDBMS LDAP 등의 보안 영역에 대해 검사합니다. 시작 시 제공한 정보가 보안 영역의 정보와 일치하지 않거나 보안 영역이 손상된 경우 WebLogic Server가 시작되지 않습니다.&lt;br /&gt;&lt;br /&gt;다음은 문제 해결을 위한 여러 가지 시나리오입니다. &lt;br /&gt;&lt;br /&gt;유효하지 않은 부팅 ID(WLS 7.0 및 WLS 8.1)&lt;br /&gt;WebLogic Server를 시작할 때 다음과 같은 오류가 발생합니다.&lt;br /&gt; &lt;br /&gt;The WebLogic Server did not start up properly. &lt;br /&gt;Reason: weblogic.security.SecurityInitializationException: Authentication denied: Boot identity not valid; &lt;br /&gt; &lt;br /&gt;이 오류는 부팅 ID 파일(boot.properties)의 사용자 이름 및/또는 암호가 유효하지 않다는 것을 나타냅니다. 부팅 ID 파일이 작성된 후에 부팅 ID가 변경되었을 수도 있습니다. 정확환 사용자 이름과 암호로 부팅 ID 파일을 편집하여 업데이트합니다. 서버를 시작하기 위해 업데이트된 부팅 ID 파일을 처음 사용할 때 이들 새 값이 암호화됩니다. &lt;br /&gt;문제 해결 &lt;br /&gt;boot.properties에 들어 있는 매개변수 값을 변경합니다. "boot.properties"는 일반적으로 도메인 루트 디렉토리에 들어 있습니다. &lt;br /&gt;예를 들면 다음과 같습니다. &lt;br /&gt; &lt;br /&gt;username=weblogic &lt;br /&gt;password=weblogic812 &lt;br /&gt; &lt;br /&gt;속성을 설정한 후 서버를 재부팅합니다.&lt;br /&gt;페이지 맨 위로&lt;br /&gt;&lt;br /&gt;Embedded LDAP: 관리자 암호 손실(WLS 7.0 및 WLS 8.1) &lt;br /&gt;&lt;br /&gt;관리자 암호가 손실되었습니다.&lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;사용자 ID의 암호를 무시하는 절차가 없으므로 새 관리자 ID를 만들어 WebLogic을 시작하는 데 사용해야 합니다. 다음은 관리자 암호를 손실했을 때 관리자를 복원하는 절차입니다.&lt;br /&gt;사용자 ID가 "adminuser"이고 암호가 "weblogic"인 사용자를 만든다고 가정합시다. &lt;br /&gt;&lt;br /&gt;디렉토리를 도메인 디렉토리(cd mydomain)로 변경합니다. &lt;br /&gt;java -cp D:\bea\weblogic700\server\lib\weblogic.jar weblogic.security.utils.AdminAccount adminuser weblogic. (주의: 명령 끝에 점이 있음) &lt;br /&gt;rm myserver/ldap/DefaultAuthenticatormyrealmInit.initialized &lt;br /&gt;rm boot.properties(있는 경우) &lt;br /&gt;"adminuser"를 관리자의 사용자 ID로 사용하여 관리 서버를 재부팅합니다. &lt;br /&gt;페이지 맨 위   &lt;br /&gt;Embedded LDAP: 관리자 암호가 변경된 후 메니지드 서버가 시작되지 않음(WLS 7.0 및 WLS 8.1)&lt;br /&gt;WebLogic Server가 제대로 시작되지 않습니다. &lt;br /&gt;예외 발생&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;weblogic.management.configuration.ConfigurationException: [Configuration Management:150021]The admin &lt;br /&gt;server failed to authenticate the identity of the user weblogic starting the managed server. The reason for the error is . &lt;br /&gt; &lt;br /&gt;문제 해결 &lt;br /&gt;관리자 암호가 변경되고 동시에 메니지드 서버가 다운된 경우 예외가 발생합니다. &lt;br /&gt;메니지드 서버에서 LDAP 디렉토리를 삭제합니다.&lt;br /&gt;LDAP 디렉토리는 메니지드 루트 디렉토리 아래에 있으며 이름은 LDAP입니다.&lt;br /&gt;메니지드 서버의 이름이 myManaged1이면 LDAP 디렉토리는 ./myManaged1/ldap입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WebLogic Server를 LDAP 서버에 연결할 수 없음(WLS 7.0 및 WLS 8.1) &lt;br /&gt;WLS가 LDAP 서버에 연결하지 못했음을 나타내는 오류가 발생합니다. LDAP 서버가 부팅되지 않았거나 호스트 주소 및/또는 포트가 유효하지 않은 것이 하나의 원인일 수 있습니다.   &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;13 juil. 2004 16 h 42 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;new LDAP connection to host localhost port 389 use local connection is false&gt; &lt;br /&gt;&lt;13 juil. 2004 16 h 42 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;created new LDAP connection LDAPConnection { ldapVersion:2 bindDN:""}&gt; &lt;br /&gt;&lt;13 juil. 2004 16 h 42 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;connection failed netscape.ldap.LDAPException: failed to connect to server ldap://localhost:389 (91)&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;문제 해결 &lt;br /&gt;&lt;br /&gt;LDAP 서버가 부팅되었는지 확인합니다. &lt;br /&gt;호스트 주소와 포트가 유효한지 확인합니다. &lt;br /&gt;페이지 맨 위&lt;br /&gt;&lt;br /&gt;LDAP 서버: 연결 오류(오류 49)&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 07 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;new LDAP connection to host localhost port 389 use local connection is false&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 07 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;created new LDAP connection LDAPConnection { ldapVersion:2 bindDN:""}&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 07 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;connection failed netscape.ldap.LDAPException: error result (49)&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;문제 해결 &lt;br /&gt;LDAP 서버에 연결하기 위해 제공된 사용자 ID가 유효하지 않습니다. &lt;br /&gt;config.xml을 검사하여 다음 매개변수를 확인하십시오. &lt;br /&gt;  Credential="weblogic" &lt;br /&gt;  Principal="uid=admin, ou=Administrators, ou=TopologyManagement, o=NetscapeRoot"    &lt;br /&gt;       &lt;weblogic.security.providers.authentication.IPlanetAuthenticator &lt;br /&gt;            ControlFlag="SUFFICIENT" &lt;br /&gt;            Credential="weblogic" &lt;br /&gt;            GroupBaseDN="ou=groups" &lt;br /&gt;            Name="Security:Name=RealmIPlanetAuthenticator" &lt;br /&gt;            Principal="uid=admin, ou=Administrators, ou=TopologyManagement, o=NetscapeRoot" &lt;br /&gt;            Realm="Security:Name=Realm" UserBaseDN="dc=bea,dc=com"/&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;문제를 해결하려면 다음 방법 중 하나를 사용하여 사용자 ID와 암호(자격 증명)를 수정하고 WebLogic Server를 다시 시작합니다.&lt;br /&gt;&lt;br /&gt;config.xml을 편집하고 사용자 ID 또는 암호를 변경한 후 재부팅 &lt;br /&gt;config.xml.booted를 config.xml로 복사한 후 서버를 재부팅하고 자격 증명(사용자 ID/암호) 변경 &lt;br /&gt;&lt;br /&gt;페이지 맨 위&lt;br /&gt;&lt;br /&gt;LDAP 서버: WebLogic 관리자에게 서버 부팅이 거부됨 &lt;br /&gt;WebLogic Server 관리자에게 서버 부팅이 거부될 수도 있습니다. 다음 세 가지 원인이 있을 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LDAP에 연결하는 데 오류 32 발생 &lt;br /&gt;LDAP에 연결하는 데 인증 실패 &lt;br /&gt;사용자 XXXXXX가 서버를 부팅할 수 없음 &lt;br /&gt;&lt;br /&gt;1. LDAP에 연결하는 데 오류 32 발생 &lt;br /&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 10 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;connection succeeded&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 10 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;DN for user weblogic: uid=weblogic,dc=bea,dc=com&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 10 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;search("ou=groups", "(&amp;(uniquemember=uid=weblogic,dc=bea,d &lt;br /&gt;c=com)(objectclass=groupofuniquenames))", base DN &amp; below)&gt;&lt;br /&gt;&lt;30 juin 2004 15 h 10 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;returnConnection conn:LDAPConnection {ldap://localhost:389 &lt;br /&gt; ldapVersion:3 bindDN:"uid=admin, ou=Administrators, ou=TopologyManagement, o=NetscapeRoot"}&gt; &lt;br /&gt;netscape.ldap.LDAPException: error result (32) &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;WebLogic이 LDAP에 연결하는 데 사용하는 LDAP 사용자(이 예제에서 "weblogic")를 LDAP에서 찾을 수 없으므로 생성해야 합니다.&lt;br /&gt;&lt;br /&gt;사용자 ID 생성 방법은 LDAP 서버 설명서를 참조하십시오. &lt;br /&gt;&lt;br /&gt;2. LDAP에 연결하는 데 인증 실패&lt;br /&gt; &lt;br /&gt;&lt;30 juin 2004 15 h 29 CEST&gt; &lt;Debug&gt; &lt;SecurityDebug&gt; &lt;000000&gt; &lt;returnConnection conn:LDAPConnection {ldap://localhost:389 &lt;br /&gt; ldapVersion:3 bindDN:"uid=admin, ou=Administrators, ou=TopologyManagement, o=NetscapeRoot"}&gt; &lt;br /&gt;javax.security.auth.login.FailedLoginException: [Security:090302]Authentication Failed: User admin denied&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;config.xml에 관리자 암호가 잘못되었습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;config.xml에 "credential"을 변경하여 정확한 암호를 지정합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;weblogic.security.providers.authentication.IPlanetAuthenticator &lt;br /&gt;            Credential="weblogic"   &lt;br /&gt;&lt;br /&gt;3. 사용자 XXXXXX가 서버를 부팅할 수 없음&lt;br /&gt; &lt;br /&gt;&lt;30 juin 2004 16 h 40 CEST&gt; &lt;Critical&gt; &lt;Security&gt; &lt;BEA-090404&gt; &lt;User weblogic is not permitted to boot the server; &lt;br /&gt;The server policy may have changed in such a way that the user is no longer able to boot the server. &lt;br /&gt;Reboot the server with the administrative user account or contact the system administrator to update the server policy definitions.&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;LDAP에 연결하는 데 사용된 LDAP 사용자 "weblogic"이 LDAP 관리자 그룹에 없습니다.&lt;br /&gt;이 사용자를 관리자 그룹에 추가합니다. 자세한 내용은 LDAP 설명서를 참조하십시오.&lt;br /&gt;페이지 맨 위&lt;br /&gt;&lt;br /&gt;NT 서비스로 WebLogic: 오류 1058 &lt;br /&gt;WLS는 Windows 2000에서 Windows NT 서비스로 시작되지 않고 &lt;br /&gt;"Could not start the &lt;Service Name&gt; service on \\&lt;Computer Name&gt;. Error 1058: The specified service is disabled and cannot be started."라는 오류가 발생합니다. &lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;서비스용 Windows 하드웨어 프로필을 사용합니다. &lt;br /&gt;Windows 2000의 경우 다음과 같이 합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;시작, 설정, 제어판, 관리 도구, 서비스를 차례로 클릭합니다. &lt;br /&gt;서비스 창에서 적절한 서비스를 마우스 오른쪽 단추로 클릭한 후 속성을 선택합니다. &lt;br /&gt;로그온 탭을 클릭하고 창 하단의 힌 블록에서 각 하드웨어 프로필을 사용 또는 사용 안 함으로 전환할 수 있습니다. 적절한 프로필을 클릭하여 사용으로 설정합니다. &lt;br /&gt;http://support.microsoft.com/kb/q175155/의 Microsoft Knowledge Base Article - 175155에도 설명되어 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NT 서비스로 WebLogic: 오류 1067 &lt;br /&gt;WLS 도메인이 NT 서비스로 설치되었으며 시작될 때 "Microsoft Error: 1067"이 발생합니다.&lt;br /&gt;이 오류는 일반 메시지로 실제 문제에 대한 힌트를 제공하지 않습니다. 다음은 "1067" 오류를 발생시켜 WebLogic Server가 서비스로 제대로 시작되지 않습니다.&lt;br /&gt;구성: Windows NT에서 WLS 6.x, 7.x&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;서비스는 시스템 속성을 상속합니다. 시스템 PATH 변수에 공백이 있으면 서비스가 시작되지 않을 수도 있습니다. 예를 들어, 다음 시스템 경로 "C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;"를 살펴보십시오. Visual Studio 디렉토리 이름에 공백이 있어 beasvc는 상황 판단에 도움이 되지 않는 "1067" 오류를 발생시키고 부팅이 되지 않습니다. &lt;br /&gt;&lt;br /&gt;시스템 PATH 환경 변수를 수정하여 공백이 없도록 합니다. &lt;br /&gt;&lt;br /&gt;페이지 맨 위&lt;br /&gt;&lt;br /&gt;파일 영역에 시스템 사용자 암호 손상됨(WLS 6.1) &lt;br /&gt;WebLogic Server가 제대로 시작되지 않습니다. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Exception raised: &lt;br /&gt;java.lang.SecurityException: Authentication for user system denied &lt;br /&gt;        at weblogic.security.SecurityService.initializeSuid(SecurityService.java:410) &lt;br /&gt;        at weblogic.security.SecurityService.initialize(SecurityService.java:120) &lt;br /&gt;        at weblogic.t3.srvr.T3Srvr.initialize(T3Srvr.java:421) &lt;br /&gt;        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:213) &lt;br /&gt;        at weblogic.Server.main(Server.java:35) &lt;br /&gt;Reason: Fatal initialization exception&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;문제 해결 &lt;br /&gt;파일 영역의 시스템 사용자 암호가 고객 도메인에서 손상되어 WebLogic Server가 시작되지 않습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;도메인 루트 디렉토리에 들어 있는 fileRealm.properties 및 SerializedSystemIni.dat 파일을 백업합니다.&lt;br /&gt;성공적으로 시작되는 도메인이 있는 경우 다음 파일을 작동 중인 도메인에서 문제의 도메인으로 복사합니다. &lt;br /&gt;&lt;br /&gt;fileRealm.properties &lt;br /&gt;SerializedSystemIni.dat &lt;br /&gt;&lt;br /&gt;참고: 이 파일은 암호화/암호 해독에 함께 사용되므로 해당 프로세스가 제대로 작동하려면 모두 복사해야 합니다. &lt;br /&gt;페이지 맨 위&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;디버그 플래스 설정 방법 &lt;br /&gt;대부분의 LDAP 문제의 경우 디버그 플래그를 설정하면 도움됩니다. config.xml 파일을 편집하여 다음 속성&lt;br /&gt;    StdoutDebugEnabled="true" StdoutSeverityLevel="64"&lt;br /&gt;    &lt;ServerDebug DebugSecurityAdjudicator="true" DebugSecurityAtn="true" &lt;br /&gt;        DebugSecurityAtz="true" DebugSecurityRoleMap="true" Name="myserver"/&gt;&lt;br /&gt;를 다음과 같이 추가합니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;   &lt;Server ListenAddress="" ListenPort="7001" Name="myserver" &lt;br /&gt;        NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy" &lt;br /&gt;        ServerVersion="8.1.2.0" StdoutDebugEnabled="true" StdoutSeverityLevel="64"&gt; &lt;br /&gt;        &lt;SSL Enabled="false" HostnameVerificationIgnored="false" &lt;br /&gt;            IdentityAndTrustLocations="KeyStores" Name="myserver"/&gt; &lt;br /&gt;        &lt;ServerDebug DebugSecurityAdjudicator="true" &lt;br /&gt;            DebugSecurityAtn="true" DebugSecurityAtz="true" &lt;br /&gt;            DebugSecurityRoleMap="true" Name="myserver"/&gt; &lt;br /&gt;    &lt;/Server&gt; &lt;br /&gt;    &lt;ServerDebug DebugSecurityAdjudicator="true" DebugSecurityAtn="true" &lt;br /&gt;        DebugSecurityAtz="true" DebugSecurityRoleMap="true" Name="myserver"/&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;알려진 WebLogic Server 문제 &lt;br /&gt;&lt;br /&gt;CR076945  WLS 7.0 - LDAP 파일이 손상되어 WLS를 시작할 수 없습니다. &lt;br /&gt;&lt;br /&gt;또한 WLS 버전의 릴리스 정보를 주기적으로 검토하여 서비스 팩에서 알려진 문제나 해결된 문제를 확인하고 인증 관련 문제를 검색할 수 있습니다. 간편하게 다음을 참조하십시오. &lt;br /&gt;&lt;br /&gt;WLS 8.1 릴리스 정보 &lt;br /&gt;WLS 7.0 릴리스 정보 &lt;br /&gt;WLS 6.1 릴리스 정보 &lt;br /&gt;검색하면 릴리스 정보뿐 아니라 추가 도움말에서 언급된 기타 지원 솔루션 및 CR 관련 정보도 알 수 있습니다. 계약 고객은 http://support.bea.com/에 로그인한 다음 Browse 포틀릿에서 Solutions 및 Bug Central을 검색하여 제품 버전별로 사용 가능한 최신 CR을 찾을 수 있습니다. &lt;br /&gt; &lt;br /&gt;페이지 맨 위 추가 도움말이 필요하십니까?&lt;br /&gt;패턴대로 작업했지만 추가 도움말이 필요한 경우 다음과 같이 할 수 있습니다.&lt;br /&gt;&lt;br /&gt;http://support.bea.com/의 AskBEA에서 "WLS 시작 오류" 등으로 문제를 조회하여 게시된 다른 해결 방법을 찾아봅니다. 계약 지원 고객: 제공되는 CR 관련 정보에 액세스할 수 있는 권한으로 로그온합니다 &lt;br /&gt;http://forums.bea.com에서 BEA 뉴스그룹에 보다 자세한 내용을 질문합니다. &lt;br /&gt;&lt;br /&gt;이렇게 해도 문제를 해결할 수 없는 경우 유효한 유지 보수 계약이 되어 있다면 http://support.bea.com/에 로그인하여 지원요청할 수 있습니다. &lt;br /&gt;&lt;br /&gt;고객 의견&lt;br /&gt;&lt;br /&gt;이 지원 진단 패턴 "WLS 시작 오류"가 도움이 되셨습니까? 여러분에게 꼭 필요한 정보나 지원 진단 패턴에 새로 추가하길 바라는 항목이 있으면 저희에게 알려주시기 바랍니다. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;책임의 한계에 대한 고지&lt;br /&gt;&lt;br /&gt;BEA Systems, Inc.는 사용자와 BEA 간의 유지 보수 및 지원 계약 내용에 따라 이 웹 사이트에 기술 팁과 패치를 제공합니다. BEA에서 허가한 소프트웨어와 함께 이 정보 및 코드를 사용할 수 있지만 BEA는 기술 팁 및 패치와 관련하여 어떠한 명시적이거나 암시적인 보증도 하지 않습니다.&lt;br /&gt;&lt;br /&gt;이 문서에 참조된 상표는 해당 소유자의 자산입니다. 자세한 상표 정보를 보려면 제품 설명서를 참조하십시오.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;페이지 맨 위&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3250634712416236996?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3250634712416236996/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3250634712416236996' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3250634712416236996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3250634712416236996'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post_03.html' title='웹로직 지원 진단 패턴'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-8264077812625135886</id><published>2009-04-03T02:44:00.000-07:00</published><updated>2009-04-03T02:45:02.896-07:00</updated><title type='text'>시스템 전역 환경 설정하기</title><content type='html'>/etc/profile 파일에 리눅스 시스템 전역에 사용할 환경변수를 설정하면 된다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;즉, LD_LIBRARY_PATH 등과 같은 설정을 /etc/profile 하단에 추가하면 모든 사용자가 사용할 수 있는 환경설정이 된다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-8264077812625135886?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/8264077812625135886/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=8264077812625135886' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8264077812625135886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8264077812625135886'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/blog-post.html' title='시스템 전역 환경 설정하기'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-7007521521928588126</id><published>2009-04-02T00:27:00.000-07:00</published><updated>2009-04-02T00:31:57.636-07:00</updated><title type='text'>Vmware MAC 주소 변경 방법</title><content type='html'>Vmware MAC 주소 변경 방법&lt;br /&gt;&lt;br /&gt;Windows Server 2003 Enterprise Edition.vmx &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_SDZk8JWI6Qs/SdRo6jFk3jI/AAAAAAAAADM/kCQrkPZJn1c/s1600-h/vmware.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 220px; height: 320px;" src="http://1.bp.blogspot.com/_SDZk8JWI6Qs/SdRo6jFk3jI/AAAAAAAAADM/kCQrkPZJn1c/s320/vmware.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5319992414891728434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Setting the MAC Address Manually for a Virtual Machine &lt;br /&gt;&lt;br /&gt;VMware ESX Server automatically generates MAC addresses for the virtual network adapters in each virtual machine. In most cases, these MAC addresses are appropriate. However, there may be times when you need to set a virtual network adapter's MAC address manually — for example: &lt;br /&gt;&lt;br /&gt;Virtual network adapters on different physical servers share the same subnet and are assigned the same MAC address, causing a conflict. &lt;br /&gt;You want to ensure that a virtual network adapter always has the same MAC address. &lt;br /&gt;This section explains how VMware ESX Server generates MAC addresses and how you can set the MAC address for a virtual network adapter manually. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How VMware ESX Server Generates MAC Addresses &lt;br /&gt;&lt;br /&gt;Each virtual network adapter in a virtual machine gets its own unique MAC address. ESX Server attempts to ensure that the network adapters for each virtual machine that are on the same subnet have unique MAC addresses. The algorithm used by ESX Server puts a limit on how many virtual machines can be running and suspended at once on a given machine. It also does not handle all cases when virtual machines on distinct physical machines share a subnet. &lt;br /&gt;&lt;br /&gt;A MAC address is a six-byte number. Each network adapter manufacturer gets a unique three-byte prefix called an OUI — organizationally unique identifier — that it can use to generate unique MAC addresses. VMware has two OUIs — one for automatically generated MAC addresses and one for manually set addresses. &lt;br /&gt;&lt;br /&gt;The VMware OUI for automatically generated MAC addresses is 00:0C:29. Thus the first three bytes of the MAC address that is automatically generated for each virtual network adapter have this value. ESX Server then uses a MAC address generation algorithm to produce the other three bytes. The algorithm guarantees unique MAC addresses within a machine and attempts to provide unique MAC addresses between ESX Server machines. &lt;br /&gt;&lt;br /&gt;The algorithm that ESX Server uses is the following: &lt;br /&gt;&lt;br /&gt;We use the VMware UUID (Universally Unique Identifier) to generate MAC addresses. We then check for any conflicts. If there is a conflict, we add an offset and check again, until there is no conflict. (The VMware UUID is based on the path to the virtual machine and the host's SMBIOS UUID.) &lt;br /&gt;&lt;br /&gt;Once the MAC address has been generated, it does not change, unless the virtual machine is moved to a different location; for example, a different path on the same server or a different ESX Server machine. We save the MAC address in the configuration file of the virtual machine. &lt;br /&gt;&lt;br /&gt;ESX Server keeps track of all MAC addresses that have been assigned to network adapters of running and suspended virtual machines on a given physical machine. ESX Server ensures that the virtual network adapters of all of these virtual machines have unique MAC addresses. &lt;br /&gt;&lt;br /&gt;The MAC address of a powered-off virtual machine is not checked against running or suspended virtual machines. Therefore it is possible, but unlikely, that when a virtual machine is powered on again, it can get a different MAC address. This is due to a conflict with a virtual machine that was powered on when this virtual machine was powered off. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Setting MAC Addresses Manually &lt;br /&gt;&lt;br /&gt;In order to work around both the limit of 256 virtual network adapters per physical machine and possible MAC address conflicts between virtual machines, the MAC addresses can be assigned manually by system administrators. VMware uses a different OUI for manually generated addresses: 00:50:56. The MAC address range is 00:50:56:00:00:00-00:50:56:3F:FF:FF. &lt;br /&gt;&lt;br /&gt;You can set the addresses by adding the following line to a virtual machine's configuration file: &lt;br /&gt;&lt;br /&gt;ethernet&lt;number&gt;.address = 00:50:56:XX:YY:ZZ &lt;br /&gt;&lt;br /&gt;where &lt;number&gt; refers to the number of the Ethernet adapter, XX is a valid hex number between 00 and 3F, and YY and ZZ are valid hex numbers between 00 and FF. The value for XX must not be greater than 3F in order to avoid conflict with MAC addresses that are generated by the VMware Workstation and VMware GSX Server products. Thus the maximum value for a manually generated MAC address is &lt;br /&gt;&lt;br /&gt;ethernet&lt;number&gt;.address = 00:50:56:3F:FF:FF &lt;br /&gt;&lt;br /&gt;You must also set the option in a virtual machine's configuration file: &lt;br /&gt;&lt;br /&gt;ethernet&lt;number&gt;.addressType="static" &lt;br /&gt;&lt;br /&gt;VMware ESX Server virtual machines do not support arbitrary MAC addresses, hence the above format must be used. So long as you choose XX:YY:ZZ uniquely among your hard-coded addresses, conflicts between the automatically assigned MAC addresses and the manually assigned ones should never occur. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using MAC Addresses &lt;br /&gt;&lt;br /&gt;The easiest way to familiarize yourself with MAC addresses is to set the MAC address statically, then remove the virtual machine configuration file options ethernet&lt;number&gt;.address, ethernet&lt;number&gt;.addressType and ethernet&lt;number&gt;.generatedAddressOffset. Check to see that the virtual machine gets a generated MAC address. &lt;br /&gt;&lt;br /&gt;We cannot guarantee that a host stays within a specific MAC address range. However, we guarantee that the MAC address never conflicts with any physical host by using our OUIs (00:0C:29 and 00:50:56), that are unique to virtual machines. &lt;br /&gt;&lt;br /&gt;http://www.vmware.com/support/esx21/doc/esx21admin_MACaddress.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-7007521521928588126?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/7007521521928588126/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=7007521521928588126' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7007521521928588126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/7007521521928588126'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/04/vmware-mac.html' title='Vmware MAC 주소 변경 방법'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_SDZk8JWI6Qs/SdRo6jFk3jI/AAAAAAAAADM/kCQrkPZJn1c/s72-c/vmware.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-8742197950902132324</id><published>2009-03-31T22:06:00.000-07:00</published><updated>2009-03-31T22:09:35.619-07:00</updated><title type='text'>VI 편집기 단계별 가이드</title><content type='html'>[vi 1단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi test.txt 해서 vi를 시작합니다.&lt;br /&gt;&lt;br /&gt;2. vi 에는 3가지 모드가 있습니다.한번씩 눌러보세요.이거눌렀다,저것 눌렀다...&lt;br /&gt;&lt;br /&gt;(1)명령모드: ESC 키 vi 화면 좌측하단에 아무표시도 없습니다.&lt;br /&gt;&lt;br /&gt;(2)입력모드: i 키 vi 화면 좌측하단에 -INSERT- 표시가 나타납니다.&lt;br /&gt;&lt;br /&gt;(3)ex모드: Shift + : 키 vi 화면 좌측하단에 : 표시가 나타납니다.&lt;br /&gt;.... (#!!!-ESC 키를 꼭 눌러서 명령모드로 바꾼후 해야합니다.)&lt;br /&gt;&lt;br /&gt;3. i 키를 누르고(입력모드) 아무거나 2~3줄 입력합니다.&lt;br /&gt;&lt;br /&gt;4. 방향키를 눌러 상하좌우로 커서를 움직여 보세요.&lt;br /&gt;&lt;br /&gt;5. ESC 키(명령모드)를 누르고, Shift + : 키(ex모드)를 누르고 wq를 입력해 보세요.&lt;br /&gt;&lt;br /&gt;6. 자판의 키를 누르면서 어떤일이 벌어지는지 감이 쬐금 올때까지만 계속해보시기 바랍니다.&lt;br /&gt;&lt;br /&gt;##1단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) 화살표 방향키 커서 이동하기 &lt;br /&gt;입력모드( i )     &lt;br /&gt;ex모드( Shift + : ) wq 저장하고 종료하기 &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 2단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi test.txt 해서 1단계서 만든것을 다시 엽니다.&lt;br /&gt;&lt;br /&gt;2. 첫번째 라인에 커서를 위치시킵니다.&lt;br /&gt;&lt;br /&gt;3. yy 를 누릅니다.(y를 두번 누르면 됩니다)-복사하기 명령입니다.&lt;br /&gt;&lt;br /&gt;4. p 를 누릅니다.(3번이상 눌러봅니다)-복사한것 붙혀넣기 명령입니다.&lt;br /&gt;&lt;br /&gt;5. x 를 누릅니다.(3번이상 눌러봅니다)-삭제명령입니다.그것도 한글자씩 삭제하기 명령.&lt;br /&gt;&lt;br /&gt;6. u 를 누릅니다.(3번이상 눌러봅니다)-되살리기 명령입니다.&lt;br /&gt;&lt;br /&gt;7. ESC 키(명령모드)를 누르고, Shift + : 키(ex모드)를 누르고 wq를 입력합니다.&lt;br /&gt;&lt;br /&gt;##2단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) 화살표 방향키 커서 이동 &lt;br /&gt;yy 복사(한줄) &lt;br /&gt;p 붙히기(커서아래에) &lt;br /&gt;x 삭제(한글자) &lt;br /&gt;u 되살리기 &lt;br /&gt;입력모드( i )     &lt;br /&gt;ex모드( Shift + : ) wq 저장하고 종료하기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 3단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi test.txt 해서 2단계까지 작업한것을 다시 엽니다.&lt;br /&gt;&lt;br /&gt;2. 첫번째 라인에 커서를 위치시킵니다.(화살표 방향키 이용)&lt;br /&gt;&lt;br /&gt;3. i를 누르고 windows라고 입력합니다.enter키를 두세번 누른후 다시 windows라고 입력, 3번정도 이과정을 반복합니다.&lt;br /&gt;&lt;br /&gt;4. ESC 키를 눌러 명령모드로 바꾼후 커서를 windows라는 문구 맨앞에 위치시킨후 Shift + r 을 누릅니다.(vi 화면 하단에 -REPLACE-라는 문구가 나타날 것입니다.)&lt;br /&gt;&lt;br /&gt;5. linuxvi 라고 입력해보세요.(기존 windows가 linuxvi라고 교체되는 것을 볼수 있을 것입니다.)&lt;br /&gt;&lt;br /&gt;6. Shift + : 키(ex모드)를 눌러 명령모드로 바꾼후 set nu 라고 입력합니다.(라인에 번호가 매겨집니다.)&lt;br /&gt;&lt;br /&gt;7. ESC 키(명령모드)를 누르고, Shift + : 키(ex모드)를 누르고 wq를 입력합니다.&lt;br /&gt;&lt;br /&gt;##3단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) 화살표 방향키 커서 이동 &lt;br /&gt;yy 복사(한줄) &lt;br /&gt;p 붙히기(커서아래에) &lt;br /&gt;x 삭제(한글자) &lt;br /&gt;u 되살리기 &lt;br /&gt;R 교체  &lt;br /&gt;입력모드( i )     &lt;br /&gt;ex모드( Shift + : ) wq 저장하고 종료 &lt;br /&gt;set nu 라인에 번호매기기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 4단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi test.txt 해서 3단계까지 작업한것을 다시 엽니다.&lt;br /&gt;&lt;br /&gt;2. linuxvi 문구중 v자에 커서를 위치시킵니다.(화살표 방향키 이용)&lt;br /&gt;&lt;br /&gt;3. i를 누르고 space bar 를 눌러 linux 와 vi 를 구분합니다.&lt;br /&gt;....다시 ESC 키를 누른후 linux 맨앞에 커서를 위치시킵니다.&lt;br /&gt;&lt;br /&gt;4. yw 를 누른후 p 를 두세번 천천히 눌러봅니다. (linux라는 단어가 계속 붙혀넣기 될것입니다.)&lt;br /&gt;&lt;br /&gt;5. 자 이제 dw 를 눌러보세요.붙혀넣기 되었던 linux 단어가 삭제 될것입니다.)&lt;br /&gt;&lt;br /&gt;6. 아무라인에나 커서를 위치시킵니다.&lt;br /&gt;&lt;br /&gt;7. dd를 눌러보세요.(한라인통째로 삭제가 될것입니다.&lt;br /&gt;.. 이것이 바로 한줄 통째 복사 명령어인 .yy의 반대명령어입니다.)&lt;br /&gt;&lt;br /&gt;8. ESC 키(명령모드)를 누르고, Shift + : 키(ex모드)를 누르고 q!를 입력하세요.&lt;br /&gt;.. (이명령을 주고 vi 를 빠져 나오면 방금했던 작업들이 저장되지 않습니다.)&lt;br /&gt;&lt;br /&gt;##4단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) 화살표 방향키 커서 이동 &lt;br /&gt;yy 복사(한줄) &lt;br /&gt;yw 복사(한단어) &lt;br /&gt;p 붙히기(커서아래에) &lt;br /&gt;x 삭제(한글자) &lt;br /&gt;dw 삭제(한단어) &lt;br /&gt;dd 삭제(한라인) &lt;br /&gt;u 되살리기 &lt;br /&gt;R 교체  &lt;br /&gt;입력모드( i )     &lt;br /&gt;ex모드( Shift + : ) wq 저장하고 종료 &lt;br /&gt;q! 저장않고 종료 &lt;br /&gt;set nu 라인에 번호매기기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 5단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi test.txt 해서 4단계까지 작업한것을 다시 엽니다.&lt;br /&gt;&lt;br /&gt;2. 첫번째 라인에 커서를 위치시키고 3yy를 누릅니다(3줄이 한꺼번에 복사되어집니다.).&lt;br /&gt;&lt;br /&gt;3. p를 3번이상 눌러보세요.&lt;br /&gt;&lt;br /&gt;4. 3dd 를 누릅니다.(3줄씩 한꺼번에 지워지는 것을 볼수 있습니다.)&lt;br /&gt;&lt;br /&gt;5. / (Slash) 를 누른후 (검색모드입니다.vi 화면하단에 / 표시가 나타납니다.) &lt;br /&gt;.. linux라고 입력한후 enter 를 치세요다.그러면 linux 라는 단어가 있는곳으로 이동합니다.&lt;br /&gt;.. 그다음 linux라는 단어로 이동하고자 할때는 n 을 누르면 됩니다.&lt;br /&gt;.. 다시 역으로 올라가고자 하려면 Shift + n 을 누르면됩니다.&lt;br /&gt;.. (#!!! - / 대신 ? 을 누르면 현재 커서위치부터 위쪽으로 검색해 올갑니다.&lt;br /&gt;&lt;br /&gt;6. ESC 키(명령모드)를 누르고, Shift + : 키(ex모드)를 누르고 w test2.tst를 입력합니다.&lt;br /&gt;&lt;br /&gt;7. vi 에서 빠져나온후 ls 명령을 내려보면 test2.txt 라는 파일이q 새로생긴것을 알 수있습니다.&lt;br /&gt;&lt;br /&gt;##5단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) 화살표 방향키 커서 이동 &lt;br /&gt;yy 복사(한줄) &lt;br /&gt;nyy 복사(n 라인만큼) &lt;br /&gt;yw 복사(한단어) &lt;br /&gt;p 붙히기(커서아래에) &lt;br /&gt;x 삭제(한글자) &lt;br /&gt;dw 삭제(한단어) &lt;br /&gt;dd 삭제(한라인) &lt;br /&gt;ndd 삭제(n 라인만큼) &lt;br /&gt;u 되살리기 &lt;br /&gt;R 교체  &lt;br /&gt;/ 검색 &lt;br /&gt;입력모드( i )     &lt;br /&gt;ex모드( Shift + : ) wq 저장하고 종료 &lt;br /&gt;wq test2.txt test2.txt 파일명으로 저장 &lt;br /&gt;q! 저장않고 종료 &lt;br /&gt;set nu 라인에 번호매기기 &lt;br /&gt;1단계부터 5단계 까지 나온 명령들만 여러분이 익히면 vi 명령어의 99%를 배운것입니다.&lt;br /&gt;나머지 1%는 지금까지 분류된 범위에서 조금씩 첨가되는 명령이라 보면 됩니다.&lt;br /&gt;조금더 상황에 맞게 세분화 시킨 명령어들이면서,더 작업을 빨리 할 수 있게끔 하는 명령어들&lt;br /&gt;말입니다.방향키 만으로도 얼마든지 이동이 가능하지만 라인의 끝으로 단번에 이동하거나&lt;br /&gt;한페이지씩 이동하거나 범위를 설정한 만큼만 복사합니다거나..등등..이 있다고 보면 됩니다.&lt;br /&gt;물론 앞으로 지금까지 해온것에 조금씩 하나하나씩 첨가해 나간다면 어느새 vi 에 익숙해진&lt;br /&gt;여러분의 빠른 손놀림을 보게 될것입니다...:) &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi PowerUP 6단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi powerupvi.txt 해서 세로운 파일을 여세요.&lt;br /&gt;&lt;br /&gt;2. 첫번째 라인에 커서를 위치시키고 입력모드( i )에서 linuxvi linuxvi linuxvi linuxvi linuxvi 라고 &lt;br /&gt;.. 입력하고 명령모드로 전환(ESC)후 이것을 복사(yy)하여 붙혀넣기(p)해서 5줄을 만듭니다.&lt;br /&gt;&lt;br /&gt;3. j,k,h,l 순으로 마구마구 눌러보면서 커서가 어떻게 움직이나 잘 보세요.&lt;br /&gt;&lt;br /&gt;4. w를 한번 두번 세번 마구마구 눌러보세요.한단어씩 이동하죠.&lt;br /&gt;.. 자.그럼 이젠 b를 한번 두번 세번 마구마구 눌러보세요.역시 한단어씩 이동하는데 아까와 반대로 &lt;br /&gt;.. 움직이죠.지금은 한칸씩 이동이나 단어단위 이동이나 별차이 없이 느껴지실지도 모르지만 라인수 &lt;br /&gt;..많아지고 한라인이 무진장 긴문장을 접하고 그 가운데 있는 문자를 수정해야 할경우 큰 도움을 볼것 &lt;br /&gt;.. 입니다...:)&lt;br /&gt;&lt;br /&gt;5. ex모드로( shift + : ) 전환후 : w linuxvi.txt 라고 명령해 보세요.&lt;br /&gt;&lt;br /&gt;6. 명령모드(ESC)로 전환후 커서를 마지막라인으로 이동시킨후 o(알파벳입니다.숫자 0 가 아니고,,)를 &lt;br /&gt;.. 누르고, windows windows windows windows windows 라고 입력하고 명령모드로 전환(ESC)후 이것을 &lt;br /&gt;.. 복사(yy)하여 붙혀넣기(p)해서 5줄을 만듭니다.&lt;br /&gt;&lt;br /&gt;7. ex모드로( shift + : ) 전환후 : w linux-windows.txt 라고 명령해 보세요.&lt;br /&gt;&lt;br /&gt;8. :wq 하고 저장후 나와서 ls 해 보시면 powerupvi.txt 이외에 linuxvi.txt 와 linux-windows.txt 파일이 &lt;br /&gt;.. 추가로 생긴것을 볼 수 있으실 겁니다.&lt;br /&gt;&lt;br /&gt;##powerup 6단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) j 아래로 이동 &lt;br /&gt;k 위로 이동 &lt;br /&gt;h 좌로 이동  &lt;br /&gt;l 우로 이동 &lt;br /&gt;w 한단어씩 정방향으로 이동 &lt;br /&gt;b 한단어씩 역방향으로 이동  &lt;br /&gt;입력모드( o ) 현재라인 아래 입력모드   &lt;br /&gt;ex모드( Shift + : ) w 새로운 이름으로 파일저장하기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi PowerUP 7단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi linux-windows.txt 해서 세로운 파일을 여세요.&lt;br /&gt;&lt;br /&gt;2. linuxvi 의 마지막 라인의 끝으로 이동후 J (대문자)를 눌러 봅니다.라인 붙히기 입니다.&lt;br /&gt;&lt;br /&gt;3. 이제 0(아라비아 숫자)를 눌러 보세요.라인 맨앞으로 이동 할 것입니다. 이젠 $ 를 눌러보세요.&lt;br /&gt;.. 라인의 맨끝으로 이동 할 것입니다.이두가지 명령역시 w,b와 잘 사용하면 프로그램 코딩시 한라인이 &lt;br /&gt;.. 엄청길때 원하는 위치로 방향키나,j.k.h.l 보다 신속히 원하는 위치로 이동시켜 주기때문에 무척 편리하게 &lt;br /&gt;.. 쓰실 수 있을 것입니다.&lt;br /&gt;&lt;br /&gt;4. 이젠다시 1G를 눌러 보세요.글구 $G를 눌러 보세요.계속 번갈아 가면서 눌러 보세요..&lt;br /&gt;.. 어떤 변화가 있나..이것은 파일의 처음과 끝으로의 이동입니다.&lt;br /&gt;.. 라인수가 작을때나 별쓰임새가 없지만 http.conf와 같이 라인수가 1000라인 이상 넘어가는 파일등에서 &lt;br /&gt;.. 간혹 마지막 부분의 설정파일을 보면서 고쳐야 할경우이나 마지막 부분에 뭔가 작업을 해야 할경우..&lt;br /&gt;.. 매우 유용합니다..pageup/pagedown 보다 빠르죠.단칼이니까..-_-''&lt;br /&gt;&lt;br /&gt;5. 자 위에서 pageup/pagedown키로 한화면씩 이동한다고 했죠.근데 제가 모시고 있는 심사부님말로는 &lt;br /&gt;...진정한 vi의 고수는 옆에서 봤을때 키보드에서 손이 움직이는 모습이 보이지 않아야 한다라는 가르침을 &lt;br /&gt;...주시더군요..결국 vi의 고수들은 자판의 오른쪽에 위치하여 손의 움직임이 보이게 하는 방향키나 &lt;br /&gt;...pageup/pagedown 키를 만지지 않아야 한다는 것이죠...-_-''..따라서 손의 움직임을 보이게 하는 &lt;br /&gt;...pageup/pagedown키 대신 손의 움직임을 최소화 시켜줄 단축키를 알아보죠.다음 단계에서...vi 고수라..&lt;br /&gt;&lt;br /&gt;6.ex모드( shift + : )로 전환후 : set nu 해서 라인수가 나오게 합니다. &lt;br /&gt;...그리고 : 5 라고 명령후 커서위치를 확인합니다. : 1 이라고 명령후 커서위치를 확인합니다.&lt;br /&gt;...이 명령어 쓰임은 보통은 http.conf등과 같은 설정화일을 변경후 데몬을 다시구동시킬때 잘못된 구문이 &lt;br /&gt;...있을시엔 문제가 있는 라인수가 나오게 됩니다.이때 바로 이명령어를 유용하게 쓰는 겁니다.&lt;br /&gt;...파일을 열고 : 에러라인수를 입력하면 바로 그곳으로 커서가 이동하죠...&lt;br /&gt;...유용하게 활용하시고 벌레 많이 잡으세요.....:)&lt;br /&gt;&lt;br /&gt;7.저장하고 종료합니다.&lt;br /&gt;&lt;br /&gt;##powerup 7단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) j 아래로 이동 &lt;br /&gt;k 위로 이동 &lt;br /&gt;h 좌로 이동 &lt;br /&gt;l 우로 이동 &lt;br /&gt;w 한단어씩 정방향으로 이동 &lt;br /&gt;b 한단어씩 역방향으로 이동  &lt;br /&gt;J 라인 붙히기 &lt;br /&gt;0(아라비아 숫자) 라인 맨앞으로 이동 &lt;br /&gt;$ 라인 맨끝으로 이동 &lt;br /&gt;1G 파일의 첫라인으로 이동 &lt;br /&gt;$G 또는 G 파일의 끝라인으로 이동 &lt;br /&gt;pageup키 한화면 위로 이동 &lt;br /&gt;pagedown키 한화면 아래로 이동 &lt;br /&gt;입력모드( o ) 현재라인 아래 입력모드   &lt;br /&gt;ex모드( Shift + : ) w 새로운 이름으로 파일저장하기 &lt;br /&gt;n(원하는 아라비아 숫자) 이동하고자 하는 라인위치로 이동 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi PowerUP 8단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 cp /etc/httpd/conf/httpd.conf ./testsample.txt 라고 명령주시고요,&lt;br /&gt;&lt;br /&gt;2. vi testsample.txt 해서 파일을 여시구요.&lt;br /&gt;&lt;br /&gt;3. 전단계에서 파일의 라인수가 적어서 제대로 확인못한 $G,1G,pageup키,pagedown키를 눌러보세요.&lt;br /&gt;... 마음껏..원본파일이 아니니까..막지워도 보구요..지금까지 기억나는 명령어 다 써보세요....&lt;br /&gt;... 100라인씩 막 지워도 보고 복사도 해보고 .....마구마구...&lt;br /&gt;&lt;br /&gt;4. 이제 다시 마음을 가다듬고.Ctrl + f 해보시고 이번엔 Ctrl + b 해보세요. &lt;br /&gt;... 이두가지가 손의 움직임을 최소화 시켜 줄 pagedown/pageup 를 대치합니다...:)&lt;br /&gt;&lt;br /&gt;5. 근데...Ctrl + f 후엔 커서가 화면의 첫라인에 위치하고 Ctrl + b 후엔 화면의 마지막 라인에 위치하죠.&lt;br /&gt;... 이때 H,L,M(모두 대문자입니다.)을 눌러보세요.여러번 눌러보세요..감이 잡히시죠..&lt;br /&gt;... [H]move to Home - top line on screen,[L]move to Last line on screen,&lt;br /&gt;... [M]move to Middle line on screen의 약자인것이....&lt;br /&gt;&lt;br /&gt;6. O(대문자 알파벳)를 눌러보세요.입력커서가 현재라인의 위로 이동하는것을 볼수 있습니다.&lt;br /&gt;...아무거나 입력해보고,&lt;br /&gt;&lt;br /&gt;7. 다시 명령모드로 변경후 이번엔 a를 눌러보자.i를 눌렀을때와는 틀리게 커서뒤에서 입력모드가 &lt;br /&gt;...시작됨을 알수 있을 것입니다.&lt;br /&gt;&lt;br /&gt;8.다시 명령모드로 변경후 커서의 위치를 라인의 중간에 위치 시키고, I(알파벳 대문자)를 눌러보고,&lt;br /&gt;...다시 명령모드로 전환후 A(알파벳 대문자)를 눌러 보세요.&lt;br /&gt;...아까와는 반대로 라인의 끝에서 입력모드가 시작됨을 알수 있을 것입니다.&lt;br /&gt;...대부분의 단순 입력모드로 i를 많이 이용하고 추가라인 입력시엔 o를 많이 이용하므로 &lt;br /&gt;...적어도 i 와 o를 이용한 입력모드는 꼭 익숙하게 사용하실 수 있도록 익혀두시면 좋습니다.&lt;br /&gt;&lt;br /&gt;7.저장하고 종료합니다.&lt;br /&gt;&lt;br /&gt;##powerup 8단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) j 아래로 이동 &lt;br /&gt;k 위로 이동 &lt;br /&gt;h 좌로 이동 &lt;br /&gt;l 우로 이동 &lt;br /&gt;w 한단어씩 정방향으로 이동 &lt;br /&gt;b 한단어씩 역방향으로 이동  &lt;br /&gt;J 라인 붙히기 &lt;br /&gt;0(아라비아 숫자) 라인 맨앞으로 이동 &lt;br /&gt;$ 라인 맨끝으로 이동 &lt;br /&gt;1G 파일의 첫라인으로 이동 &lt;br /&gt;$G 파일의 끝라인으로 이동 &lt;br /&gt;pageup키 한화면 위로 이동 &lt;br /&gt;pagedown키 한화면 아래로 이동 &lt;br /&gt;Ctrl + b 한화면 위로 이동 &lt;br /&gt;Ctrl + f 한화면 아래로 이동 &lt;br /&gt;H 현재화면 첫라인으로 이동 &lt;br /&gt;M 현재화면 중간라인으로 이동 &lt;br /&gt;L 현재화면 마지막라인으로 이동 &lt;br /&gt;입력모드( o ) 현재라인 아래 입력모드   &lt;br /&gt;입력모드( O ) 현재라인 위 입력모드   &lt;br /&gt;입력모드( a ) 커서뒤 입력모드   &lt;br /&gt;입력모드( I ) 현재라인 맨앞 입력모드   &lt;br /&gt;입력모드( A ) 현재라인 맨뒤 입력모드    &lt;br /&gt;ex모드( Shift + : ) w 새로운 이름으로 파일저장하기 &lt;br /&gt;n(원하는 아라비아 숫자) 이동하고자 하는 라인위치로 이동 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi PowerUP 9단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi linux-windows.txt 파일을 여세요,&lt;br /&gt;&lt;br /&gt;2. 그동안 놀고 있었던 마우스를 이용해 첫번째 라인을 블럭으로 지정후 휠마우스나 3버튼이면 &lt;br /&gt;....가운데버튼을 2버튼이면 양쪽마우스버튼을 동시에 눌러보세요.블럭으로 범위가 지정됐던 영역이 &lt;br /&gt;....붙혀넣기가 되는것을 보실 수 있습니다.마우스로 원하는 범위지정을 한만큼 복사하기가 진행됨을 &lt;br /&gt;....볼수 있을 것입니다.&lt;br /&gt;....그러나 vi 고수는 손의 움직임이 보이면 안되는 법...-.-&lt;br /&gt;&lt;br /&gt;3. vi 의 visual 모드가 바로 고수를 위한 해답입니다.&lt;br /&gt;&lt;br /&gt;4. 명령모드로 전환후 첫번째 라인 맨앞으로 이동후 v 를 누러보세요.화면 아래쪽 좌측에 -- VISUAL -- &lt;br /&gt;... 표시가 나타날 것입니다. 그리고 j.k.h.l을 이용해 커서를 움직여보세요.범위가 지정됨을 알수 있습니다.&lt;br /&gt;... k를 눌러 범위를 linux라는 단어까지만 지정되게 한후 y를 한번누른후 라인맨끝으로 이동후 p를 &lt;br /&gt;... 눌러보세요.마우스를 이용해서 범위설정후 copy하는 방법보다 visual 모드를 이용해서 범위설정후 &lt;br /&gt;... copy하는 방법엔 어떤 장점이 있을까요....&lt;br /&gt;&lt;br /&gt;1)마우스의 상태에 따라 다르겠지만 visual 모드를 이용하면 마우스보다 정교하게 범위설정을 할 수 &lt;br /&gt;...있다는 사실입니다.제것도 마우스가 부드럽지 못하다 보니 정확한 범위를 지정하려고 하다보면 속 &lt;br /&gt;.. 뒤집어 질때가 많았죠....아마 동감하시는 분이 있으실 겁니다..-_-''&lt;br /&gt;&lt;br /&gt;2)마우스를 이용한 copy는 화면에 보여지는 부분만 copy된다는 것입니다.&lt;br /&gt;.. 그러나 visual 모드를 이용하면 그런 제약이 없다는 것이죠.&lt;br /&gt;&lt;br /&gt;3)그리고 가장 중요한 차이점!! visual 모드를 이용하면 vi 고수같아 보인다는 것..:)&lt;br /&gt;&lt;br /&gt;5. visual 모드로 진입하는 방법에는 3가지가 있습니다.&lt;br /&gt;&lt;br /&gt;1) v : 일반 visual 입니다.-- VISUAL -- 이라고 표시됩니다.&lt;br /&gt;&lt;br /&gt;2) Ctrl + v : 블럭 visual 입니다. -- VISUAL BLOCK -- 이라고 표시됩니다.&lt;br /&gt;&lt;br /&gt;3) Shift + v : 라인 visual 입니다. -- VISUAL LINE -- 이라고 표시됩니다.&lt;br /&gt;&lt;br /&gt;6. 다시 첫번째 라인 맨앞으로 이동후 Ctrl + v 를 이용해 블럭 visual 로 진입후 j를 눌러 5번째 라인까지 &lt;br /&gt;.. 내려간후 l을 눌러 1~5번째 라인까지 첫번째 linuxvi 만을 범위 설정후 y를 눌러보세요. &lt;br /&gt;.. 5 lines yanked 라는 문구가 화면 하단 좌측에 나타날것 입니다.커서를 라인 맨 마지막으로 이동시킨후 o 를 &lt;br /&gt;.. 눌러 라인아래 입력모드로 만든후 엔터키를 두세번 누른후 명령모드로 다시 바꾸고 p를 눌러보세요.&lt;br /&gt;.. 자 이게 바로 visual 모드의 하이라이트입니다.이것을 잘 이용하면 특정범위를 지정해서 특정부위에 &lt;br /&gt;.. 정확하게 넣을 수 있죠... 또한 맨앞 라인을 모두 대문자로 바꾸고 싶을때 visual block을 이용해 라인들 &lt;br /&gt;.. 맨앞자만 범위를 지정후 Shift + u를 눌러보세요..어떠세요.vi 쓸만하죠..:) 소문자는 범위지정후 u 라고만 &lt;br /&gt;.. 함 됩니다.지정된 범위의 삭제는 d 입니다.지정된 범위의 한줄로의붙히기는 shift + j 입니다.&lt;br /&gt;&lt;br /&gt;7.저장하고 종료합니다.&lt;br /&gt;&lt;br /&gt;##powerup 9단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) j 아래로 이동 &lt;br /&gt;k 위로 이동 &lt;br /&gt;h 좌로 이동 &lt;br /&gt;l 우로 이동 &lt;br /&gt;w 한단어씩 정방향으로 이동 &lt;br /&gt;b 한단어씩 역방향으로 이동  &lt;br /&gt;J 라인 붙히기 &lt;br /&gt;0(아라비아 숫자) 라인 맨앞으로 이동 &lt;br /&gt;$ 라인 맨끝으로 이동 &lt;br /&gt;1G 파일의 첫라인으로 이동 &lt;br /&gt;$G 파일의 끝라인으로 이동 &lt;br /&gt;pageup키 한화면 위로 이동 &lt;br /&gt;pagedown키 한화면 아래로 이동 &lt;br /&gt;Ctrl + b 한화면 위로 이동 &lt;br /&gt;Ctrl + f 한화면 아래로 이동 &lt;br /&gt;H 현재화면 첫라인으로 이동 &lt;br /&gt;M 현재화면 중간라인으로 이동 &lt;br /&gt;L 현재화면 마지막라인으로 이동 &lt;br /&gt;입력모드( o ) 현재라인 아래 입력모드   &lt;br /&gt;입력모드( O ) 현재라인 위 입력모드   &lt;br /&gt;입력모드( a ) 커서뒤 입력모드   &lt;br /&gt;입력모드( I ) 현재라인 맨앞 입력모드   &lt;br /&gt;입력모드( A ) 현재라인 맨뒤 입력모드    &lt;br /&gt;ex모드( Shift + : ) w 새로운 이름으로 파일저장하기 &lt;br /&gt;n(원하는 아라비아 숫자) 이동하고자 하는 라인위치로 이동 &lt;br /&gt;visual( v )&lt;br /&gt;&lt;br /&gt;visual line( Shift + v )&lt;br /&gt;&lt;br /&gt;visual block( Ctrl + v )&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; y 복사 &lt;br /&gt;p 붙혀넣기 &lt;br /&gt;d 삭제 &lt;br /&gt;U 대문자로 &lt;br /&gt;u 소문자로 &lt;br /&gt;J 한줄의 라인으로 붙히기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi PowerUP 10단계]&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi linux-windows.txt 파일을 다시 여세요,&lt;br /&gt;&lt;br /&gt;2. ex모드로 전환하세요.그리고 :%s/linuxvi/vimpire/g 라고 명령해 보세요 &lt;br /&gt;&lt;br /&gt;3. 이번엔 : ! ls 라고 해보시고, : ! vi /etc/httpd/conf/httpd.conf 라고 해보세요. &lt;br /&gt;... 빠져나올때는 : q 입니다.대충 감이 잡히시죠...:)&lt;br /&gt;&lt;br /&gt;4. 마지막으로 : h 라고 해보세요.자 이제 여러분이 유심히 봐주셔야 할 내용이 나왔습니다.&lt;br /&gt;.. 지금까지 여러분은 많은 vi에 대한 사용법을 배웠다고 생각하실것입니다.&lt;br /&gt;.. 하지만 저도 아는것은 여러분게 설명드린 이게 전부고 아직도 vi의 기능은 여러분 앞에 보이는 &lt;br /&gt;.. 내용만큼 많이 남아 있습니다.이제부터는 여러분의 몫입니다.그리고 여러분의 도움이 필요합니다.&lt;br /&gt;.. 많은 작업상황과 실전에 많이 적용시켜보시고 유용한 vi의 기능들을 조금씩 모아 좀더 많은 리눅스 &lt;br /&gt;.. 사용자들이 좀더 빠른 시간안에 프로그램을 코딩하고 효과적인 작업을 함으로써 좀더 유용한 &lt;br /&gt;.. 리눅스용 프로그램들을 좀더 빨리 만들고 리눅스를 효율적으로 운영함으로써 우리의 리눅스가 &lt;br /&gt;.. 더욱더 가치있는 OS로써 사용되고 발전하는데 여러분의 힘을 모아주세요...:)&lt;br /&gt;&lt;br /&gt;5.도움말에서 빠져 나올땐 : q 입니다.&lt;br /&gt;&lt;br /&gt;6.영원히 저장하고 종료합니다.이제 준비는 끝났습니다.&lt;br /&gt;.. 이제 vi 고수를 위한 실전 연습만이 남았습니다.&lt;br /&gt;.. 자 이제 실전으로 돌아가서 vi의 내면에 숨겨진 기능들을 마음껏 발휘시켜 사용하시기 바랍니다.&lt;br /&gt;&lt;br /&gt;##powerup 10단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;명령모드( ESC ) j 아래로 이동 &lt;br /&gt;k 위로 이동 &lt;br /&gt;h 좌로 이동 &lt;br /&gt;l 우로 이동 &lt;br /&gt;w 한단어씩 정방향으로 이동 &lt;br /&gt;b 한단어씩 역방향으로 이동  &lt;br /&gt;J 라인 붙히기 &lt;br /&gt;0(아라비아 숫자) 라인 맨앞으로 이동 &lt;br /&gt;$ 라인 맨끝으로 이동 &lt;br /&gt;1G 파일의 첫라인으로 이동 &lt;br /&gt;$G 파일의 끝라인으로 이동 &lt;br /&gt;pageup키 한화면 위로 이동 &lt;br /&gt;pagedown키 한화면 아래로 이동 &lt;br /&gt;Ctrl + b 한화면 위로 이동 &lt;br /&gt;Ctrl + f 한화면 아래로 이동 &lt;br /&gt;H 현재화면 첫라인으로 이동 &lt;br /&gt;M 현재화면 중간라인으로 이동 &lt;br /&gt;L 현재화면 마지막라인으로 이동 &lt;br /&gt;입력모드( o ) 현재라인 아래 입력모드   &lt;br /&gt;입력모드( O ) 현재라인 위 입력모드   &lt;br /&gt;입력모드( a ) 커서뒤 입력모드   &lt;br /&gt;입력모드( I ) 현재라인 맨앞 입력모드   &lt;br /&gt;입력모드( A ) 현재라인 맨뒤 입력모드    &lt;br /&gt;ex모드( Shift + : ) w 새로운 이름으로 파일저장하기 &lt;br /&gt;n(원하는 아라비아 숫자) 이동하고자 하는 라인위치로 이동 &lt;br /&gt;%s/a/b/g 파일 전체에서 a 를 b 로 바꿈 &lt;br /&gt;! 외부 명령사용(종료는 q) &lt;br /&gt;h 도움말(종료는 q) &lt;br /&gt;visual( v )&lt;br /&gt;&lt;br /&gt;visual line( Shift + v )&lt;br /&gt;&lt;br /&gt;visual block( Ctrl + v )&lt;br /&gt;&lt;br /&gt; &lt;br /&gt; y 복사 &lt;br /&gt;p 붙혀넣기 &lt;br /&gt;d 삭제 &lt;br /&gt;U 대문자로 &lt;br /&gt;u 소문자로 &lt;br /&gt;J 한줄의 라인으로 붙히기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;이제 여러분은 vi의 기본적인 메뉴 그룹을 알게되었습니다.&lt;br /&gt;그리고 지금까지 알게된 명령어만으로도 vi를 충분히 활용하고도 남습니다.&lt;br /&gt;하지만 좀더 다양한 명령들이 추가로 더 있습니다.추가로 더 알아서 혼동되실것 같으면 &lt;br /&gt;어느정도 vi 명령이 익숙해지신후에 보셔도 무관합니다.하지만 알게되면 언젠가 사용하실 &lt;br /&gt;경우가 있을것입니다.시간있으실때 하나하나 연습해보세요.:)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;##추가 명령어##&lt;br /&gt;&lt;br /&gt;이동 e 단어의 마지막 글자로 &lt;br /&gt;E 단어의 마지막 글자로(띄워쓰기 전까지) &lt;br /&gt;^ 커서위치 라인의 첫 글자로(라인 처음위치)) &lt;br /&gt;$ 커서위치 라인의 마지막 글자로(라인 끝위치) &lt;br /&gt;enter 커서위치 다음 라인 첫 글자로 &lt;br /&gt;+ 커서위치 위 라인 첫 글자로 &lt;br /&gt;- 커서위치 아래 라인 첫 글자로 &lt;br /&gt;( 이전 문장 첫 글자로 &lt;br /&gt;) 다음 문장 첫 글자로 &lt;br /&gt;{ 이전 문단으로 &lt;br /&gt;} 다음 문단으로 &lt;br /&gt;수정 r 커서 위치의 한글자 교체 &lt;br /&gt;R 커서 위치부터 &lt;ESC&gt;를 누를때까지 다른 글자로 교체 &lt;br /&gt;s,cl 커서 위치의 글자를 한개를 여러 글자로 교체 &lt;br /&gt;ch 커서 바로 앞의 글자를 한개를 여러글자로 교체 &lt;br /&gt;cw 커서위치의 한단어를 교체 &lt;br /&gt;c0 커서 위치부터 줄의 처음까지 교체 &lt;br /&gt;C,c$ 커서 위치부터 줄의 끝까지 교체 &lt;br /&gt;cc 커서가 있는 줄을 교체 &lt;br /&gt;cj 커서가 있는 줄과 그 다음 줄을 교체 &lt;br /&gt;ck 커서가 있는 줄과 그 앞줄을 교체 &lt;br /&gt;삭제 x,dl 커서 위치의 글자 삭제 &lt;br /&gt;X,dh 커서 바로 앞의 글자 삭제 &lt;br /&gt;dw 한 단어를 삭제 &lt;br /&gt;d0 커서 위치부터 줄의 처음까지 삭제 &lt;br /&gt;D,d$ 커서 위치부터 줄의 끝까지 삭제 &lt;br /&gt;dd 커서가 있는 줄을 삭제 &lt;br /&gt;dj 커서가 있는 줄과 그 다음 줄을 삭제 &lt;br /&gt;dk 커서가 있는줄과 그 앞줄을 삭제 &lt;br /&gt;복사 &amp; 붙히기 yw 커서 위치부터 단어끝까지 복사  &lt;br /&gt;y0 커서 위치부터 줄의 처음까지 복사 &lt;br /&gt;y$ 커서 위치부터 줄의 끝까지 복사 &lt;br /&gt;yy 커서가 있는 줄을 복사 &lt;br /&gt;yj 커서가 있는 줄과 그 다음줄을 복사 &lt;br /&gt;yk 커서가 있는 줄과 그 앞줄을 복사 &lt;br /&gt;p 커서의 다음 위치에 붙혀넣기 &lt;br /&gt;P 커서가 있는 위치에 붙혀넣기 &lt;br /&gt;기타 . 조금전에 했던 명령을 반복(하나만) &lt;br /&gt;~ 대문자는 소문자로,,소문자는 대문자로.... &lt;br /&gt;Ctrl + l  현재 화면을 지우고 다시그림... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;이제 vi의 하이라이트 mapping에 대해 배워보는 공간입니다.&lt;br /&gt;지금까지 익혀온 명령들과 앞으로 실전에 활용하면서 배우게될 많은 명령어들과 사용법을 앞으로 &lt;br /&gt;해볼 mapping과 잘 접목시키면 효율적인 작업에 많은 도움이 될것입니다..&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 11단계]-mapping(1)!!!&lt;br /&gt;&lt;br /&gt;1. 명령행에서 vi map.txt 해서 파일을 엽니다.&lt;br /&gt;&lt;br /&gt;2. 첫번째 라인에 windows notepad라고 입력합니다.&lt;br /&gt;&lt;br /&gt;(참고로 vi에서 &lt;F1&gt;key는 도움말로 mapping 되어 있으니,&lt;F2&gt;&lt;F3&gt;를 사용하겠습니다. )&lt;br /&gt;&lt;br /&gt;3. ex모드로 전환후 :map &lt;F2&gt; :%s/windows/linux/g 까지만 입력후 enter를 치세요. &lt;br /&gt;&lt;br /&gt;4. (자 먼저 위의 명령입력은 ex모드에서 map이라는 명령을 입력하고, 한칸띄우고 funtionkey F1을 &lt;br /&gt;.. 누르면 &lt;F2&gt; 이라고 입력됩니다.그리고 다시 한칸띄우고 :%s/windows/linux/g라고 입력하면 됩니다.)&lt;br /&gt;&lt;br /&gt;5. 자 이제 명령모드 상태니까 &lt;F2&gt;key를 눌러보세요.&lt;br /&gt;&lt;br /&gt;6. 좌측하단 입력모드에 아까 입력한 명령이 나옵니다.이제 enter만 치면 명령이 실행됩니다.&lt;br /&gt;&lt;br /&gt;7. 자..근데..&lt;F2&gt;key누르고 명령확인후 enter치기 구찮죠..자이제 이것을 한번에 해보면..&lt;br /&gt;&lt;br /&gt;8.이번엔 &lt;F3&gt;에 mapping 해서 역으로 linux를 windows로 바꿔보죠.&lt;br /&gt;&lt;br /&gt;9. ex모드로 전환후 :map &lt;F3&gt; :%s/linux/windows/g 까지만 입력후 ctrl + v 를 눌러보세요.&lt;br /&gt;&lt;br /&gt;( ctrl + v가 명령모드에선 -VISUAL BLOCK-이지만 ex모드에선 funtion key 입력기능을 합니다.)&lt;br /&gt;&lt;br /&gt;10. :map &lt;F3&gt; :%s/linux/windows/g^ 이렇게 되죠...이제 enter를 눌러보세요.&lt;br /&gt;&lt;br /&gt;11. :map &lt;F3&gt; :%s/linux/windows/g^M 이렇게 되죠...이제 enter를 쳐서 명령을 입력시키고,&lt;br /&gt;&lt;br /&gt;12. 명령모드 상태에서 &lt;F3&gt;를 눌러보세요.바로 바뀌죠.&lt;br /&gt;&lt;br /&gt;13. 이제 다시 &lt;F2&gt;key를 눌러보세요. 명령확인후 enter를 쳐야만 바뀌죠.&lt;br /&gt;&lt;br /&gt;14. 자이제 어느정도 mapping 활용용도가 머리에 막 떠오르세요?..^^&lt;br /&gt;&lt;br /&gt;15. 참고로 여기선 mapping 할 문자로 &lt;F2&gt;&lt;F3&gt;등..funtionkey를 사용했는데..&lt;br /&gt;... 이것만 쓸수 있는것이 아니고 vi에서 사용하는 명령과 중복되지 않으면 어떤문자라도 쓸수 &lt;br /&gt;... 있습니다.예를 들어 @,&amp;,qq,등등..자신이 얼마든지 만들어 쓸수 있습니다.&lt;br /&gt;&lt;br /&gt;##11단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;ex모드( Shift + : ) map + 원하는 mapping 문자 매크로만듬. &lt;br /&gt;ctrl + v funtion key 입력 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 12단계]-mapping(2)!!!&lt;br /&gt;&lt;br /&gt;1. 11단계에서 사용한 파일을 그대로 이용합니다.&lt;br /&gt;&lt;br /&gt;2. 모든 라인을 지우고 첫번째라인에 notepad 두번째라인에 kldp라고 입력합니다.&lt;br /&gt;&lt;br /&gt;(현재&lt;F2&gt;&lt;F3&gt;가 mapping이 되어있으니...)&lt;br /&gt;&lt;br /&gt;3. ex모드로 전환후 :map &lt;F4&gt; :%s/notepad/vi/g^M까지만 입력후 enter를 치세요. &lt;br /&gt;&lt;br /&gt;4. 다시 ex모드로 전환후 :map &lt;F5&gt; :%s/kldp/mapping/g^M까지만 입력후 enter를 치세요. &lt;br /&gt;&lt;br /&gt;5. 다시 ex모드로 전환후 :map &lt;F6&gt; &lt;F4&gt;&lt;F5&gt;^M까지만 입력후 enter를 치세요. &lt;br /&gt;&lt;br /&gt;6. &lt;F5&gt;&lt;F6&gt;를 차례로 한번씩 눌러보고 u 키를 이용해 다시 2번 상태로 만든후,&lt;br /&gt;&lt;br /&gt;7. ex모드로 전환후 :map &lt;F7&gt; &lt;F4&gt;&lt;F5&gt;owow!!^M라고 mapping 시킵니다. &lt;br /&gt;&lt;br /&gt;8.&lt;F7&gt; 한번 눌러보세요.&lt;br /&gt;&lt;br /&gt;9. owow!!의 의미는 첫번째 단어 o는 입력모드(아래라인에 입력명령) wow!!는 입력문자.&lt;br /&gt;&lt;br /&gt;10. u 키를 이용해 다시 2번 상태로 만든후,&lt;br /&gt;&lt;br /&gt;11. ex모드로 전환후 :map &lt;F7&gt; &lt;F4&gt;&lt;F5&gt;owow!!^[:w mapping.txt^M라고 mapping 시킵니다.&lt;br /&gt;&lt;br /&gt;12. 명령모드 상태에서 &lt;F7&gt;를 다시 눌러보세요.&lt;br /&gt;&lt;br /&gt;13. ^[ 이것은 ex모드에서 ctrl + v 하고서 esc를 누르면 됩니다.&lt;br /&gt;... 즉, ^[은 ESC(명령모드)를 의미합니다.&lt;br /&gt;... 따라서 owow!!^[:w mapping.txt의 의미는 입력모드로가서 wow!!를 입력하고 다시 명령모드로 &lt;br /&gt;... 전환후 ex모드를 실행시켜 mapping.txt라는 새로운 파일로 저장한다라는 의미입니다.&lt;br /&gt;&lt;br /&gt;14. 이제 :wq명령으로 저장후 빠져나온후 &lt;br /&gt;.... 다시 vi map.txt를 열어서 &lt;F2&gt;&lt;F3&gt;&lt;F4&gt;&lt;F5&gt;&lt;F6&gt;&lt;F7&gt;를 눌러보세요. &lt;br /&gt;&lt;br /&gt;15. 명령이 안먹죠..vi 실행시 마다 사용하려면.vimrc파일에 저장후 사용하시면 됩니다.&lt;br /&gt;&lt;br /&gt;16. mapping을 편집상태에서도 사용하고 싶다면 mapping시 map 뒤에 !를 붙히면 됩니다.&lt;br /&gt;&lt;br /&gt;##12단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;ex모드( Shift + : ) map + 원하는 mapping 문자 매크로만듬. &lt;br /&gt;ctrl + v funtion key 입력 &lt;br /&gt;map! + 원하는 mapping 문자 편집모드에서도 실행가능 매크로 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;[vi 13단계]-marking!!!&lt;br /&gt;&lt;br /&gt;1. vi mark.txt를 하나 만들어 시작합니다.&lt;br /&gt;&lt;br /&gt;2. 라인맨 앞줄마다 라인번호를 입력합니다.30줄이상으로 만드세요.&lt;br /&gt;&lt;br /&gt;3. 10번라인으로 이동후 명령모드 상태서 ma 즉,m 과 a를 순서대로 누릅니다. &lt;br /&gt;&lt;br /&gt;4. 20번라인으로 이동후 명령모드 상태서 mb 즉,m 과 b를 순서대로 누릅니다. &lt;br /&gt;&lt;br /&gt;5. 30번라인으로 이동후 명령모드 상태서 mc 즉,m 과 c를 순서대로 누릅니다. &lt;br /&gt;&lt;br /&gt;6. ` 을 누른후 a를 눌러보세요.&lt;br /&gt;&lt;br /&gt;7. ` 을 누른후 b를 눌러보세요.&lt;br /&gt;&lt;br /&gt;8. ` 을 누른후 c를 눌러보세요.&lt;br /&gt;&lt;br /&gt;9. 이렇게 marking을 코딩시 table의 시작이나 끝,또는 구분하여야 할 영역이나&lt;br /&gt;...참조해야할 부분에 시켜놓고 사용하면 됩니다.&lt;br /&gt;&lt;br /&gt;##13단계에서 여러분이 알게된 명령어##&lt;br /&gt;&lt;br /&gt;ex모드(Shift + :) map + 원하는 mapping 문자 매크로만듬. &lt;br /&gt;ctrl + v funtion key 입력 &lt;br /&gt;map! + 원하는 mapping 문자 편집모드에서도 실행가능 매크로 &lt;br /&gt;명령모드(ESC) m + 원하는 marking 문자 marking&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-8742197950902132324?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/8742197950902132324/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=8742197950902132324' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8742197950902132324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8742197950902132324'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/vi.html' title='VI 편집기 단계별 가이드'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-8231798119412558223</id><published>2009-03-30T22:39:00.000-07:00</published><updated>2009-03-30T22:45:14.172-07:00</updated><title type='text'>[리눅스] 특정 파일을 제외한 압축 방법</title><content type='html'>리눅스 특정 파일을 제외하고 압축 하는 방법&lt;br /&gt;&lt;br /&gt;◆ 특정 파일 제외한 압축&lt;br /&gt;형식 : tar -cvf 압축파일명.tar --exclude="제외할파일명" 압축대상&lt;br /&gt;&lt;br /&gt;# tar -cvf FILE_NAME.tar --exclude="*.tar" ./*&lt;br /&gt;&lt;br /&gt;위와 같이 실행하여 현재 폴더의 *.tar 파일을 제외한 모든 파일을 FILE_NAME.tar 으로 &lt;br /&gt;&lt;br /&gt;압축하라 라는 뜻이다.&lt;br /&gt;&lt;br /&gt;◆ 다수 파일 제외한 압축&lt;br /&gt;만일 다수의 파일을 제외하려면 텍스트 파일에 리스트를 넣고 --exclude 옵션에 `리스트.txt` 으로&lt;br /&gt;&lt;br /&gt;하면 된다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-8231798119412558223?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/8231798119412558223/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=8231798119412558223' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8231798119412558223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/8231798119412558223'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/blog-post_6759.html' title='[리눅스] 특정 파일을 제외한 압축 방법'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-347679128292526433</id><published>2009-03-30T16:12:00.000-07:00</published><updated>2009-03-30T16:14:54.120-07:00</updated><title type='text'>[리눅스] 트래픽 체크</title><content type='html'>트래픽 체크 하기&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[root@localhost /]# vi trapic.sh&lt;br /&gt;&lt;br /&gt;------------------------------------------------&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;if [ "$1" != "" ]; then&lt;br /&gt;# ethnet device&lt;br /&gt;ETH="$1:"&lt;br /&gt;CHECK=/proc/net/dev&lt;br /&gt;CAT=/bin/cat&lt;br /&gt;&lt;br /&gt;GREP="/bin/grep ${ETH}"&lt;br /&gt;SED="sed -e s/${ETH}//"&lt;br /&gt;UPTIME=/usr/bin/uptime&lt;br /&gt;&lt;br /&gt;# parcket user check&lt;br /&gt;set `${CAT} ${CHECK} | ${GREP} | ${SED}`&lt;br /&gt;&lt;br /&gt;# Transmit packet&lt;br /&gt;let "in1 = $1"&lt;br /&gt;let "out1 = $9"&lt;br /&gt;&lt;br /&gt;echo "측정중입니다. 기다려주세요"&lt;br /&gt;sleep 1&lt;br /&gt;&lt;br /&gt;set `${CAT} ${CHECK} | ${GREP} | ${SED}`&lt;br /&gt;&lt;br /&gt;let "in0 = $1"&lt;br /&gt;let "out0 = $9"&lt;br /&gt;&lt;br /&gt;let " in = ($in0 - $in1)/(10*1024)"&lt;br /&gt;let " out = ($out0 - $out1)/(10*1024)"&lt;br /&gt;echo "수신(in) $in kbyte/s"&lt;br /&gt;echo "송신(out) $out kbyte/s"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;echo "USAGE: $0 [ethernet device no]"&lt;br /&gt;echo "ex) ./$0 eth0"&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;exit 0&lt;br /&gt;------------------------------------------------&lt;br /&gt;&lt;br /&gt;[root@localhost /]# ./trapic.sh&lt;br /&gt;USAGE: ./trapic.sh [ethernet device no]&lt;br /&gt;ex) ././trapic.sh eth0&lt;br /&gt;&lt;br /&gt;[root@localhost /]# ./trapic.sh eth0&lt;br /&gt;측정중입니다. 기다려주세요&lt;br /&gt;수신(in) 0 kbyte/s&lt;br /&gt;송신(out) 0 kbyte/s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위와 같이 체크하면 된다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-347679128292526433?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/347679128292526433/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=347679128292526433' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/347679128292526433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/347679128292526433'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/blog-post_30.html' title='[리눅스] 트래픽 체크'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-1589213583408165326</id><published>2009-03-30T16:09:00.000-07:00</published><updated>2009-03-30T16:10:58.580-07:00</updated><title type='text'>[C언어] 명령어 실행</title><content type='html'>C언어에서 명령어 실행하기&lt;br /&gt;&lt;br /&gt;# vi command.c&lt;br /&gt;&lt;br /&gt;------------------------------&lt;br /&gt;#include "stdlib.h"  // Header File&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt; system("입력할 명령어"); //Print&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;------------------------------&lt;br /&gt;&lt;br /&gt;# gcc -o command command.c&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-1589213583408165326?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/1589213583408165326/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=1589213583408165326' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1589213583408165326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/1589213583408165326'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/c_30.html' title='[C언어] 명령어 실행'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3738212310049077449</id><published>2009-03-30T16:06:00.000-07:00</published><updated>2009-03-30T16:08:36.172-07:00</updated><title type='text'>[리눅스] ShellProgram</title><content type='html'>1. Shell과 Shell programming이란? &lt;br /&gt;2. 쉘 문법 - 변수, 연산 &lt;br /&gt;3. 쉘 문법 - 조건문,제어구조 &lt;br /&gt;4. 쉘 문법 - 목록 &lt;br /&gt;5. 쉘 문법 - 함수 &lt;br /&gt;6. 쉘 문법 - 명령어 &lt;br /&gt;7. 쉘 문법 - 명령실행 &lt;br /&gt;8. 쉘 문법 - 쉘 스크립트 내부에서 입력 전달 &lt;br /&gt;9. 쉘 문법 - 디버깅 &lt;br /&gt;10. 우리가 자주 쓰는 쉘 스크립트 &lt;br /&gt;11. 참고자료 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. Shell과 Shell programming이란? &lt;br /&gt;쉘이란 간단히 생각해서 MS-DOS의 명령어 처리기인 command.com과 비슷하다고 할 수 &lt;br /&gt;있다. 그렇지만 그 기능은 MS의 것보다 엄청나다고 할 수 있다. 우리가 리눅스를 사용 &lt;br /&gt;하면서 쓰고 있는 것들의 대부분이 쉘 스크립으로 짜여있는 것만 봐도 알수 있다. &lt;br /&gt;쉘은 사용자를 유닉스(리눅스) 시스템에 이어주는 인터페이스로써 쉘을 통해 명령어를 &lt;br /&gt;입력하면 쉘은 해당 명령을 운영체제가 실행할 수 있도록 전달해주는 역활을 한다. &lt;br /&gt;쉘의 종류는 다양하나 흔히 우리들이 쓰는 것은 bash와 tcsh이다. &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;|셀 명칭     | 간단한 역사                                                 | &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;|sh(Bourne)  | 최초의 쉘                                                   | &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;|csh,tcsh,zsh| C 쉘, Berkeley 유닉스 프레임의 Bill Joy가 만듦.             | &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;|ksh,pdksh   | Korn 쉘, pdksh는 public domain Korn쉘. David Korn이 만듦    | &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;|bash        | GNU 프로젝트에서 나온 linux의 중요한 프로그램. Bourne Agine | &lt;br /&gt;|            | shell이라도 부른다.                                         | &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;|rc          | csh보다 더 C에 가깝다. GNU 프로젝트의 결과물                | &lt;br /&gt;+------------+-------------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;쉘 프로그래밍은 빠르고 간편하게 짤 수 있는 인터프리터 언어로써 컴파일할 필요가 &lt;br /&gt;없으며 한줄씩 실행시킬 수 있는 장점이 있지만 정밀한 처리나 빠른 처리를 요구하는 &lt;br /&gt;것엔 부적합하다고 할 수 있다. 쉘 프로그래밍 작성방법은 두가지로써 하나는 실행할 &lt;br /&gt;명령을 순서대로 입력하여 대화식으로 실행하는 것이며, 다른 하나는 실행할 명령을 &lt;br /&gt;파일에 저장한 다음 실행하는 것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. 쉘 문법 - 변수, 연산 &lt;br /&gt;변수는 환경변수와 인자변수, 일반변수로 구분되며 변수를 사용하기 위해서는 C와는 &lt;br /&gt;달리 처음 선언해주는 것이 아니라 변수를 처음 사용할때 생성한다. 변수는 기본적으 &lt;br /&gt;로 문자열로 저장이 되며 변수의 내용을 보려면 $를 앞에 붙인후 echo명령으로 호출하 &lt;br /&gt;게 된다. &lt;br /&gt;(변수를 인용처리 하기위해서는 작은 따옴표(')로 $변수를 묶거나 $ 앞에 문자를 붙 &lt;br /&gt;임으로써 $의 특별한 의미를 없애버릴 수 있다. 또한 변수의 값에 공백이 포함되면 &lt;br /&gt;앞뒤로 따옴표로 묶어주어야 하며, 등호(=) 앞뒤에 공백을 넣지 말아야 한다) &lt;br /&gt;&lt;br /&gt;1) 환경변수 &lt;br /&gt;쉘을 기동하면 기본적으로 세팅되는 변수들로써 일반적으로 사용자정의 변수와 구분 &lt;br /&gt;하기 위해서 대문자로 표현된다. 핵심적인 변수는 다음과 같다. &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| 환경변수 | 설명                                                       | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $HOME    | 사용자 홈 디렉토리                                         | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $PATH    | 명령어 찾기에 사용되는 콜론(:)으로 구분되는 디렉토리 목록  | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $IFS     | 입력필드 구분자. 쉘상에서 입력을 읽어들일 때 낱말을 구분   | &lt;br /&gt;|          | 하기 위한 목적으로 사용되는 문자 목록, 보통은 스페이스, 탭,| &lt;br /&gt;|          | 개행문자임                                                 | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $0       | 쉘 스크립트의 이름                                         | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $#       | 전달된 인자의 개수                                         | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $$       | 쉘 스크립트의 프로세스 ID. 쉘 스크립트 내부에서 중복되지   | &lt;br /&gt;|          | 않는 파일의 이름을 만들 때 자주 사용됨                     | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;2) 인자변수 &lt;br /&gt;쉘 스크립트에 인자를 넘겨줄때 그 인자들에 대한 정보를 가지고 있는 변수들로써 &lt;br /&gt;전달되는 인자와 관련된 변수들은 다음과 같다 &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| 인자변수 | 설명                                                       | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $1, $2.. | 스크립트로 전달된 인자                                     | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $*       | 스크립트로 전달된 인자 전체로, 하나의 변수에 저장되며 IFS  | &lt;br /&gt;|          | 환경 변수의 첫 번째 문자로 구분된다.                       | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;| $@       | $*와 비슷하나 IFS 환경 변수를 사용하지 않는다              | &lt;br /&gt;+----------+------------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;3) 일반변수 &lt;br /&gt;일반변수는 특별한 제약이 없으며 대소문자의 구분만 명확히 하면 된다. &lt;br /&gt;&lt;br /&gt;예) #!/bin/sh &lt;br /&gt;echo "This Script Executable File : $0" &lt;br /&gt;echo "Argument Count : $#" &lt;br /&gt;echo "Process ID : $$" &lt;br /&gt;echo "Argument List $* : $*" &lt;br /&gt;echo "Argument List $@ : $@" &lt;br /&gt;echo "Argument 1 : $1" &lt;br /&gt;echo "Argument 2 : $2" &lt;br /&gt;&lt;br /&gt;--&gt;실행 &lt;br /&gt;$chmod 755 argument (or chmod a+x argument) &lt;br /&gt;$./test a1 a2 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 쉘 문법 - 조건문,제어구조 &lt;br /&gt;1) test, [] &lt;br /&gt;쉘 스크립트에서 참거짓 값을 판단할 수 있는 것은 test와 []로 보통 같은 의미를 &lt;br /&gt;지닌다. []명령어는 쉘 스크립트를 다른 프로그래밍 언어와 비슷하게 보이는 역할 &lt;br /&gt;을 하기도 한다. &lt;br /&gt;&lt;br /&gt;a. 문자열 비교 &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;| 문자열 비교        | 결과                                             | &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;| string             | string1이 빈 문자열이 아니면 참                  | &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;| string1 = string2  | 두 문자열이 같다면 참                            | &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;| string1 != string2 | 두 문자열이 같지 않다면 참                       | &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;| -n string          | 문자열이 null이 아니라면 참                      | &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;| -z string          | 문자열이 null이라면 참                           | &lt;br /&gt;+--------------------+--------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;b. 산술 비교 &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| 산술비교                    | 결과                                    | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| expression1 -eq expression2 | 두 표현식 값이 같다면 참                | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| expression1 -ne expression2 | 두 표현식 값이 같지 않다면 참           | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| expression1 -qt expression2 | expression1이 expression2보다 크다면 참 | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| expression1 -ge expression2 | expression1이 expression2보다 크거나    | &lt;br /&gt;|                             | 같다면 참.                              | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| expression1 -lt expression2 | expression1이 expression2보다 작다면 참 | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| expression1 -le expression2 | expression1이 expression2보다 작거나    | &lt;br /&gt;|                             | 같다면 참.                              | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;| ! expression                | expression이 거짓이라면 참,             | &lt;br /&gt;|                             | 참이라면 거짓                           | &lt;br /&gt;+-----------------------------+-----------------------------------------+ &lt;br /&gt;&lt;br /&gt;c. 파일 조건 &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| 파일 조건     | 결과                                                  | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -d file       | file이 디렉토리라면 참                                | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -e file       | file이 존재한다면 참                                  | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -f file       | file이 정규파일이라면 참                              | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -g file       | file상에 set-group-id가 설정되어 있다면 참            | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -r file       | file이 읽기 가능하다면 참                             | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -s file       | file의 크기가 0이라면 참                              | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -u file       | file상에 set-user-id가 설정되어 있으면 참             | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -w file       | file이 쓰기 가능하다면 참                             | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;| -x file       | file이 실행가능하다면 참                              | &lt;br /&gt;+---------------+-------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;2) if &lt;br /&gt;명령의 결과를 테스트하여 조건적으로 적절한 구문의 그룹을 실행시킨다. &lt;br /&gt;&lt;br /&gt;a. 형식1(단일 if문) &lt;br /&gt;------------------------------------------------------------------------ &lt;br /&gt;if [조건] &lt;br /&gt;then &lt;br /&gt;문장 &lt;br /&gt;fi &lt;br /&gt;------------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;b. 형식2(if~else문) &lt;br /&gt;------------------------------------------------------------------------ &lt;br /&gt;if [조건] &lt;br /&gt;then &lt;br /&gt;문장 &lt;br /&gt;else &lt;br /&gt;문장 &lt;br /&gt;fi &lt;br /&gt;------------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;c. 형식3(여러가지 조건 검사) &lt;br /&gt;------------------------------------------------------------------------ &lt;br /&gt;if [조건] &lt;br /&gt;then &lt;br /&gt;문장 &lt;br /&gt;elif [조건] &lt;br /&gt;then &lt;br /&gt;문장 &lt;br /&gt;else &lt;br /&gt;문장 &lt;br /&gt;fi &lt;br /&gt;------------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;3) for &lt;br /&gt;지정한 범위 안에서 루프를 돌리는데 사용된다. 범위에 사용되는 값은 어떠한 &lt;br /&gt;문자열의 집합이라도 가능하다. 루프가 돌때마다 값1, 값2가 차례로 들어간다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;for 변수 in 값1, 값2 ... &lt;br /&gt;do &lt;br /&gt;문장 &lt;br /&gt;done &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;4) while &lt;br /&gt;어떤 명령을 지정한 횟수만큼 실행시키기에는 부적합한 for루프를 보완하는 것으로 &lt;br /&gt;실행 횟수가 불확실할때 편리하다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;while 조건문 &lt;br /&gt;do &lt;br /&gt;문장 &lt;br /&gt;done &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;5) until &lt;br /&gt;while과 비슷하나 조건이 참일동안 실행되는 것이 아니라 거짓일 동안 실행된다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;until 조건문 &lt;br /&gt;do &lt;br /&gt;문장 &lt;br /&gt;done &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;6) select &lt;br /&gt;원하는 리스트를 출력하고 그중 선택된 것을 돌려준다. 주의할 점은 select의 루프 &lt;br /&gt;내에서 자동적으로 벗어날 수 없으므로 반드시 break문을 사용해서 벗어나야 한다. &lt;br /&gt;&lt;br /&gt;예) #!/bin/sh &lt;br /&gt;echo "What do you like?" &lt;br /&gt;select var in "Linux" "Windows9x" "Win2k" "Win31" "Exit" &lt;br /&gt;do &lt;br /&gt;if [ "$var" = "Linux" ]; then &lt;br /&gt;echo "You are a Linuxer!!!" &lt;br /&gt;exit 0 &lt;br /&gt;elif [ "$var" = "Exit" ]; then &lt;br /&gt;echo "The question ended" &lt;br /&gt;exit 1 &lt;br /&gt;else &lt;br /&gt;echo "$var is not the best way!!!" &lt;br /&gt;echo "What do you like?" &lt;br /&gt;fi &lt;br /&gt;done &lt;br /&gt;&lt;br /&gt;--&gt; 결과 : What do you like? &lt;br /&gt;1) Linux &lt;br /&gt;2) Windows9x &lt;br /&gt;3) Win2k &lt;br /&gt;4) Win31 &lt;br /&gt;5) Exit &lt;br /&gt;#? &lt;br /&gt;&lt;br /&gt;7) case &lt;br /&gt;여러 패턴을 검사하고 이에 적절한 구문을 실행시켜 주는 것으로 강력한 기능을 &lt;br /&gt;가지고 있으며 쉘스크립에 많이 등장한다. &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;case 변수 in &lt;br /&gt;패턴 [ | 패턴 ] ...) 문장 ;; &lt;br /&gt;패턴 [ | 패턴 ] ...) 문장 ;; &lt;br /&gt;.... &lt;br /&gt;esac &lt;br /&gt;--------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. 쉘 문법 - 목록 &lt;br /&gt;여러 명령어를 실행할때 앞의 명령의 결과에 의해서 다음 행동이 결정되어야 할 경우 &lt;br /&gt;AND나 OR조건을 사용해서 한번에 처리할 수 있다. 이것은 쉘 스크립트 뿐 아니라 명 &lt;br /&gt;령행에서도 사용 가능하다. &lt;br /&gt;&lt;br /&gt;1) AND목록 &lt;br /&gt;한번에 여러 명령을 한꺼분에 실행시킬 수 있다. AND 목록에서 이전의 명령이 성공 &lt;br /&gt;했다면 다음번 명령을 수행한다. 왼쪽 구문부터 시작하여 그 결과값이 참이라면 &lt;br /&gt;그 다음 명령어가 수행된다. 거짓이 반환되면 더이상 명령어를 실행하지 않는다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;statment1 &amp;&amp; statment2 &amp;&amp; statment3 &amp;&amp; ... &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;2) OR목록 &lt;br /&gt;어떤 하나의 명령의 수행이 성공할때까지 일련의 명령을 계속 수행한다. 명령의 수 &lt;br /&gt;행이 성공하면 더 이상 목록 중의 다른 명령은 수행하지 않는다. 왼쪽 구문부터 &lt;br /&gt;시작하여 그 결과값이 거짓이라면 오른편의 명령어가 수행된다. 참의 값이 반환되면 &lt;br /&gt;실행을 멈춘다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;statment1 || statement2 || statement3 || ... &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;3) AND와 OR의 혼용 &lt;br /&gt;아래와 같이 &amp;&amp;와 ||을 혼용하여 사용할수 있다. 참이면 문장1이 실행되고 거짓이 &lt;br /&gt;면 문장2가 실행된다 &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;[ 조건 ] &amp;&amp; 문장1 || 문장2 &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;예) [ -f file_one ] &amp;&amp; command for true || command for false &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. 쉘 문법 - 함수 &lt;br /&gt;쉘 스크립 내부에 또는 다른 스크립트 파일에 함수를 정의해 놓고 사용할 수 있다. &lt;br /&gt;함수를 사용하면 코드를 최적화 할 수 있고 코딩이 간결해지며, 재사용이 가능하다. &lt;br /&gt;그러나 다른 스크립트 파일을 호출해서 함수를 실행할 경우, 가능은 하지만 스크립트 &lt;br /&gt;의 실행시간이 길어지고 함수의 결과를 전달하는 것이 까다롭기 때문에 가급적이면 &lt;br /&gt;외부 파일의 함수를 사용하지 않는 것이 좋다. &lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------- &lt;br /&gt;function_name () { &lt;br /&gt;statments &lt;br /&gt;} &lt;br /&gt;----------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;함수를 사용하는 방법은 함수명(function_name) 뒤에 인자를 적어준다. 그리고 함수 &lt;br /&gt;내부에서 지역(local)변수를 사용하고자 할 경우에는 변수명 앞에 local이란 예약어를 &lt;br /&gt;적어주면 된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. 쉘 문법 - 명령어 &lt;br /&gt;쉘 스크립트 안에서 사용할 수 있는 명령은 두 종류로써 하나는 내부명령어이고 다른 &lt;br /&gt;하나는 프롬프트 상에서 실행시킬 수 있는 일반명령어이다. 내부명령이 외부명령보다 &lt;br /&gt;좀 더 효율적이라는 것을 제외하면 실질적인 차이는 없다. &lt;br /&gt;&lt;br /&gt;1) break &lt;br /&gt;for, while이나 until에서 제어 조건을 만나기 전에 루프를 벗어날 때 사용한다. &lt;br /&gt;예) while true &lt;br /&gt;do &lt;br /&gt;if [ -f file_name ]; then &lt;br /&gt;break &lt;br /&gt;fi &lt;br /&gt;&lt;br /&gt;echo "file_name was not found" &lt;br /&gt;done &lt;br /&gt;exit 0 &lt;br /&gt;&lt;br /&gt;2) : 명령 &lt;br /&gt;의미없는(null) 명령으로 true를 대신해 논리값을 간단하게 하기 위해서 사용한다. &lt;br /&gt;while true와 같은 것을 while :와 같이 대체할 수 있으며, 변수의 조건을 지정할 &lt;br /&gt;수 있다. 예) : $(var=value) &lt;br /&gt;&lt;br /&gt;3) continue &lt;br /&gt;C에서와 비슷하며 for, while 또는 until 루프의 변수를 다음 값을 가지게 하고 &lt;br /&gt;다음 번 루프를 돌게 한다. &lt;br /&gt;&lt;br /&gt;4) .명령 &lt;br /&gt;현재의 쉘에서 명령을 실행시킨다. &lt;br /&gt;&lt;br /&gt;5) echo &lt;br /&gt;개행문자를 포함한 문장을 간단하게 출력한다. (다음줄로 넘어간다) &lt;br /&gt;&lt;br /&gt;6) eval &lt;br /&gt;인자의 실제 값을 구하는데 사용한다. &lt;br /&gt;예) foo=10 &lt;br /&gt;x=foo &lt;br /&gt;y='$'$x &lt;br /&gt;echo $y ==&gt; 결과값 : $foo &lt;br /&gt;&lt;br /&gt;foo=10 &lt;br /&gt;x=foo &lt;br /&gt;eval y='$'$x &lt;br /&gt;echo $y ==&gt; 결과값 : 10 &lt;br /&gt;&lt;br /&gt;7) exec &lt;br /&gt;현재 쉘을 다른 프로그램으로 대체하거나 파일을 읽기 모드로 열때 사용한다. &lt;br /&gt;&lt;br /&gt;8) exit n &lt;br /&gt;현재 쉘을 종료한다. 종료시 n값을 리턴한다. &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;| 종료코드 | 설명                           | &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;| 0        | 성공                           | &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;| 1~125    | 스크립트에서 사용하는 에러코드 | &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;| 126      | 파일이 실행되지 않았다         | &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;| 127      | 해당 명령을 발견할 수 없다     | &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;| 128이상  | 시그널이 발생했다.             | &lt;br /&gt;+----------+--------------------------------+ &lt;br /&gt;&lt;br /&gt;9) export &lt;br /&gt;해당 쉘에서 파생된 자식 프로세스에서 export한 환경변수는 본래 쉘에서 관리한다 &lt;br /&gt;&lt;br /&gt;10) expr &lt;br /&gt;표현식의 값을 구하는 것으로 x='expr $x+1'과 같이 사용된다. 하지만 expr보다는 &lt;br /&gt;$((계산식))을 사용한다. &lt;br /&gt;&lt;br /&gt;11) printf &lt;br /&gt;C에서의 printf와 흡사하다. &lt;br /&gt;형식 : printf "Format String" arg1 arg2 arg3 ... &lt;br /&gt;&lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| 탈출 문자열 | 설명                                   | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;|             | 백슬래시() 문자                        | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| a           | 경고음(벨 또는 비프음)                 | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| b           | 백스페이스 문자                        | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| f           | 폼피드 문자                            | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| n           | 뉴라인(newline) 문자                   | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| r           | 캐리지 리턴 문자                       | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| t           | 탭 문자                                | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| v           | 수직 탭 문자                           | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| ooo         | 8진수로 표현되는 한 문자               | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;&lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| 변환 식별자 | 설명                                   | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| d           | 십진수 출력                            | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| c           | 한 문자 출력                           | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| s           | 문장 출력                              | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;| %           | %문자 출력                             | &lt;br /&gt;+-------------+----------------------------------------+ &lt;br /&gt;&lt;br /&gt;예) [lpay09@pay lpay09]$ printf "%sn" hello &lt;br /&gt;&lt;br /&gt;12) return &lt;br /&gt;쉘 함수에서 값을 반환할때 쓰인다. &lt;br /&gt;&lt;br /&gt;13) set &lt;br /&gt;쉘 내부에서 매개 인자를 설정한다. set의 인자로 쓰인 문자열은 공백에 의해 $1 &lt;br /&gt;부터 차례대로 대입된다. &lt;br /&gt;예) #!/bin/sh &lt;br /&gt;echo the eate is $(date) &lt;br /&gt;set $(date) &lt;br /&gt;echo The month is $2 &lt;br /&gt;&lt;br /&gt;exit 0 &lt;br /&gt;&lt;br /&gt;---&gt;결과 : the date is 일 2월 11 02:21:57 KST 2001 &lt;br /&gt;The month is 2월 &lt;br /&gt;&lt;br /&gt;14) shift &lt;br /&gt;쉘의 인자를 한자리씩 아래로(n-&gt;1로) 이동시킨다. &lt;br /&gt;예) #!/bin/sh &lt;br /&gt;echo $1 &lt;br /&gt;shift &lt;br /&gt;echo $1 &lt;br /&gt;shift 5 &lt;br /&gt;echo $1 &lt;br /&gt;&lt;br /&gt;실행 : [lpay09@pay lpay09]$ ./shift 1 2 3 4 5 6 7 8 9 10 &lt;br /&gt;1 &lt;br /&gt;2 &lt;br /&gt;7 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;15) trap &lt;br /&gt;쉘의 실행도중 시그널을 처리하는 시그널 처리기를 만드는 역할을 한다. &lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------- &lt;br /&gt;trap command signal &lt;br /&gt;----------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;쉘 스크립트는 위에서 아래로 실행되므로 보호하려는 부분 이전에 trap명령을 사용 &lt;br /&gt;한다. trap조건을 기본으로 사용하려면 명령에 - 를 넣으면 된다. 신호를 무시할려 &lt;br /&gt;면 ''빈 문자열을 준다. &lt;br /&gt;&lt;br /&gt;예) trap 'rm -rf /tmp/my_tmp_file_$$' INT &lt;br /&gt;(INT는 보통 Ctrl+C를 눌렀을때 발생된다) &lt;br /&gt;&lt;br /&gt;16) unset &lt;br /&gt;변수나 함수를 제거한다. &lt;br /&gt;&lt;br /&gt;예) #!/bin/sh &lt;br /&gt;foo="Hello world" &lt;br /&gt;echo $foo &lt;br /&gt;unset foo &lt;br /&gt;echo $foo &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. 쉘 문법 - 명령실행 &lt;br /&gt;1) 외부 명령의 실행 결과를 변수에 집어넣어 변수의 값으로 사용하려면 $(command) &lt;br /&gt;구문을 이용하면 된다. 또는 `command`의 형식도 유효하다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;변수=$(command) &lt;br /&gt;----------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;예) user=$(who) &lt;br /&gt;&lt;br /&gt;2) 산술 확장 &lt;br /&gt;쉘에 있어서 변수는 모두 문자열로 저장이 되기 때문에 연산을 할려면 다음과 같은 &lt;br /&gt;약간 복잡한 거쳐야 된다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;변수 = $((산술식)) &lt;br /&gt;---------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;산술식내에는 변수($1,$와 같은)도 들어갈 수 있으며 숫자가 아닌 문자열, 또는 &lt;br /&gt;문자열이 담겨있는 변수가 들어가면 그것들은 계산에서 제외된다. &lt;br /&gt;(0으로 간주되어 연산이 이루어지지 않는다) &lt;br /&gt;&lt;br /&gt;예) count=$(($count+1)) &lt;br /&gt;&lt;br /&gt;3) 매개변수 확장 &lt;br /&gt;매개변수 확장이란 변수의 값을 문자열 등으로 대체하는 것으로 단순만 대체뿐만 &lt;br /&gt;아니라 변수 내의 문자열을 조작하여 원하는 문자열만 추출할 수도 있다. &lt;br /&gt;&lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| 매개변수 확장    | 설명                                                   | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| ${param -default}| param이 존재하지 않으면 default로 대체                 | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| ${#param}        | param의 길이를 참조한다(가져온다)                      | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| ${param%word}    | 끝에서부터 word와 일치하는 parm의 최소부분(첫번째 일치)| &lt;br /&gt;|                  | 을 제거하고 나머지를 반환한다.                         | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| ${param%%word}   | 끝에서부터 word와 일치하는 parm의 최대부분(마지막 일치)| &lt;br /&gt;|                  | 을 제거하고 나머지를 반환한다.                         | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| ${param#word}    | 처음부터 word와 일치하는 parm의 최소부분(첫번째 일치)  | &lt;br /&gt;|                  | 을 제거하고 나머지를 반환한다.                         | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;| ${param##word}   | 처음부터 word와 일치하는 parm의 최대부분(마지막 일치)을| &lt;br /&gt;|                  | 제거하고 나머지를 반환한다.                            | &lt;br /&gt;+------------------+--------------------------------------------------------+ &lt;br /&gt;&lt;br /&gt;예) #!/bin/sh &lt;br /&gt;unset foo &lt;br /&gt;echo ${foo:-bar} &lt;br /&gt;foo=fud &lt;br /&gt;echo ${foo:-bar} &lt;br /&gt;foo=/usr/bin/X11/startx &lt;br /&gt;echo ${foo#*/} &lt;br /&gt;echo ${foo##*/} &lt;br /&gt;foo=/usr/local/etc/local/networks &lt;br /&gt;echo ${foo%local*} &lt;br /&gt;echo ${foo%%local*} &lt;br /&gt;&lt;br /&gt;exit 0 &lt;br /&gt;&lt;br /&gt;--&gt; 결과 : bar &lt;br /&gt;fud &lt;br /&gt;usr/bin/X11/startx &lt;br /&gt;startx &lt;br /&gt;/usr/local/etc &lt;br /&gt;/usr &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. 쉘 문법 - 쉘 스크립트 내부에서 입력 전달 (Here Documents) &lt;br /&gt;쉘 내부에서 명령어에 입력을 전달하는 방법으로 전달된 입력은 마치 키보드에서 입력 &lt;br /&gt;한 것과 같이 행동한다. &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------- &lt;br /&gt;명령 &lt;&lt; 종료문자열 &lt;br /&gt;입력값 &lt;br /&gt;종료문자열 &lt;br /&gt;------------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;예) #!/bin/sh &lt;br /&gt;cat &lt;&lt; !funy! &lt;br /&gt;Are funy? &lt;br /&gt;I'm a boy. &lt;br /&gt;!funy! &lt;br /&gt;&lt;br /&gt;다른 방법으로는 ed에디터와 조합으로 파일을 수정할 수 있다. &lt;br /&gt;예) #!/bin/sh &lt;br /&gt;ed text &lt;&lt; !funy! &lt;br /&gt;%s/boy/girl &lt;br /&gt;w &lt;br /&gt;q &lt;br /&gt;!funy! &lt;br /&gt;&lt;br /&gt;text파일의 내용 : I'm a boy ---&gt; 실행후 I'm a girl &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9. 쉘 문법 - 디버깅 &lt;br /&gt;쉘 스크립틀르 디버깅하는 것은 매우 쉽지만 도움이 될만한 특별한 도구가 없다. &lt;br /&gt;따라서 echo문을 사용하여 변수의 내용을 살펴보거나, 문제가 있는 부분을 수동으로 &lt;br /&gt;쉘에서 상호 대화식으로 입력하는 테스트를 할 수 있다. &lt;br /&gt;쉘의 명령행 옵션을 사용하거나 set명령을 사용하여 에러를 추적할 수 있다. &lt;br /&gt;+----------------+----------------+--------------------------------------------+ &lt;br /&gt;| 명령행 옵션    | set 옵션       | 설명                                       | &lt;br /&gt;+----------------+----------------+--------------------------------------------+ &lt;br /&gt;| sh -n script | set -o noexec  | 구문 에러만 체크한다.                      | &lt;br /&gt;|              | set -n         | 명령을 실행시키지 않는다                   | &lt;br /&gt;+----------------+----------------+--------------------------------------------+ &lt;br /&gt;| sh -v script | set -o verbose | 명령을 실행하기 전에 명령을 에코한다.      | &lt;br /&gt;|              | set -v         |                                            | &lt;br /&gt;+----------------+----------------+--------------------------------------------+ &lt;br /&gt;| sh -x script | set -o xtrace  | 명령행에서 명령을 처리한 다음 에코한다.    | &lt;br /&gt;|              | set -x         |                                            | &lt;br /&gt;|              | set -o nounset | 정의되지 않은 변수를 사용했을 때 에러를    | &lt;br /&gt;|              | set -u         | 출력한다.                                  | &lt;br /&gt;+--------------+----------------+--------------------------------------------+ &lt;br /&gt;(set의 옵션 플래그를 켤때는 -o를, 끌때는 +o를 사용한다.) &lt;br /&gt;&lt;br /&gt;쉘에서 아래와 비슷한 내용을 스크립트의 처음에 놓으면 어디에서 EXIT 시그널이 발생 &lt;br /&gt;해서 종료했는지 확인할 수 있다. &lt;br /&gt;------------------------------------------------------------------------------- &lt;br /&gt;trap 'echo Exiting: critical variable = $critical variable' EXIT &lt;br /&gt;------------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. 우리가 자주 쓰는 쉘 스크립트 (httpd) &lt;br /&gt;&lt;br /&gt;1 : #!/bin/sh &lt;br /&gt;2 : # &lt;br /&gt;3 : # Startup script for the Apache Web Server &lt;br /&gt;4 : # &lt;br /&gt;5 : # chkconfig: 345 85 15 &lt;br /&gt;6 : # description: Apache is a World Wide Web server. It is used to server  &lt;br /&gt;7 : # HTML file and CGI &lt;br /&gt;8 : # processname: httpd &lt;br /&gt;9 : # pidfile: /var/run/httpd.pid &lt;br /&gt;10 : # config: /etc/httpd/conf/httpd.conf &lt;br /&gt;11 : &lt;br /&gt;12 : # Source function library. &lt;br /&gt;13 : . /etc/rc.d/init.d/functions &lt;br /&gt;14 : &lt;br /&gt;15 : # See how we were called &lt;br /&gt;16 : case "$1" in &lt;br /&gt;17 : start) &lt;br /&gt;18 : echo -n "Starting httpd : " &lt;br /&gt;19 : daemon httpd &lt;br /&gt;20 : echo &lt;br /&gt;21 : touch /var/lock/subsys/httpd &lt;br /&gt;22 : ;; &lt;br /&gt;23 : stop) &lt;br /&gt;24 : echo -n "Shutting down http : " &lt;br /&gt;25 : killproc httpd &lt;br /&gt;26 : echo &lt;br /&gt;27 : rm -f /var/lock/subsys/httpd &lt;br /&gt;28 : rm -f /var/run/httpd.pid &lt;br /&gt;29 : ;; &lt;br /&gt;30 : status) &lt;br /&gt;31 : status httpd &lt;br /&gt;32 : ;; &lt;br /&gt;33 : restart) &lt;br /&gt;34 : $0 stop &lt;br /&gt;35 : $0 start &lt;br /&gt;36 : ;; &lt;br /&gt;37 : reload) &lt;br /&gt;38 : echo -n "Reloading httpd : " &lt;br /&gt;39 : killproc httpd -HUP &lt;br /&gt;40 : echo &lt;br /&gt;41 : ;; &lt;br /&gt;42 : *) &lt;br /&gt;43 : echo "Usage : $0 {start|stop|restart|reload|status}" &lt;br /&gt;44 : exit 1 &lt;br /&gt;45 : esac &lt;br /&gt;46 : &lt;br /&gt;47 : exit 0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3738212310049077449?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3738212310049077449/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3738212310049077449' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3738212310049077449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3738212310049077449'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/shellprogram.html' title='[리눅스] ShellProgram'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-3762411224012449961</id><published>2009-03-30T16:04:00.002-07:00</published><updated>2009-03-30T16:05:13.879-07:00</updated><title type='text'>[리눅스] VI 에디터 120% 사용</title><content type='html'>1. 한 파일의 일부분을 다른 파일로 복사하기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;"f4yy 현재라인부터 4라인을 'f'라는 이름의 버퍼에 복사한다. &lt;br /&gt;&lt;br /&gt;:w 편집중인 파일을 저장한다. &lt;br /&gt;&lt;br /&gt;:e newfile 새로운 파일을 로드한다. &lt;br /&gt;&lt;br /&gt;"fp 새로운 파일의 현재 라인위치에 'f'란는 이름으로 저장해 &lt;br /&gt;&lt;br /&gt;두었던 내용을 복사한다. &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. VI가 기억하는 두가지 파일명(%, #) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;vi에디터에서 파일 편집을 할때 사용하는 두가지 ex 명령이 있다. &lt;br /&gt;&lt;br /&gt;다음의 예를 보자.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:e file1 file2 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위의 명령을 실행하면 file1을 편집하고 있는 상태가 되게 된다. &lt;br /&gt;&lt;br /&gt;이 상태에서 :n 을 입력하면 file2를 편집하게 된다. 이때 다음을 입력해보자 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:e# &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 명령을 입력하면 VI는 다시 file1을 편집하게 되고 이때 다시 :e#를 &lt;br /&gt;&lt;br /&gt;입력하면 file2를 편집하게 된다. 만약 이때 또 다시 :e#를 입력하게 되면 &lt;br /&gt;&lt;br /&gt;file1을 편집하게 된다. 즉 #의 뜻은 '선택적인 다른 하나의 파일'을 &lt;br /&gt;&lt;br /&gt;뜻하게 된다는 것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;또한 %의 뜻을 알아보자. %는 현재의 파일명을 뜻할 수 있다. 다음을 입력해 &lt;br /&gt;&lt;br /&gt;보자. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:w %.new &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 명령을 현재 편집중인 파일을 그 파일에 .new를 더한 이름으로 파일을 &lt;br /&gt;&lt;br /&gt;다시 저장하게 된다. 즉 위의 명령을 입력할때 편집중이던 파일명이 filename &lt;br /&gt;&lt;br /&gt;이었다면 위의 명령으로 저장되는 파일은 filename.new 라는 파일이 된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 찾기 패턴과 글로벌 명령 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* 찾기 패턴 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;----------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;:/pattern/d pattern을 포함한 다음 라인을 삭제 &lt;br /&gt;&lt;br /&gt;:/pattern/+d pattern을 포함한 라인의 그 다음 라인을 삭제 &lt;br /&gt;&lt;br /&gt;(+d 대신 +1을 사용할 수도 있다.) &lt;br /&gt;&lt;br /&gt;:/pattern1/,/pattern2/d pattern1을 찾은 곳부터 pattern2가 있는 &lt;br /&gt;&lt;br /&gt;위치 까지를 삭제 &lt;br /&gt;&lt;br /&gt;:.,/pattern/m23 현재라인부터 pattern이 있는 곳까지를 &lt;br /&gt;&lt;br /&gt;23라인 다음으로 옮긴다. &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;위에서 주의할 점이 있다. 즉 VI명령과 EX명령에서 약간 다르게 &lt;br /&gt;&lt;br /&gt;작동되는 면이 있다는 것이다. 즉 &lt;br /&gt;&lt;br /&gt;d/while 과 :.,/while/d 가 틀리게 작동된다는 것이데 전자는 while이 있는곳 &lt;br /&gt;&lt;br /&gt;전 라인까지 삭제되고 후자는 while이 발생된 라인까지 삭제가 된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* 글로벌 명령 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;:g/pattern/ 파일에서 pattern이 찾아지는 마지막 위치로 이동 &lt;br /&gt;&lt;br /&gt;:g/pattern/p 파일에서 pattern을 찾아 화면에 print해준다. &lt;br /&gt;&lt;br /&gt;:g!/pattern/nu 파일에서 pattern이 없는 라인을 찾아 라인 번호를 &lt;br /&gt;&lt;br /&gt;print해 준다. 이것을 이용해 pattern이 나타나는 &lt;br /&gt;&lt;br /&gt;횟수를 카운팅 할 수 있다. &lt;br /&gt;&lt;br /&gt;:60,124g/pattern/p 60에서 124라인까지 pattern을 찾아 print해준다. &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;또한 글로벌 명령은 다음과 같이 대치 명령과 같이 쓰일수 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:g/^WARNING:/s/\&lt;not\&gt;/NOT/ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위의 명령은 라인의 처음에 WARNING: 으로 시작하는 라인을 찾아서 그 라인에 &lt;br /&gt;&lt;br /&gt;하나의 단어(양쪽에 공백으로 존재하거나 양쪽에 TAB이나 newline등이 있는)로 &lt;br /&gt;&lt;br /&gt;존재하는 not이 있을 경우에 이것을 NOT으로 교체 하라는 명령이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. 파일의 일부분만 저장 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;:230,$w newfile 230라인부터 끝까지 newfile로 저장 &lt;br /&gt;&lt;br /&gt;:.,600w newfile 현재라인부터 600라인까지 newfile로 저장 &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. 패턴명령을 통해 블럭을 옮기기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:g/SYNTAX/,/DESCRIPTION/-1 mo /PARAMETERS/-1 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위 명령은 SYNTAX가 처음 발견되는 위치부터 DESCRIPTION이 발견되는 위치의 &lt;br /&gt;&lt;br /&gt;바로 전라인까지를 PARAMETERS가 발견되는 바로 전라인으로 옮긴다는 뜻이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. 위치 지정해 놓기. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;mx 현재의 위치를 x라고 지정해 놓는다. &lt;br /&gt;&lt;br /&gt;'x x로 지정한 위치의 라인으로 현재의 위치를 옮긴다. &lt;br /&gt;&lt;br /&gt;`x x로 지정한 위치의 라인,열로 현재의 위치를 옮긴다. &lt;br /&gt;&lt;br /&gt;`` 위치를 옮긴 후에 바로 전에 지정한 위치나 context의 정확한 &lt;br /&gt;&lt;br /&gt;위치로 돌아감 &lt;br /&gt;&lt;br /&gt;'' 바로 전에 지정한 위치나 context 라인의 시작으로 돌아감. &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. 텍스트를 유닉스 명령으로 필터링 하기 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;편집중인 내용을 유닉스 명령으로 필터링 할 수 있다. 예를 들어 1라인부터 &lt;br /&gt;&lt;br /&gt;10라인까지를 유닉스 명령인 sort를 통해 sort할 수도 있고 특정 블럭을 &lt;br /&gt;&lt;br /&gt;특정사람에게 메일로 보낼 수도 있다. 다음과 같은 형식으로 사용된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;:1,99!sort 1라인부터 99라인까지를 유닉스의 sort명령에게 보내 &lt;br /&gt;&lt;br /&gt;글 결과 값으로 대치한다. &lt;br /&gt;&lt;br /&gt;!)command 전체라인을 command에게 보내 그 결과 값으로 대치한다. &lt;br /&gt;&lt;br /&gt;!!command 현재라인을 command에게 보내고 그 결과 값으로 대치한다. &lt;br /&gt;&lt;br /&gt;4!!command 현재라인부터 4라인을 command에게 보내 글 결과로 대치한다. &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. 단축키 사용 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;:ab abbr phrase abbr을 phrase에 대한 단축키로 사용 &lt;br /&gt;&lt;br /&gt;:unab abbr abbr에 대한 단축키 설정을 해제 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령으로 단축키 사용 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;:ab aW w! /tmp/fly.tmp.a &lt;br /&gt;&lt;br /&gt;:ab aR r /tmp/fly.tmp.a &lt;br /&gt;&lt;br /&gt;:ab bW w! /tmp/fly.temp.b &lt;br /&gt;&lt;br /&gt;:ab bR r /tmp/fly.temp.b &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위 처럼 설정을 해 놓은 다음에 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:.,+45 aW &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 명령을 내리면 &lt;br /&gt;&lt;br /&gt;현재라인부터 45라인까지를 /tmp/fly.tmp.a 파일로 저장하게 되는 것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9. 복사 삭제 및 라인모드, 문자 모드 명령 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;yy 1라인 버퍼에 저장 &lt;br /&gt;&lt;br /&gt;"fyy 1라인을 버퍼 f에 저장 &lt;br /&gt;&lt;br /&gt;dd 1라인 삭제(삭제된 내용은 버퍼에 저장됨) &lt;br /&gt;&lt;br /&gt;2dd 2라인 삭제(삭제된 내용은 버퍼에 저장) &lt;br /&gt;&lt;br /&gt;d$ 현 위치부터 그 라인의 끝까지 삭제 &lt;br /&gt;&lt;br /&gt;이때 $의 위치에는 문자 모드의 명령들이 모두 쓰일수 있음 &lt;br /&gt;&lt;br /&gt;예를 들어, d^, dfa, dG 등등 &lt;br /&gt;&lt;br /&gt;ddp 현재라인을 삭제하고 삭제되어 버퍼에 저장된 내용을 현재라이의 &lt;br /&gt;&lt;br /&gt;다음 라인에 복사(즉, 현재라인과 다음라인을 바꿈) &lt;br /&gt;&lt;br /&gt;D d$와 같은뜻 &lt;br /&gt;&lt;br /&gt;C c$와 같은뜻(현재위치부터 라인의 끝까지 수정) &lt;br /&gt;&lt;br /&gt;Y yy와 같은뜻 &lt;br /&gt;&lt;br /&gt;d'a 현재라인부터 a로 지정해 놓은 위치의 라인까지 삭제 &lt;br /&gt;&lt;br /&gt;d`a 현재라인부터 a로 지정해 놓은 위치의 라인,컬럼까지 삭제 &lt;br /&gt;&lt;br /&gt;c/pattern/ 현재라인부터 pattern이 나오는 위치까지의 모든 문자를 &lt;br /&gt;&lt;br /&gt;수정(라인모드가 아님) &lt;br /&gt;&lt;br /&gt;c?pattern? pattern을 포함 &lt;br /&gt;&lt;br /&gt;&lt;G 현재라인부터 편집중인 파일의 끝까지 indent삭제(dedent) &lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. 임시 영역이 꽉찰 경우 응급조치 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;임시영역이 넘쳐서 vi에디터가 제대로 작동하지 않는 경우가 있다. &lt;br /&gt;&lt;br /&gt;이때는 임시영역의 위치를 바꾸어 주면 정삭적으로 편집작업을 할 수 있다. &lt;br /&gt;&lt;br /&gt;set명령으로(쉘에서) directory변수의 위치를 바꾸어 이 일을 할 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ set directory=/usr/fly/vitemp &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;만약 위의 명령을 vi내에서 하길 원한다면 위의 명령을 vi에서 사용한 후에 &lt;br /&gt;&lt;br /&gt;:e command를 사용하면 편집중이 모든 파일의 임시디렉토리가 바뀌어질것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;또한 EXINIT환경변수의 값을 바꾸어 이 일을 할 수도 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;setenv EXINIT 'set directory=/usr/fly/vitemp' &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11. map을 이용해 타이핑을 줄이자. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;map명령은 명령 모드에서의 map명령과 입력 모드에서의 map명령의 두가지가 &lt;br /&gt;&lt;br /&gt;있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* 명령모드 map &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;명령 설명 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;map x sequence x를 sequence로 지정 &lt;br /&gt;&lt;br /&gt;unmap x x를 unmap &lt;br /&gt;&lt;br /&gt;map 현재 map된 문자들을 보여준다. &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;위의 map명령을 .exrc파일에 넣어 두면 차후에 편하게 쓸 수가 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위의 명령중에 x부분에 해당하는 키는 명령모드에서 사용되지 않는 것을 &lt;br /&gt;&lt;br /&gt;선택하여 정의 하여야 하며 이에 해당하는 것에는 다음과 같은 문자셋이 &lt;br /&gt;&lt;br /&gt;있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;문 자: q K q V v &lt;br /&gt;&lt;br /&gt;제어문자: ^A ^K ^O ^T ^W ^X &lt;br /&gt;&lt;br /&gt;기 호: _ * \ = &lt;br /&gt;&lt;br /&gt;(위에서 =는 VI가 lisp모드일 경우에 사용되므로 이때는 사용해서는 &lt;br /&gt;&lt;br /&gt;안된다.) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;기본적인 사용예는 다음과 같이 사용될 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;map v dwwP &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이와같이 정의해 두거나 ex모드(:상태)에서 위의 명령을 입력하면 &lt;br /&gt;&lt;br /&gt;'v'키를 입력함으로써 dwwP에 해당하는 명령이 실행된다. 즉 v키는 &lt;br /&gt;&lt;br /&gt;현재워드를 삭제(dw)하고 그 삭제된 워드를 현재 워드의 다음워드에 &lt;br /&gt;&lt;br /&gt;복사하게 된다.(즉 현재 워드와 다음워드의 자리바꿈) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;또한 한 문자의 정의 뿐만 아니라 두글자 이상으로 map을 정의 할 수도 &lt;br /&gt;&lt;br /&gt;있다. 다음의 예를 보자. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;map *s Ea'^[Bi'^[ &lt;br /&gt;&lt;br /&gt;map *d Ea"^[Bi"^[ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위의 명령은 *s키를 입력하여 Ea'^[Bi'^[에 해당하는 명령을 실행하게 된다. &lt;br /&gt;&lt;br /&gt;여기서 ^[가 의미하는 실제 여러분이 입력해야 할 키는 CTRL-V를 누른 다음 &lt;br /&gt;&lt;br /&gt;ESC키를 누른것을 의미한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;또한 위의 명령을 설명하자면 다음과 같다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ea'^[Bi'^[ ==&gt; 현재 단어의 앞 뒤로 '를 삽입하는 명령 &lt;br /&gt;&lt;br /&gt;Ea"^[Bi"^[ ==&gt; 현재 단어의 앞 뒤로 "를 삽입하는 명령 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;또한 Function키를 등록 할 수도 있다. 예를 들어 F1키를 한 단어 삭제로 &lt;br /&gt;&lt;br /&gt;사용할 수도 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;map #1 dw ==&gt; F1키를 한 단어를 삭제하는 키로 등록 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* 입력모드 map &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;입력 모드에서의 map은 명령모드의 맵이 map명령으로 이루어 지는데 반해 &lt;br /&gt;&lt;br /&gt;map!이 사용된다는 차이가 있다. &lt;br /&gt;&lt;br /&gt;입력 모드에서의 map은 다음과 같은 형식으로 사용될 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;:map! ^ ^[OCRAZYFLY:^[jA &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위의 명령은 입력 모드에서 ^(caret)를 입력하면 ESC를 누른 다음 현재라인의 &lt;br /&gt;&lt;br /&gt;윗쪽에 한 라인을 삽입(O)하고 그 위치에 CRAZYFLY:라고 입력한 후에 ESC를 &lt;br /&gt;&lt;br /&gt;누르고 그 다음 라인으로 옮기고(j) 그 행의 맨 뒤에 입력을 계속 한다라는 &lt;br /&gt;&lt;br /&gt;의미이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12. 입력모드에서 방향키를 사용하자. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DOS사용자를 위해 명령모드와 입력 모드의 전환을 편리하게 하기 위해 &lt;br /&gt;&lt;br /&gt;입력 모드에서 방향키(up, down, left, right)를 누르면 그에 해당하는 &lt;br /&gt;&lt;br /&gt;행동을 하게 해주는 것을 map명령을 통해 할 수 있다. &lt;br /&gt;&lt;br /&gt;물론 위의 키들이 다음의 코드를 나타낸 다는 것을 알아야 할 것이다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;키 코드 VI코드 &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;up ^[[A ^[ka &lt;br /&gt;&lt;br /&gt;down ^[[B ^[ja &lt;br /&gt;&lt;br /&gt;left ^[[D ^[hi &lt;br /&gt;&lt;br /&gt;right ^[[C ^[la &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이를 map명령으로 나타내면 각각 다음과 같다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------- &lt;br /&gt;&lt;br /&gt;map! ^[[A ^[ka &lt;br /&gt;&lt;br /&gt;map! ^[[B ^[ja &lt;br /&gt;&lt;br /&gt;map! ^[[D ^[hi &lt;br /&gt;&lt;br /&gt;map! ^[[C ^[la &lt;br /&gt;&lt;br /&gt;-------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-3762411224012449961?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/3762411224012449961/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=3762411224012449961' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3762411224012449961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/3762411224012449961'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/vi-120.html' title='[리눅스] VI 에디터 120% 사용'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-427804217821824074</id><published>2009-03-30T16:04:00.001-07:00</published><updated>2009-03-30T16:04:25.489-07:00</updated><title type='text'>SMIT AIX आदमीं-Education</title><content type='html'>UNIT 1. SMIT 사용 &lt;br /&gt;&lt;br /&gt;* ODM(Object Data Manager)은 tool이 사용하는 명령어에 대한 정보와 option들과 어떻게 작용하는 &lt;br /&gt;가에 대한 정보를 담고있다.즉 하나의 data base라고 할 수 있다. &lt;br /&gt;&lt;br /&gt;1.1 SMIT의 구성 &lt;br /&gt;&lt;br /&gt;▶ Menus &lt;br /&gt;▶ Selector/Dialog Screen &lt;br /&gt;▶ Pop-up lists &lt;br /&gt;▶ Output Panel &lt;br /&gt;▶ Contextual Help &lt;br /&gt;&lt;br /&gt;1.2 SMIT 의 시작과 종료 &lt;br /&gt;&lt;br /&gt;# smit &lt;br /&gt;AIXWindows환경에서는 Motif smit가, 아닌 경우 ASCII SMIT가 뜨게 된다. &lt;br /&gt;AIXWindows 화면에서 ASCII SMIT를 띄울 때 &lt;br /&gt;# smit -C 또는 # smitty &lt;br /&gt;또한 fastpath가 가능하다. &lt;br /&gt;예 ) # smit tcpip &lt;br /&gt;&lt;br /&gt;1.3 Dialog 화면에서의 기능 키 와 Special Symbol &lt;br /&gt;&lt;br /&gt;F1 (or ESC+1) : Help &lt;br /&gt;F2 (or ESC+2) : Refresh Special Symbol &lt;br /&gt;F3 (or ESC+3) : Cancel * : 필수항목 &lt;br /&gt;F4 (or ESC+4) : List # : numerical value required &lt;br /&gt;F5 (or ESC+5) : Reset / : pathname required &lt;br /&gt;F6 (or ESC+6) : Command + : pop-up List available &lt;br /&gt;F7 (or ESC+7) : Edit &lt;br /&gt;F8 (or ESC+8) : Image &lt;br /&gt;F9 (or ESC+9) : Shell &lt;br /&gt;F10 (or ESC+0) : Exit &lt;br /&gt;ENTER : 실행 &lt;br /&gt;/text : 찾기 &lt;br /&gt;n : 다음 문자열 찾기  &lt;br /&gt;&lt;br /&gt;1.4 smit.log 와 smit.script &lt;br /&gt;&lt;br /&gt;SMIT는 SMIT를 실행하는 user의 홈디렉토리에 두 개의 파일을 생성한다. &lt;br /&gt;smit.log는 방문했던 SMIT screen, AIX 명령 그리고 결과에 대한 기록을 가지고 &lt;br /&gt;smit.script는 SMIT에 의해서 실행된 AIX 명령을 포함한다. &lt;br /&gt;smit 이외에도 AIX는 다른 VENDOR의 PRODUCT도 SUPPORT할 수 있는 DSMIT, 그래픽 &lt;br /&gt;환경의 &lt;br /&gt;management tool인 VSM(Visual Grahphic Management)를 지원한다.  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;1.5 Menus &lt;br /&gt;&lt;br /&gt;System Management &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Software Installation and Maintenance &lt;br /&gt;Software License Management &lt;br /&gt;Devices &lt;br /&gt;System Storage Management (Physical &amp; Logical Storage) &lt;br /&gt;Security &amp; Users &lt;br /&gt;Communications Applications and Services &lt;br /&gt;Print Spooling &lt;br /&gt;Problem Determination &lt;br /&gt;Performance &amp; Resource Scheduling &lt;br /&gt;System Environments &lt;br /&gt;Processes &amp; Subsystems &lt;br /&gt;Remote Customer Support and Services &lt;br /&gt;Applications &lt;br /&gt;AIX System Backup &amp; Recovery/6000 &lt;br /&gt;Using SMIT (information only)  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;1.6 Selector/Dialog Screen &lt;br /&gt;&lt;br /&gt;Add a User &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[TOP] [Entry Fields] &lt;br /&gt;* User NAME [] &lt;br /&gt;User ID [] # &lt;br /&gt;ADMINISTRATIVE USER? False + &lt;br /&gt;Primary GROUP [] + &lt;br /&gt;Group SET [] + &lt;br /&gt;ADMINISTRATIVE GROUPS [] + &lt;br /&gt;ROLES [] + &lt;br /&gt;Another user can SU TO USER? true + &lt;br /&gt;SU GROUPS [ALL] + &lt;br /&gt;HOME directory [] &lt;br /&gt;Initial PROGRAM []&lt;br /&gt; &lt;br /&gt;1.7 Pop-up lists &lt;br /&gt;Primary GROUP &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;[TOP] &lt;br /&gt;system &lt;br /&gt;staff &lt;br /&gt;bin &lt;br /&gt;sys &lt;br /&gt;adm &lt;br /&gt;uucp &lt;br /&gt;mail &lt;br /&gt;security &lt;br /&gt;cron &lt;br /&gt;printq &lt;br /&gt;1.8 Output Panel &lt;br /&gt;COMMAND STATUS &lt;br /&gt;Command: OK stdout: no stderr: no &lt;br /&gt;Before command completion, additional instructions may appear below. &lt;br /&gt;1.9 Contextual Help &lt;br /&gt;CONTEXTUAL HELP &lt;br /&gt;Press Enter or Cancel to return to the application. &lt;br /&gt;Defines a unique decimal integer string to associate with this user &lt;br /&gt;account on the system. &lt;br /&gt;It is strongly recommended to let the system generate the user's ID &lt;br /&gt;to incorporate all the security restrictions and conventions that may &lt;br /&gt;apply to your system. To have the system generate the ID, leave this &lt;br /&gt;field blank. &lt;br /&gt;&lt;br /&gt;UNIT 2. System 시동과 정지  &lt;br /&gt;&lt;br /&gt;2.1 시동개요 &lt;br /&gt;&lt;br /&gt;시스템의 시동은 기계에 전원을 넣고, 하드웨어를 검사하고, 운용 시스템을 적재, 실행하고 기&lt;br /&gt;계의 장치를 구성하는 행위를 의미한다. 시스템을 시동하려면 다음 자원이 필요하다. &lt;br /&gt;▶ 기계에 전원이 들어오거나 재설정후 적재할수 있는 시동이미지(boot image) &lt;br /&gt;▶ /(root)와 /usr 파일 시스템의 접근  &lt;br /&gt;&lt;br /&gt;독립 워크스테이션의 시동 이미지는 국지 디스크(주로 하드디스크)에서 발견되며, AIX 운용시&lt;br /&gt;스템이 설치 될 때 생성된다. 시동 프로세서가 수행되는 동안, 시스템은 기계의 모든 장치를 &lt;br /&gt;구성하고 시스템 동작시 필요한 기본적 소프트웨어를 초기 설정한다.이 프로세스의 끝에서 &lt;br /&gt;AIX 파일트리가 사용 가능하며 사용되기 위해 준비되어 진다. 일반적으로 이러한 파일 시스템&lt;br /&gt;은 원격으로도 적재할 수 있는 사용자 생성의 다른 파일 시스템과 함께 국지 디스크에 존재한&lt;br /&gt;다.이와 같은 요청이 AIX 디스크없는 이용자에게도 똑같이 적용되며 이용자 또한 시동이미지&lt;br /&gt;를 요구하고 AIX파일 트리에 접근한다. 이들은 국지적 파일 시스템이 없기 때문에 독립 시스&lt;br /&gt;템과 구별되며, 모든 정보를 원격 접근 방법을 사용하여 얻는다. &lt;br /&gt;AIX는 시스템 시동의 3가지 타입을 갖는다. &lt;br /&gt;▶ 정상시동 : 독립기계가 정상운용으로 시작되는 프로세스 &lt;br /&gt;▶ 독립시동 : 특별한 업무를 위해 보수유지디스켓,OS 등으로 시작한 프로세스 &lt;br /&gt;▶ 네트워크 시동 : 디스크없는, 자료없는 워크스테이션이 네트웍을 통해 시작된 &lt;br /&gt;프로세스 &lt;br /&gt;RS/6000은 크게 Classical RISC System 6000과 PCI RISC System 6000으로 나눌수 있는데 &lt;br /&gt;이것은 Device Architecture인 MCA와 PCI의 차이이다. &lt;br /&gt;Classical RISC System 6000은 keylock을 가지고 있다. 그것은 Normal, Secure, Service인데 &lt;br /&gt;이 key position은 시스템을 시동할 때 영향을 준다. &lt;br /&gt;Normal : 시스템이 하드디스크 로부터 부팅한다. &lt;br /&gt;Secure : 시스템이 부팅하지 않는다. LED가 200을 가르킨다. &lt;br /&gt;Service: 시스템이 tape, CD-ROM, hard disk, diskette등 으로 부팅하려한다. &lt;br /&gt;PCI RISC System 6000은 keylock이 없고 부팅시 F1 또는 F5를 눌러서 service모드로 접근&lt;br /&gt;한다. 키-인(F1, F5)이 없으면 기본적으로는 Bootlist의 순서대로 기동한다. 즉, OS가 있는 하&lt;br /&gt;드를 먼저 읽고, 다음으로 tape ,CD-ROM, diskette으로 부팅하려한다.  &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;2.2 Classical RISC System/6000의 System Startup Process &lt;br /&gt;POWER ON ⇒ BIST ⇒ POST ⇒ Load kernel ⇒ configuration ⇒ init &lt;br /&gt;LED : 100-199 201-298 299 500-999 553 &lt;br /&gt;☞ BIST : Built-In Self Test - 하드웨어를 체크한다. &lt;br /&gt;POST : Power-On Self Test - boot program을 읽어서 메모리에 적재한다. &lt;br /&gt;ROS로부터 load되며 IPL(Initial Program Load)에 필요한 Device를 check한다. &lt;br /&gt;&lt;br /&gt;2.3 PCI RISC System/6000의 System Startup Process &lt;br /&gt;&lt;br /&gt;POWER ON&lt;br /&gt;▼&lt;br /&gt;POST&lt;br /&gt;▼&lt;br /&gt;Locate OS Bootstrap&lt;br /&gt;▼&lt;br /&gt;Find AIX Boot Image&lt;br /&gt;▼&lt;br /&gt;Load AIX Boot Image RAMDISK created&lt;br /&gt;▼&lt;br /&gt;CONFIGURERATION MANAGER PHASE 1&lt;br /&gt;▼ ▼&lt;br /&gt;INIT LOAD INST from media&lt;br /&gt;(Normal IPL) (Installation IPL)&lt;br /&gt;☞ RAMDISK : RAM 에 형성되어지는 Boot file system을 말한다.&lt;br /&gt;&lt;br /&gt;현재 System에 존재하는 Device를 결정하고 Configuration한다. &lt;br /&gt;ROS : CPU와 모든 Logic을 체크한 후에 시스템은 IPL에 필요한 Boot device와 Environment를 &lt;br /&gt;Starting 시키는데 그 Program이 저장되어 있는 곳이 ROS(Read Only Storage)이다. ROS는 OS에 &lt;br /&gt;독립적이다. &lt;br /&gt;PCI에서는 OCS(On-Chip Sequencer)가 없기 때문에 BIST가 필요없다.  &lt;br /&gt; &lt;br /&gt;2.4 Initial Processes 와 inittab 파일 &lt;br /&gt;&lt;br /&gt;2.4.1 System Initialization step &lt;br /&gt;&lt;br /&gt;Ⅰ. BIST &lt;br /&gt;Ⅱ. POST &lt;br /&gt;Ⅲ. Configuration Manager For Phase One  현재 시스템에 장착된 device를 &lt;br /&gt;configure &lt;br /&gt;Ⅳ. init() - /etc/inittab 파일을 참조하여 process를 시작 &lt;br /&gt;- /sbin/rc.boot : Auto Varyonvg, Config PhaseⅡ &lt;br /&gt;start errdaemon , mount / ,/usr, /var, /tmp &lt;br /&gt;- /etc/rc : filesystem check , mount all &lt;br /&gt;- /usr/sbin/srcmstr: &lt;br /&gt;- /etc/rc.tcpip: tcpip daemon start &lt;br /&gt;- /etc/rc.nfs : nfs daemon start &lt;br /&gt;- /usr/sbin/getty /dev/console &lt;br /&gt;- /usr/cron: cron daemon start &lt;br /&gt;- /usr/bin/startsrc -s qdaemon: print deemon &lt;br /&gt;- /usr/bin/startsrc -s writesrv : spool subsystem &lt;br /&gt;- /etc/rc.* file &lt;br /&gt;Ⅴ. getty() &lt;br /&gt;- /etc/passwd, group, environ, motd, utmp &lt;br /&gt;- /etc/security/login.cfg, passwd, group, limits, user, faildlogin &lt;br /&gt;- /etc/profile, /$HOME/.profile &lt;br /&gt;- /var/adm/wtmp  &lt;br /&gt;&lt;br /&gt;2.4.2 /etc/inittab 파일의 이해  &lt;br /&gt;&lt;br /&gt;/etc/inittab 파일은 init이 시작시킬 process를 list한다. 각각의 구성요소는  &lt;br /&gt;File Format : &lt;br /&gt;id:runlevel:action:command &lt;br /&gt;id : 14자 까지, 프로세서를 지정 &lt;br /&gt;runlevel : 20자 까지, 보통 2 (AIX Multiuser) &lt;br /&gt;action : 20자 까지, 어떻게 동작하는지 지정 &lt;br /&gt;respawn, wait, once, sysinit &lt;br /&gt;command : 프로세서를 실행할 AIX Command &lt;br /&gt;$ cat /etc/inittab &lt;br /&gt;: Note - initdefault and sysinit should be the first and second entry. &lt;br /&gt;: &lt;br /&gt;init:2:initdefault: &lt;br /&gt;brc::sysinit:/sbin/rc.boot 3 &gt;/dev/console 2&gt;&amp;1 # Phase 3 of system boot &lt;br /&gt;powerfail::powerfail:/etc/rc.powerfail 2&gt;&amp;1 | alog -tboot &gt; /dev/console # Powen &lt;br /&gt;mkatmpvc:2:once:/usr/sbin/mkatmpvc &gt;/dev/console 2&gt;&amp;1 &lt;br /&gt;atmsvcd:2:once:/usr/sbin/atmsvcd &gt;/dev/console 2&gt;&amp;1 &lt;br /&gt;rc:2:wait:/etc/rc 2&gt;&amp;1 | alog -tboot &gt; /dev/console # Multi-User checks &lt;br /&gt;fbcheck:2:wait:/usr/sbin/fbcheck 2&gt;&amp;1 | alog -tboot &gt; /dev/console # run /etc/ft &lt;br /&gt;srcmstr:2:respawn:/usr/sbin/srcmstr # System Resource Controller &lt;br /&gt;rctcpip:2:wait:/etc/rc.tcpip &gt; /dev/console 2&gt;&amp;1 # Start TCP/IP daemons &lt;br /&gt;rcnfs:2:wait:/etc/rc.nfs &gt; /dev/console 2&gt;&amp;1 # Start NFS Daemons &lt;br /&gt;rcx25:2:wait:/etc/rc.net.x25 &gt; /dev/console 2&gt;&amp;1 # Load X.25 translation table &lt;br /&gt;cron:2:respawn:/usr/sbin/cron &lt;br /&gt;qdaemon:2:wait:/usr/bin/startsrc -s qdaemon &lt;br /&gt;writesrv:2:wait:/usr/bin/startsrc -s writesrv &lt;br /&gt;uprintfd:2:respawn:/usr/sbin/uprintfd &lt;br /&gt;logsymp:2:once:/usr/lib/ras/logsymptom # for system dumps &lt;br /&gt;ptypa:2:respawn:/usr/sbin/getty /dev/ttypa #PCIforDOS &lt;br /&gt;:infod:2:once:startsrc -s infod &lt;br /&gt;tty1:2:off:/usr/sbin/getty /dev/tty1 &lt;br /&gt;orapw:2:wait:/etc/loadext /etc/pw-syscall4.1 &lt;br /&gt;strload:2:wait:/usr/sbin/strload &lt;br /&gt;lft:2:respawn:/usr/sbin/getty /dev/lft0 &lt;br /&gt;cons:0123456789:respawn:/usr/sbin/getty /dev/console &lt;br /&gt;netlsd:2:wait:sh /etc/rc.netls &gt;/dev/console 2&gt;&amp;1 # start netls &lt;br /&gt;2.4.3 System Resource Controller (SRC) &lt;br /&gt;SRC는 subsystem을 control하는데 있어 Operator 간섭을 최소화 한다 &lt;br /&gt;subsystem은 어떤 기능을 수행하기위한 unit으로 design된 프로그램이나 그 집합이다. &lt;br /&gt;명령 : startsrc , stopsrc, lssrc &lt;br /&gt;&lt;br /&gt;2.5 시스템의 정지 &lt;br /&gt;&lt;br /&gt;시스템의 전원을 끌때는 적절한 Operation을 통해서 OFF해야한다. 그렇지 않으면 System의 &lt;br /&gt;효율을 저해하거나 file system, Data에 손상이 가해져 장애를 초래할 수 있다. &lt;br /&gt;종료 절차 : $ shutdown［-option］［+time message］ &lt;br /&gt;option -F : fast &lt;br /&gt;-r : reboot &lt;br /&gt;-m : manintenance mode &lt;br /&gt; &lt;br /&gt;3.1 사용자 정보 &lt;br /&gt;&lt;br /&gt;* System을 사용하기 위한 user의 계정은 /etc/passwd 파일과 /etc/group에 해당사항이 등&lt;br /&gt;록되어 있어야 한다. &lt;br /&gt;# passwd file의 내용&lt;br /&gt;# cat /etc/passwd &lt;br /&gt;root:!:0:0::/:/bin/ksh &lt;br /&gt;kdw::0:0::/:/bin/ksh &lt;br /&gt;daemon:!:1:1::/etc: &lt;br /&gt;bin:!:2:2::/bin: &lt;br /&gt;sys:!:3:3::/usr/sys: &lt;br /&gt;adm:!:4:4::/var/adm: &lt;br /&gt;uucp:!:5:5::/usr/lib/uucp: &lt;br /&gt;guest:!:100:100::/home/guest: &lt;br /&gt;nobody:!:4294967294:4294967294::/: &lt;br /&gt;lpd:!:9:4294967294::/: &lt;br /&gt;nuucp:*:6:5:uucp login &lt;br /&gt;user:/var/spool/uucppublic:/usr/sbin/uucp/uucico &lt;br /&gt;netinst:*:200:1::/home/netinst:/usr/bin/ksh &lt;br /&gt;kkk:!:201:1::/home/kkk:/usr/bin/ksh &lt;br /&gt;ansi:!:204:1::/home/ansi:/usr/bin/ksh &lt;br /&gt;minsky:!:205:1::/home/minsky:/usr/bin/ksh &lt;br /&gt;webdb2:!:300:1::/dbspace/webdb2:/usr/bin/ksh &lt;br /&gt;lion1:!:206:1::/lion/lion1:/usr/bin/ksh &lt;br /&gt;kshan:!:210:1::/home/kshan:/usr/bin/ksh &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* 각 라인의 포맷은 colon으로 구별되며 다음을 의미한다. &lt;br /&gt;FORMAT : &lt;br /&gt;login-name:password:user-id:group-id:comment:home-dir:login-shell &lt;br /&gt;login-name : 사용자 등록명으로 일반적으로 8자까지의 소문자 &lt;br /&gt;password : 사용자 암호 &lt;br /&gt;user-id : 0-65534를 사용, 0-10은 시스템이 사용 &lt;br /&gt;group-id : 0-65534를 사용, 0-10은 시스템이 사용 &lt;br /&gt;comment : 사용자에 대한 설명 &lt;br /&gt;home-dir : 사용자의 login home directory &lt;br /&gt;login-shell: 사용자 login시 사용되는 shell  &lt;br /&gt; &lt;br /&gt;* group file의 내용 &lt;br /&gt;# cat /etc/group &lt;br /&gt;system:!:0:nuucp,root &lt;br /&gt;staff:!:1:ydkong,oracle,richardr,killer,jj,kshan,lion5,lion3,lion2,lion1,webdb2t &lt;br /&gt;bin:!:2:root,bin &lt;br /&gt;sys:!:3:root,bin,sys &lt;br /&gt;adm:!:4:bin,adm &lt;br /&gt;uucp:!:5:nuucp,uucp &lt;br /&gt;mail:!:6: &lt;br /&gt;security:!:7:root &lt;br /&gt;cron:!:8:root &lt;br /&gt;printq:!:9: &lt;br /&gt;audit:!:10:root &lt;br /&gt;ecs:!:28: &lt;br /&gt;nobody:!:4294967294:nobody,lpd &lt;br /&gt;usr:!:100:guest &lt;br /&gt;perf:!:20: &lt;br /&gt;webdb2:!:1003: &lt;br /&gt;dba:!:200:oracle &lt;br /&gt;kiss:!:202:lion1 &lt;br /&gt;killer:!:203:killer&lt;br /&gt;* 각 라인의 포맷은 colon으로 구별되며 다음을 의미한다. &lt;br /&gt;FORMAT : &lt;br /&gt;name:passwd:id:users &lt;br /&gt;name : group의 unigue한 이름 &lt;br /&gt;passwd : does not used &lt;br /&gt;id : group의 id &lt;br /&gt;users : group의 member를 comma로 구분한다. &lt;br /&gt;&lt;br /&gt;UNIT 3. System 사용자 관리 AIX Admin교육 &lt;br /&gt;&lt;br /&gt;3.1.1 참조파일의 이해 &lt;br /&gt;&lt;br /&gt;Read at Login&lt;br /&gt;/etc/passwd&lt;br /&gt; information on user's working environment&lt;br /&gt;&lt;br /&gt;/etc/security/passwd&lt;br /&gt; password and/or Restrict&lt;br /&gt;Read for file access&lt;br /&gt;/etc/group&lt;br /&gt; group IDs and Members&lt;br /&gt;&lt;br /&gt;/etc/security/group&lt;br /&gt; group IDs and restricts&lt;br /&gt;Process creation&lt;br /&gt;/etc/security/limits&lt;br /&gt; environmental limit for all user&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Read at login&lt;br /&gt;/etc/security/user&lt;br /&gt; user authorization&lt;br /&gt;&lt;br /&gt;/etc/security/login.cfg&lt;br /&gt; Port available  &lt;br /&gt;/Passwd Restricts&lt;br /&gt;&lt;br /&gt;3.1.2 User Initialization Process &lt;br /&gt;&lt;br /&gt;------+---------------------+---------------------+---------&gt; user &lt;br /&gt;| | | environment &lt;br /&gt;/etc/environment /etc/profile $HOME/.profile &lt;br /&gt;* /etc/profile : system-wide한 default값을 control하는 shell script &lt;br /&gt;* /etc/environment : 모든 process에 대한 기본적인 환경을 specify한다. &lt;br /&gt;* $HOME/.profile : user의 home directory에 있는 user자신의 profile  &lt;br /&gt;&lt;br /&gt;3.2 SMIT를 사용한 새로운 사용자 등록 &lt;br /&gt;&lt;br /&gt;# smit &lt;br /&gt;→ security &amp; users &lt;br /&gt;→ users &lt;br /&gt;→ add a user &lt;br /&gt;Add a User&lt;br /&gt;[TOP] [Entry Fields]&lt;br /&gt;* User NAME [user1]&lt;br /&gt;User ID [] #&lt;br /&gt;ADMINISTRATIVE USER? False +&lt;br /&gt;Primary GROUP [] +&lt;br /&gt;Group SET [] +&lt;br /&gt;ADMINISTRATIVE GROUPS [] +&lt;br /&gt;ROLES [] +&lt;br /&gt;Another user can SU TO USER? true +&lt;br /&gt;SU GROUPS [ALL] +&lt;br /&gt;HOME directory []&lt;br /&gt;Initial PROGRAM []&lt;br /&gt;User INFORMATION []&lt;br /&gt;EXPIRATION date (MMDDhhmmyy) [0]&lt;br /&gt;Is this user ACCOUNT LOCKED? false +&lt;br /&gt;User can LOGIN? true +&lt;br /&gt;User can LOGIN REMOTELY? true +&lt;br /&gt;Allowed LOGIN TIMES []&lt;br /&gt;Number of FAILED LOGINS before [1] #&lt;br /&gt;User account is locked&lt;br /&gt;Login AUTHENTICATION GRAMMAR [compat]&lt;br /&gt;Valid TTYs [ALL]&lt;br /&gt;Days to WARN USER before password expires [0] #&lt;br /&gt;Password CHECK METHODS []&lt;br /&gt;Password DICTIONARY FILES []&lt;br /&gt;NUMBER OF PASSWORDS before reuse [0] #&lt;br /&gt;[MORE...25]&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List&lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image&lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do&lt;br /&gt;&lt;br /&gt; 3.3 사용자의 Password 변경 &lt;br /&gt;&lt;br /&gt;#smit &lt;br /&gt;→ security &amp; users &lt;br /&gt;→ users &lt;br /&gt;→ Change a user's Password &lt;br /&gt;또는 # passwd user-name &lt;br /&gt;3.4 사용자의 특성 바꾸기 &lt;br /&gt;# smit → security &amp; users &lt;br /&gt;→ users &lt;br /&gt;→ Change/Show Characteristics of a user &lt;br /&gt;* User NAME [richard] +&lt;br /&gt;Change / Show Characteristics of a User &lt;br /&gt;[TOP] [Entry Fields] &lt;br /&gt;* User NAME user1 &lt;br /&gt;User ID [213] # &lt;br /&gt;ADMINISTRATIVE USER? false + &lt;br /&gt;Primary GROUP [staff] + &lt;br /&gt;Group SET [staff] + &lt;br /&gt;ADMINISTRATIVE GROUPS [] + &lt;br /&gt;ROLES [] + &lt;br /&gt;Another user can SU TO USER? true + &lt;br /&gt;SU GROUPS [ALL] + &lt;br /&gt;HOME directory [/home/user1] &lt;br /&gt;Initial PROGRAM [/usr/bin/ksh] &lt;br /&gt;User INFORMATION [] &lt;br /&gt;EXPIRATION date (MMDDhhmmyy) [0] &lt;br /&gt;Is this user ACCOUNT LOCKED? false + &lt;br /&gt;User can LOGIN? True + &lt;br /&gt;User can LOGIN REMOTELY? true + &lt;br /&gt;Allowed LOGIN TIMES [] &lt;br /&gt;Number of FAILED LOGINS before [1] # &lt;br /&gt;User account is locked &lt;br /&gt;Login AUTHENTICATION GRAMMAR [compat] &lt;br /&gt;Valid TTYs [ALL] &lt;br /&gt;Days to WARN USER before password expires [0] # &lt;br /&gt;Password CHECK METHODS [] &lt;br /&gt;Password DICTIONARY FILES [] &lt;br /&gt;NUMBER OF PASSWORDS before reuse [0] # &lt;br /&gt;[MORE...25]&lt;br /&gt;&lt;br /&gt;3.4 group 의 관리 &lt;br /&gt;&lt;br /&gt;3.4.1 SMIT를 이용한 group 추가 &lt;br /&gt;&lt;br /&gt;# smit &lt;br /&gt;→ security &amp; users &lt;br /&gt;→ groups &lt;br /&gt;Groups &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Groups &lt;br /&gt;Add a Group &lt;br /&gt;Change / Show Characteristics of a Group &lt;br /&gt;Remove a Group &lt;br /&gt;F1=Help F2=Refresh F3=CancelEsc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do&lt;br /&gt;Add a Group &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;* Group NAME [power] &lt;br /&gt;ADMINISTRATIVE group? false + &lt;br /&gt;Group ID [] # &lt;br /&gt;USER list [] + &lt;br /&gt;ADMINISTRATOR list [] + &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt; &lt;br /&gt;3.4.2 SMIT를 이용한 group의 속성변경 &lt;br /&gt;&lt;br /&gt;# smit &lt;br /&gt;→ security &amp; users &lt;br /&gt;→ groups &lt;br /&gt;→ Change / Show Characteristics of a Group &lt;br /&gt;Change Group Attributes &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;Group NAME [power] &lt;br /&gt;Group ID [203] # &lt;br /&gt;ADMINISTRATIVE group? false + &lt;br /&gt;USER list [killer] + &lt;br /&gt;ADMINISTRATOR list [root] + &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=EditEsc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do&lt;br /&gt;&lt;br /&gt;3.4.3 SMIT를 이용한 group의 삭제 &lt;br /&gt;&lt;br /&gt;# smit &lt;br /&gt;→ security &amp; users &lt;br /&gt;→ groups &lt;br /&gt;→ Remove a Group &lt;br /&gt;Remove a Group from the System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;Group NAME [power] +  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.5 현재 시스템 사용자 보기 &lt;br /&gt;&lt;br /&gt;* who - 현재 시스템 사용자를 보여준다. &lt;br /&gt;kdcsi1:/&gt; who &lt;br /&gt;minsky pts/0 Feb 02 11:23 (203.225.28.94) &lt;br /&gt;root pts/3 Feb 02 09:14 (203.225.28.173)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* finger - usr에 대한 정보를 화면에 보여준다. &lt;br /&gt;kdcsi1:/&gt; finger &lt;br /&gt;Login Name TTY Idle When Site Info &lt;br /&gt;Minsky ??? p0 1 Mon 11:23 &lt;br /&gt;Root ??? p3 Mon 09:14&lt;br /&gt;* &lt;br /&gt;w - 어느user가 login해서 무슨 작업을 하는지 보여준다. &lt;br /&gt;kdcsi1:/&gt; w &lt;br /&gt;11:25AM up 2 days, 36 mins, 2 users, load average: 0.01, 0.02, 0.03 &lt;br /&gt;User tty login@ idle JCPU PCPU what &lt;br /&gt;Minsky pts/0 11:23AM 2 0 0 -ksh &lt;br /&gt;Root pts/3 09:14AM 0 4 0 w&lt;br /&gt;&lt;br /&gt;3.6 ACL(Access Control Lists) &lt;br /&gt;&lt;br /&gt;▶ ACL은 standard permission bits를 확장하고자 할 경우 사용한다 &lt;br /&gt;즉, 어떤 file에 user나 group별로 특정 permission을 부여하고자 할 경우 사용한다. &lt;br /&gt;$ export EDITOR= /usr/bin/vi &lt;br /&gt;$ aclget sample-file1 &lt;br /&gt;attributes: &lt;br /&gt;base permissions &lt;br /&gt;owner(frank): rw- &lt;br /&gt;group(staff): r-- &lt;br /&gt;others: r-- &lt;br /&gt;extended permissions &lt;br /&gt;disabled &lt;br /&gt;▶ sample-file1의 파일허가 이해 &lt;br /&gt;- frank user : read, write only &lt;br /&gt;- staff group의 users : read only &lt;br /&gt;- other users: none &lt;br /&gt;$ acledit sample-file1 &lt;br /&gt;attributes: &lt;br /&gt;base permissions: &lt;br /&gt;owner(frank): rw- &lt;br /&gt;group(staff): r- &lt;br /&gt;others: r-- &lt;br /&gt;extended permissions: &lt;br /&gt;enabled &lt;br /&gt;permit rw- u:dhs &lt;br /&gt;permit rw- g:account &lt;br /&gt;deny r-- u:chas, g:system &lt;br /&gt;▶ acledit한 후의 sample-file1의 파일허가 이해 &lt;br /&gt;- frank user : read, write만 가능 &lt;br /&gt;- staff group의 users : read only &lt;br /&gt;- other users: read only &lt;br /&gt;- dhs user: read, write 가능 &lt;br /&gt;- account group의 users : read, write 가능 &lt;br /&gt;- system group내에 있는 chas user만 : read deny &lt;br /&gt; 3.7 crontab &lt;br /&gt;▶ 시스템에서 주기적으로 특정한 process를 실행시키기 위하여 crontab에 등록한다. &lt;br /&gt;▶ 관련 파일은 /var/spool/cron/crontabs/*에 존재한다. &lt;br /&gt;&lt;br /&gt;3.7.1 cron process 확인 &lt;br /&gt;&lt;br /&gt;# ps -ef |grep cron &lt;br /&gt;root 2598 1 0 08:55:31 - 0:00 /usr/sbin/cron &lt;br /&gt;◆ 만약 cron process가 존재하지 않으면 /etc/inittab file에 등록한다. &lt;br /&gt;# vi /etc/inittab &lt;br /&gt;cron:2:respawn:/usr/sbin/cron# 이 부분을 edit한다. &lt;br /&gt;# telinit q &lt;br /&gt;3.7.2 crontab의 내용 보기 &lt;br /&gt;# crontab -l &lt;br /&gt;. &lt;br /&gt;0 11 * * * /usr/bin/errclear -d S,O 30 &lt;br /&gt;0 12 * * * /usr/bin/errclear -d H 90 &lt;br /&gt;3.7.2 crontab에 프로세스 등록하기  &lt;br /&gt;&lt;br /&gt;◆ 매월 매주 월요일 02:00 (a.m)에 실행되는 'date'명령을 crontab에 등록하기. &lt;br /&gt;# crontab -e &lt;br /&gt;. &lt;br /&gt;0 2 * * 1 /usr/bin/date# 이 부분 추가  &lt;br /&gt;&lt;br /&gt;3.7.3 crontable의 필드 구분 &lt;br /&gt;&lt;br /&gt;minute hour day_of_month month weekday command &lt;br /&gt;weekday : 0 (Sun) , 1 (Mon) , , , 6 (Sat) &lt;br /&gt;command : full path name으로 명령어를 등록한다.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UNIT4. Device &lt;br /&gt;&lt;br /&gt;4.1 장치 개요 &lt;br /&gt;&lt;br /&gt;4.1.1 Device Terminology (용어) &lt;br /&gt;&lt;br /&gt;* Physical device : Hardware를 의미한다. &lt;br /&gt;* Ports : Physical device가 붙는 Physical한 connector나 adapter. &lt;br /&gt;* Device Driver : device로 보내질 data의 format과 port에서의 activity를 control하는 &lt;br /&gt;kernel에 있는 소프트웨어. &lt;br /&gt;* Logical Device : physical device를 user와 application이 access하게하는 Software &lt;br /&gt;interface(special files). Logical device에 추가된 data는 적당한 device driver로 보내지져 &lt;br /&gt;읽히게 된다. &lt;br /&gt;* /dev directory : user에 의해 직접 access될 수 있는 Logical Device를 포함하는 directory. &lt;br /&gt;* /dev directory를 list하기위한 명령 &lt;br /&gt;# ls -l /dev &lt;br /&gt;&lt;br /&gt;4.1.2 장치 구성 데이터 베이스 &lt;br /&gt;&lt;br /&gt;▲ 시스템에서 제공하는 모든 장치에 대한 구성 자료를 포함 &lt;br /&gt;▲ 이미 정의된 데이터 베이스와 현재 변경된 모든 장치의 구성 자료에 대한 조정 된 데이터베이스로 &lt;br /&gt;구성 &lt;br /&gt;▲ 계층적 부류로 구성  &lt;br /&gt;&lt;br /&gt;4.1.3 Device States (상태) &lt;br /&gt;&lt;br /&gt;▲ Undefined : 시스템에 알려지지 않은 상태 &lt;br /&gt;▲ Defined : 장치의 특성, 정보를 시스템이 가지고 있으나 운용이 불가능한 상태 &lt;br /&gt;▲ Available : 장치가 사용가능한 상태  &lt;br /&gt;&lt;br /&gt;4.1.4 장치관리 명령 &lt;br /&gt;&lt;br /&gt;# mkdev : 시스템에 새로운 장치를 정의하거나 구성을 한다. &lt;br /&gt;# rmdev : 장치의 구성 해제 (Available --&gt; Defined, Undefined) &lt;br /&gt;# lsdev : 조정된 데이터베이스의 장치를 일람 &lt;br /&gt;# lsattr : 한 장치의 모든 속성이나 지정된 특정 속성에 대한 현재 또는 생략시 속성값 일람 &lt;br /&gt;# chdev : Available 또는 Defined 상태의 device 속성변경 &lt;br /&gt;# cfgmgr : 시스템이 작동한후 추가된 장치에 대한 self configuration &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.2 Device Addressing (장치 주소) &lt;br /&gt;&lt;br /&gt;* Device Addressing을 표현하기 위하여 Location code가 쓰인다. &lt;br /&gt;* Location code는 CPU drawer또는 system unit에 있는 adapter로부터 케이블을 통 하여 &lt;br /&gt;device에 이르는 경로이다. &lt;br /&gt;&lt;br /&gt;4.2.1 Location code format For Non-SCSI Device &lt;br /&gt;&lt;br /&gt;AA-BB-CC-DD &lt;br /&gt;AA : I/O Bus와 CPU drawer속의 bus위 Slot number &lt;br /&gt;BB : I/O Bus identifier(0:MCA,PCI 1:ISA)와 Device의 slot number &lt;br /&gt;CC : adapter위의 Connerctor (OP,OS,S1,S2,0D,0K,0M,0T...) &lt;br /&gt;DD : Async port number 또는 FRU location &lt;br /&gt;&lt;br /&gt;4.2.2 Location code format For SCSI Device &lt;br /&gt;&lt;br /&gt;AA-BB-CC-S,L &lt;br /&gt;AA : 보통 00 &lt;br /&gt;BB : I/O bus 와 bus위의 adapter card slot &lt;br /&gt;CC : 00 - single SCSI bus를 제공하는 card나 dual SCSI를 위한 &lt;br /&gt;internal bus에 연결된 device &lt;br /&gt;01 - dual SCSI 위의 external bus에 연결된 device &lt;br /&gt;0S - integrated된 SCSI controller의 External bus connector &lt;br /&gt;S : device의 SCSI address &lt;br /&gt;L : device의 Logical unit number &lt;br /&gt;&lt;br /&gt;4.2.3 Location code format For RCI RISC System 6000 &lt;br /&gt;&lt;br /&gt;AA-BB-CC-DD &lt;br /&gt;AA : 항상 00 &lt;br /&gt;BB : 첫 번째 B : 0=pci, 1=isa, 2=pcmcia &lt;br /&gt;두 번째 B : slot , 단 ISA adapter는 x &lt;br /&gt;CC : connector designation 또는 00 &lt;br /&gt;DD : port number 또는 address &lt;br /&gt;&lt;br /&gt;4.3 Self-Configuration manager &lt;br /&gt;&lt;br /&gt;* Configuration manager (cfgmgr)는 시스템 작동 중이나 booting시에 자동으로 찾아낼 수 있는 &lt;br /&gt;device를 configure한다. &lt;br /&gt;* Self-configurable device는 ROM chip에 unique한 identifying code를 저장한다. &lt;br /&gt;* 외장형 Device의 경우 cfgmgr이 실행되기 전에 power on되어 있어야 한다. &lt;br /&gt;ASCⅡ terminal, printer 등은 cfgmgr에 의해 자동으로 configure되지 않는다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.4 입출력의 이해 &lt;br /&gt;&lt;br /&gt;명령은 보통 키보드(표준입력)에서 읽어, 그 명령을 처리하고, 그 결과를 화면(표준출력)에 보&lt;br /&gt;여준다. 그러나 종종 파일에서 입력을 읽고, 파일에 그 출력을 쓰고, 그 오류를 파일에 쓰는 &lt;br /&gt;명령을 쓸 때 한 명령 또는 모든 명령을 다른 명령의 입력으로 하고자 한다. 이 모든 동작은 &lt;br /&gt;재지정과 파이프라인을 사용하여 수행한다.  &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;5. 주변장치 관리 &lt;br /&gt;&lt;br /&gt;5.1 Serial Device 케이블 결선도 &lt;br /&gt;&lt;br /&gt;◎ DTE (Data Terminal Equipment) : 터미널 , 프린터 &lt;br /&gt;RXD &lt;-------------&gt; TXD &lt;br /&gt;TXD &lt;-------------&gt; RXD &lt;br /&gt;GND &lt;-------------&gt; GND&lt;br /&gt;&lt;br /&gt;◎ DTE (Data Terminal Equipment) : 모뎀 &lt;br /&gt;RXD &lt;-------------&gt; TXD &lt;br /&gt;TXD &lt;-------------&gt; RXD &lt;br /&gt;GND &lt;-------------&gt; GND&lt;br /&gt;&lt;br /&gt;◎ 일반적인 RS-232C 케이블 구성도 &lt;br /&gt;NO of Pin&lt;br /&gt;TXD&lt;br /&gt;RXD&lt;br /&gt;GND&lt;br /&gt;25&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;7&lt;br /&gt;9&lt;br /&gt;3&lt;br /&gt;2&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;3&lt;br /&gt;5&lt;br /&gt;4&lt;br /&gt;6&lt;br /&gt;1&lt;br /&gt;3&lt;br /&gt;5&lt;br /&gt;&lt;br /&gt;5.2 터미널 관리 &lt;br /&gt;&lt;br /&gt;터미널 Emulator를 사용하여 pc를 terminal로 사용할 경우와 Dummy terminal (ex: &lt;br /&gt;IBM3151,IBM3161,....)을 사용할 경우 케이블을 DTE로 연결한다. &lt;br /&gt;가상 터미널&lt;br /&gt;Vt100&lt;br /&gt;&lt;br /&gt;Vt220&lt;br /&gt;의사 터미널&lt;br /&gt;PTY&lt;br /&gt;&lt;br /&gt;PTS&lt;br /&gt;&lt;br /&gt;PTC&lt;br /&gt;더미 터미널&lt;br /&gt;Dumb&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;5.2.1 TERMINAL추가 &lt;br /&gt;&lt;br /&gt;# smitty -&gt; device -&gt; TTY &lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Defined TTYs &lt;br /&gt;Add a TTY &lt;br /&gt;Move a TTY to Another Port &lt;br /&gt;Change / Show Characteristics of a TTY &lt;br /&gt;Remove a TTY &lt;br /&gt;Configure a Defined TTY &lt;br /&gt;Generate Error Report &lt;br /&gt;Trace a TTY&lt;br /&gt;&lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Defined TTYs &lt;br /&gt;Add a TTY &lt;br /&gt;Move a TTY to Another Port &lt;br /&gt;Change / Show Characteristics of a TTY &lt;br /&gt;Remove a TTY &lt;br /&gt;Configure a Defined TTY &lt;br /&gt;Generate Error Report &lt;br /&gt;Trace a TTY &lt;br /&gt;TTY Type &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;tty rs232 Asynchronous Terminal &lt;br /&gt;tty rs422 Asynchronous Terminal &lt;br /&gt; &lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Defined TTYs &lt;br /&gt;Add a TTY &lt;br /&gt;Move a TTY to Another Port &lt;br /&gt;Change / Show Characteristics of a TTY &lt;br /&gt;Remove a TTY &lt;br /&gt;Configure a Defined TTY &lt;br /&gt;Generate Error Report &lt;br /&gt;Trace a TTY &lt;br /&gt;Parent Adapter &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;sa0 Available 00-00-S1 Standard I/O Serial Port 1 &lt;br /&gt;sa1 Available 00-00-S2 Standard I/O Serial Port 2 &lt;br /&gt;F1=Help F2=Refresh F3=Cancel &lt;br /&gt;Esc+8=Image Esc+0=Exit Enter=Do &lt;br /&gt;/=Find n=Find Next &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Add a TTY &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[TOP] [Entry Fields] &lt;br /&gt;TTY type tty &lt;br /&gt;TTY interface rs232 &lt;br /&gt;Description Asynchronous Terminal &lt;br /&gt;Parent adapter sa0 &lt;br /&gt;* PORT number [] + &lt;br /&gt;Enable LOGIN disable + &lt;br /&gt;BAUD rate [9600] + &lt;br /&gt;PARITY [none] + &lt;br /&gt;BITS per character [8] + &lt;br /&gt;Number of STOP BITS [1] + &lt;br /&gt;TIME before advancing to next port setting [0] +# &lt;br /&gt;TERMINAL type [dumb] &lt;br /&gt;FLOW CONTROL to be used [xon] + &lt;br /&gt;[MORE...29] &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;5.2.2 TERMINAL삭제 &lt;br /&gt;&lt;br /&gt;# smitty -&gt; device -&gt; TTY -&gt; Remove a TTY &lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Defined TTYs &lt;br /&gt;Add a TTY &lt;br /&gt;Move a TTY to Another Port &lt;br /&gt;Change / Show Characteristics of a TTY &lt;br /&gt;Remove a TTY &lt;br /&gt;Configure a Defined TTY &lt;br /&gt;Generate Error Report &lt;br /&gt;Trace a TTY &lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;tty0 Available 00-00-S1-00 Asynchronous Terminal &lt;br /&gt;tty1 Available 00-00-S2-00 Asynchronous Terminal &lt;br /&gt;F1=Help F2=Refresh F3=Cancel &lt;br /&gt;Esc+8=Image Esc+0=Exit Enter=Do &lt;br /&gt;/=Find n=Find Next &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5.2.3 TERMINAL활성화(available) &lt;br /&gt;&lt;br /&gt;# smitty -&gt; device -&gt; TTY -&gt; Configure a Defined TTY &lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Defined TTYs &lt;br /&gt;Add a TTY &lt;br /&gt;Move a TTY to Another Port &lt;br /&gt;Change / Show Characteristics of a TTY &lt;br /&gt;Remove a TTY &lt;br /&gt;Configure a Defined TTY &lt;br /&gt;Generate Error Report &lt;br /&gt;Trace a TTY &lt;br /&gt;TTY &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Tty0 Available 00-00-S1-00 Asynchronous Terminal &lt;br /&gt;tty1 Available 00-00-S2-00 Asynchronous Terminal &lt;br /&gt;F1=Help F2=Refresh F3=Cancel &lt;br /&gt;Esc+8=Image Esc+0=Exit Enter=Do &lt;br /&gt;/=Find n=Find Next &lt;br /&gt;&lt;br /&gt;5.3.1 프린터추가 &lt;br /&gt;&lt;br /&gt;# smit -&gt; Device -&gt; Printer/Plotter -&gt; Print /Plotter device -&gt; Add a Printer/Plotter &lt;br /&gt;&lt;br /&gt;Printer/Plotter Devices &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Defined Printers/Plotters &lt;br /&gt;List All Supported Printers/Plotters &lt;br /&gt;Add a Printer/Plotter &lt;br /&gt;Move a Printer/Plotter to Another Port &lt;br /&gt;Change / Show Characteristics of a Printer/Plotter &lt;br /&gt;Remove a Printer/Plotter &lt;br /&gt;Configure a Defined Printer/Plotter &lt;br /&gt;Install Additional Printer/Plotter Software &lt;br /&gt;Generate Error Report &lt;br /&gt;Trace a Printer/Plotter&lt;br /&gt;&lt;br /&gt;Printer/Plotter Devices&lt;br /&gt;Printer/Plotter Type&lt;br /&gt;Move cursor to desired item and press Enter.&lt;br /&gt;hplj-4si Hewlett-Packard LaserJet 4Si&lt;br /&gt;hplj-4v Hewlett-Packard LaserJet 4V&lt;br /&gt;hplj-5si Hewlett-Packard LaserJet 5Si/5Si MX&lt;br /&gt;hplj-5si Mopier Hewlett-Packard LaserJet 5Si Mopier&lt;br /&gt;hplj-5si Mopier Hewlett-Packard LaserJet 5Si Mopier&lt;br /&gt;hplj-c Hewlett-Packard LaserJet Color&lt;br /&gt;opp Other parallel printer&lt;br /&gt;osp Other serial printer&lt;br /&gt;&lt;br /&gt;Printer/Plotter Devices &lt;br /&gt;Printer/Plotter Interface &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Parallel &lt;br /&gt;rs232 &lt;br /&gt;rs422 &lt;br /&gt;F1=Help F2=Refresh F3=Cancel &lt;br /&gt;Esc+8=Image Esc+0=Exit Enter=Do &lt;br /&gt;/=Find n=Find Next &lt;br /&gt;&lt;br /&gt;Printer/Plotter Devices  &lt;br /&gt;&lt;br /&gt;Parent Adapter &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Ppa0 Available 00-00-0P Standard I/O Parallel Port Adapter &lt;br /&gt;F1=Help F2=Refresh F3=Cancel &lt;br /&gt;Esc+8=Image Esc+0=Exit Enter=Do &lt;br /&gt;/=Find n=Find Next  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UNIT 5. 주변장치 관리 AIX Admin교육 &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;----  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Add a Printer/Plotter &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[TOP] [Entry Fields] &lt;br /&gt;Printer/Plotter type hplj-2 &lt;br /&gt;Printer/Plotter interface parallel &lt;br /&gt;Description Hewlett-Packard LaserJ&gt; &lt;br /&gt;Parent adapter ppa0 &lt;br /&gt;* PORT number [p0] + &lt;br /&gt;Type of PARALLEL INTERFACE [standard] + &lt;br /&gt;Microseconds to delay between characters [0] +# &lt;br /&gt;Printer TIME OUT period [600] +# &lt;br /&gt;STATUS of device at BOOT time available + &lt;br /&gt;Ignore the following attributes when using &lt;br /&gt;the Print Queue: &lt;br /&gt;[MORE...13] &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;5.3.2 Printer Queue 추가 &lt;br /&gt;&lt;br /&gt;# smit -&gt; device -&gt; Printer/Plotter -&gt; Print Spooling -&gt; Add a print queue &lt;br /&gt;이후 여러개의 pop-up List가 뜨게 된다. &lt;br /&gt;△ Printer Type &lt;br /&gt;△ Printer Interface &lt;br /&gt;△ Parents adapter 등 &lt;br /&gt;Print Spooling &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Start a Print Job &lt;br /&gt;Manage Print Jobs &lt;br /&gt;List All Print Queues &lt;br /&gt;Manage Print Queues &lt;br /&gt;Add a Print Queue &lt;br /&gt;Add an Additional Printer to an Existing Print Queue &lt;br /&gt;Change / Show Print Queue Characteristics &lt;br /&gt;Change / Show Printer Connection Characteristics &lt;br /&gt;Remove a Print Queue &lt;br /&gt;Manage Print Server &lt;br /&gt;Programming Tools&lt;br /&gt;&lt;br /&gt;Add a Print Queue &lt;br /&gt;[Entry Fields] &lt;br /&gt;Description LASERJET2 Printer &lt;br /&gt;Printer connection characteristics &lt;br /&gt;* PORT number [p] + &lt;br /&gt;Type of PARALLEL INTERFACE [standard] + &lt;br /&gt;Printer TIME OUT period (seconds) [60] +# &lt;br /&gt;STATE to be configured at boot time available + &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                      Unit 6. Paging Space &lt;br /&gt;&lt;br /&gt;6.1 개요 &lt;br /&gt;&lt;br /&gt;paging space는 가상 기억 장치기법을 이용한다. 즉 process가 memory내에 존재하지 않아&lt;br /&gt;도 수행이 가능한 기법이다. disk의 특정영역을 paging spase란 가상기억장치로 두고, 사용자 &lt;br /&gt;논리 메모리를 실재 메모리와 분리 시킴으로서 메모리의 한계를 극복하는 기법이다. &lt;br /&gt;따라서 paging space는 Hard Disk에 존재하는 현재 접근하지 않는 정보에 대한 고정 디스크&lt;br /&gt;영역이다. 시스템에서 사용 가능한 실재 memory영역이 적으면, 다른 작업에 사용할 실재 &lt;br /&gt;memory영역을 해제 하기위하여 최근에 사용되지 않았던 프로그램이나 자료를 paging space&lt;br /&gt;로 이동시킨다. &lt;br /&gt;paging space는 교체공간이라고도 불리우는데 속성유형이 paging인 logical volume이다. &lt;br /&gt;논리적 볼륨의 이름은 hd6, hd61, paging00, paging01 등의 이름으로 생성된다. &lt;br /&gt;&lt;br /&gt;# lsps -a : 이 명령은 시스템내의 모든 paging space를 보여준다.  &lt;br /&gt;&lt;br /&gt;6.1.1 paging space allocation policy의 이해 &lt;br /&gt;paging space의 요구량은 시스템에서 수행되는 작업의 종류에 의존한다. paging space의 양&lt;br /&gt;이 너무 적으면 process가 중단될 수 있고, paging space의 양이 너무 많으면 시스템의 효율&lt;br /&gt;이 떨어진다. paging space가 적은 상태가 감지되면, 추가적인 paging space가 필요하다.  &lt;br /&gt;&lt;br /&gt;6.1.2 paging space 관리  &lt;br /&gt;&lt;br /&gt;* paging space관리를 위한 명령어  &lt;br /&gt;&lt;br /&gt;chps&lt;br /&gt;Paging space 의 속성을 변경한다.&lt;br /&gt;Lsps&lt;br /&gt;Paging space의 특성을 출력한다.&lt;br /&gt;Mkps&lt;br /&gt;Paging space을 추가한다.&lt;br /&gt;rmps&lt;br /&gt;사용하지 않는 paging space를 제거한다.&lt;br /&gt;swapon&lt;br /&gt;Paging space를 활성화 한다.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;6.2 Paging space의 추가  &lt;br /&gt;&lt;br /&gt;# smit -&gt; system storage management -&gt; Logical Volume Manager -&gt; paging space &lt;br /&gt;-&gt; Add Another Paging Space &lt;br /&gt;# smit ps -&gt; Add Another Paging Space &lt;br /&gt;&lt;br /&gt;Add Another Paging Space &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;Volume group name rootvg &lt;br /&gt;SIZE of paging space (in logical partitions) [] # &lt;br /&gt;PHYSICAL VOLUME name + &lt;br /&gt;Start using this paging space NOW? no + &lt;br /&gt;Use this paging space each time the system is no + &lt;br /&gt;RESTARTED?  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;6.3 Paging space의 변경  &lt;br /&gt;&lt;br /&gt;# smit -&gt; system storage management -&gt; Logical Volume Manager -&gt; paging space &lt;br /&gt;-&gt; Change / Show Characteristics of a Paging Space &lt;br /&gt;# smit ps -&gt; Change / Show Characteristics of a Paging Space &lt;br /&gt;&lt;br /&gt;Change / Show Characteristics of a Paging Space &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;Paging space name hd6 &lt;br /&gt;Volume group name rootvg &lt;br /&gt;Physical volume name hdisk0 &lt;br /&gt;NUMBER of additional logical partitions [] # &lt;br /&gt;Use this paging space each time the system is yes + &lt;br /&gt;RESTARTED? &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;6.4 Paging space의 삭제  &lt;br /&gt;&lt;br /&gt;# smit -&gt; system storage management -&gt; Logical Volume Manager -&gt; paging space &lt;br /&gt;-&gt; Remove a Paging Space &lt;br /&gt;# smit ps -&gt; Remove a Paging Space &lt;br /&gt;&lt;br /&gt;Remove a Paging Space &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;PAGING SPACE name +  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unit 7 File System &lt;br /&gt;&lt;br /&gt;7.1 개요 &lt;br /&gt;&lt;br /&gt;AIX 파일 시스템은 file과 directory의 계층적 구조 (파일트리)이다. &lt;br /&gt;파일트리는 directory를 사용하여 자료와 프로그램을 그룹으로 구성하고 한 번에 여러 directory와 file&lt;br /&gt;을 관리하도록 한다. &lt;br /&gt;다음은 File System에 대한 기본적인 내용이다. &lt;br /&gt;♣ 저널 파일 체계 (Journal File System) &lt;br /&gt;· 데이터 베이스 저널 기술을 사용하여 구조적 일관성을 유지 &lt;br /&gt;· 시스템이 갑자기 중지되었을 때 파일 시스템의 손상예방 &lt;br /&gt;· 단일 논리적 볼륨 &lt;br /&gt;· 민감한 data의 제어 용이 &lt;br /&gt;· 특정 파일 시스템의 성능향상 기대 &lt;br /&gt;· 파일 시스템별 backup &amp; restore 용이 &lt;br /&gt;· 보안 &lt;br /&gt;· 파일 시스템 생성용이  &lt;br /&gt;&lt;br /&gt;♣ 모든 파일과 directory는 논리적 볼륨안의 파일 시스템에 속한다. &lt;br /&gt;파일 시스템에 access하기 위해서는 Mounting point에 Mount(적재)되어 있어야 한다. &lt;br /&gt;♣ 여러 파일 시스템이 mount되어 있을 때 하나의 파일 시스템 모양을 갖는 directory구조가 생성된&lt;br /&gt;다. 하나의 루트와 함께 계층구조가 있는데, 이 구조는 AIX 파일 시스템 및 사용자가 생성한 모든 &lt;br /&gt;파일 시스템을 포함한다. &lt;br /&gt;♣ 저널 파일 시스템의 요소 &lt;br /&gt;·super bolck - fs size, identification, Free list, fragment size, nbpi &lt;br /&gt;·inodes - file size, ownership, permission, times, pointers to data block &lt;br /&gt;·block - Data block, Indirect block  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;7.2 기본적인 파일 시스템 &lt;br /&gt;&lt;br /&gt;name&lt;br /&gt;Mounting point&lt;br /&gt;Description&lt;br /&gt;/dev/hd1&lt;br /&gt;/home&lt;br /&gt;user's home directory&lt;br /&gt;/dev/hd2&lt;br /&gt;/usr&lt;br /&gt;OS command, libraries and Application programs&lt;br /&gt;/dev/hd3&lt;br /&gt;/tmp&lt;br /&gt;Space accessible to all user for temporary files and work &lt;br /&gt;space&lt;br /&gt;/dev/hd4&lt;br /&gt;/&lt;br /&gt;It contains the files and directories critical for system &lt;br /&gt;operation including the divice directory and program that &lt;br /&gt;configure boot process&lt;br /&gt;/dev/hd9var&lt;br /&gt;/var&lt;br /&gt;variable spool and log file&lt;br /&gt;/dev/hd6&lt;br /&gt;&lt;br /&gt;paging space&lt;br /&gt;☞ 위의 각 저널 파일 체계는 분리되어 논리적 볼륨에 존재한다. 운용시스템이 초기화하는 동안 이들&lt;br /&gt;을 적재하게 된다. 이러한 파일 시스템 조정은 파일 트리의 일부를 분리하여 작업할 수 있도록 해주&lt;br /&gt;므로 백업, 재저장 및 보수유지와 같은 시스템 관리 기능에 유용하다. &lt;br /&gt;&lt;br /&gt;7.3 파일 시스템 유형의 이해 &lt;br /&gt;&lt;br /&gt;♣ 저널 파일 시스템 &lt;br /&gt;AIX 의 대표적 파일 시스템의 유형이다. &lt;br /&gt;♣ CD-ROM 파일 시스템 &lt;br /&gt;CD-ROM의 내용을 일반 파일 시스템접속 (읽기,열기,닫기)으로 접근하도록 해주는 유형 &lt;br /&gt;♣ NFS 파일 시스템 &lt;br /&gt;   원격 기계에 존재하는 파일이 마치 국지 기계에 있는 것 같이 접근하도록 해주는 유형  &lt;br /&gt;♣ 파일 시스템 명령어 &lt;br /&gt;chfs&lt;br /&gt;파일 시스템의 특성을 변경한다.&lt;br /&gt;Crfs&lt;br /&gt;파일 시스템을 추가 한다.&lt;br /&gt;Lsfs&lt;br /&gt;파일 시스템의 특성을 화면에 표시한다.&lt;br /&gt;Rmfs&lt;br /&gt;파일 시스템을 삭제한다.&lt;br /&gt;Mount&lt;br /&gt;파일 시스템을 사용 가능하게 적재한다.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;7.4 파일 시스템 관리 작업 &lt;br /&gt;&lt;br /&gt;·논리적 볼륨상의 파일 시스템 공간할당 &lt;br /&gt;·파일 시스템 생성 &lt;br /&gt;·파일 시스템 공간을 시스템 사용자에게 사용가능하게 함 &lt;br /&gt;·파일 시스템 공간 사용 관리 &lt;br /&gt;·시스템 문제 발생시자료 손실에 대비한 파일 시스템 백업 &lt;br /&gt;·파일 시스템을 일관성있는 상태로 유지  &lt;br /&gt;&lt;br /&gt;♣ 파일 시스템 작업관련 명령어 &lt;br /&gt;&lt;br /&gt;backup&lt;br /&gt;파일 시스템 전체 또는 점진적 백업을 수행한다.&lt;br /&gt;Dd&lt;br /&gt;파일 시스템의 백업을 위해 한 장치로부터 다른 장치로 직접 자료를 복사한다.&lt;br /&gt;Df&lt;br /&gt;파일 시스템에서 사용된 양과 free인 양을 보고한다.&lt;br /&gt;Fsck&lt;br /&gt;파일 시스템을 검사하고 불일치를 교체한다.&lt;br /&gt;Mkfs&lt;br /&gt;지정 논리적 볼륨상의 지정크기 파일 시스템을 생성한다.&lt;br /&gt;Mount&lt;br /&gt;파일 시스템을 다른 지명 구조에 적재한다.&lt;br /&gt;Restore&lt;br /&gt;백업으로부터 파일을 재저장한다.&lt;br /&gt;Unmount&lt;br /&gt;Mount와의 반대개념을 수행한다.&lt;br /&gt;&lt;br /&gt;7.5 파일 시스템의 구성 &lt;br /&gt;&lt;br /&gt;7.5.1 root(/) filesystem &lt;br /&gt;&lt;br /&gt;·/etc : 기계에 따라 변경되는 조작파일을 포함한다. 예: hosts , passwd 일반적으로 시스템 관리에 사&lt;br /&gt;용되는 파일을 포함한다. /etc 에 존재했던 대부분의 명령은 /usr/bin directory에 연결되어 있다. &lt;br /&gt;호환을 위해서 일부 실행 파일은 새로운 위치와 기호적 연결 (symbolic link) &lt;br /&gt;·/bin : /usr/bin의 기호적 연결 &lt;br /&gt;·/sbin : 기계를 시동하고 /usr파일 시스템을 적재하기 위하여 필요한 파일 &lt;br /&gt;·/dev : 국지 장치 특수 파일의 노드를 포함한다. &lt;br /&gt;·/export: 원격 사용자를 위한 서버상의 directory 및 파일을 포함한다. &lt;br /&gt;·/lib : 라이브러리 함수를 포함한다. &lt;br /&gt;·/tftpboot : 네트웍 부팅시 필요한 tftp directory &lt;br /&gt;&lt;br /&gt;7.5.2 /var filesystem &lt;br /&gt;&lt;br /&gt;·/var: 변수나 spool에 관련된 directory및 파일을 포함한다.  &lt;br /&gt;&lt;br /&gt; 7.5.3 /tmp filesystem&lt;br /&gt;&lt;br /&gt;·/tmp: 시스템이 생성한 임시 파일을 포함하는 파일 시스템의 적재지점이다. &lt;br /&gt;&lt;br /&gt;7.5.4 /usr filesystem &lt;br /&gt;· /usr: 기계가 바뀌어도 변하지 않으며 공유할 수 있는 실행 파일을 포함한다. &lt;br /&gt;OS,Xwindow및 주요 시스템 프로그램(LPP)등이 설치된 directory이다. &lt;br /&gt;&lt;br /&gt;7.5.5 /home filesystem &lt;br /&gt;&lt;br /&gt;· /home : 사용자의 home directory를 포함하는 파일 시스템이다. &lt;br /&gt;· /u : /home directory의 기호적인 연결이다. &lt;br /&gt;&lt;br /&gt; 7.6 File system의 추가 &lt;br /&gt;&lt;br /&gt;#smit -&gt; system storage management -&gt; file systems &lt;br /&gt;-&gt; add/change./show/delete file systems &lt;br /&gt;-&gt; Journaled file systems -&gt; Add a Journaled file system &lt;br /&gt;-&gt; Add a Standard Journaled file system &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# smit jfs -&gt; Add a Journaled file system &lt;br /&gt;&lt;br /&gt;Add a Standard Journaled File System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;Volume group name rootvg &lt;br /&gt;* SIZE of file system (in 512-byte blocks) [ 100000 ] # &lt;br /&gt;* MOUNT POINT [ /sample ] &lt;br /&gt;Mount AUTOMATICALLY at system restart? no + &lt;br /&gt;PERMISSIONS read/write + &lt;br /&gt;Mount OPTIONS [] + &lt;br /&gt;Start Disk Accounting? no + &lt;br /&gt;Fragment Size (bytes) 4096 + &lt;br /&gt;Number of bytes per inode 4096 + &lt;br /&gt;Allocation Group Size (MBytes) 8 +  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt; &lt;br /&gt;7.7 File system의 적재 ( mount ) &lt;br /&gt;&lt;br /&gt;# smit -&gt; system storage management -&gt; file systems -&gt; Mount a file system &lt;br /&gt;# mount /sample &lt;br /&gt;Mount a File System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;FILE SYSTEM name [/sample] + &lt;br /&gt;DIRECTORY over which to mount [] + &lt;br /&gt;TYPE of file system + &lt;br /&gt;FORCE the mount? no + &lt;br /&gt;REMOTE NODE containing the file system [] &lt;br /&gt;to mount &lt;br /&gt;Mount as a REMOVABLE file system? no + &lt;br /&gt;Mount as a READ-ONLY system? no + &lt;br /&gt;Disallow DEVICE access via this mount? no + &lt;br /&gt;Disallow execution of SUID and sgid programs no + &lt;br /&gt;in this file system?&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;7.8 File system의 적재해제 ( umount ) &lt;br /&gt;&lt;br /&gt;# smit -&gt; system storage management -&gt; file systems -&gt; unmount a File system &lt;br /&gt;# umount /sample &lt;br /&gt;Unmount a File System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;Unmount ALL mounted file systems? no + &lt;br /&gt;(except /, /tmp, /usr) &lt;br /&gt;-OR- &lt;br /&gt;Unmount all REMOTELY mounted file systems? no + &lt;br /&gt;NAME of file system to unmount [/sample] + &lt;br /&gt;REMOTE NODE containing the file system(s) [] &lt;br /&gt;to unmount &lt;br /&gt; &lt;br /&gt;7.9 File system의 삭제 &lt;br /&gt;&lt;br /&gt;# smit -&gt; system storage management -&gt; file systems -&gt; add/change./show/delete file systems -&lt;br /&gt;&gt; Journaled file systems -&gt; Remove a Journaled file system &lt;br /&gt;# smit rmfs &lt;br /&gt;# rmfs /sample &lt;br /&gt;Remove a Journaled File System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;* FILE SYSTEM name /sample + &lt;br /&gt;Remove Mount Point no + &lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt;FILE SYSTEM name &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;/ &lt;br /&gt;/usr &lt;br /&gt;/tmp &lt;br /&gt;/var &lt;br /&gt;/home &lt;br /&gt;/sample&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                Unit 8. Logical Volume manager &lt;br /&gt;&lt;br /&gt;8.1 개요 &lt;br /&gt;&lt;br /&gt;Logical Volume Manager는 Logical volume의 크기를 여러 Physical volume으로 확장하여 고&lt;br /&gt;정된 Physical volume에서 Disk를 융통성있는 시스템으로 만들어 준다. 몇 개의 Physical &lt;br /&gt;Volume은 Volume Group으로 함께 Volume지어지며 각 Volume group은 Logical volume을 &lt;br /&gt;포함하지 않거나 하나 이상의 Logical volume을 포함한다. &lt;br /&gt;Logical volume은 Physical volume에 위치한 정보의 Volume이다. Logical volume의 자료는 &lt;br /&gt;사용자에게 연속적으로 보이지만, Physical Volume에서는 비연속적이 될 수 있다. &lt;br /&gt;시스템 설치후에, 시스템은 시스템을 시동하는데 필요한 Logical volume의 기준집합을 구성하&lt;br /&gt;는 root 볼륨Volume과 User가 정의하는 다른 볼륨Volume을 갖고 있다. 마찬가지로, 시스템&lt;br /&gt;에 연결된 다른 Physical Volume을 Volume group에 추가할 수 있으며, rootvg와 다른 볼륨&lt;br /&gt;에서도 Physical Volume group을 추가할 수 있다. Logical volume은 주로 메뉴 방식의 SMIT&lt;br /&gt;를 이용한여 관리한다. &lt;br /&gt;Logical Volume의 잇점 &lt;br /&gt;△ Logical Volume은 비연속적인 공간이다. &lt;br /&gt;△ Logical Volume은 여러개의 disk를 걸칠수 있다. &lt;br /&gt;△ Logical Volume size 를 쉽게 변환할 수 있다. &lt;br /&gt;△ mirroring이 가능하다. &lt;br /&gt;△ 시스템에 hard disk를 쉽게 붙일 수 있다. &lt;br /&gt;△ Logical Volume은 relocate 될 수 있다. &lt;br /&gt;&lt;br /&gt;8.2 Volume Group의 이해  &lt;br /&gt;&lt;br /&gt;하나의 volume group은 시스템내에서 15자 이내의 유일한 이름을 가지며 다양한 크기와 유&lt;br /&gt;형을 갖는 1-32개의 physical Volume으로 구성된다. 각 AIX 시스템은 1-225개의 Volume &lt;br /&gt;group을 갖는다. 각 Physical Volume 은 여러개의 Physical partion으로 구성되며 한 logical &lt;br /&gt;Volume에 대한 Physical Partition은 하나의 Volumegroup에만 속해야한다. 한 Volumegroup&lt;br /&gt;은 변경, 확장, 축소, 생성, 열람, 반출(제거), 반입(설치), 재구성 할 수 있다. 시스템 설치 후, &lt;br /&gt;시스템은 시스템을 시동하는데 필요한 logical Volume의 기준 집합을 구성하는 하나의 &lt;br /&gt;Volume과 설치각본에서 지정하는 다른 Volumegroup으로 구성된다. 또한 Volume group이나 &lt;br /&gt;이미 생성쇤 다른 Volume group에 추가할 수 있다. &lt;br /&gt;소형시스템은 시스템에 부착된 모든 Physical Volume을 포함하기 위하여 하나의 Volume &lt;br /&gt;group이면 충분하지만, 대형 시스템은 추가적인 Volume group이 필요하다. 예를 들어, 하나 &lt;br /&gt;이상의 시스템에 실제로 부착된 디스크 Volume은 어느 시스템에서는 logical이으로 재구성할 &lt;br /&gt;수 있다. 또한 사용자는 보안이나 유지보수 이유로 디스크 Volume을 분할하는 Volume group&lt;br /&gt;을 생성할 수도 있다. &lt;br /&gt;&lt;br /&gt;8.3 Varyonvg 및 Varyoffvg Process &lt;br /&gt;&lt;br /&gt;varyonvg와 varyoffvg 명령은 시스템에서 이미 알려진 Volume group을 활성화하거나 비활성&lt;br /&gt;화 한다. Volume group을 access하기 위해서는 varyonvg가 되어야 한다. varyonvg(활성화) &lt;br /&gt;하는 동안에 Volume group 지정자 영역(VGDA)과 logical Volume Manager 프로그램은 &lt;br /&gt;Volume group에 정의된 Physical Volume에서 관리자료(PVID)를 읽는다. Volume group 상태&lt;br /&gt;영역을 포함하는 관리자료(PVID)는 사용도를 증가 시키기 위하여 Volume group내의 모든 &lt;br /&gt;Physical Volume에 저장되어 있다. &lt;br /&gt;&lt;br /&gt;8.4 Physical Volume 의 이해 &lt;br /&gt;&lt;br /&gt;Physical Volume은 영구적으로 시스템 범위의 유일한 식별자가 배정된 컴퓨터에 Physical로 &lt;br /&gt;부착된 읽기/쓰기 디스크이다. 이것은 extendvg 명령을 사용하여 Volume group에 추가할 수 &lt;br /&gt;있고, reducevg 명령을 사용하여 Volume group에서 제거 할 수 있다. Volume group에 추가&lt;br /&gt;될 때, Physical Volume은 Physical Partition이라는 연속적이고, 같은 크기의 영역(Physical &lt;br /&gt;Partition)으로 분할된다. &lt;br /&gt;Physical disk는 디스크가 시스템 시동시에 첫 번째로 검출되나 시스템 관리명령이 시스템에 &lt;br /&gt;디스크를 추가하기 위해 실행시간에 사용될 때 이름 (예 : hdisk＃)이 배정된다. &lt;br /&gt;&lt;br /&gt;8.5 Physical Partition ( Physical Partition )의 이해 &lt;br /&gt;&lt;br /&gt;logical Volume manager는 Physical Partition을 디스크 영역 할당의 가장 작은 단위로 취급한&lt;br /&gt;다. Physical Partition은 특정 Physical Volume상에서 같은 크기를 갖는 디스크 영역의 세그먼&lt;br /&gt;트이다. &lt;br /&gt;Physical Partition의 크기는 Physical Volume이 Volume group에 추가될 때 결정되며 &lt;br /&gt;Physical Volume은 Volume group의 Physical Partition 크기를 따른다. Partition크기를 작게 &lt;br /&gt;만드는 것이 Disk 가용성을 증가 시킬 수는 있지만, 정보를 관리하고 저장하는데 더 많은 시스&lt;br /&gt;템 처리시간을 필요로 한다. &lt;br /&gt;&lt;br /&gt;8.6 Logical Volume 의 이해 &lt;br /&gt;&lt;br /&gt;logical Volume은 Physical Partition으로 구성되는 logical Partition의 집합이며, 하나의 &lt;br /&gt;Volume group에 포함된다. 각 Physical Volume내에는 Physical Partition이 존재하고 &lt;br /&gt;Physical Partition은 Logical Partition에 의해 조직화되며, logical Volume을 형성한다. logical &lt;br /&gt;Volume은 확장 가능하며 Volume group 내에서 여러개의 Physical Volume에 걸쳐 있을 수 &lt;br /&gt;있다. &lt;br /&gt;8.7 Logical Partition 의 이해 &lt;br /&gt;logical Volume의 크기는 logical Partition수에 따라 결정된다. logical Partition은 1-3까지의 &lt;br /&gt;Physical Partition으로 이루어진다. logical Volume 내에서의 logical Partition 갯수는 유동적이&lt;br /&gt;며 logical Volume이 생성될 때 결정된다.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8.8 LVM ( Logical Volumn Manager )의 예 &lt;br /&gt;&lt;br /&gt;# smit &lt;br /&gt;-&gt; system storage management &lt;br /&gt;# smit lvm &lt;br /&gt;&lt;br /&gt;System Storage Management (Physical &amp; Logical Storage) &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Logical Volume Manager &lt;br /&gt;File Systems &lt;br /&gt;Files &amp; Directories &lt;br /&gt;Removable Disk Management &lt;br /&gt;System Backup Manager &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Logical Volume Manager &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Volume Groups &lt;br /&gt;Logical Volumes &lt;br /&gt;Physical Volumes &lt;br /&gt;Paging Space  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;Volume Groups &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Volume Groups &lt;br /&gt;Add a Volume Group &lt;br /&gt;Set Characteristics of a Volume Group &lt;br /&gt;List Contents of a Volume Group &lt;br /&gt;Remove a Volume Group &lt;br /&gt;Activate a Volume Group &lt;br /&gt;Deactivate a Volume Group &lt;br /&gt;Import a Volume Group &lt;br /&gt;Export a Volume Group &lt;br /&gt;Mirror a Volume Group &lt;br /&gt;Unmirror a Volume Group &lt;br /&gt;Back Up a Volume Group &lt;br /&gt;Remake a Volume Group &lt;br /&gt;List Files in a Volume Group Backup &lt;br /&gt;Restore Files in a Volume Group Backup&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Logical Volumes &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Logical Volumes by Volume Group &lt;br /&gt;Add a Logical Volume &lt;br /&gt;Set Characteristic of a Logical Volume &lt;br /&gt;Show Characteristics of a Logical Volume &lt;br /&gt;Remove a Logical Volume &lt;br /&gt;Copy a Logical Volume&lt;br /&gt; &lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;Physical Volumes &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;List All Physical Volumes in System &lt;br /&gt;Add a Disk &lt;br /&gt;Change Characteristics of a Physical Volume &lt;br /&gt;List Contents of a Physical Volume &lt;br /&gt;Move Contents of a Physical Volume&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;              Unit 9. System Backup and Restore &lt;br /&gt;&lt;br /&gt;AIX 시스템을 사용할 때 고려해야 할 사항은 파일 시스템, directory, 그리고 파일의 배업에 관&lt;br /&gt;한 것이다. 파일과 directory는 많은 시간과 노력이 투자된 중요한 요소이다. 그럼에도 불구하&lt;br /&gt;고, 고의 또는 우연에 의해 모든 컴퓨터파일은 쉽게 변하거나 제거될 수 있다. 그러므로 파일 &lt;br /&gt;시스템을 백업하여 놓는다면 약간의 노력으로 파일 또는 파일 시스템을 복원할 수 있다. &lt;br /&gt;* Backup의 Type &lt;br /&gt;&lt;br /&gt;System backup&lt;br /&gt;OS의 image backup을 기록한다.&lt;br /&gt;Full backup&lt;br /&gt;모든 user의 data 파일과 configuration 파일을 보관한다.&lt;br /&gt;Incremental backup&lt;br /&gt;마지막 Full backup이후의 변화를 기록한다.&lt;br /&gt;&lt;br /&gt;9.1 backup strategey &lt;br /&gt;+--------------------+ &lt;br /&gt;+------------▷ | system backup | &lt;br /&gt;| +--------------------+ &lt;br /&gt;| &lt;br /&gt;| ▼ &lt;br /&gt;| &lt;br /&gt;| +---------------+ &lt;br /&gt;| +------▷ | Full backup | &lt;br /&gt;| | +---------------+ &lt;br /&gt;| | &lt;br /&gt;| | ▼ &lt;br /&gt;| | &lt;br /&gt;| | +----------------------+ &lt;br /&gt;| | | Incremental backup | &lt;br /&gt;| | +----------------------+ &lt;br /&gt;| | &lt;br /&gt;| | ▼ &lt;br /&gt;| | &lt;br /&gt;| +-------- +----------------------+ &lt;br /&gt;+--------------- | Incremental backup | &lt;br /&gt;+----------------------+ &lt;br /&gt;&lt;br /&gt;9.2 backup media의 이해 &lt;br /&gt;&lt;br /&gt;backup에는 주로 diskette (/dev/fd0) 과 tape(/dev/rmt0)이 쓰이고 있다. &lt;br /&gt;diskette은 주로 작은 크기의 file을 위해 쓰이며 3.5"와 5.25"가 있다. tape은 주로 4mm &lt;br /&gt;DAT tape drive 와 8mm tape drive 등이 쓰이는데 backup시에 가장 많이 쓰이는 장치이다. &lt;br /&gt;&lt;br /&gt;9.3 backup 명령 &lt;br /&gt;&lt;br /&gt;다음은 backup 을 위한 명령들이다. &lt;br /&gt;backup&lt;br /&gt;이름 또는 I-노드 번호에 의해 파일을 백업한다.&lt;br /&gt;Cpio&lt;br /&gt;보존용 기억영역의 안팎으로 파일을 복사한다.&lt;br /&gt;Dd&lt;br /&gt;파일을 변환하고 복사한다.&lt;br /&gt;Tar&lt;br /&gt;보존파일을 처리한다.&lt;br /&gt;Rdump&lt;br /&gt;원격 기계장치로 I-노드에 의해 백업한다.&lt;br /&gt;Pax&lt;br /&gt;tar 명령을 생성하고 인용하며 cpio 명령으로 보관한다.&lt;br /&gt;&lt;br /&gt;9.4 Restore &lt;br /&gt;&lt;br /&gt;자료가 적절한 방법으로 backup 되었을 때, 사용한 자료의 유형에 의존하여 자료를 &lt;br /&gt;restore(복원)하는 여러 가지 방법이 있다. &lt;br /&gt;다음은 restore를 위한 명령이다. &lt;br /&gt;restore&lt;br /&gt;backup 명령에 의해 생성된 파일을 복원한다.&lt;br /&gt;Rrestore&lt;br /&gt;원격 기계에 존재하는 파일 시스템을 국지 기계로 복사한다.&lt;br /&gt;Cpio&lt;br /&gt;보존용 기억영역과 상호 파일을 복사한다.&lt;br /&gt;Tar&lt;br /&gt;보존 backup을 처리한다.&lt;br /&gt;? backup은 대상에 따라 여러 가지 smit메뉴에서 나타난다.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9.5 System Backup &lt;br /&gt;&lt;br /&gt;# smit -&gt; System Storage Management -&gt; system backup manager -&gt; Backup the system &lt;br /&gt;# smit mksysb &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Back Up the System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[TOP] [Entry Fields] &lt;br /&gt;WARNING: Execution of the mksysb command will &lt;br /&gt;Result in the loss of all material &lt;br /&gt;Previously stored on the selected &lt;br /&gt;Output medium. This command backs &lt;br /&gt;Up only rootvg volume group. &lt;br /&gt;* Backup DEVICE or FILE [/dev/rmt0] +/ &lt;br /&gt;Create MAP files? no + &lt;br /&gt;EXCLUDE files? no + &lt;br /&gt;List files as they are backed up? no + &lt;br /&gt;Generate new /image.data file? yes + &lt;br /&gt;EXPAND /tmp if needed? no + &lt;br /&gt;Disable software packing of backup? no + &lt;br /&gt;Number of BLOCKS to write in a single output [] # &lt;br /&gt;(Leave blank to use a system default) &lt;br /&gt;[BOTTOM]  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;9.6 Backup a File System &lt;br /&gt;&lt;br /&gt;# smit -&gt; System Storage Management -&gt; File Systems -&gt; Backup a File system &lt;br /&gt;# smit backup &lt;br /&gt;Backup a File System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;This option will perform a backup by inode. &lt;br /&gt;* FILESYSTEM to backup [] +/ &lt;br /&gt;* Backup DEVICE [/dev/rmt0] +/ &lt;br /&gt;Backup LEVEL (0 for a full backup) [0] # &lt;br /&gt;RECORD backup in /etc/dumpdates? no +  &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do &lt;br /&gt;&lt;br /&gt;9.7 restore a File System &lt;br /&gt;&lt;br /&gt;# smit -&gt; System Storage Management -&gt; File Systems &lt;br /&gt;-&gt; restore a file system &lt;br /&gt;Restore a File System &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;* Restore DEVICE [/dev/rmt0] +/ &lt;br /&gt;* Target DIRECTORY [.] / &lt;br /&gt;VERBOSE output? yes + &lt;br /&gt;Number of BLOCKS to read in a single input [] # &lt;br /&gt;Operation  &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;unit 10 AIX Install&lt;br /&gt;&lt;br /&gt;RS/6000에는 크게 두가지 모델로 구별할 수 있는데 그것은 Key가 있는 MCA Classical &lt;br /&gt;RS/6000 모델과 PCI based RS/6000 이다. &lt;br /&gt;각 모델 별로 시스템의 install 과정이 약간의 차이를 보인다. &lt;br /&gt;10.1 RS/6000 install &lt;br /&gt;a 장치의 연결상태를 점검한다. &lt;br /&gt;b Key를 Service 에 놓는다. ( MCA Classical 경우) &lt;br /&gt;c 외부장치의 power를 켠다. &lt;br /&gt;d 에뮬레이터를 active 하게 한다. &lt;br /&gt;e 컴퓨터의 power를 넣는다. &lt;br /&gt;f install media를 넣는다. &lt;br /&gt;g install menu에서 적합한 setting을 해서 install한다. &lt;br /&gt;h install 이 끝난후 Key를 Normal로 한 후 재시동 한다. ( MCA Classical 경우) &lt;br /&gt;I root로 login후 smit상에서 software product를 추가로 install한다. &lt;br /&gt;j 시스템의 환경을 설정한다. &lt;br /&gt;고려해야 하는 환경은 다음과 같다. &lt;br /&gt;· communication &lt;br /&gt;· tty0 , tty1 &lt;br /&gt;· time zone &lt;br /&gt;· Primary, secondary Language &lt;br /&gt;· volume group setting &lt;br /&gt;· file system setting &lt;br /&gt;· paging space의 변경 &lt;br /&gt;· user가 실행할 수 있는 process의 수  &lt;br /&gt; &lt;br /&gt;UNIT 10. AIX install AIX Admin교육 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;10.2 Software product install 의 예  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;System Management &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Software Installation and Maintenance &lt;br /&gt;Software License Management &lt;br /&gt;Devices &lt;br /&gt;System Storage Management (Physical &amp; Logical Storage) &lt;br /&gt;Security &amp; Users &lt;br /&gt;Communications Applications and Services &lt;br /&gt;Print Spooling &lt;br /&gt;Problem Determination &lt;br /&gt;Performance &amp; Resource Scheduling &lt;br /&gt;System Environments &lt;br /&gt;Processes &amp; Subsystems &lt;br /&gt;Remote Customer Support and Services &lt;br /&gt;Applications &lt;br /&gt;AIX System Backup &amp; Recovery/6000 &lt;br /&gt;Using SMIT (information only)  &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;UNIT 10. AIX install AIX Admin교육 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;Software Installation and Maintenance &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Install and Update Software &lt;br /&gt;List Software and Related Information &lt;br /&gt;Software Maintenance and Utilities &lt;br /&gt;Network Installation Management &lt;br /&gt;System Backup Manager  &lt;br /&gt; &lt;br /&gt;F1=Help F2=Refresh F3=Cancel Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;UNIT 10. AIX install AIX Admin교육 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;Install and Update Software &lt;br /&gt;Move cursor to desired item and press Enter. &lt;br /&gt;Install and Update from LATEST Available Software &lt;br /&gt;Update Installed Software to Latest Level (Update All) &lt;br /&gt;Install and Update Software by Package Name (includes devices and printers) &lt;br /&gt;Install Software Bundle (Easy Install) &lt;br /&gt;Update Software by Fix (APAR) &lt;br /&gt;Install and Update from ALL Available Software  &lt;br /&gt; &lt;br /&gt;F1=Help F2=Refresh F3=Cancel Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt;UNIT 10. AIX install AIX Admin교육 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;Install and Update from LATEST Available Software &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;* INPUT device / directory for software /dev/rmt0.1 &lt;br /&gt;* SOFTWARE to install [_all_latest] + &lt;br /&gt;PREVIEW only? (install operation will NOT occur) no + &lt;br /&gt;COMMIT software updates? yes + &lt;br /&gt;SAVE replaced files? no + &lt;br /&gt;AUTOMATICALLY install requisite software? yes + &lt;br /&gt;EXTEND file systems if space needed? yes + &lt;br /&gt;OVERWRITE same or newer versions? no + &lt;br /&gt;VERIFY install and check file sizes? no + &lt;br /&gt;Include corresponding LANGUAGE filesets? yes + &lt;br /&gt;DETAILED output? no +  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;UNIT 11. Communication AIX Admin교육 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;11. Communication &lt;br /&gt;&lt;br /&gt;11.1 TCP/IP의 개념 &lt;br /&gt;· Transmission Control Protocol/Internet Protocol &lt;br /&gt;· 다양한 Type의 네트워크상에서 서로 다른 시스템들이 data를 교환하게 해주는 Software &lt;br /&gt;&lt;br /&gt;11.2 TCP/IP의 역사 &lt;br /&gt;&lt;br /&gt;TCP/IP는 일종의 network 표준으로서 computer communication 방법의 세부사항, network 상호 연결&lt;br /&gt;규정, 경로설정 등을 포함하고 있다. 공식적으로는 TCP/IP internet protocol suite라 부르고, 흔히 &lt;br /&gt;TCP/IP라 한다. US. Department of Defense (DOD)는 cost-effective한 Heterogeneous computer간&lt;br /&gt;의 통신을 위한 communication protocol이 필요했고 DARPA(Defense Advanced Research Projects &lt;br /&gt;Agency)의 지원으로 UCLA, UCSB, SRI, Utra Univ등에 의해 1968년에 최초로 ARPANET이 제안 되었&lt;br /&gt;다. &lt;br /&gt;&lt;br /&gt;11.3 AIX에서의 IP Setting &lt;br /&gt;&lt;br /&gt;* smit -&gt; Communications Applications and Services -&gt; Minimum Configuration &amp; Startup -&gt; &lt;br /&gt;en0,en1,et0,et0 등 Network interface선택  &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;UNIT 11. Communication AIX Admin교육 &lt;br /&gt;&lt;br /&gt;-------------------------------------------------------------------------- &lt;br /&gt;&lt;br /&gt;Minimum Configuration &amp; Startup &lt;br /&gt;To Delete existing configuration data, please use Further Configuration menus &lt;br /&gt;Type or select values in entry fields. &lt;br /&gt;Press Enter AFTER making all desired changes. &lt;br /&gt;[Entry Fields] &lt;br /&gt;* HOSTNAME [kdcsi1] &lt;br /&gt;* Internet ADDRESS (dotted decimal) [203.225.28.100] &lt;br /&gt;Network MASK (dotted decimal) [] &lt;br /&gt;* Network INTERFACE en0 &lt;br /&gt;NAMESERVER &lt;br /&gt;Internet ADDRESS (dotted decimal) [203.225.1.11] &lt;br /&gt;DOMAIN Name [kolon.co.kr] &lt;br /&gt;Default GATEWAY Address [203.225.28.254] &lt;br /&gt;(dotted decimal or symbolic name) &lt;br /&gt;Your CABLE Type tp + &lt;br /&gt;START Now yes +  &lt;br /&gt;&lt;br /&gt;F1=Help F2=Refresh F3=Cancel F4=List &lt;br /&gt;Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image &lt;br /&gt;Esc+9=Shell Esc+0=Exit Enter=Do  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;11.4 Communication architecture의 비교  &lt;br /&gt;&lt;br /&gt;OSI&lt;br /&gt;TCP/IP&lt;br /&gt;SNA&lt;br /&gt;7&lt;br /&gt;Application&lt;br /&gt;7&lt;br /&gt;Process/application &lt;br /&gt;------------------&lt;br /&gt;------ &lt;br /&gt;Host - Host&lt;br /&gt;7&lt;br /&gt;Transaction Service&lt;br /&gt;6&lt;br /&gt;Presentation&lt;br /&gt;6&lt;br /&gt;&lt;br /&gt;6&lt;br /&gt;Presentation Service&lt;br /&gt;5&lt;br /&gt;Session&lt;br /&gt;5&lt;br /&gt;&lt;br /&gt;5&lt;br /&gt;Data flow control&lt;br /&gt;4&lt;br /&gt;Transport&lt;br /&gt;4&lt;br /&gt;&lt;br /&gt;4&lt;br /&gt;Transmission control&lt;br /&gt;3&lt;br /&gt;Network&lt;br /&gt;3&lt;br /&gt;Internet &lt;br /&gt;Network access  &lt;br /&gt;&lt;br /&gt;3&lt;br /&gt;Path control&lt;br /&gt;2&lt;br /&gt;Data link&lt;br /&gt;2&lt;br /&gt;&lt;br /&gt;2&lt;br /&gt;Data link control&lt;br /&gt;1&lt;br /&gt;Physical&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;1&lt;br /&gt;Physical control&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;* TCP/IP Protocol Layer &lt;br /&gt;Network access layer - communication node와 attach된 host(혹은 논리적으로 동등한)간의 &lt;br /&gt;연결에 관한 protocol. &lt;br /&gt;기능 : 같은 Network내의 host들 사이에 data를 route. &lt;br /&gt;host간의 control, error control 제어. &lt;br /&gt;Internet layer - multiple network상의 host간의 통신을 위한 protocol을 제공한다. &lt;br /&gt;기능: 많은 Network 안에 있는 host사이에 서 data를 route. &lt;br /&gt;주로 host와 gateway 사이에서 이용된다. &lt;br /&gt;Host-Host layer - 서로다른 host상의 process들 간의 data전달을 포함하는 entity &lt;br /&gt;기능 : high level entity간의 logical connection을 제공  &lt;br /&gt; &lt;br /&gt;11. 5 TCP/IP Command &lt;br /&gt;&lt;br /&gt;End user를 위한 TCP/IP Command는 다음의 4개 category로 나늘 수 있다. &lt;br /&gt;File Transfer&lt;br /&gt;ftp , rcp , tftp , utftp&lt;br /&gt;Remote login&lt;br /&gt;telnet , rlogin , rexec , rsh &lt;br /&gt;Status&lt;br /&gt;finger , host , ping , rwho , whois&lt;br /&gt;Remote Communication&lt;br /&gt;mail , talk ( write , wall 은 TCP/IP application이 아님 )&lt;br /&gt;* telnet (tn) - user가 remote host에 login하는 한 방법을 제공한다. &lt;br /&gt;rlogin - telnet과 유사한기능 &lt;br /&gt;rsh(remsh) - remote host에서 하나의 특정 명령을 수행, 혹은 rlogin처럼 동작 &lt;br /&gt;rexec &lt;br /&gt;ftp - file transper procedure step &lt;br /&gt;a. remote host에 login &lt;br /&gt;b. ftp command 사용 (ls, cd, pwd, get, put, mget, mput, binary) &lt;br /&gt;!command는 logcal host에서 실행 &lt;br /&gt;arp - internet address to hardware address translation table을 보여주거나 바꾼다. &lt;br /&gt;gettable - NIC (Network Information Center) format의 host table을 얻는다. &lt;br /&gt;hostid, hostname, host, whois &lt;br /&gt;route - routing table manipulate manually &lt;br /&gt;netstat - routing table과 packet transfer를 보여 준다. &lt;br /&gt;ifconfig - network adaper의 특성을 보여주거나 바꾼다. &lt;br /&gt;figerd - remote daemon provides remote user information &lt;br /&gt;11.6 TCP/IP service를 handle할 수 있는 File들 &lt;br /&gt;/etc/rc.tcpip - boot시에 TCP/IP daemon과 subsystem들을 invoke한다. &lt;br /&gt;/etc/tcp.clean - TCP/IP subsystem들을 청소한다. &lt;br /&gt;/etc/rc.nfs - boot시에 rc.tcpip file이 수행된후 실행되어 nfs subsystem과 portmap daemon, &lt;br /&gt;nfsd, biod등을 시작 시킨다. &lt;br /&gt;/etc/services - TCP/IP socket들을 등록하고 있는 file &lt;br /&gt;* System Resource Control (SRC) - process, subsystem, subgroup 등의 자원을 제어 &lt;br /&gt;명령 - startsrc, stopsrc, refresh, lssrc  &lt;br /&gt;&lt;br /&gt;11.7 TCP/IP setting, Name resolusion, Routing, Subnet masking &lt;br /&gt;&lt;br /&gt;일반적으로 다음의 6가지 interface가 RS/6000에서 TCP/IP를 지원한다. &lt;br /&gt;(HPS,FDDI도 가능) &lt;br /&gt;Standard Ethernet&lt;br /&gt;en&lt;br /&gt;IEEE 802.3&lt;br /&gt;et&lt;br /&gt;Token-Ring&lt;br /&gt;tr&lt;br /&gt;X.25 Protocol&lt;br /&gt;xt, amp, ampx, sxa&lt;br /&gt;serial Line Internet Protocol or SLIP&lt;br /&gt;si&lt;br /&gt;Loopback&lt;br /&gt;lo&lt;br /&gt;이들 각각의 adapter/interface는 각각의 unique한 주소를 가지고 있다. &lt;br /&gt;이를 Physical Address 혹은 MAC address라 하고 각 vender마다 고유의 range를 가지고 있&lt;br /&gt;다. MAC(Media Access Control)은 6 byte (6 octet) 48-bit로 구성된다. &lt;br /&gt;IP protocol은 TCP/IP internet layer에서만 동작하는데 이를 위한 주소를 Internet Address라 &lt;br /&gt;한다. 이는 network address와 host address의 두 부분으로 구성되며 각기 2byte씩, 총 4 &lt;br /&gt;byte로 이루어진다. network address 상의 local host 역시 그들 고유의 address를 가지고 있&lt;br /&gt;다. &lt;br /&gt;&lt;br /&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6722011313761774920-427804217821824074?l=knamhun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://knamhun.blogspot.com/feeds/427804217821824074/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6722011313761774920&amp;postID=427804217821824074' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/427804217821824074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6722011313761774920/posts/default/427804217821824074'/><link rel='alternate' type='text/html' href='http://knamhun.blogspot.com/2009/03/smit-aix-education.html' title='SMIT AIX आदमीं-Education'/><author><name>My another life</name><uri>http://www.blogger.com/profile/04065158754168809612</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6722011313761774920.post-8187289103333530347</id><published>2009-03-30T16:02:00.000-07:00</published><updated>2009-03-30T16:03:24.118-07:00</updated><title type='text'>[리눅스] C언어</title><content type='html'>C언어 란? &lt;br /&gt;&lt;br /&gt;1969년에......, AT&amp;T 연구소의 Ken Thompson은 연구소의 &lt;br /&gt;한쪽 구석에 방치되어 있던 작은 컴퓨터를 보고 운영체제 &lt;br /&gt;'UNIX'의 개발을 시작했습니다. 이 작업에 가담하고 있었던 &lt;br /&gt;Dennis Ritchie 라는 사람이 'C' 라고 하는 언어를 만들었고. &lt;br /&gt;결국 UNIX 는 C 언어로 다시 프로그래밍 되었습니다. &lt;br /&gt;&lt;br /&gt;그런데, 왜 이름이 'C' 일까요? &lt;br /&gt;원래 'CPL(Combined Programming Language)' 이라는 언어가 &lt;br /&gt;있었는데, 그 언어에서 'BCPL(Basic CPL)' 이라는 언어가 &lt;br /&gt;파생되었고, 다시 그 언어에서 파생한 언어를 BCPL의 선두 &lt;br /&gt;문자를 따서 'B' 라고 이름을 붙였습니다. C 언어는 다시 그 &lt;br /&gt;B 언어에서 파생되었기 때문에 BCPL의 2번째 문자를 따서 &lt;br /&gt;(혹은 B의 다음 알파벳을 따서) 'C' 라고 지어졌다고 합니다. &lt;br /&gt;&lt;br /&gt;요약하자면 C언어는 Unix 운영체제 하에서 시스템 프로그래밍을 &lt;br /&gt;하기 위해 개발된 아주 강력한 기능을 가진 프로그래밍 언어입니다. &lt;br /&gt;&lt;br /&gt;C언어는 구조화 프로그래밍을 지향하는 언어이고 정말로 가장 &lt;br /&gt;쓸모있는 언어라고 할수 있습니다. &lt;br /&gt;이유는 C언어에서는 못하는게 없기 때문이죠. &lt;br /&gt;좀 과장된 표현 같기도 하지만 다른 언어들과 비교해 볼때 &lt;br /&gt;못하는거란 없습니다. &lt;br /&gt;그리고 C언어로 만든 프로그램의 속도는 어셈블리어 만큼이나 &lt;br /&gt;빠른 속도를 내기 때문에 빠른 속도를 요구하는 프로그램에도 &lt;br /&gt;적합하죠. &lt;br /&gt;단 게임과 같은 곳에서는 C언어의 속도조차도 느리기 때문에.. &lt;br /&gt;어셈블리가 요구되는 곳이 있지만, 요즘 C언어 컴파일러들은 &lt;br /&gt;인라인 어셈블러라는 것을 지원해서 C소스 내에 어셈블리 코드를 &lt;br /&gt;추가할수 있습니다. 이런 점으로 볼때 C로는 못하는게 없다고 &lt;br /&gt;봐도 되겠죠? &lt;br /&gt;&lt;br /&gt;그래도 실감이 나지 않으시면 C언어로 만들어진 대표적인 &lt;br /&gt;프로그램을 예로 들어 볼까요? &lt;br /&gt;그런데 그럴려면 한가지 문제가 있네요. &lt;br /&gt;이 문제가 뭐냐 하면.. C언어로 만들어진 유명한 프로그램이 &lt;br /&gt;너무나도 많다는 것이죠. 그래도 몇가지 예를 들어 보죠. &lt;br /&gt;우선 OS에서는 Unix의 커널의 일부분을 제외한 모든 부분이 &lt;br /&gt;C로 만들어졌습니다. &lt;br /&gt;정말 굉장하죠..? &lt;br /&gt;그리고 Windows 95도 커널의 일부분과 *.VxD만 빼면 모두 &lt;br /&gt;C로 만들어졌습니다. 그것두 우리가 잘 알고 있는 Visual C++의 &lt;br /&gt;버전 2.1로 만들어졌죠. &lt;br /&gt;&lt;br /&gt;또하나 굉장한 사실이 있는데.. &lt;br /&gt;Windows NT는 커널 부분까지 C로 만들어졌다는 것이죠. &lt;br /&gt;C언어로 만들어진 프로그램에는 게임도 많은데, 대부분의 &lt;br /&gt;게임은 C언어로 만들어졌다고 보면 됩니다. &lt;br /&gt;게임을 시작할때 &lt;br /&gt;&lt;br /&gt;DOS/4GW Protected Mode Run-time Version 1.97&lt;br /&gt;Copyright (c) Rational Systems Inc. ............&lt;br /&gt; .&lt;br /&gt; .&lt;br /&gt;&lt;br /&gt;이런 것을 많이 보셨을 겁니다. 유명한 게임을 시작할땐 다 &lt;br /&gt;이게 나오는데, 이게 나오는건 C언어도 만들어진 것 입니다. &lt;br /&gt;Watcom C++라는 개발 툴로 만들어진 것이죠. &lt;br /&gt;또 한가지 놀라운 사실이 있는데, C언어 컴파일러도 C언어로 &lt;br /&gt;만든다는 것이죠. &lt;br /&gt;이정도면 C언어로 못하는게 없다는 말이 이해가 되시겠죠? &lt;br /&gt;&lt;br /&gt;그럼 이제 그 C언어의 세계로 들어가 보도록 하죠. &lt;br /&gt;&lt;br /&gt;C언어에는 어떤 종류가.. &lt;br /&gt;&lt;br /&gt;'C언어에는 어떤 종류가..'라는 제목을 보고 글이 자꾸 읽고 &lt;br /&gt;싶어 지신다면 그 분은 분명 C언어 초보자 입니다. &lt;br /&gt;하지만 이 제목을 보고선 무언가 이상하다고 느끼시면 &lt;br /&gt;진정한 전문가라고 할수 있죠. &lt;br /&gt;&lt;br /&gt;이유가 궁금하시죠? 이유는 C언어에는 종류가 없기 때문이죠. &lt;br /&gt;종류가 없는데 제목이 저러니 당연히 이상할수 밖에요. &lt;br /&gt;C를 처음 하시는 분들이 많이 질문하시는 것들 중 하나가 &lt;br /&gt;'C와 Visual C의 차이점이 무엇인가요?' 입니다. &lt;br /&gt;제가 이 질문을 받았다면 이렇게 답해 드리고 싶군요. &lt;br /&gt;'C는 언어이고 Visual C는 언어가 아닙니다.' 라구요. &lt;br /&gt;여기서 Visual C라는 건 Microsoft라는 회사에서 만든 &lt;br /&gt;C언어로 프로그래밍할때 필요한 도구를 말합니다. &lt;br /&gt;즉 언어가 아니라는 것이죠. &lt;br /&gt;단지 C언어로 프로그래밍을 할때 필요한 도구에 지나지 &lt;br /&gt;않습니다. 언어는 바로 C이죠. &lt;br /&gt;&lt;br /&gt;그러므로 Visual C와 Borland C등은 문법에선 차이가 &lt;br /&gt;있을 수 없습니다. &lt;br /&gt;&lt;br /&gt;정리하면 C는 언어이고, Visual C, Borland C등은 언어가 &lt;br /&gt;아니라 C언어를 사용해 프로그램을 제작하기 위한 도구이며, &lt;br /&gt;모두 C언어 프로그램을 제작하기 위한 도구이므로 기본 문법의 &lt;br /&gt;차이는 있을수 없다는 것을 꼭 기억하시기 바랍니다. &lt;br /&gt;그리고 여기서 한가지 말씀드릴것이 있는데, 위에 Visual C라고 &lt;br /&gt;썼지만 실제는 이게 아니고 Visual C++입니다. &lt;br /&gt;&lt;br /&gt;그럼 또 한가지 의문이 생기실건데 Visual C++에서 C++가 아닌 &lt;br /&gt;C언어 프로그램을 작성할수 있는지 말입니다. &lt;br /&gt;&lt;br /&gt;이 의문의 답은 Yes!입니다. &lt;br /&gt;&lt;br /&gt;C++라는 언어는 C언어를 객체 지향 프로그래밍이란 것을 할수 &lt;br /&gt;있도록 확장시킨 언어이죠. &lt;br /&gt;그래서 C++언어는 C언어를 포함한다고 할수 있죠. &lt;br /&gt;그러므로 Visual C++에서 아무리 C++라고 쓰여져 있어도 &lt;br /&gt;C 프로그래밍은 가능합니다. &lt;br /&gt;&lt;br /&gt;C언어는 어떻게.. &lt;br /&gt;&lt;br /&gt;이제 C언어 프로그램이 어떻게 실행되어 지는가를 알아봅시다. &lt;br /&gt;C언어로 프로그램을 만들면 실행파일(.EXE)을 만들 수가 있습니다. &lt;br /&gt;실행파일이 만들어질때는 다음과 같은 과정을 거칩니다. &lt;br /&gt;&lt;br /&gt;    (1)소스 코드 -------------&gt; (2)소스 파일 ----------&gt;&lt;br /&gt;                 텍스트 에디터               선행처리기&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    (3)선행처리기 지시어가 번역된 소스 파일 ---------&gt;&lt;br /&gt;                                            컴파일러&lt;br /&gt;&lt;br /&gt;                 라이브러리&lt;br /&gt;    (4)목적 파일 -----------&gt; (5)실행파일&lt;br /&gt;                    링커&lt;br /&gt;&lt;br /&gt;(1) 소스 코드 (Source) &lt;br /&gt;&lt;br /&gt;프로그램의 내용 자체를 소스 코드라고 합니다. &lt;br /&gt;&lt;br /&gt;(2) 소스 파일 (Source file) &lt;br /&gt;&lt;br /&gt;소스 코드를 텍스트 파일에 기술하여 만들어진 파일을 &lt;br /&gt;소스 파일이라고 합니다. &lt;br /&gt;C언어의 소스 파일은 확장자가 .C입니다. &lt;br /&gt;C언어 프로그램 만드는 가장 첫번째 과정이라고 할 수 있죠. &lt;br /&gt;&lt;br /&gt;(3) 선행처리기 지시어가 번역된 소스 파일 &lt;br /&gt;&lt;br /&gt;C언어 프로그램 내에는 여러가지 지시어 들이 있는데 &lt;br /&gt;이건 C언어 문법과는 별개이고 번역도 컴파일러가 하지 &lt;br /&gt;않습니다. &lt;br /&gt;이걸 번역하는 프로그램을 선행처리기라고 합니다. &lt;br /&gt;&lt;br /&gt;(4) 목적 파일 (Object file) &lt;br /&gt;&lt;br /&gt;지시어가 번역된 소스 파일은 다음으로 컴파일러라는 프로그램에 &lt;br /&gt;의해 기계어로 번역됩니다. &lt;br /&gt;이 번역된 파일을 목적 파일이라고 하고, 확장자는 .OBJ가 됩니다. &lt;br /&gt;그러데 여기서 이상한 점이 있죠? &lt;br /&gt;기계어로 번역하면 실행할수 있을 건데 왜???????? 실행파일을 &lt;br /&gt;만들지 않고 목적파일이라는 만들까요? &lt;br /&gt;하지만 기계어로 번역되었다고 해서 실행할수는 없습니다. &lt;br /&gt;실행파일이 되기 위해선 런타임 라이브러리라는 것이 목적 파일과 &lt;br /&gt;합쳐져야 하기 때문이죠. 이 런타임 라이브러리가 무엇인지는 &lt;br /&gt;나중에 설명하기로 하고 그냥 런타임 라이브러리라는 것이 &lt;br /&gt;합쳐져야 한다는 것만 알아두세요. &lt;br /&gt;&lt;br /&gt;(5) 실행 파일 (Executable file) &lt;br /&gt;&lt;br /&gt;목적파일은 위에서 말한 런타임 라이브러리와 합쳐져서 &lt;br /&gt;실행파일이 되는데,이때 합쳐주는 프로그램을 링커라고 합니다. &lt;br /&gt;링커에 의해 목적 파일은 실행파일이 되죠. &lt;br /&gt;그럼 실행할수가 있게 됩니다. &lt;br /&gt;&lt;br /&gt;C의 구조. &lt;br /&gt;&lt;br /&gt;이정도 알았으면 이제 C언어 프로그램의 문법적인 &lt;br /&gt;구조를 살펴보기로 합시다. &lt;br /&gt;이제부터 정말 C의 문법에 대한 공부를 들어갈텐데, &lt;br /&gt;이번에 나올 C 프로그램은 기본적인 구조만 이해하시면 됩니다. &lt;br /&gt;세부적인 부분은 모르셔도 됩니다. &lt;br /&gt;기본적인 구조를 알고 계셔야 다음 강좌의 이해가 쉽기 때문이죠. &lt;br /&gt;&lt;br /&gt;(1) 자유로운 형식 &lt;br /&gt;&lt;br /&gt;C언어는 다른 언어들과는 달리 형식이 매우 자유롭습니다. &lt;br /&gt;우선 예제 소스 하나를 보며 공부해보도록 하죠. &lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C1-1.C&lt;br /&gt;   프로그램 내용 : 화면에 메시지를 출력하는 프로그램. */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   printf("This is a first program.");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 소스는 아주 간단한 소스 입니다. &lt;br /&gt;하지만 C를 처음 대하시는 분 이라면 아주 생소하게 &lt;br /&gt;느껴질 것 입니다. &lt;br /&gt;이 소스 내용은 아직은 이해하지 못하셔도 되니까 겁먹지 &lt;br /&gt;마시고 잘 봐주세요. &lt;br /&gt;하여튼 그건 그렇고 아까 그 소스(C1-1.C)와 다음에 나오는 &lt;br /&gt;소스를 비교해 보세요. &lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C1-2.C&lt;br /&gt;   프로그램 내용 : 화면에 메시지를 출력하는 프로그램. */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;void main(){printf("This is a first program.");}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 소스들을 비교해 보세요. &lt;br /&gt;주시해서 봐야 할 곳은 void...); }부분 입니다. &lt;br /&gt;두 소스중 어떤 것이 보기가 쉽죠??? &lt;br /&gt;당연히 첫번째 소스가 더 읽기 쉬울 것 입니다. &lt;br /&gt;하지만 이 두 소스는 완전히 똑같은 기능을 수행합니다. &lt;br /&gt;결과를 봐볼까요??? &lt;br /&gt;두 개를 컴파일해서 C1-1.EXE, C1-2.EXE를 만들고 실행하면.. &lt;br /&gt;&lt;br /&gt;C:\&gt;C1-1.EXE&lt;br /&gt;This is a first program.&lt;br /&gt;C:\&gt;C1-2.EXE&lt;br /&gt;This is a first program.&lt;br /&gt;C:\&gt;&lt;br /&gt;&lt;br /&gt;똑같은 소스 이지만, 두번째 소스는 첫번째 소스를 한줄에 &lt;br /&gt;다 써 버린 것 입니다. &lt;br /&gt;하지만 컴파일러는 똑같은 내용으로 인식하게 되죠. &lt;br /&gt;여기서 말하고자 하는 것은 C언어 프로그램은 자유로운 형식을 &lt;br /&gt;갖는다는 것 입니다. &lt;br /&gt;즉 여러줄에 써야 할 것을 한줄에 써 버려도 상관 없다는 것이죠. &lt;br /&gt;또한 이 말은 한줄에 써야 할 것을 여러줄에 쓸 수도 &lt;br /&gt;있다는 말 입니다. &lt;br /&gt;더 정확히 말하자면 C언어에서는 공백을 인식하지 않습니다. &lt;br /&gt;즉 공백이 많이 있어도 그건 없는거나 마찬가지 이죠. &lt;br /&gt;그러므로 첫번째 소스도 실제로 컴파일러에서는 두번째 소스처럼 &lt;br /&gt;인식하게 되는 것 입니다. &lt;br /&gt;하지만 공백 없이 한 줄에 다 써 버리면 읽기가 힘들어 지므로, &lt;br /&gt;되도록 보기 쉽게 공백을 두고 쓰는 것이 좋습니다. &lt;br /&gt;&lt;br /&gt;(2) 대소문자 구별 &lt;br /&gt;&lt;br /&gt;C언어는 대문자와 소문자를 구별한다는 것을 기억해 두시기 바랍니다. &lt;br /&gt;예를들어 Basic에서 화면에 메시지를 출력하는 명령어인 PRINT는 &lt;br /&gt;print라고 써도 상관 없고 Print, prinT, pRint등으로 써도 모두 &lt;br /&gt;같은 것으로 인식합니다. &lt;br /&gt;하지만 C에선 그렇지 않습니다. &lt;br /&gt;베이직의 PRINT의 기능을 하는 것으로 아까 예제 소스에서 &lt;br /&gt;나온 것인데.. &lt;br /&gt;C에서는 printf라는 것이 있습니다. &lt;br /&gt;그런데 이걸 Printf, pRintf, PRINTF등등.. 이렇게 써서는 &lt;br /&gt;절대 안됩니다. &lt;br /&gt;모두 다른 것으로 인식하기 때문에 반드시 printf로 써 주어야 하죠. &lt;br /&gt;보통 C에서는 거의 다 소문자로 되어 있어요. &lt;br /&gt;그리고 C언어가 지원하는 기본 어휘 그러니까.. &lt;br /&gt;베이직에서는 PRINT, INPUT, DIM등등의 명령어들과 같은 역할을 &lt;br /&gt;하는 기본적 어휘를 키워드(예약어)라고 하는데, 이것들도 모두 &lt;br /&gt;소문자로 되어 있죠. &lt;br /&gt;&lt;br /&gt;(3) 주석 (설명문) &lt;br /&gt;&lt;br /&gt;주석문은 프로그램과는 아무 상관이 없어 없는것과 마찬가지이지만, &lt;br /&gt;프로그램의 내용을 설명하기위해 쓰는 글 입니다. &lt;br /&gt;C에서 주석문을 쓰는 것은 간단합니다. &lt;br /&gt;설명하는 글 앞에는 /* 를 붙이고 뒤에는 */를 붙이면 됩니다. &lt;br /&gt;예를들어.. &lt;br /&gt;&lt;br /&gt;/* 주석문 입니다 */ &lt;br /&gt;&lt;br /&gt;이렇게 하면 주석문이 됨니다. &lt;br /&gt;즉 없는 거나 마찬가지인 글이 되는 것이죠. &lt;br /&gt;C++ 에서는 // 과 같은 한행 주석문도 허용합니다. &lt;br /&gt;한 줄에서 // 라고 쓰인 부분 뒤로는 모두 주석으로 &lt;br /&gt;인식하는 거죠. &lt;br /&gt;예제 소스를 하나 들어 보죠. &lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C1-3.C&lt;br /&gt;   프로그램 내용 : 주석문을 설명하기 위한 프로그램. */&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   int a, b, c;     /* 정수 변수 a, b, c를 선언 */&lt;br /&gt;   a=10;          /* a에 10을 넣는다. */&lt;br /&gt;   b=20;          /* b에 20을 넣는다. */&lt;br /&gt;   c=a+b;         /* c에 a와 b를 더하여 넣는다. */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;여기서 /* */로 묶인 것은 모두 주석문 입니다. &lt;br /&gt;즉 /* */로 묶인 것은 없어도 상관 없습니다. &lt;br /&gt;그리고 주석문은 여러줄이 되어도 상관 없습니다. &lt;br /&gt;&lt;br /&gt;/* 주석문 입니다..&lt;br /&gt;   이것두 주석문 입니다.. */&lt;br /&gt;&lt;br /&gt;이렇게 써도 상관 없다는 것 입니다. &lt;br /&gt;C에서는 한줄에 쓸 것을 여러줄에 써두 된다고 배웠는데, &lt;br /&gt;위와 같이 주석문을 쓴 것두 &lt;br /&gt;&lt;br /&gt;/* 주석문 입니다.. 이것두 주석문 입니다.. */ &lt;br /&gt;&lt;br /&gt;이렇게 써야 할 것을 위와 같이 쓴 것 뿐이라고 생각하시면 &lt;br /&gt;이해가 되실 것입니다. &lt;br /&gt;주석문을 쓰는 이유는 프로그램에 대한 설명을 써 둠으로써 &lt;br /&gt;읽기 쉽게하고 오류를 찾아내거나 수정하는 작업을 쉽게 하기 &lt;br /&gt;위해서입니다. &lt;br /&gt;&lt;br /&gt;물론 간단한 프로그램의 경우 특별히 주석 없이도 충분히 &lt;br /&gt;읽을수가 있지만, 정말로 복잡한 프로그램에선 주석문이 큰 &lt;br /&gt;도움을 줄수 있죠. &lt;br /&gt;주석문을 쓸 때는 공백을 최대한 이용하는 것이 좋습니다. &lt;br /&gt;공백을 잘 이용하여 최대한 보기 쉽게 해야 하죠. &lt;br /&gt;주석문이 필요한 이유가 프로그램을 읽기 쉽게 해서 오류를 &lt;br /&gt;찾거나 수정을 하는 일이 쉬워지게 하기 위해서인데, 주석문을 &lt;br /&gt;보기 어렵게 쓰면 않되겠죠? &lt;br /&gt;예를 들어 봅시다. &lt;br /&gt;위에 나왔던 소스와 다음 소스를 비교해 보세요. &lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C1-4.C&lt;br /&gt;   프로그램 내용 : 주석문을 설명하기 위한 프로그램. */&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   int a, b, c; /* 정수 변수&lt;br /&gt;      a, b, c를 선언 */&lt;br /&gt;   a=10;  /* a에&lt;br /&gt;           10을 넣는다. */&lt;br /&gt;   b=20;   /* b에 20을 넣는다. */&lt;br /&gt;   c=a+b; /* c에 a와 b를&lt;br /&gt;   더하여 넣는다. */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;C1-4.C는 주석때문에 보기가 더 힘들어 졌죠? &lt;br /&gt;주석문을 이렇게 써서는 절대로 않됩니다. &lt;br /&gt;&lt;br /&gt;Previous:C언어 란&lt;br /&gt;Next:C의 구성요소&lt;br /&gt;C의 구성 요소 &lt;br /&gt;&lt;br /&gt;C프로그램을 구성하는 요소들에 대해 알아보도록 하죠. &lt;br /&gt;C프로그램을 구성하는 요소에는 키워드, 심볼, 문장, 블럭등이 있습니다. &lt;br /&gt;&lt;br /&gt;(1) 키워드 &lt;br /&gt;&lt;br /&gt;키워드는 저번 강의때 간략히 설명을 했었는데, 더 정확히 말하자면.. &lt;br /&gt;C 컴파일러가 특별한 의미로 인식하는 단어를 말합니다. &lt;br /&gt;다른 단어들과는 달리 특별한 기능을 수행하게 되죠. &lt;br /&gt;C언어 키워드는 다른 언어에 비해 적은 편 입니다. &lt;br /&gt;이유는 C언어 키워드에는 표준 입출력에 관한 키워드가 들어있지 않기 때문이죠. &lt;br /&gt;단지 데이터 처리와 프로그램의 흐름을 제어하는 키워드 밖에 들어있지 않습니다. 그렇기 때문에.. &lt;br /&gt;표준 입출력에 관한 것은 외부에 의존합니다. &lt;br /&gt;저번히 예제에 나온 printf라는 것도 키워드가 아닙니다. &lt;br /&gt;이것이 무엇인지는 오늘 배우게 됩니다. &lt;br /&gt;&lt;br /&gt;(2) 심볼 &lt;br /&gt;&lt;br /&gt;심볼은 무언가를 상징하는 단어로 키워드와는 반대의 의미를 가지는 단어라고 할수 있습니다. &lt;br /&gt;즉 이건 컴파일러가 특별한 의미로 인식하는 단어가 아닌 프로그램을 만드는 사람이 특별한 의미를 부여하는 단어 입니다. &lt;br /&gt;키워드와는 다르게 프로그램을 만드는 사람이 특별한 기능을 수행하도록 만들게 되죠. &lt;br /&gt;이 심볼에 해당하는 것은 오늘 배울 변수와 함수 이름등이 있습니다. &lt;br /&gt;심볼은 한개 이상의 문자로 만들수 있으며 이때 사용할수 있는 문자는 알파벳과, 숫자, 언더 스코어('_')가 있습니다. &lt;br /&gt;그런데 멘 처음 문자는 반드시 알파벳 또는 언더스코어가 와야 합니다. &lt;br /&gt;예를 들자면.. &lt;br /&gt;&lt;br /&gt;symbol, _symbol, symbol1 &lt;br /&gt;&lt;br /&gt;이런것들은 심볼이 될수 있지만.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1symbol, 2symbol &lt;br /&gt;&lt;br /&gt;이런건 에러가 나게 됨니다.. &lt;br /&gt;&lt;br /&gt;(3) 문장 &lt;br /&gt;&lt;br /&gt;문장은 프로그램을 구성하는 중요한 요소로 실행 단위가 된다고 할수 있습니다. &lt;br /&gt;문장에는.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;a=b+c; &lt;br /&gt;&lt;br /&gt;printf("Example"); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 것들이 있으며, 문장 이 끝나면 반드시 ';'를 써 주어야 합니다. &lt;br /&gt;;이 문장의 끝을 알리는 표시 이죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4) 블럭 &lt;br /&gt;&lt;br /&gt;블럭은 문장을 묶어 둔 것 입니다. &lt;br /&gt;즉 한개 이상의 문장이 모여 있는 것을 말하죠. &lt;br /&gt;블럭은 {로 시작해 }로 끝남니다. &lt;br /&gt;예를들어.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;   a=b+c;&lt;br /&gt;   b=a+c;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이건 블럭이라 할수 있습니다. &lt;br /&gt;그리고 블럭은 중첩될수도 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;   a=b+c;&lt;br /&gt;   {&lt;br /&gt;      b=a+c;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로 말입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C 프로그램의 구조. &lt;br /&gt;&lt;br /&gt;예제 소스를 하나 보며 공부하도록 하죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C2-1.C&lt;br /&gt;   프로그램 내용 : 계산에 대한 결과를 출력하는 프로그램 */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int add(int,int);            /* 두 수를 더하는 함수 */&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   int result;               /* 변수 선언 */&lt;br /&gt;&lt;br /&gt;   result=add(3,5);          /* add함수를 호출해 3과 5를 더한다. */&lt;br /&gt;   printf("Result:%d\n",result);    /* result의 값을 출력한다. */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int add(int a, int b)&lt;br /&gt;{&lt;br /&gt;   return(a+b);              /* a와 b를 더해서 리턴 */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 프로그램은 아주 간단하지만 처음 하시는 분은 좀 복잡해 보일 겁니다. &lt;br /&gt;우선 저번 강좌 내용을 들춰 보면서 그때 나온 소스들과 이 소스를 비교해 보세요. &lt;br /&gt;이 소스와 저번 강좌에 나왔던 여러 소스를 비교해 보면 공통점이 몇 가지 있을 것 입니다. &lt;br /&gt;우선 프로그램 처음에 #include &lt;stdio.h&gt;라는 것이 꼭 있고 void main()이라는 것이 어느 소스에나 있을 겁니다. &lt;br /&gt;이것들이 왜 공통적으로 들어 있는지 소스 분석을 통해 알아보죠. &lt;br /&gt;&lt;br /&gt;(1) 선행처리기 지시어. &lt;br /&gt;&lt;br /&gt;여기서 한 줄씩 살펴보기로 하죠. &lt;br /&gt;우선 처음에는 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt; &lt;br /&gt;&lt;br /&gt;이런 문장이 있습니다. &lt;br /&gt;이 문장처럼 #가 붙은 것을 선행처리기 지시어라고 합니다. &lt;br /&gt;저번 강의때 들은적이 있으실 겁니다. &lt;br /&gt;이 선행처리기 지시어는 메크로 기능, 파일 포함 기능, 선택적 컴파일 기능등 여러 기능을 수행합니다. &lt;br /&gt;그중 여기 나온 #include라는 지시어는 지정된 파일을 프로그램 내에 포함시키라는 지시어 입니다. &lt;br /&gt;그러니까 위와 같은 경우 stdio.h라는 파일을 프로그램 내에 포함시키라는 것이죠. &lt;br /&gt;자세한 사용법을 살펴보면 &lt;br /&gt;&lt;br /&gt;#include &lt;포함할 파일&gt; &lt;br /&gt;#include "포함할 파일" &lt;br /&gt;&lt;br /&gt;이렇게 두가지 형식이 있습니다. &lt;br /&gt;처음 방법은 지정된 디렉토리에서 파일을 찾아 포함시키는 것 입니다. &lt;br /&gt;지정된 디렉토리는 흔히 개발 도구의 INCLUDE디렉토리를 가르키는 것으로 그 안에 들어 있는 파일은 개발 도구를 만든 곳에서 지원하는 것 들입니다. &lt;br /&gt;두번째 방법은 현제 위치한 디렉토리에서 파일을 찾아 포함시키는 것 입니다. &lt;br /&gt;예를들어 현제 디렉토리의 a.h라는 파일이 있는데, 그걸 포함시키고 싶다면. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include "a.h" &lt;br /&gt;&lt;br /&gt;이렇게 하면 됨니다. &lt;br /&gt;대부분의 프로그램에서 stdio.h라는 파일을 포함시키는 이유는 차차 배우게 될 것입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2) 함수와 main함수 &lt;br /&gt;&lt;br /&gt;두번째 줄은 일단 넘어가기로 하고 다음을 보면 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   int result;               /* 변수 선언 */&lt;br /&gt;&lt;br /&gt;   result=add(3,5);          /* add함수를 호출해 3과 5를 더한다. */&lt;br /&gt;   printf("Result:%d\n",result);    /* result의 값을 출력한다. */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것이 있습니다. &lt;br /&gt;이렇게 생긴 것들을 함수라고 하는데 함수란 어떤 내용을 처리하고 그 결과를 리턴하는 프로그램의 한 부분입니다. &lt;br /&gt;반드시 하나의 블럭으로 되어 있어야 하죠. &lt;br /&gt;그리고 그 안에는 그 함수가 처리할 내용이 들어가게 됨니다. &lt;br /&gt;함수는 다음과 같은 구조로 만듬니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;리턴형태 함수이름([인수, 인수, 인수...])&lt;br /&gt;{&lt;br /&gt;   /* 프로그램 내용 */&lt;br /&gt;    .&lt;br /&gt;    .&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;여기서 리턴형태이란 처리하고 난 후의 리턴할 결과의 형태가 무엇인지를 쓰는 것 입니다. 즉 정수형태인지, 문자열인지 등등.. &lt;br /&gt;결과를 리턴하지 않는 경우 void를 씀니다. &lt;br /&gt;함수 이름은 그 함수를 상징하는 심볼 이죠. &lt;br /&gt;인수는 그 함수가 어떤 내용을 처리할때 필요해서 전달받아야 할 데이터 입니다. 예를 들어 화면에 무언가를 출력하는 함수를 만든다고 합시다. &lt;br /&gt;출력하기 위해선 출력할 내용을 전달받아야 하는데 그때 인수를 통해 전달받게 됨니다. 전달받을 데이터가 없으면 안써도 됩니다. &lt;br /&gt;우선 지금 나온 함수는 main이라는 함수인데 이 함수는 어떤 프로그램이든지 존재하고 있었죠? &lt;br /&gt;&lt;br /&gt;왜 그럴까요???????????????????? &lt;br /&gt;이유는 C언어 프로그램은 바로 main함수에서 시작하게 되기 때문이죠. &lt;br /&gt;C프로그램의 실행되면 이 main함수를 시작으로 프로그램이 진행되고 main함수가 끝나면 프로그램도 끝나게 됩니다. &lt;br /&gt;그러므로 반드시 만들어야할 함수 입니다. &lt;br /&gt;&lt;br /&gt;main함수안에 나오는 것을 하나씩 분석해 보면. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   int result;               /* 변수 선언 */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;처음에 이게 나오는데.. 이건 변수를 선언하는 것 입니다. &lt;br /&gt;그냥 어떤 값을 저장하기 위해 기억장소를 마련하는 것이라 생각하시면 됨니다. &lt;br /&gt;&lt;br /&gt;다음줄은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   result=add(3,5);          /* add함수를 호출해 3과 5를 더한다. */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것인데.. &lt;br /&gt;이것은 바로 함수를 호출하는 것 입니다. &lt;br /&gt;그리고 나서 그 결과를 result라는 기억장소에 보관하라는 뜻이죠. &lt;br /&gt;그러니까 지정한 함수 내에 처리 내용을 실행시키고 그때 나온 결과를 result라는 변수에 보관하는 문장입니다. &lt;br /&gt;함수 호출법은 다음과 같습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[변수=]함수이름([인수,인수,인수..]); &lt;br /&gt;&lt;br /&gt;여기서 변수는 함수의 내용이 처리된 후 리턴하는 결과를 넣을 기억장소를 말합니다. 결과를 리턴하지 않으면 쓰지 않아도 됩니다. &lt;br /&gt;또한 리턴한 결과를 따로 저장할 필요가 없을때도 쓰지 않아도 됩니다. &lt;br /&gt;그리고 함수이름은 호출할 함수를 상징하는 심볼, 인수는 함수가 하는 처리에 필요한 데이터입니다. &lt;br /&gt;함수를 호출할 때는 그 함수가 만들어져 있어야 합니다. &lt;br /&gt;그리고 함수가 호출하려는 곳보다 밑에 만들어 져 있으면 좋지 않죠. 이유는 위에서는 함수가 있는지를 모르거든요. &lt;br /&gt;그런데 여기선 add라는 함수가 밑에 있죠? &lt;br /&gt;이럴땐 함수를 위에 선언해 주면 좋습니다. &lt;br /&gt;함수가 있다는 것을 알려주는 것이죠. &lt;br /&gt;꼭 그래야 하는 건 아니지만, 요즘 컴파일러들은 경고를 주게 되죠. &lt;br /&gt;그래서 add함수를 선언한 것이 main함수 위에 있는 것인 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int add(int,int);            /* 두 수를 더하는 함수 */&lt;br /&gt;&lt;br /&gt;이거 입니다. 함수 선언은 간단한데.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;리턴형 함수이름([인수, 인수, 인수...]); &lt;br /&gt;&lt;br /&gt;이렇게 하면 됩니다. 이것들이 무슨 뜻 인지는 다 아시겠죠? &lt;br /&gt;이렇게 함수를 선언한것을 C에서는 프로토타입을 선언한다고 합니다. 이렇게 프로토타입을 선언하면 에러가 방지되는 등의 좋은 점이 있으므로 프로토타입을 선언하는 습관을 기르는 것이 좋습니다. &lt;br /&gt;이제 add를 호출했으니 add내의 내용을 살펴보죠 &lt;br /&gt;&lt;br /&gt;add함수를 보면&lt;br /&gt;&lt;br /&gt;int add(int a, int b)&lt;br /&gt;{&lt;br /&gt;   return(a+b);              /* a와 b를 더해서 리턴 */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 되어 있습니다. &lt;br /&gt;우선 리턴하는 결과는 정수입니다. int가 정수를 의미하거든요. &lt;br /&gt;int와 같은 것에 대해서는 다음 강좌때 배움니다. &lt;br /&gt;그리고 인수는 a, b두개인데, 아까 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;result=add(3,5); &lt;br /&gt;&lt;br /&gt;이렇게 호출했으므로 a에는 3이, b에는 5가 각각 들어갑니다. &lt;br /&gt;그리고 다음줄은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return(a+b); /* a와 b를 더해서 리턴 */ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것인데.. &lt;br /&gt;이건 함수의 처리를 끝내고 함수를 빠져 나오라는 것 입니다. &lt;br /&gt;또한 함수를 빠져 나올때 a와 b를 더해서 결과로 리턴하라는 것이죠. &lt;br /&gt;여기에 쓰인 return은 이렇게 함수를 빠져 나올때 쓰입니다. &lt;br /&gt;사용법은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return [리턴값]; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이때 리턴값이란 결과로 리턴을 해 줄 값을 말합니다. &lt;br /&gt;&lt;br /&gt;예를들어 3을 리턴해 주려고 한다면. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return 3; &lt;br /&gt;&lt;br /&gt;이렇게 써 주면 됨니다.. &lt;br /&gt;그리고 리턴값을 (와 )로 묶어주면 더 좋겠죠? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return(3); &lt;br /&gt;&lt;br /&gt;이렇게.. &lt;br /&gt;특히 리턴값이 식으로 표현될때는 묶어주는 습관을 기르도록 하세요.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;return(a+5); &lt;br /&gt;&lt;br /&gt;이렇게 말이에요. &lt;br /&gt;만약 함수가 아무 값도 리턴을 하지 않는다면, 리턴값은 생략해도 됨니다. &lt;br /&gt;&lt;br /&gt;add함수가 3+5를 더한 값인 8을 결과로 리턴하겠네요? &lt;br /&gt;그리고 리턴을 했으니 다시 main함수로 돌아와야 겠죠? &lt;br /&gt;이때 아까 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;result=add(3,5); &lt;br /&gt;&lt;br /&gt;이렇게 호출했으므로 result에는 8이 들어가겠군요. &lt;br /&gt;그럼 다음줄을 볼까요. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("Result:%d\n",result); /* result의 값을 출력한다. */ &lt;br /&gt;&lt;br /&gt;이것 역시 함수를 호출하는 건데.. &lt;br /&gt;result값을 화면에 표시하는 기능을 하는 것 입니다. &lt;br /&gt;그런데 좀 이상한게 있지 않나요?? &lt;br /&gt;printf라는 함수는 만들지도 않았는데 어떻게 호출했을까요?? &lt;br /&gt;그리고 선언 조차도 되어 있지 않죠? &lt;br /&gt;이 함수는 바로 stdio.h라는 파일에 선언되어 있습니다. &lt;br /&gt;stdio.h파일을 포함하는 이유가 바로 이것 때문이죠. &lt;br /&gt;물론 선언을 하지 않아도 상관 없지만 말입니다. &lt;br /&gt;그런데 이 함수를 선언했다 해도 실제 함수가 만들어져 있지 않죠? &lt;br /&gt;이 함수는 C언어 개발 패키지를 만든 곳에서 지원하는 함수로 그곳에서 만들어 컴파일해서 목적 파일로 만든 후 기타 다른 함수들의 목적 파일과 같이 하나의 파일로 묶여 있습니다. &lt;br /&gt;이렇게 목적 파일 한개 이상을 묶은 것을 라이브러리 라고 하고 확장자는 .LIB가 됨니다. &lt;br /&gt;저번 강의때 들은적이 있죠? 라이브러리란 말을.. &lt;br /&gt;그리고 저번 강의때 나온 런타임 라이브러리가 바로 printf함수가 들어있는 라이브러리로 이런 이유때문에 링크시에 런타임 라이브러리가 합쳐지는 것이죠. &lt;br /&gt;런타임 라이브러리가 없으면 printf라는 함수를 쓰지 못하게 되거든요. &lt;br /&gt;이렇게 해서 main함수가 끝났네요 그럼 프로그램이 종료되게 됩니다. &lt;br /&gt;이제 프로그램의 결과를 보기로 하죠. &lt;br /&gt;분석한게 맞았다면 결과가 8이 되겠죠? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\&gt;C2-1.EXE&lt;br /&gt;Result:8&lt;br /&gt;&lt;br /&gt;C:\&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;역시 맞군요.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3) 다시한번 정리.. &lt;br /&gt;이제 간단히 C프로그램의 구조를 정리해보겠습니다. &lt;br /&gt;C프로그램은 기본적으로 다음과 같은 구조로 되어 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 선행처리기 지시어 부분. &lt;br /&gt;&lt;br /&gt;2. 전역 데이터 및 함수 선언 부분. &lt;br /&gt;&lt;br /&gt;3. 함수 부분. &lt;br /&gt;&lt;br /&gt;처음으로 선행처리기 지시어 부분은 &lt;br /&gt;말 그대로 선행처리기 지시어들을 쓰는 부분입니다. &lt;br /&gt;#include외에 여러가지 지시어들은 나중에 배우게 됩니다. &lt;br /&gt;그리고 선행처리기 지시어는 반드시 #로 시작한다는 것을 기억하세요. &lt;br /&gt;&lt;br /&gt;두번째 부분은 전역 변수 및 함수 선언 부분 인데 전역 데이터를 선언하거나 함수를 선언하는 곳 입니다. &lt;br /&gt;전역 데이터란 모든 함수에서 사용할수 있는 데이터를 말하는 것으로 다음에 자세히 배움니다. &lt;br /&gt;그리고 함수 선언은 무엇인지 배우셨고... &lt;br /&gt;&lt;br /&gt;세번째 부분은 함수 부분 인데 실제적인 프로그램을 기술하는 곳으로서 가장 중요하다고 볼수 있죠. &lt;br /&gt;특히 main함수는 반드시 만들어야 한다는 것을 잊지 마시기 바랍니다. &lt;br /&gt;&lt;br /&gt;마지막으로 두번째부분은 다른 파일에 따로 기술하여 #include지시어를 통해 포함시키기도 하는데 &lt;br /&gt;이때 그 다른 파일을 헤더(앞부분이기 때문)파일이라고 하고 확장자는 .H입니다 &lt;br /&gt;그리고 stdio.h도 헤더파일 입니다. &lt;br /&gt;&lt;br /&gt;Previous:C의 구조&lt;br /&gt;Next:자료형(DATA TYPE)&lt;br /&gt;C언어에서의 데이터의 종류 &lt;br /&gt;&lt;br /&gt;C언어에서 데이터를 크게 분류하자면 수치 데이터와 문자 데이터로 분류할수 있습니다. &lt;br /&gt;&lt;br /&gt;수치 데이터는 0, 1, 100, 200등의 정수와 1.0, 2.0등등의 소수가 있고, 문자 데이터에는 'A', 'B'등의 문자와, "ABCDEFG"등의 문자열이 있습니다. &lt;br /&gt;&lt;br /&gt;그리고 데이터는 상수와 변수로도 구분할수 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;변수 &lt;br /&gt;&lt;br /&gt;변수란 프로그램에서 변할수 있는 값을 말합니다. &lt;br /&gt;&lt;br /&gt;정확히 말하지면 어떤 기억장소가 주어지는데 그 안의 값을 마음대로 바꿀수 있는 기억장소를 말합니다. &lt;br /&gt;&lt;br /&gt;변수를 사용하기 위해선 반드시 변수를 선언해야 합니다. &lt;br /&gt;&lt;br /&gt;즉 기억장소를 마련해야 쓸수 있는 것이죠 그럼 변수를 선언하는 방법에 대해 알아볼까요? 변수 선언은.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;변수의자료형태 변수명[=초기값, 변수명=초기값...]; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 합니다. &lt;br /&gt;&lt;br /&gt;여기서 변수의자료형태는 변수에 저장할 값이 정수인지 소수인지 문자인지 등등을 정하는 키워드를 쓰는 것 입니다. &lt;br /&gt;&lt;br /&gt;그리고 변수명은 그 변수를 상징하는 심볼이고 초기값은 처음에 들어갈 값인데 초기값이 필요 없으면 쓰지 않아도 됨니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그럼 자료형 키워드에 대해 알아보죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1) 문자형 &lt;br /&gt;&lt;br /&gt;문자형은 아주 작은 범위의 숫자를 다룰 때나, 아스키(ASCII) 문자를 표현하기 위해 사용되는데 부호에 따라 char, unsigned char의 2가지가 있습니다. &lt;br /&gt;&lt;br /&gt;이건 8비트로 되어 있고 1문자를 넣을수 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2) 정수 &lt;br /&gt;&lt;br /&gt;C에서 정수형을 나타내는 키워드는 int입니다. &lt;br /&gt;&lt;br /&gt;int는 정수라는 뜻의 integer를 줄여쓰는 것입니다. 정수형에는(signed) int, unsigned (int), (signed) long (int), unsigned long (int)의 4가지가 있습니다. &lt;br /&gt;&lt;br /&gt;( ) 표시한 부분은 생략 가능하다는 뜻이죠. 그래서 통상 C의 정수형은 int, unsigned, long, unsigned long 의 4가지가 있다고 기억하면 됩니다. &lt;br /&gt;&lt;br /&gt;이 형태의 크기는 환경에 따라 달라집니다. &lt;br /&gt;&lt;br /&gt;즉 16비트 프로그램의 경우 이 크기는 16비트이고, 윈도우즈 95와 같은 32비트 프로그램에선 32비트 입니다. &lt;br /&gt;&lt;br /&gt;하지만 지금은 16비트 환경인 도스에서 하므로, 이 크기는 16비트가 됩니다. &lt;br /&gt;&lt;br /&gt;그러므로 여기에는 -32768에서 32767까지 넣을수 있습니다. &lt;br /&gt;&lt;br /&gt;그런데 크기를 16비트 또는 32비트로 정확히 정하고 싶을때가 있죠? &lt;br /&gt;&lt;br /&gt;그럴땐 short, long키워드를 사용합니다. &lt;br /&gt;&lt;br /&gt;short또는 long를 int앞에 써주면 되죠 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;short int a=3; &lt;br /&gt;&lt;br /&gt;long int b, c; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로.. &lt;br /&gt;&lt;br /&gt;여기서 short를 써주면 16비트가 되고 long를 써주면 32비트가 됨니다. &lt;br /&gt;&lt;br /&gt;그리고 이때는 int를 생략해도 됨니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;short a=3; &lt;br /&gt;&lt;br /&gt;long b, c; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게.. &lt;br /&gt;&lt;br /&gt;만약 long를 썼다면 32비트 이므로 -2147483648에서 &lt;br /&gt;&lt;br /&gt;2147483647까지 넣을수 있죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3) 소수 &lt;br /&gt;&lt;br /&gt;그리고 다음은 소수에 형태의 키워드 입니다. &lt;br /&gt;&lt;br /&gt;소수 형태에 키워드에는 float와 double이 있습니다. &lt;br /&gt;&lt;br /&gt;두개의 차이는 float는 32비트이고 double는 64비트라는 것 입니다. &lt;br /&gt;&lt;br /&gt;float에는 -3.4E-38에서 3.4E+38까지를 넣을수 있고 &lt;br /&gt;&lt;br /&gt;double에는 -1.7E-308에서 1.7E+308까지를 넣을수 있죠. &lt;br /&gt;&lt;br /&gt;여기서 E다음에 나오는 수는 지수를 말합니다. &lt;br /&gt;&lt;br /&gt;즉 -3.4E-38은 -3.4의 -38승을 말합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(4) 숫자와 문자간의 관계 &lt;br /&gt;&lt;br /&gt;숫자와 문자간의 관계를 알아보죠. &lt;br /&gt;&lt;br /&gt;C에서는 숫자가 곧 문자이고 문자가 곧 숫자라는것을 &lt;br /&gt;&lt;br /&gt;알아두시기 바랍니다. 즉 숫자 65는 곧 아스키 코드 65인 문자 A이고 &lt;br /&gt;&lt;br /&gt;문자 A는 곧 숫자 65입니다. 그러니까 65는 A라는 것이죠. &lt;br /&gt;&lt;br /&gt;그러므로 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char a='A'; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char a=65; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것과 똑같습니다. &lt;br /&gt;&lt;br /&gt;또한 여기서처럼 char형에도 숫자를 넣을수가 있습니다. &lt;br /&gt;&lt;br /&gt;char형에는 -128에서 127까지 넣을수 있죠. &lt;br /&gt;&lt;br /&gt;물론 int형에도 문자를 넣을수가 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(5) 부호 처리 &lt;br /&gt;&lt;br /&gt;이번엔 부호 처리를 결정하는 &lt;br /&gt;&lt;br /&gt;signed와 unsigned에 대해 알아보도록 하겠습니다. &lt;br /&gt;&lt;br /&gt;우선 이것은 char형과 int형에 대해서만 사용할수 있다는 것을 알아두세요. &lt;br /&gt;&lt;br /&gt;char과 int형에는 +와 -부호가 있습니다.(물론 float, double에도 있지만..) &lt;br /&gt;&lt;br /&gt;int형의 경우 16비트 중에서 1비트가 부호를 나타내는 것이고, &lt;br /&gt;&lt;br /&gt;나머지 15비트가 숫자 크기를 나타내죠. &lt;br /&gt;&lt;br /&gt;이 1비트를 sign비트라고 합니다. &lt;br /&gt;&lt;br /&gt;이런 sign비트가 있는 변수를 만드느냐 아니면 없는 변수를 만드느냐를 &lt;br /&gt;&lt;br /&gt;정하는 키워드가 signed와 unsigned입니다. &lt;br /&gt;&lt;br /&gt;이것은 변수형 앞에 써 주면 되고 signed를 쓰면 sign비트를 만들고 &lt;br /&gt;&lt;br /&gt;unsigned를 쓰면 sign비트를 만들지 않습니다. &lt;br /&gt;&lt;br /&gt;예를 들자면.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;signed int a; &lt;br /&gt;&lt;br /&gt;unsigned int b; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로.. &lt;br /&gt;&lt;br /&gt;그런데 signed는 디폴트 입니다. &lt;br /&gt;&lt;br /&gt;즉 쓰지 않으면 signed로 하는 것이죠. &lt;br /&gt;&lt;br /&gt;그러니까 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;signed int a; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이건 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int a; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이거랑 똑같습니다.. &lt;br /&gt;&lt;br /&gt;만약 unsigned를 쓰면 sign비트가 없고 모든 비트를 &lt;br /&gt;&lt;br /&gt;숫자 크기를 나타내는데 씀니다. 그래서 부호를 처리하지 않습니다. &lt;br /&gt;&lt;br /&gt;그러므로 양수만을 넣을수 있지만 더 큰 수를 넣을수 있죠. &lt;br /&gt;&lt;br /&gt;unsigned char에는 0에서 255까지 &lt;br /&gt;&lt;br /&gt;unsigned int나 unsigned short에는 0에서 65535까지 &lt;br /&gt;&lt;br /&gt;unsigned long에는 0에서 4294967296까지 넣을수 있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(6) 변수에 값 치환 &lt;br /&gt;&lt;br /&gt;다음으로 변수에 값을 넣는 방법을 알아야 하는데 &lt;br /&gt;&lt;br /&gt;이건 아주 간단합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;변수명=값; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게만 해주면 되거든요. &lt;br /&gt;&lt;br /&gt;예를 들자면.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;a=10; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 a에 10을 넣으라는 것이죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것으로 변수에 대한 설명을 마치겠습니다. &lt;br /&gt;&lt;br /&gt;그럼 지금까지 나온 변수 형태를 정리해 보죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 형&lt;br /&gt; bit&lt;br /&gt; byte&lt;br /&gt; 범 위&lt;br /&gt; &lt;br /&gt;문자형&lt;br /&gt; char &lt;br /&gt;unsigned char&lt;br /&gt; 8 &lt;br /&gt;&lt;br /&gt;8&lt;br /&gt; 1 &lt;br /&gt;&lt;br /&gt;1&lt;br /&gt; -128∼127 &lt;br /&gt;&lt;br /&gt;0∼255&lt;br /&gt; &lt;br /&gt;열거형&lt;br /&gt; enum 16&lt;br /&gt; 2&lt;br /&gt; -32768∼32767&lt;br /&gt; &lt;br /&gt;정수형&lt;br /&gt; int &lt;br /&gt;unsigned &lt;br /&gt;&lt;br /&gt;long &lt;br /&gt;&lt;br /&gt;unsigned long&lt;br /&gt; 16 &lt;br /&gt;&lt;br /&gt;16 &lt;br /&gt;&lt;br /&gt;32 &lt;br /&gt;&lt;br /&gt;32&lt;br /&gt; 2 &lt;br /&gt;&lt;br /&gt;2 &lt;br /&gt;&lt;br /&gt;4 &lt;br /&gt;&lt;br /&gt;4&lt;br /&gt; -32768∼32767 &lt;br /&gt;&lt;br /&gt;0∼65535 &lt;br /&gt;&lt;br /&gt;-2147483648∼2147483647 &lt;br /&gt;&lt;br /&gt;0∼4294967295&lt;br /&gt; &lt;br /&gt;부동형&lt;br /&gt; float &lt;br /&gt;double &lt;br /&gt;&lt;br /&gt;long double&lt;br /&gt; 32 &lt;br /&gt;&lt;br /&gt;64 &lt;br /&gt;&lt;br /&gt;80&lt;br /&gt; 4 &lt;br /&gt;&lt;br /&gt;8 &lt;br /&gt;&lt;br /&gt;10&lt;br /&gt; ±3.4e-38∼±3.4e+38 &lt;br /&gt;&lt;br /&gt;±1.7e-308∼±1.7e+308 &lt;br /&gt;&lt;br /&gt;±3.4e-4916∼±1.1e+4932&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;여기서 문자열에 관한 데이터형은 없는데 C에는 문자열 데이터형이 없습니다. &lt;br /&gt;&lt;br /&gt;그래서 특별한 방법으로 문자열을 처리하기 때문에 조금 후에 배우기로 하죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;상수 &lt;br /&gt;&lt;br /&gt;상수는 프로그램에서 변할수 없는 값을 말합니다. &lt;br /&gt;&lt;br /&gt;상수는 크게 두가지로 나눌수 있는데 바로 실재값과 &lt;br /&gt;&lt;br /&gt;기억장소를 갖는 상수 입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1) 실재값 &lt;br /&gt;&lt;br /&gt;실재값은 말 그대로 실재값 입니다. 실재값이라고 밖에는 설명할수가 없겠군요. &lt;br /&gt;&lt;br /&gt;실재값중 수를 나타내는 실재값을 알아보죠. &lt;br /&gt;&lt;br /&gt;수를 나타내는 실재값은 정말 쉽습니다. &lt;br /&gt;&lt;br /&gt;10진수의 경우 부호를 쓴 후 값을 그대로 써주면 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들어 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;+20, -20, 5.2 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것 처럼 말입니다. &lt;br /&gt;&lt;br /&gt;그런데 부호가 +일 때는 생략해도 됨니다. &lt;br /&gt;&lt;br /&gt;그리고 8진수의 경우는 앞에 0을 써주면 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들어 013은 8진수 13이고, -015는 8진수 -15입니다. &lt;br /&gt;&lt;br /&gt;또한 8진수는 0에서 7까지의 8개의 수만 쓴다는 것도 기억하세요. &lt;br /&gt;&lt;br /&gt;마지막으로 많이 쓰이는 16진수는 &lt;br /&gt;&lt;br /&gt;앞에 0x를 써 주면 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들어 0x1A는 16진수 1A가 되고, -0x15는 16진수 -15가 되는 것 입니다. &lt;br /&gt;&lt;br /&gt;16진수는 &lt;br /&gt;&lt;br /&gt;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F &lt;br /&gt;&lt;br /&gt;이렇게 16개를 사용해 수를 표현합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;다음으로 문자를 나타내는 실재값이 있습니다. &lt;br /&gt;&lt;br /&gt;문자를 나타낼 때는 반드시 문자를 ''로 묶어야 합니다. &lt;br /&gt;&lt;br /&gt;""로 묶으면 문자열로 취급하기 때문에 반드시 ''로 묶어야 하죠. &lt;br /&gt;&lt;br /&gt;''로 묶을때와 ""로 묶을때의 차이는 조금 후에 알아보기로 하고.. &lt;br /&gt;&lt;br /&gt;문자 A를 나타낼 때는 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'A' &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 쓰면 됨니다. 더이상 설명이 필요 없죠? &lt;br /&gt;&lt;br /&gt;이제 실재값에 대해서는 이해하셨을 겁니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2) 기억 장소를 갖는 상수 &lt;br /&gt;&lt;br /&gt;다음은 기억 장소를 갖는 상수 인데, 이것은 변수와 똑같으나 &lt;br /&gt;&lt;br /&gt;값을 변경하지 못하는 것 입니다. &lt;br /&gt;&lt;br /&gt;이것도 변수처럼 선언해야 사용할수 있는데, &lt;br /&gt;&lt;br /&gt;선언하는건 변수 선언과 똑같지만 앞에 const키워드를 써야 하고 &lt;br /&gt;&lt;br /&gt;반드시 초기값이 있어야 한다는 것이 다름니다. &lt;br /&gt;&lt;br /&gt;예를 들어.. &lt;br /&gt;&lt;br /&gt;100이란 정수 값을 같는 a라는 이름의 상수는 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const int a=100; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 선언합니다. &lt;br /&gt;&lt;br /&gt;사용법도 변수와 똑같으나 안에 있는 값을 변경할수 없다는 것이 다름니다. &lt;br /&gt;&lt;br /&gt;이해가 되셨죠? &lt;br /&gt;&lt;br /&gt;Previous:C의 구성요소&lt;br /&gt;Next:문자열과 특수문자&lt;br /&gt;문자열 &lt;br /&gt;&lt;br /&gt;C언어 에는 문자열에 관한 데이터 형태가 없기 때문에 &lt;br /&gt;&lt;br /&gt;문자열을 처리하기 위해서는 특별한 방법을 사용해야 합니다. &lt;br /&gt;&lt;br /&gt;그 방법 중에는 배열을 사용한 방법과 포인터를 사용한 방법이 있는데 &lt;br /&gt;&lt;br /&gt;포인터를 사용한 방법은 포인터를 모른상태에선 이해가 어려울 것 입니다. &lt;br /&gt;&lt;br /&gt;그래서 여기서는 배열을 이용한 방법만을 배우기로 하고 &lt;br /&gt;&lt;br /&gt;포인터를 사용한 방법은 포인터를 배운 후에 배우겠습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1) 문자열 상수 (실재값). &lt;br /&gt;&lt;br /&gt;상수 중에서도 실재값 표현을 대해 배워보겠습니다. &lt;br /&gt;&lt;br /&gt;문자열 실재값은 아주 간단한데 &lt;br /&gt;&lt;br /&gt;그냥 ""로 문자열을 묶어 주기만 하면 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들자면 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"String" &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로 &lt;br /&gt;&lt;br /&gt;정말 간단하죠? 그럼 이 상수가 내부적으로는 어떻게 처리될까요? &lt;br /&gt;&lt;br /&gt;메모리 상에는 이런 식으로 들어갑니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        주소  0x01  0x02  0x03  0x04  0x05  0x06  0x07&lt;br /&gt; 아스키 코드  0x53  0x74  0x72  0x69  0x6E  0x67  0x00&lt;br /&gt;        문자     S     t     r     i     n     g  (NULL)&lt;br /&gt; (주소는 임의로 정한 주소임)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 문자열은 6문자 인데 7바이트를 사용하게 되죠. &lt;br /&gt;&lt;br /&gt;여기서 주소 0x01부터 0x06까지는 String의 각 문자에 해당하는 &lt;br /&gt;&lt;br /&gt;아스키 코드 값이 들어가 있습니다. 그리고 마지막 주소 0x07에는 &lt;br /&gt;&lt;br /&gt;0x00이 들어가 있는데 &lt;br /&gt;&lt;br /&gt;이렇게 아스키 0x00인 문자를 NULL문자라고 합니다. &lt;br /&gt;&lt;br /&gt;C에서는 이 NULL문자를 사용해 문자열을 처리하는데 &lt;br /&gt;&lt;br /&gt;시작 주소부터 이 NULL문자가 나올때 까지를 문자열로 하는 것이죠. &lt;br /&gt;&lt;br /&gt;즉 모든 문자열의 끝에는 NULL이 있다는 것 입니다. &lt;br /&gt;&lt;br /&gt;물론 이 NULL문자는 컴파일러가 &lt;br /&gt;&lt;br /&gt;알아서 넣어 줌니다. &lt;br /&gt;&lt;br /&gt;그리고 문자열의 길이는 이 NULL문자 전까지의 &lt;br /&gt;&lt;br /&gt;길이를 문자열의 길이로 하게 됨니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그럼 문자를 ''로 묶는 것과 ""로 묶는 것의 차이점은 다 아셨겠죠? &lt;br /&gt;&lt;br /&gt;'A'와 "A"가 있다고 합니다. &lt;br /&gt;&lt;br /&gt;''로 묶으면 그냥 하나의 문자로 &lt;br /&gt;&lt;br /&gt;처리하게 되고 단지 1바이트가 되는 것이죠. &lt;br /&gt;&lt;br /&gt;하지만 ""로 묶으면 문자열로 처리하게 되고 뒤에 NULL문자가 붙으므로 &lt;br /&gt;&lt;br /&gt;1바이트가 아닌 2바이트가 됩니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2) 문자열 변수 &lt;br /&gt;&lt;br /&gt;C에서는 변수에서 문자열 형태가 없으므로 문자 배열을 사용하면 &lt;br /&gt;&lt;br /&gt;문자열 처리가 가능합니다. &lt;br /&gt;&lt;br /&gt;배열은 아직 배우지 않았는데 자세히는 나중에 배우고 &lt;br /&gt;&lt;br /&gt;배열에 대해 간단히 알아보죠. &lt;br /&gt;&lt;br /&gt;배열은 어떤 같은 형태의 데이터를 쭉 연결해서 늘어 놓은 &lt;br /&gt;&lt;br /&gt;구조라고 생각하시면 됨니다. &lt;br /&gt;&lt;br /&gt;그러면 배열 선언 방법을 알아보죠. 아주 간단한데.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;데이터형태 배열이름[배열크기]; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 선언합니다. &lt;br /&gt;&lt;br /&gt;데이터형태는 배열의 데이터형태 이고, 배열이름은 그 배열을 상징하는 심볼 &lt;br /&gt;&lt;br /&gt;배열크기는 그 배열의 크기 즉 몇개의 데이터를 늘어 놓을지 쓰는 것 입니다. &lt;br /&gt;&lt;br /&gt;사용할때에는 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;배열이름[첨자]=값; &lt;br /&gt;&lt;br /&gt;변수=배열이름[첨자]; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로 사용합니다. &lt;br /&gt;&lt;br /&gt;여기서 첨자는 배열에서 늘어놓은 데이터중 몇번째것을 사용할 것인지를 &lt;br /&gt;&lt;br /&gt;정하는 것 입니다. 이때 첨자는 0부터 시작해야 하므로 &lt;br /&gt;&lt;br /&gt;첫번째 것을 지정하기 위해선 0을 써 주어야 합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그럼 이제 진짜로 문자배열을 사용한 문자열 처리법을 알아보죠. &lt;br /&gt;&lt;br /&gt;문자열을 저장할 문자배열을 선언하는 방법은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char 배열이름[문자열길이]=초기값; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 알아두면 됨니다. &lt;br /&gt;&lt;br /&gt;여기서 문자열 길이는 실재 길이보다 1이 더 크게 써야 합니다. &lt;br /&gt;&lt;br /&gt;이유는 문자열 뒤에는 꼭 NULL문자가 더 붙기 때문이죠. &lt;br /&gt;&lt;br /&gt;그럼 이렇게 선언되었으면 &lt;br /&gt;&lt;br /&gt;이 변수 안에 문자열을 넣는 방법을 알아야 겠죠?? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;char str[10]; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 문자 배열이 있다고 합시다. &lt;br /&gt;&lt;br /&gt;그럼 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;str="String"; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 될까요?? &lt;br /&gt;&lt;br /&gt;절대로 이렇게 할수는 없습니다. &lt;br /&gt;&lt;br /&gt;이유는 아까 배열을 사용할때는 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;배열이름[첨자]=값; &lt;br /&gt;&lt;br /&gt;변수=배열이름[첨자]; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 사용해야 한다고 배웠기 때문이죠. 그런데 위에는 첨자를 주지 않았습니다. &lt;br /&gt;&lt;br /&gt;그럼 어떻게 해야 할까요?? &lt;br /&gt;&lt;br /&gt;바로.. &lt;br /&gt;&lt;br /&gt;str[0]='S'; &lt;br /&gt;str[1]='t'; &lt;br /&gt;str[2]='r'; &lt;br /&gt;str[3]='i'; &lt;br /&gt;str[4]='n'; &lt;br /&gt;str[5]='g'; &lt;br /&gt;str[6]=NULL; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 되겠죠...퍽퍽~(사람들에게 맞는 소리)...으악..! &lt;br /&gt;&lt;br /&gt;이 방법이 좀 복잡하다구요?????? &lt;br /&gt;&lt;br /&gt;만약 문자열의 길이가.. 100문자라면....윽....정말 큰일이군요.. &lt;br /&gt;&lt;br /&gt;그래서 제공하는 함수가 있는데 string.h에 정의되어 있는 &lt;br /&gt;&lt;br /&gt;strcpy라는 함수 입니다. &lt;br /&gt;&lt;br /&gt;이 함수를 쓰면 문자배열에 간단히 문자열을 넣을수 있죠 &lt;br /&gt;&lt;br /&gt;사용법은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;strcpy(문자배열이름,문자열); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로 씀니다. &lt;br /&gt;&lt;br /&gt;예를 들어 아까 그것은 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;strcpy(str,"String"); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 간단히 할수 있습니다. 이제 잘 아시겠죠? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(3) 문자열 상수 (기억 장소를 갖는 상수) &lt;br /&gt;&lt;br /&gt;문자열 상수 중 기억장소를 갖는 문자열 상수에 대해 알아보죠. &lt;br /&gt;&lt;br /&gt;문자열 상수도 다른 상수처럼 선언하는 문장 앞에 const만 붙여 주고 &lt;br /&gt;&lt;br /&gt;초기값을 주면 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들어.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const char str[10]="String"; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 되죠. &lt;br /&gt;&lt;br /&gt;그런데 이때 문자열의 크기는 생략해도 됨니다. &lt;br /&gt;&lt;br /&gt;생략하면 컴파일러가 알아서 지정해 줌니다. &lt;br /&gt;&lt;br /&gt;예를 들어.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;const char str[]="String"; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 &lt;br /&gt;&lt;br /&gt;String의 길이인 6에 1을 더해 7로 &lt;br /&gt;&lt;br /&gt;자동으로 지정해 줌니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것으로 문자열 설명을 마치고 예제 하나를 보며 분석해 보죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C3-1.C&lt;br /&gt;   프로그램 내용 : 문자열 처리 프로그램. */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;string.h&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   char str[10];&lt;br /&gt;&lt;br /&gt;   strcpy(str,"String");&lt;br /&gt;   printf("%s\n",str);&lt;br /&gt;   str[1]='A';&lt;br /&gt;   printf("%s\n",str);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 프로그램을 분석해볼까요? 우선 입출력 함수인 printf와 &lt;br /&gt;&lt;br /&gt;문자열 복사 함수인 strcpy를 썼으므로 stdio.h와 string.h를 &lt;br /&gt;&lt;br /&gt;포함시켰습니다. &lt;br /&gt;&lt;br /&gt;그리고 main함수가 있고 내용을 보면 &lt;br /&gt;&lt;br /&gt;처음엔 str이라는 문자배열을 선언한 것이죠. &lt;br /&gt;&lt;br /&gt;그리고 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;strcpy(str,"String"); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이건 str에 "String"를 넣은 것이고요. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("%s\n",str); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이건 str에 들어있는 문자열을 출력한 것 입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;str[1]='A'; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이건 str배열 중 2번째 문자를 'A'로 바꾼 것이죠 &lt;br /&gt;&lt;br /&gt;왜 두번째 문자냐구요?? &lt;br /&gt;&lt;br /&gt;첨자의 시작은 0부터이니 1은 두번째 문자가 되죠. &lt;br /&gt;&lt;br /&gt;그 다음에는 다시 출력한 것 입니다. &lt;br /&gt;&lt;br /&gt;결과를 볼까요?? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\&gt;C3-1.EXE &lt;br /&gt;String &lt;br /&gt;SAring &lt;br /&gt;C:\&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;특수 문자 &lt;br /&gt;&lt;br /&gt;이제 마지막으로 특수 문자에 대해 알아보죠. &lt;br /&gt;&lt;br /&gt;특수 문자는 말 그대로 특별한 문자인데, 예를 들자면 &lt;br /&gt;&lt;br /&gt;""안에서 "를 쓴다던지 할 때에 쓰입니다. &lt;br /&gt;&lt;br /&gt;특수 문자는 모두 \(역슬래쉬)로 시작합니다. &lt;br /&gt;&lt;br /&gt;그럼 특수 문자를 자세히 살펴보죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; \a       Beep음을 컴퓨터 스피커로 출력&lt;br /&gt; \b       Back space(한칸 뒤로 갑니다..)&lt;br /&gt; \n       현재 위치한 줄의 다음 줄로 내려갑니다.&lt;br /&gt; \r       현재 위치한 줄의 멘 처음으로 갑니다..&lt;br /&gt; \t       수평 Tab&lt;br /&gt; \v       수직 Tab&lt;br /&gt; \\       \(역슬래쉬)&lt;br /&gt; \'       작은 따옴표&lt;br /&gt; \"       큰 따옴표&lt;br /&gt; \0       NULL문자&lt;br /&gt; \0??     8진수 ??에 대한 문자&lt;br /&gt; \x??     16진수 ??에 대한 문자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위에서 다 읽어보면 아실건데 &lt;br /&gt;&lt;br /&gt;\0??의 예를 들어보면.. &lt;br /&gt;&lt;br /&gt;\013은 아스키 코드 8진수 13에 해당하는 문자이고.. &lt;br /&gt;&lt;br /&gt;\x1F는 아스키 코드 16진수 1F에 해당하는 문자입니다.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;마지막으로 한가지 예제 소소를 보도록 합시다.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C3-2.C&lt;br /&gt;   프로그램 내용 : 특수 문자 예제 프로그램. */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   printf("C Programming\n");&lt;br /&gt;   printf("C \bProgramming\n");&lt;br /&gt;   printf("C Program\nming\n");&lt;br /&gt;   printf("\"C Programming\"");&lt;br /&gt;   printf("C Program\tming\n");&lt;br /&gt;   printf("C Programming\a\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 프로그램을 한번 잘 보시기 바랍니다 &lt;br /&gt;&lt;br /&gt;그리고 어떤 결과가 나올지 맞춰 보세요 &lt;br /&gt;&lt;br /&gt;이정도는 충분이 분석하실수 있겠죠? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\&gt;C3-2.EXE&lt;br /&gt;C Programming&lt;br /&gt;CProgramming&lt;br /&gt;C Program&lt;br /&gt;ming&lt;br /&gt;"C Programming"&lt;br /&gt;C Program       ming&lt;br /&gt;C Programming('삐'소리 발생)&lt;br /&gt;&lt;br /&gt;C:\&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;결과는 이렇습니다 &lt;br /&gt;&lt;br /&gt;왜 그런지는 잘 분석해 보세요. &lt;br /&gt;&lt;br /&gt;이번 강좌를 잘 보셨다면 충분히 이해가 되실 겁니다. &lt;br /&gt;&lt;br /&gt;Previous:자료형(DATA TYPE)&lt;br /&gt;Next:지역변수,전역변수,정적변수&lt;br /&gt;지역 변수 &lt;br /&gt;&lt;br /&gt;지역 변수란 어떤 한정되 지역 에서만 사용할수 있는 변수를 말합니다. &lt;br /&gt;&lt;br /&gt;블럭 안에서 선언된 변수는 모두 지역 변수이고, 이때 이 블럭이라는 &lt;br /&gt;&lt;br /&gt;한정된 지역에서만 이 변수를 사용할수 있습니다. &lt;br /&gt;&lt;br /&gt;그리고 지역 변수는 그 변수가 선언된 블럭이 끝나면 &lt;br /&gt;&lt;br /&gt;그 변수에 들어있는 값을 잃게 됨니다. &lt;br /&gt;&lt;br /&gt;참고로 지역 변수를 선언할때는 블럭의 윗부분에 선언을 해야 합니다. &lt;br /&gt;&lt;br /&gt;모든 작업 전에 선언해야 하죠. 그렇지 않으면 에러가 납니다. &lt;br /&gt;&lt;br /&gt;예제 소스 하나를 보도록 하죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C4-1.C&lt;br /&gt;   프로그램 내용 : 지역 변수를 설명하는 프로그램. */&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   int a;&lt;br /&gt;   {&lt;br /&gt;      int b;&lt;br /&gt;      a=5;&lt;br /&gt;      b=10;&lt;br /&gt;   }&lt;br /&gt;   a=10;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 소스는 지역 변수를 설명하기 위한 간단한 소스 입니다. &lt;br /&gt;&lt;br /&gt;우선 a라는 변수는 main함수의 블럭 안에 있으므로 지역 변수가 됨니다. &lt;br /&gt;&lt;br /&gt;그러므로 main함수의 블럭 안에서만 사용 가능하죠. &lt;br /&gt;&lt;br /&gt;그리고 main함수 안에는 또 블럭이 있습니다. &lt;br /&gt;&lt;br /&gt;그리고 그 블럭 안에는 변수 b가 선언 되어 있는데 &lt;br /&gt;&lt;br /&gt;이것두 블럭 안에 있으므로 지역 변수가 되죠 또한 이거 역시 그 블럭 안에서만 &lt;br /&gt;&lt;br /&gt;사용할수 있습니다. &lt;br /&gt;&lt;br /&gt;그런데 그 블럭에서 변수 a에 5를 대입하고 있는데 &lt;br /&gt;&lt;br /&gt;a는 이 블럭 밖에 선언되어 있죠..? &lt;br /&gt;&lt;br /&gt;이렇게 블럭 밖에 있는 변수에 대해서는 &lt;br /&gt;&lt;br /&gt;모두 사용이 가능합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;전역 변수 &lt;br /&gt;&lt;br /&gt;전역 변수는 지역 변수와는 다르게 한정된 지역이 아닌 모든 지역에서 &lt;br /&gt;&lt;br /&gt;사용이 가능한 변수를 말하는 것 입니다. &lt;br /&gt;&lt;br /&gt;블럭 밖에서 선언된 변수는 모두 전역 변수 이죠. &lt;br /&gt;&lt;br /&gt;그리고 전역 변수는 프로그램이 끝날때까지 들어있는 값을 &lt;br /&gt;&lt;br /&gt;계속 유지합니다. &lt;br /&gt;&lt;br /&gt;그럼 예제 소스를 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C4-2.C&lt;br /&gt;   프로그램 내용 : 전역 변수를 설명하는 프로그램. */&lt;br /&gt;int a;&lt;br /&gt;&lt;br /&gt;void func()&lt;br /&gt;{&lt;br /&gt;   a=5;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   func();&lt;br /&gt;   a=10;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 소스에서 모든 블럭 밖에 a라는 변수가 선언되어 있으므로 &lt;br /&gt;&lt;br /&gt;a는 전역 변수 입니다. &lt;br /&gt;&lt;br /&gt;그러므로 어느 곳에서든지 사용이 가능하죠 &lt;br /&gt;&lt;br /&gt;소스에소 볼수 있는것 처럼 a라는 변수는 main함수와 func라는 함수에서 &lt;br /&gt;&lt;br /&gt;모두 사용할수 있습니다. &lt;br /&gt;&lt;br /&gt;그러면 에제 하나를 더 볼까요? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름 : C4-3.C 프로그램 내용 : 전역 변수를 설명하는 프로그램. */ void func() { a=5; } int a; void main() { func(); a=10; } &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;입출력 함수 1 &lt;br /&gt;&lt;br /&gt;이제 입출력 함수 2가지를 배워 보죠. &lt;br /&gt;&lt;br /&gt;화면에 입출력 하는 함수로 가장 많이 쓰이는 것이 &lt;br /&gt;&lt;br /&gt;printf함수와 scanf함수 입니다. &lt;br /&gt;&lt;br /&gt;이것들에 대해 자세히 공부해 보도록 하죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(1) 출력 함수 printf &lt;br /&gt;&lt;br /&gt;화면 출력 함수중 가장 많이 쓰이는 printf함수를 배워 보겠습니다. &lt;br /&gt;&lt;br /&gt;이 함수는 지금까지 예제 소스에 많이 나왔던 것 이지만 따로 배운적은 &lt;br /&gt;&lt;br /&gt;없습니다. &lt;br /&gt;&lt;br /&gt;이제 그 printf함수에 대해 알아보죠. &lt;br /&gt;&lt;br /&gt;printf함수는 stdio.h라는 헤더 파일에 정의되어 있습니다. &lt;br /&gt;&lt;br /&gt;그리고 사용법을 간단히 본다면 다음과 같죠 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf(포맷문자열[,인수,인수..]); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;여기서 포맷 문자열이란 출력하는 형태를 지정하는 문자열이고 &lt;br /&gt;&lt;br /&gt;인수는 출력할 내용들 입니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;그럼 포맷문자열을 자세히 알아볼까요 &lt;br /&gt;&lt;br /&gt;포맷문자열을 구성하는 것은 일반 문자와 변환지정이 있습니다. &lt;br /&gt;&lt;br /&gt;일반 문자에 대해서는 화면에 그냥 출력되게 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들어 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("Example"); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 Example이 그냥 화면에 출력되죠 &lt;br /&gt;&lt;br /&gt;그런데 printf에서 중요한건 변환지정 입니다. &lt;br /&gt;&lt;br /&gt;변환지정은 %로 시작합니다. 사실 변환지정은 정말 무지무지하게 &lt;br /&gt;&lt;br /&gt;복잡하지만 지금은 간단한 것들만 배우도록 하죠. &lt;br /&gt;&lt;br /&gt;나머지는 나중에 더 자세히 배우기로 합시다. &lt;br /&gt;&lt;br /&gt;사실 자세하게 알 필요도 없지만.. &lt;br /&gt;&lt;br /&gt;변환지정은 간단히 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%[크기]타입 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 구조를 가진다고 보시면 됨니다. &lt;br /&gt;&lt;br /&gt;우선 타입부터 배우도록 하죠 &lt;br /&gt;&lt;br /&gt;타입 지정은 여러가지가 있는데 다음을 보도록 하세요. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;문자       인수 형태     출력&lt;br /&gt;------------------------------------------------------------------&lt;br /&gt; d 또는 i   정수          부호있는 10진 정수&lt;br /&gt; u          정수          부호없는 10진 정수&lt;br /&gt; o          정수          부호없는 8진 정수&lt;br /&gt; x          정수          부호없는 16진 정수(a,b,c,d,e,f사용)&lt;br /&gt; X          정수          부호없는 16진 정수(A,B,C,D,E,F사용)&lt;br /&gt; f          소수          부호있는 소수([-]???.??형태)&lt;br /&gt; e          소수          부호있는 소수([-]???.??..e[+/-]???형태)&lt;br /&gt; g          소수          주어진 값에 따라 f또는 e를 자동으로 선택..&lt;br /&gt; E          소수          부호있는 소수([-]???.??..E[+/-]???형태)&lt;br /&gt; G          소수          주어진 값에 따라 f또는 E를 자동으로 선택..&lt;br /&gt; c          문자          1문자&lt;br /&gt; s          문자열        문자열&lt;br /&gt; %          None          %를 출력&lt;br /&gt; p          포인터        포인터를 출력(????:????형태)&lt;br /&gt;------------------------------------------------------------------&lt;br /&gt;(e와 E의 차이는 지수 표시에 e를 쓰느냐와 E를 쓰느냐의 차이)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이것을 잘 읽어 보세요. &lt;br /&gt;&lt;br /&gt;그럼 한가지 예를 들어 보죠. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("%d",10); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 하면 10이 출력 됨니다. &lt;br /&gt;&lt;br /&gt;물론 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int a=10; &lt;br /&gt;printf("%d",a); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 해도 10이 출력되죠. &lt;br /&gt;&lt;br /&gt;이런 식으로 다른 것들도 사용하면 됨니다. &lt;br /&gt;&lt;br /&gt;printf함수는 직접 해보는 것이 가장 쉽게 &lt;br /&gt;&lt;br /&gt;배우는 방법입니다. &lt;br /&gt;&lt;br /&gt;그런데 만약 &lt;br /&gt;&lt;br /&gt;long int형이라면 어떻게 출력할까요? &lt;br /&gt;&lt;br /&gt;이런걸 지정하는 것이.. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%[크기]타입 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;여기서 크기 입니다. &lt;br /&gt;&lt;br /&gt;크기를 지정하는 문자는 2가지만 알아두도록 하세요. &lt;br /&gt;&lt;br /&gt;h와 l두가지 말입니다. &lt;br /&gt;&lt;br /&gt;h를 써 주면 short int가 되고 l을 쓰면 long int가 됨니다. &lt;br /&gt;&lt;br /&gt;예를 들어 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;short a=10; &lt;br /&gt;long b=20; &lt;br /&gt;printf("%hd",a); &lt;br /&gt;printf("%ld",b); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이럴때 사용합니다. &lt;br /&gt;&lt;br /&gt;그리고 인수는 여러개일수도 있는데 변환지정이 여러개이면 &lt;br /&gt;&lt;br /&gt;인수도 여러개이어야 합니다. &lt;br /&gt;&lt;br /&gt;예를 들어 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;printf("%d %c %f",10,'A',1.1); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이런 식으로.. &lt;br /&gt;&lt;br /&gt;이제 예제 하나만 보죠 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 파일 이름     : C4-7.C&lt;br /&gt;   프로그램 내용 : printf를 설명하는 프로그램. */&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;void main()&lt;br /&gt;{&lt;br /&gt;   int a=10;&lt;br /&gt;   long int b=12345678;&lt;br /&gt;   float c=0.2934;&lt;br /&gt;   double d=0.193303944665433356;&lt;br /&gt;   char e='C';&lt;br /&gt;   char f[]="String";&lt;br /&gt;&lt;br /&gt;   printf("%d\n%ld\n",a,b);&lt;br /&gt;   printf("%f\n%e\n",c,d);&lt;br /&gt;   printf("%c\n%s\n",e,f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이 프로그램은 printf를 사용하여 여러가지 형태로 출력하는 프로그램인데 &lt;br /&gt;&lt;br /&gt;잘 보시면 금방 이해 되실 겁니다. &lt;br /&gt;&lt;br /&gt;특별히 설명을 필요 없겠죠? &lt;br /&gt;&lt;br /&gt;그럼 결과를 볼까요? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C:\&gt;C4-7.EXE&lt;br /&gt;10&lt;br /&gt;12345678&lt;br /&gt;0.293400&lt;br /&gt;1.933039e-01&lt;br /&gt;C&lt;br /&gt;String&lt;br /&gt;&lt;br /&gt;C:\&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(2) 입력 함수 scanf &lt;br /&gt;&lt;br /&gt;scanf는 pr
