<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>sundries..</title>
	<link>http://such.egloos.com</link>
	<description>휴..</description>
	<language>ko</language>
	<pubDate>Thu, 05 Mar 2009 05:40:24 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>sundries..</title>
		<url>http://md.egloos.com/img/samplelogo2.gif</url>
		<link>http://such.egloos.com</link>
		<width>80</width>
		<height>80</height>
		<description>휴..</description>
	</image>
  	<item>
		<title><![CDATA[ 패키지 관리 ]]> </title>
		<link>http://such.egloos.com/2310688</link>
		<guid>http://such.egloos.com/2310688</guid>
		<description>
			<![CDATA[ 
  <div class="view" style="FONT-SIZE: 10pt; FONT-FAMILY: 994268_10"><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"><strong>rpm 패키지 관리</strong> </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">[1] 패키지(rpm) : 원하는 곳에 설치 자동으로 설치 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">[2] rpm 패키지의 구조 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">kernel-2.6.20-1kr.i586.rpm </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">(패키지명) (패키지버전) (패키지릴리즈) (아키텍처) (rpm확장자) </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">[3]RPM 명령 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 설치하기 : rpm -ivh 패키지명.rpm </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 업그레이드 : rpm -Uvh 패키지명.rpm (-U옵션은 반드시 대문자로) </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 제거하기 : rpm -e 패키지명 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 점검방법 : rpm -V 또는 -y 패키지 목록 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 만드는 방법 : rpm -b 패키지명 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&gt;&gt;최신 RPM패키지는 다음 사이트에서 검색을 통해 찾을수 있다. </span></p><p><a class="con_link" href="http://rpmfind.net/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://rpmfind.net</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p><a class="con_link" href="http://freshrpms.net/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://freshrpms.net</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p><a class="con_link" href="http://rpm.pbone.net/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://rpm.pbone.net</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p><a class="con_link" href="http://atrpms.net/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://atrpms.net</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p><a class="con_link" href="http://rpm.livna.org/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://rpm.livna.org</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&lt;실습&gt; zhcon패키지를 인터넷에서 구해서 rpm 명령으로 설치해 보자. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">[4] 패키지 정보 알아보기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">rpm -q [옵션] [패키지목록] </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">ex1) rpm qa | grep 패키지명 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">ex2) rpm -q -a&nbsp; |more&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 설치된 모든 패키지 출력 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -q make </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -qf `whhich make`&nbsp; &lt;--주의: 작은따옴표 아님 ~밑에 있는거&nbsp;&nbsp;&nbsp;&nbsp; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -qif /usr/bin/make&nbsp;&nbsp; &lt;-- 패키지 정보 요약 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -qip 패키지명&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 패키지 정보 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -ql make|more&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 설치된 패키지 파일 목록 보기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -q -s make | more&nbsp;&nbsp;&nbsp; &lt;- 패키지 상태 점검하기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -qc sendmail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 패키지 설정 알아보기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -qRp 패키지명&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 의존성 여부 알아보기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm -V [옵션] 패키지명&nbsp; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp; rpm _V sendmail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 패키지 검증 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 점검상태 표시 문자 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MD5 체크섬(파일 내용) </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 파일 크기 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 심볼릭 링크 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 파일 최종 변경 시간 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 장치 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 사용자 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 그룹 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 파일 허가권 또는 파일 형식 모드 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 스펙 옵션 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 설치되어 있는 모든 패키지의 정보 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-f &lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;file&gt;을 포함하고 있는 패키지의 정보 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-p &lt;package&gt;&nbsp; 지정한 패키지에 대한 정보 파악 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 정보 선택 옵션 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 패키지의 이름, 짧은 설명, 버전, 날짜, 제작자 등 정보를 원하고자 할 때 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 패키지의 모든 파일의 목록을 보고자 할 때 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 패키지의 모든 파일의 상태를 보고자 할 때 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 패키지 파일 목록 가운데 문서 파일만 보고자 할 때 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">-c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 패키지 파일 목록 가운데 환경 설정 파일을 보고자 할 때 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* RPM에 대한 자세한 정보 </span></p><p><a class="con_link" href="http://www.rpm.org/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://www.rpm.org/</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p><a class="con_link" href="http://www.redhat.com/" target="_blank"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">http://www.redhat.com/</span></a><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"> </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&gt;&gt;패키지 중복 설치시 제거 방법 : rpm -qa | grep 패키지명 , 중복확인 후 --allmatches 옵션 사용 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&gt;&gt; Tip &lt;&lt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 리눅스에서 msn메신저 사용하기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">~]# yum amsn amsn-plugins </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&gt;&gt; 소프트웨어 업그래이드 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"><strong>yum을 이용한 패키지 업데이트</strong> </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* yum(Yellowdog Updater, modified)란? </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">rpm패키지 설치시 자동적으로 의존성 문제를 처리하여 rpm 패키지를 안전하게 설치, 제거, 업그레이드 등의 작업을 스스로 알아서 해주는 지능형 도구. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* yum 패키지 설치 확인 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">rpm -q yum </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* yum 설정 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">cat /etc/yum.conf (수정 시에는 cat 대신 vi를 사용한다.) </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 설치 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum install 패키지명 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 업데이트 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum update </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; 시스넴 내에 설치되어 있는 업데이트 가능한 모든 패키지를 업데이트 할 수 있다. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 제거 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum remove &lt;패키지명&gt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">~]# yum remove thunderbird </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 검색 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum search &lt;검색어&gt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">~]# yum search thunderbird </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 정보 알아보기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum info &lt;패키지명&gt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">~]# yum info thunderbird </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 하드디스크에 있는 패키지 설치 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum localinstall &lt;패키지명&gt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&lt;실습&gt; /usr/src/fedhat/RPMS/i386 디렉토리의 xcdroast 팩키지를 설치해 보자. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"><strong>apt를 이용한 패키지 업데이트</strong> </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* apt(Advanced package Tool)은 데비안 리눅스용 패키지 업데이트 관리도구다. </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp; rpm 기반의 다른 리눅스 배폰판에서 사용할 수 있도록 포팅 되었다. rpm의 의존성 문제 해결. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* apt 설치 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum을 이용하여 apt패키지를 설치한다. </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">yum install apt </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;공개키 문제로 apt가 설치 되지 않을 경우 /etc/yum.conf파일의 gpgcheck=0으로 임시 수정 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* apt-get 사용법 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">apt-get [옵션] 명령 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">apt-get [옵션] installremove 패키지명 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">apt-get [옵션] source 패키지명 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 목록 업데이트 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get update </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 설치 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get install &lt;패키지명&gt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get reinstall &lt;패키지명&gt;&nbsp;&nbsp;&nbsp; &lt;-- 패키지 재설치 </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 제거 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get remove &lt;패키지명&gt; </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get --purge remove 패키지명&nbsp;&nbsp;&nbsp; &lt;--패키지의 설정파일 까지 모두 제거 된다. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 업그레이드 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get upgrade </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 정리하기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-get clean&nbsp;&nbsp;&nbsp; &lt;-- /var/cache/apt/archives의 모든 임시 설치파일을 제거 해 준다. </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 검색 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-cache search &lt;키워드&gt; </span></p><p>&nbsp;</p><p><br><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9">* 패키지 의존성 정보 알아보기 </span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 7367_9"># apt-cache depends &lt;패키지명&gt; </span></p><p>&nbsp;</p></div>			 ]]> 
		</description>

		<comments>http://such.egloos.com/2310688#comments</comments>
		<pubDate>Thu, 05 Mar 2009 05:40:24 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 성공 ]]> </title>
		<link>http://such.egloos.com/2074883</link>
		<guid>http://such.egloos.com/2074883</guid>
		<description>
			<![CDATA[ 
  <p><span style="COLOR: #8c7301">If A equals success,<br>then the formula is equals X plus Y plus Z,<br>with X being work, Y play,&nbsp;<br>and Z keeping your mouth shut.</span></p><p><span style="COLOR: #8c7301">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ㅡ Albert Einstein</span></p><p><span style="COLOR: #8c7301"></span>&nbsp;</p><p><span style="COLOR: #8c7301">[ 번역 ]</span></p><p><span style="COLOR: #8c7301">만약 A가 성공이라면,<br>성공의 공식은 A=X+Y+Z이다.<br>X는 일하는 것이고, Y는 노는 것이며,<br>Z는 입 다물고 있는 것이다.</span></p><p><span style="COLOR: #8c7301">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ㅡ알버트 아인슈타인</span></p><p>&nbsp;</p>			 ]]> 
		</description>

		<comments>http://such.egloos.com/2074883#comments</comments>
		<pubDate>Mon, 06 Oct 2008 07:57:05 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ egloos 스킨 소스 변경 ]]> </title>
		<link>http://such.egloos.com/2063219</link>
		<guid>http://such.egloos.com/2063219</guid>
		<description>
			<![CDATA[ 
  <p>--본문<br>&lt;DIV CLASS=POST&gt;<br>&nbsp;&lt;DIV CLASS=POST_HEAD&gt;<br>&nbsp;&lt;TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%&gt;<br>&nbsp;&lt;TR&gt;&lt;TD WIDTH=80%&gt;&lt;DIV CLASS=POST_TTL&gt;&lt;$postsubject$&gt;&lt;/DIV&gt;&lt;/TD&gt;<br>&nbsp;&nbsp;&lt;TD WIDTH=20% ALIGN=RIGHT&gt;&lt;$postadmin type=1$&gt;&lt;/TD&gt;&lt;/TR&gt;<br>&nbsp;&lt;/TABLE&gt;<br>&lt;/DIV&gt;</p><p>&lt;DIV CLASS=POST_BODY&gt;</p><p>&nbsp;&lt;$postcont$&gt;</p><p>&lt;/DIV&gt;</p><p>&lt;DIV CLASS=POST_TAIL&gt;&lt;$posttail$&gt;&lt;/DIV&gt;<br>&nbsp;&lt;$cmtjs$&gt;<br>&lt;/DIV&gt;</p><p>--CSS<br>/* A01025 CSS 1번 */</p><p>BODY&nbsp;{ BACKGROUND : #FFF; MARGIN : 30;PADDING : 0; }<br>BODY,TD,DIV,LI&nbsp;{ FONT : 10PT/150% GEORGIA,굴림,SANS-SERIF; COLOR : #000; }</p><p>A:LINK&nbsp;&nbsp;{ COLOR: #0000FF; TEXT-DECORATION: NONE }<br>A:VISITED&nbsp;{ COLOR: #0000FF; TEXT-DECORATION: NONE }<br>A:ACTIVE&nbsp;{ COLOR: #0000FF; TEXT-DECORATION: NONE }<br>A:HOVER&nbsp;&nbsp;{ COLOR: #813888; TEXT-DECORATION: UNDERLINE }</p><p>DIV#TOP {<br>&nbsp;BORDER-BOTTOM : 5PX #CC0000 SOLID;<br>&nbsp;MARGIN-BOTTOM : 30PX;<br>&nbsp;}</p><p>DIV#LEFT {<br>&nbsp;WIDTH : 100%;<br>&nbsp;MARGIN-BOTTOM : 50PX;<br>&nbsp;}<br>&nbsp;<br>DIV#RIGHT {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;MARGIN : 0PX 0PX 80PX 40PX;<br>&nbsp;}</p><p>DIV.HEADER {<br>&nbsp;FONT : BOLD 22PT/100% Courier New,TAHOMA,돋움,HY견고딕;<br>&nbsp;}<br>&nbsp;<br>DIV.HEADER A:LINK {COLOR: #000; TEXT-DECORATION: NONE}<br>DIV.HEADER A:VISITED {COLOR: #000; TEXT-DECORATION: NONE}<br>DIV.HEADER A:HOVER {COLOR: #888; TEXT-DECORATION: NONE; BORDER-BOTTOM: 1PX SOLID #FFF}</p><p>DIV.URL {<br>&nbsp;FONT : 8PT/100% VERDANA,TAHOMA ;<br>&nbsp;LETTER-SPACING : 1PX;<br>&nbsp;MARGIN : 6PX 0PX 20PX;<br>&nbsp;}<br>&nbsp;<br>DIV.URL A:LINK {COLOR: #555; TEXT-DECORATION: NONE}<br>DIV.URL A:VISITED {COLOR: #555; TEXT-DECORATION: NONE}<br>DIV.URL A:HOVER {COLOR: #AAA; TEXT-DECORATION: NONE; BORDER-BOTTOM: 1PX SOLID #FFF}<br>&nbsp;<br>DIV.USERMENU {<br>&nbsp;FONT : 8PT/100% VERDANA, 돋움;<br>&nbsp;TEXT-ALIGN : RIGHT;<br>&nbsp;MARGIN-BOTTOM : 7PX;<br>&nbsp;}<br>&nbsp;<br>DIV.USERMENU A:LINK {COLOR: #727272; TEXT-DECORATION: NONE}<br>DIV.USERMENU A:VISITED {COLOR: #727272; TEXT-DECORATION: NONE}<br>DIV.USERMENU A:HOVER {COLOR: #98A6E4; TEXT-DECORATION: UNDERLINE;BORDER-BOTTOM: 1PX SOLID #FFF}<br>&nbsp;<br>DIV.PROFILE {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;PADDING : 0PX 0PX 10PX;<br>&nbsp;LINE-HEIGHT : 150%;<br>&nbsp;OVERFLOW : HIDDEN;<br>&nbsp;}<br>&nbsp;<br>DIV.MN {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;LINE-HEIGHT : 150%;<br>&nbsp;}&nbsp;<br>&nbsp;<br>DIV.MNTTL {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;BORDER-BOTTOM : 1PX #AAA SOLID;<br>&nbsp;FONT : 9PT/150% 굴림,VERDANA;<br>&nbsp;PADDING : 2PX 0PX 0PX;<br>&nbsp;MARGIN : 25PX 0PX 10PX;<br>&nbsp;}</p><p>DIV.MEMOBODY {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;OVERFLOW : HIDDEN;<br>&nbsp;}</p><p>DIV.POST {<br>&nbsp;WIDTH : 100%;<br>&nbsp;MARGIN-BOTTOM : 60PX;<br>&nbsp;}</p><p>DIV.POST_HEAD {<br>&nbsp;BORDER-BOTTOM : 1PX #CCC SOLID;<br>&nbsp;MARGIN-BOTTOM : 15PX;<br>&nbsp;PADDING-BOTTOM : 3PX;<br>&nbsp;}<br>&nbsp;<br>DIV.POST_BODY {<br>&nbsp;WIDTH : 100%;<br>&nbsp;TEXT-ALIGN : LEFT;<br>&nbsp;MARGIN-BOTTOM : 30PX;<br>&nbsp;LINE-HEIGHT : 150%;<br>&nbsp;OVERFLOW : HIDDEN;<br>&nbsp;}</p><p>DIV.POST_BODY A&nbsp;&nbsp;&nbsp;{ BORDER-BOTTOM: 1PX DOTTED #0000FF }<br>DIV.POST_BODY A:LINK&nbsp;{ BORDER-BOTTOM: 1PX DOTTED #0000FF }<br>DIV.POST_BODY A:VISITED&nbsp;{ BORDER-BOTTOM: 1PX DOTTED #0000FF }<br>DIV.POST_BODY A:ACTIVE&nbsp;{ BORDER-BOTTOM: 1PX DOTTED #0000FF } <br>DIV.POST_BODY A:HOVER&nbsp;{TEXT-DECORATION: NONE; BORDER-BOTTOM: 1PX SOLID #813888 }</p><p>DIV.POST_TTL {<br>&nbsp;FONT : BOLD 11PT/150%;<br>&nbsp;}<br>&nbsp;<br>DIV.POST_TAIL {<br>&nbsp;FONT : 11PX/150% VERDANA, TAHOMA, 돋움;<br>&nbsp;MARGIN-TOP : 10PX;<br>&nbsp;TEXT-ALIGN : RIGHT;<br>&nbsp;}</p><p>DIV.COMMENT {<br>&nbsp;TEXT-ALIGN : LEFT;<br>&nbsp;BORDER : 1PX #D3D3D3 SOLID;<br>&nbsp;BACKGROUND : #F7F7F7;<br>&nbsp;PADDING : 10PX 15PX;<br>&nbsp;MARGIN : 20PX 0PX 20PX;<br>&nbsp;}</p><p>DIV.COMMENT_BODY {<br>&nbsp;MARGIN : 6PX 0PX 20PX;<br>&nbsp;LINE-HEIGHT : 140%;<br>&nbsp;}</p><p>DIV.COMMENT_TAIL {<br>&nbsp;MARGIN : 8PX 0PX 5PX;<br>&nbsp;FONT : 8PT/150% VERDANA, TAHOMA, 돋움;<br>&nbsp;COLOR : #777;<br>&nbsp;}<br>&nbsp;<br>DIV.COMMENT_INPUT {<br>&nbsp;MARGIN-TOP : 20PX;<br>&nbsp;BORDER-TOP : 1PX #AAA DOTTED;<br>&nbsp;PADDING-TOP : 20PX;<br>&nbsp;}</p><p>DIV.COMMENT_LINE {<br>&nbsp;BORDER-TOP : 1PX #AAA DOTTED;<br>&nbsp;MARGIN : 10PX 0PX 15PX;<br>&nbsp;}</p><p>DIV.TRACK_TOP {<br>&nbsp;LINE-HEIGHT : 170%;<br>&nbsp;}<br>&nbsp;<br>DIV.ARCHIVE_HEAD {<br>&nbsp;FONT-WEIGHT : BOLD;<br>&nbsp;MARGIN-BOTTOM : 10PX;<br>&nbsp;}<br>&nbsp;<br>DIV.ARCHIVE_BODY {<br>&nbsp;MARGIN : 20PX 0PX;<br>&nbsp;LINE-HEIGHT : 160%;<br>&nbsp;PADDING-BOTTOM : 100PX;<br>&nbsp;}&nbsp;</p><p>IMG.IMAGE_TOP {<br>&nbsp;MARGIN-BOTTOM : 15PX;<br>&nbsp;}<br>&nbsp;<br>IMG.IMAGE_LEFT {<br>&nbsp;MARGIN-RIGHT : 15PX;<br>&nbsp;MARGIN-BOTTOM : 15PX;<br>&nbsp;}&nbsp;</p><p>IMG.IMAGE_RIGHT {<br>&nbsp;MARGIN-LEFT : 15PX;<br>&nbsp;MARGIN-BOTTOM : 15PX;<br>&nbsp;}&nbsp;</p><p>IMG.IMAGE_MID {<br>&nbsp;MARGIN-TOP : 15PX;<br>&nbsp;MARGIN-BOTTOM : 15PX;<br>&nbsp;}</p><p>IMG.BOOKMK {<br>&nbsp;MARGIN : 10PX;<br>&nbsp;BORDER : 0PX;<br>&nbsp;}<br>&nbsp;<br>IMG.USERMENU {<br>&nbsp;MARGIN-LEFT : 8PX;<br>&nbsp;}&nbsp;<br>&nbsp;<br>IMG.LOGO {<br>&nbsp;MARGIN-BOTTOM : 10PX;<br>&nbsp;}</p><p>DIV.BANNER {<br>&nbsp;MARGIN : 30PX 0PX 10PX;<br>&nbsp;}<br>&nbsp;<br>DIV.BANNER_WIK { MARGIN : 20PX 0PX;&nbsp;}<br>&nbsp;<br>.SMALL { FONT-SIZE : 11PX; }<br>.DATE {&nbsp;FONT : BOLD 8PT/150% VERDANA, TAHOMA, 돋움; }<br>.TIME {&nbsp;FONT : 8PT/150% VERDANA, TAHOMA, 돋움; TEXT-ALIGN : LEFT; }<br>.AUTHOR { FONT : BOLD 9PT; }</p><p>.TXTFLD&nbsp;{FONT-SIZE:9PT;COLOR:#000; BORDER:1PX SOLID #666678; BACKGROUND:#FFF; }</p><p>DIV.CAL_TOP {&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>DIV.CAL {<br>&nbsp;MARGIN : 20PX 0PX 20PX;<br>&nbsp;WIDTH : 150PX;<br>&nbsp;TEXT-ALIGN : CENTER;<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>DIV.CAL_HEAD {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;FONT : 8PT/150% VERDANA;<br>&nbsp;TEXT-ALIGN : CENTER;<br>&nbsp;PADDING : 4PX 0PX;<br>&nbsp;MARGIN-BOTTOM : 10PX;<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>DIV.CAL_BODY {<br>&nbsp;WIDTH : 150PX;<br>&nbsp;TEXT-ALIGN : CENTER;<br>&nbsp;}</p><p>DIV.CAL_BOTTOM {&nbsp;}</p><p>.CAL&nbsp;&nbsp;{ FONT : 7PT/170% VERDANA, 돋움; TEXT-ALIGN : CENTER; }<br>.CAL_DAY&nbsp;{ FONT : BOLD 7PT/170% VERDANA, 돋움; TEXT-ALIGN : CENTER; }<br>.CAL_SUN&nbsp;{ FONT : BOLD 7PT/170% VERDANA, 돋움; COLOR : #D36654; TEXT-ALIGN : CENTER;&nbsp;}<br>.CAL_SAT&nbsp;{ FONT : BOLD 7PT/170% VERDANA, 돋움; COLOR : #3572A1; TEXT-ALIGN : CENTER;&nbsp;}<br>.CAL_TODAY&nbsp;{ FONT : BOLD 7PT/170% VERDANA, 돋움; BACKGROUND : #E3E3E3; COLOR : #3D5586; TEXT-ALIGN : CENTER; }<br>.CAL_TR {}</p><p>DIV.XML { FONT : 8PT/150% VERDANA; TEXT-ALIGN : CENTER; }<br></p>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/2063219#comments</comments>
		<pubDate>Wed, 01 Oct 2008 07:59:25 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 셀 변경 ]]> </title>
		<link>http://such.egloos.com/2063098</link>
		<guid>http://such.egloos.com/2063098</guid>
		<description>
			<![CDATA[ 
  <p>(1) 쉘변경</p><p># passwd -e <br>/bin/ksh &lt;-- 입력<br># ksh</p><p>(2) ~/.profile&nbsp; &amp; ~/.khsrc 변경</p><p># vi ~/.profile<br>ENV=~/.kshrc<br>export ENV<br># . ~/.profile</p><p># vi ~/.kshrc<br>PS1=[$LOGNAME@`hostname`:'$PWD]# '<br>export PS1<br># . ~/.kshrc<br>[root@testserver:/]# cd /export<br>[root@testserver:/export]#</p><p>위 과정중 hostname 양쪽에 있는 인용부호는 ESC key 아래 있는 것<br>또한 $PWD양쪽에 있는 것은 (double quote)" Key에 있는 (single quote)' 것<br>이것을 지키지 않으면 안 나오지.<br></p>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/2063098#comments</comments>
		<pubDate>Wed, 01 Oct 2008 06:41:20 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SQL문 작성법 25가지 ]]> </title>
		<link>http://such.egloos.com/1637305</link>
		<guid>http://such.egloos.com/1637305</guid>
		<description>
			<![CDATA[ 
  <div class="view" style="FONT-SIZE: 9pt; FONT-FAMILY: 돋움"><p><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed"><strong>1.데이터와 비즈니스 어플리케이션을 잘 알아야 한다.</strong></span></p><p><br><span style="FONT-FAMILY: verdana">동일한 정보는 다른 비즈니스 데이터 원천으로부터 검색될 수 있다. 이러한 원천에 익숙해야 한다. <br>당신은 당신의 데이터베이스 안의 데이터의 크기와 분포를 반드시 알아야 한다. <br>또한 SQL을 작성하기 전에 비즈니스 개체 안의 관계와 같은 데이터 모델을 전체적으로 이해해야 <br>한다. 이러한 이해는 당신이 여러 테이블에서 정보를 검색하는데 있어서 보다 좋은 쿼리를 작성할 <br>수 있다. DESIGNER/2000과 같은 CASE TOOLS은 다른 비즈니스와 데이터베이스 객체사이의 관계를 문서화 하는데 좋은 역할을 한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><br><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">2.실제 데이터를 가지고 당신의 쿼리를 검사하라.</span></strong> </span></p><p><br><span style="FONT-FAMILY: verdana">대부분의 조직은 개발, 검사, 제품의 3가지 데이터베이스 환경을 가진다. 프로그래머는 어플리케이션을 만들고 검사하는데 개발 데이터베이스 환경을 사용하는데, 이 어플리케이션이 제품 환경으로 전환되기 전에 프로그래머와 사용자에 의해 검사 환경하에서 보다 엄격하게 검토되어야 한다.</span></p><p><span style="FONT-FAMILY: verdana">SQL이 검사 환경하에서 테스트될 때, 검사 데이터베이스가 가지고 있는 데이터는 제품 데이터베이스를 반영해야 한다. 비실제적인 데이터를 가지고 테스트된 SQL문은 제품 안에서는 다르게 작동할 수 있다. 엄격한 테스트를 보장하기 위해서는, 검사 환경하에서의 데이터 분포는 반드시 제품 환경에서 의 분포와 밀접하게 닮아야 한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="BACKGROUND-COLOR: #ffdaed"><span style="FONT-FAMILY: verdana"><strong>3.동일한 SQL을 사용하라.</strong> </span></span></p><p><br><span style="FONT-FAMILY: verdana">가능한한 BIND VARIABLE, STORED PROCEDURE, PACKAGE의 이점을 활용하라. IDENTICAL SQL문의 이점은 PARSING이 불필요하기에 데이터베이스 서버안에서 메모리 사용의 축소와 빠른 수행을 포함한다. 예로서 아래의 SQL 문은 IDENTICAL하지 않다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * FROM EMPLOYEE WHERE EMPID = 10; <br>SELECT * FROM EMPLOYEE WHERE EMPID = 10; <br>SELECT * FROM EMPLOYEE WHERE EMPID = 20; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">그러나 I_EMPID라고 이름 주어진 BIND VARIABLE을 사용하면 SQL 문은 이렇게 된다. <br>SELECT * FROM EMPLOYEE WHERE EMPID = :I_EMPID; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed"><strong>4.주의 깊게 인덱스를 사용하라.</strong></span></p><p><br><span style="FONT-FAMILY: verdana">테이블상에 모든 필요한 인덱스는 생성되어야 한다. 하지만 너무 많은 인덱스는 성능을 떨어뜨릴 <br>수 있다. 그러면 어떻게 인덱스를 만들 칼럼을 선택해야 하는가? </span></p><p><span style="FONT-FAMILY: verdana">*최종 사용자에 의해 사용되는 어플리케이션 SQL과 쿼리의 WHERE 절에서 빈번하게 사용되는 칼럼에 인덱스를 만들어야 한다. </span></p><p><span style="FONT-FAMILY: verdana">*SQL 문에서 자주 테이블을 JOIN하는데 사용되는 칼럼은 인덱스되어야 한다. </span></p><p><span style="FONT-FAMILY: verdana">*같은 값을 가지는 ROW가 적은 비율을 가지는 칼럼에 인덱스를 사용하라. </span></p><p><span style="FONT-FAMILY: verdana">*쿼리의 WHERE 절에서 오직 함수와 OPERATOR로 사용되는 칼럼에는 인덱스를 만들면 안된다. </span></p><p><span style="FONT-FAMILY: verdana">*자주 변경되거나 인덱스를 만들때 얻는 효율성보다 삽입, 갱신, 삭제로 인해 잃는 효율성이 더 큰 <br>칼럼에는 인덱스를 만들면 안된다. 이러한 OPERATION은 인덱스를 유지하기 위한 필요 때문에 느려진다. </span></p><p><span style="FONT-FAMILY: verdana">*UNIQUE 인덱스는 더 나은 선택성 때문에 NONUNIQUE 인덱스보다 좋다. PRIMARY KEY 칼럼에 <br>UNIQUE 인덱스를 사용한다. 그리고 FOREIGN KEY 칼럼과 WHERE 절에서 자주 사용되는 칼럼에는 NONUNIQUE 인덱스를 사용한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">5.가용한 인덱스 PATH를 만들어라 </span></strong></p><p><br><span style="FONT-FAMILY: verdana">인덱스를 사용하기 위해서는 기술한 SQL문을 이용할 수 있는 식으로 SQL을 작성하라. OPTIMIZER는 인덱스가 존재하기 때문에 인덱스를 사용하는 ACESS PATH를 사용할 수 없다. 따라서 ACCESS PATH 는 반드시 SQL이 사용할 수 있게 만들어 져야 한다. SQL HINT를 사용하는 것은 인덱스 사용을 보증해주는 방법중 하나이다. 특정 ACCESS PATH를 선택하기 위한 다음의 힌트를 참고 하라 </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">6.가능하면 EXPLAIN과 TKPROF를 사용하라 </span></strong></p><p><br><span style="FONT-FAMILY: verdana">만약 SQL문이 잘 다듬어지지 않았다면 비록 오라클 데이터베이스가 잘 짜여져 있어도 효율성이 떨어질 것이다. 이럴 경우 EXPLAIN TKPROF에 능숙해져야 한다. EXPALIN PLAN은 SQL이 사용하는 ACCESS PATH를 발견할 수 있게 해주고 TKPROF는 실제 PERFORMANEC의 통계치를 보여준다. <br>이 TOOL은 오라클 서버 소프트웨어에 포함되어 있고 SQL의 성능을 향상시켜 준다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">7.OPTIMIZER를 이해하라. </span></strong></p><p><br><span style="FONT-FAMILY: verdana">SQL은 RULE-BASED나 COST-BASED중 하나를 이용해서 기동된다.기존의 소프트웨어는 RULE BASED 방식을 채택하고 있다. 그리고 많은 오라클 소프트웨어가 이러한 방식을 오랫동안 사용해 왔다. 그러나 새로 출시된 소프트웨어에 대해서는 COST BASED 방식의 OPTIMIZER를 고려해야 한다. <br>오라클은 새로 출시되는 프로그램을 COST BASED방식으로 업그레이드 시켜왔으며 이러한 방식은 시스템을 훨씬 더 안정적으로 만들었다. 만약 COST BASED방식의 OPTIMIZER를 사용한다면 반드시 ANALYZE 스키마를 정기적으로 사용해야 한다. ANALYZE스키마는 데이터베이스 통계를 데이터 사전 테이블에 기록하는 역할을 수행하며 그렇게 되면 COST BASED OPTIMIZER가 그것을 사용하게 된다. SQL은 COST BASED OPTIMIZER를 사용할 때만 잘 조정될 수 있다. 만약 RULE BASED에서 COST BASED로 바꾸고 싶다면 데이터베이스를 사용하는 모든 소프트웨어의 모든 SQL문의 성능을 평가해 보아야 한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">8.지엽적으로 동작하더라도 전역적으로 생각하라 </span></strong></p><p><br><span style="FONT-FAMILY: verdana">항상 주의할 것은 하나의 SQL문을 조정하기 위해 생긴 데이터베이스안의 변화는 다른 응용프로그램 이나 다른 사용자가 이용하는 다른 명령문에 영향을 미친다는 사실이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">9.WHERE절은 매우 중요하다. </span></strong><br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">비록 인덱스가 가용하다고 해도 다음의 WHERE 절은 그 인덱스 ACCESS PATH 를 사용하지 않는다. (즉 COL1 과 COL2는 같은 테이블에 있으며 인덱스는 COL1에 만들어진다.) </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">COL1 &gt; COL2 <br>COL1 &lt; COL2 <br>COL1 &gt; = COL2 <br>COL1 &lt;= COL2 <br>COL1 IS NULL <br>COL1 IS NOT NULL. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">인덱스는 NULL값을 갖는 칼럼에는 ROWID를 저장하지 않는다. 따라서 NULL값을 갖는 ROW를 검색할 때는 인덱스를 사용하지 못한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">COL1 NOT IN (VALUE1, VALUE2 ) <br>COL1 != EXPRESSION <br>COL1 LIKE '%PATTERN'. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">이럴 경우 THE LEADING EDGE OF THE INDEX(?) 는 작동되지 않고 인덱스가 사용되지 못하게 한다. 한편 COL1 LIKE 'PATTERN %'이나 COL1 LIKE 'PATTERN % PATTERN%' 는 한정된 인덱스 <br>스캔을 수행하기 때문에 인덱스를 사용할 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">NOT EXISTS SUBQUERY <br>EXPRESSION1 = EXPRESSION2. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">인덱스된 컬럼을 포함하는 표현(EXPRESSION), 함수, 계산(CALCULATIONS)은 인덱스를 사용하지 못한다. 다음의 예에서 보면 UPPER SQL 함수를 사용하면 인덱스 스캔을 사용할 수 없고 <br>FULL TABLE SCAN으로 끝나고 만다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT DEPT_NAME <br>FROM DEPARTMENT <br>WHERE UPPER(DEPT_NAME) LIKE 'SALES%'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">10.레코드 필터링을 위해서는 HAVING보다는 WHERE를 사용하라 </span></strong><br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">인덱스가 걸려있는 칼럼에는 GROUP BY와 같이 HAVING절을 사용하지 마라. 이 경우 인덱스는 사용 되지 않는다. 또한 WHERE절로 된 ROW를 사용하지 마라. 만약 EMP테이블이 DEPTID컬럼에 인덱스를 가지고 있다면 다음 질의는 HAVING 절을 이용하지 못한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT DEPTID, <br>SUM(SALARY) <br>FROM EMP <br>GROUP BY DEPTID <br>HAVING DEPTID = 100; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">그러나 같은 질의가 인덱스를 사용하기 위해 다시 씌여질 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT DEPTID, <br>SUM(SALARY) <br>FROM EMP <br>WHERE DEPTID = 100 <br>GROUP BY DEPTID; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">11. WHERE 절에 선행 INDEX 칼럼을 명시하라. </span></strong><br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">복합 인덱스의 경우, 선행 인덱스가 WHERE절에 명시되어 있다면 쿼리는 그 인덱스 를 사용할 것이다. 다음의 질의는 PART_NUM과 PRODUCT_ID 칼럼에 있는 PRIMARY KEY CONSTRAINT에 기초한 복합 인덱스를 이용할 것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * <br>FROM PARTS <br>WHERE PART_NUM = 100; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">반면, 다음의 쿼리는 복합인덱스를 사용하지 않는다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * <br>FROM PARTS <br>WHERE PRODUCT_ID = 5555; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">같은 요청(REQUEST)이 인덱스를 이용하기 위해 다시 씌어 질 수 있다. 다음 질의의 경우, <br>PART_NUM컬럼은 항상 0 보다 큰 값을 가질것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * <br>FROM PARTS <br>WHERE PART_NUM &gt; 0 <br>AND PRODUCT_ID = 5555; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">12.인덱스 SCAN과 FULL TABLE SCAN을 평가하라. <br></span></strong></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">한 행(ROW)의 15% 이상을 검색하는 경우에는 FULL TABLE SCAN이 INDEX ACESS PATH보다 빠르다. 이런 경우, SQL이 FULL TABLE SCAN을 이용할 수 있도록 여러분 스스로 SQL을 작성하라. <br>다음의 명령문은 비록 인덱스가 SALARY COLUMN에 만들어져 있어도 인덱스 SCAN을 사용하지 않을 것이다. 첫 번째 SQL에서, FULL HINT를 사용한다면 오라클은 FULL TABLE SCAN을 수행할 것이다. 인덱스의 사용이 나쁜 점이 더 많다면 아래의 기술을 이용해서 인덱스 수행을 막을수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * --+FULL <br>FROM EMP <br>WHERE SALARY = 50000; </span></p><p><span style="FONT-FAMILY: verdana">SELECT * <br>FROM EMP <br>WHERE SALARY+0 = 50000; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">다음의 명령문은 비록 인덱스가 SS# COLUMN에 있어도 인덱스 SCAN을 사용하지 않을 것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * <br>FROM EMP <br>WHERE SS# || ' ' = '111-22-333'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">오라클이 불분명한 데이터 변환을 수행해야 하는 경우 인덱스가 항상 사용되지않는 것은 아니다. <br>다음의 예를 보면, EMP 칼럼에 있는 SALARY는 숫자형 칼럼이고 문자형이 숫자값으로 변환된다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * <br>FROM EMP <br>WHERE SALARY = '50000'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">테이블의 행이 15%이거나 그보다 작을 경우 인덱스 스캔은 보다 잘 수행 될 것이다. 왜냐 하면 인덱스 스캔은 검색된 행(ROW)하나 하나 마다 다중의 논리적인 읽기 검색(READ)을 할 것이기 때문이 <br>다. 그러나 FULL TABLE SCAN은 하나의 논리적 인 읽기 검색 영역 안의 BLOCK에 있는 모든 행들을 읽을 수 있다. 그래서 테이블의 많은 행들에 접근해야 하는 경우에는 FULL TABLE SCAN이 낫다. <br>예로 다음의 경우를 보자. 만약 EMP TABLE과 그 테이블의 모든 인덱스에 대해 ANALYZE라는 명령어가 수행된다면, 오라클은 데이터 사전인 USER_TABLES와 USER_INDEXES에 다음과 같은 통계치를 산출해 낸다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">TABLE STATISTICS: <br>NUM_ROWS = 1000 <br>BLOCKS = 100 </span></p><p><span style="FONT-FAMILY: verdana">INDEX STATISTICS: </span></p><p><span style="FONT-FAMILY: verdana">BLEVEL = 2 <br>AVG_LEAF_BLOCKS_PER_KEY = 1 <br>AVG_DATA_BLOCKS_PER_KEY = 1 </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">이러한 통계치에 근거해서, 아래에 보이는 것이 각각의 다른 SCAN에 대한 논리적인 읽기(READ)-즉 ACESS된 BLOCK이 될 것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">USE OF INDEX TO RETURN ONE ROW = 3 </span></p><p><span style="FONT-FAMILY: verdana">(BLEVEL+(AVG_LEAF_BLOCKS_PER_KEY - 1) + <br>AVG_DATA_PER_KEY </span></p><p><span style="FONT-FAMILY: verdana">FULL TABLE SCAN = 100 <br>(BLOCKS) </span></p><p><span style="FONT-FAMILY: verdana">USE OF INDEX TO RETURN ALL ROWS = 3000 <br>(NUM_ROWS * BLOCKS ACCESSED TO RETURN ONE ROW USING INDEX) </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">13. 인덱스 스캔에 ORDER BY를 사용하라</span></strong> <br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">오라클의 OPTIMIZER는 , 만약 ORDER BY라는 절이 인덱스된 칼럼에 있다면 인덱스 스캔을 사용할 것이다. 아래의 질의는 이러한 점을 보여 주는 것인데 이 질의는 비록 그 칼럼이 WHERE 절에 명시되어 있지 않다고 해도 EMPID컬럼에 있는 가용한 인덱스를 사용할 것이다. 이 질의는 인덱스로부터 각각의 ROWID를 검색하고 그 ROWID를 사용하는 테이블에 접근한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT SALARY <br>FROM EMP <br>ORDER BY EMPID; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">만약 이 질의가 제대로 작동하지 않는다면, 당신은 위에서 명시되었던 FULL HINT를 사용하는 같은 질의를 다시 작성함으로써 다른 대안들을 이용해 볼 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><br><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">14. 자신의 데이터를 알아라</span></strong> </span></p><p><br><span style="FONT-FAMILY: verdana">내가 이미 설명한 것처럼, 당신은 당신의 데이터를 상세하게 알고 있어야 한다.예를 들어 당신이 <br>BOXER라는 테이블을 가지고 있고 그 테이블이 유일하지 않은 인덱스를 가진 SEX라는 컬럼과 <br>BOXER_NAME이라는 두 개의 테이블을 가지고 있다고 가정해 보자. 만약 그 테이블에 같은 수의 <br>남자, 여자 복서가 있다면 오라클이 FULL TABLE SCAN을 수행하는 경우 다음의 질의가 훨씬 빠를 것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT BOXER_NAME <br>FROM BOXER <br>WHERE SEX = 'F'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">당신은 다음과 같이 기술함으로써 질의가 FULL TABLE SCAN을 수행하는지를 확실하게 해둘수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT BOXER_NAME --+ FULL <br>FROM BOXER <br>WHERE SEX = 'F'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">만약 테이블에 980 명의 남성 복서 데이터가 있다면, 질의는 인덱스 SCAN으로 끝나기 때문에 <br>아래형식의 질의가 더 빠를 것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT BOXER_NAME --+ INDEX (BOXER BOXER_SEX) <br>FROM BOXER <br>WHERE SEX = 'F'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">이 예는 데이터의 분포에 대해 잘 알고 있는 것이 얼마나 중요한 가를 예시해 준다. 데이터가 많아지고(GROW) 데이터 분포가 변화하는 것처럼 SQL 도 매우 다양할 것이다. 오라클은 OPTIMIZER 가 테이블에 있는 데이터의 분포를 잘 인식하고 적절한 실행 계획을 선택하도록 하기 위해 오라클 7.3 에 HISTOGRAMS라는 기능을 추가했다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">15. KNOW WHEN TO USE LARGE-TABLE SCANS.</span></strong> </span></p><p><br><span style="FONT-FAMILY: verdana">작거나 큰 테이블에서 행들을 추출할 때, 전체 테이블의 검색은 인텍스를 사용한 검색보다 성능이 <br>더 좋을 수도 있다. 매우 큰 테이블의 인덱스 검색은 수많은 인덱스와 테이블 블록의 검색이 필요할 수도 있다. 이러한 블록들이 데이터베이 스 버퍼 캐쉬에 이동되면 가능한한 오래도록 그곳에 머무른다. 그래서 이러한 블록들이 다른 질의등에 필요하지 않을 수도 있기 때문에, 데이터베이스 버퍼 <br>히트 비율이 감소하며 다중 사용자 시스템의 성능도 저하되기도 한다. 그러나 전체 테이블 검색에 <br>의해서 읽혀진 블록들은 데이터베이스 버퍼 캐쉬에서 일찍 제거가 되므로 데이터베이스 버퍼 캐쉬 <br>히트 비율은 영향을 받지 않게 된다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">16. MINIMIZE TABLE PASSES</span></strong>. </span></p><p><br><span style="FONT-FAMILY: verdana">보통, SQL질의시 참조하는 테이블의 숫자를 줄임으로 성능을 향상시킨다. 참조되는 테이블의 숫자가 적을수록 질의는 빨라진다. 예를 들면 NAME, STATUS, PARENT_INCOME, SELF_INCOME의 네개의 컬럼으로 이루어진 학생 테이블 에서 부모님에 의존하는 학생과 독립한 학생의 이름과 수입에 대해서 질의시, 이 학생 테이블을 두번 참조하여 질의하게 된다.. </span></p><p><br><span style="FONT-FAMILY: verdana">SELECT NAME, PARENT_INCOME <br>FROM STUDENT <br>WHERE STATUS = 1 <br>UNION <br>SELECT NAME, SELF_INCOME <br>FROM STUDENT <br>WHERE STATUS = 0; <br>( NAME이 프라이머리 키이며, STATUS는 독립한 학생의 경우는 1, 부모님에 의존적인 학생은 0으로 표시한다) </span></p><p><br><span style="FONT-FAMILY: verdana">위의 같은 결과를 테이블을 두번 참조하지 않고도 질의 할 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT NAME,PARENT_INCOME*STATUS + SELF_INCOME(1-STATUS) <br>FROM STUDENT; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">17. JOIN TABLES IN THE PROPER ORDER. </span></strong></p><p><br><span style="FONT-FAMILY: verdana">다수의 테이블 조인시 테이블들의 조인되는 순서는 매우 중요하다. 전반적으로, 올바른 순서로 테이블이 조인되었다면 적은 수의 행들이 질의시 참조된다. 언제나 다수의 조인된 테이블들을 질의시 우선 엄격하게 조사하여 행들의 숫자를 최대한으로 줄인다. 이러한 방법으로 옵티마이저는 조인의 <br>차후 단계에서 적은 행들을 조사하게 된다. 뿐만 아니라, 여러 조인을 포함하는 LOOP JOIN에서는 <br>가장 먼저 참조되는 테이블(DRIVING TABLE)이 행들을 최소한으로 리턴하도록 해야한다. 그리고, <br>마스터와 상세 테이블 조인시에는(예를 들면 ORDER &amp; ORDER LINE ITEM TABLES) 마스터 테이블을 먼저 연결 시켜야 한다. 규칙에 근거한 옵티마이저의 경우에는 FROM CLAUSE의 마지막 테이블이 NESTED LOOP JOIN의 DRIVING TABLE이 된다. NESTED LOOP JOIN이 필요한 경우에는 LOOP 의 안쪽의 테이블에는 인텍스를 이용하는 것을 고려할 만하다. EXPLAIN PLAN과 TKPROF는 조인 타입, 조인 테이블 순서, 조인의 단계별 처리된 행들의 숫자들을 나타낸다. <br>비용에 근거한 옵티마이저의 경우에는 WHERE CLAUSE에 보여지는 테이블의 순서는 옵티마이저가 가장 최적의 실행 계획을 찾으려고 하는 것과 상관 없다. 조인되는 테이블의 순서를 통제하기 위해서 ORDERED HINT를 사용하는 것이 낫다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT ORDERS.CUSTID, ORDERS.ORDERNO, <br>ORDER_LINE_ITEMS.PRODUCTNO --+ORDERED <br>FROM ORDERS, ORDER_LINE_ITEMS <br>WHERE ORDERS.ORDERNO = ORDER_LINE_ITEMS.ORDERNO; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">18. USE INDEX-ONLY SEARCHES WHEN POSSIBLE.</span></strong> </span></p><p><br><span style="FONT-FAMILY: verdana">가능하다면, 인덱스만을 이용하여 질의를 사용하라. 옵티마이저는 오직 인덱스만을 찾을 것이다. <br>옵티마이저는 SQL을 만족시키는 모든 정보를 인덱스에서 찾을수 있을때,인덱스만을 이용할 것이다. <br>예를들면, EMP테이블이 LANME과 FNAME의 열에 복합 인덱스를 가지고 있다면 다음의 질의는 <br>인덱스만은 이용할 것이다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT FNAME <br>FROM EMP <br>WHERE LNAME = 'SMITH'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">반면에 다음의 질의는 인덱스와 테이블을 모두 참조한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT FNAME , SALARY <br>FROM EMP <br>WHERE LNAME = 'SMITH'; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">19. REDUNDANCY IS GOOD.</span></strong> </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">WHERE CLAUSE에 가능한한 많은 정보를 제공하라. 예를 들면 WHERE COL1 = COL2 AND COL1 = 10 이라면 옵티마이저는 COL2=10이라고 추론하지만, WHERE COL1 = COL2 AND COL2 = COL3이면 COL1=COL3이라고 초론하지는 않는다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">20. KEEP IT SIMPLE, STUPID.</span></strong> <br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">가능하면 SQL문을 간단하게 만들라. 매우 복잡한 SQL문은 옵티마이저를 무력화시킬 수도 있다. 때로는 다수의 간단한 SQL문이 단일의 복잡한 SQL문보다 성능이 좋을 수도 있다. <br>오라클의 비용에 근거한 옵티마이저는 아직은 완벽하지않다. 그래서 EXPLAIN PLAN에 주의를 기울여야 한다. 여기서 비용이란 상대적인 개념이기에 정확히 그것이 무엇을 의미하는지 알지 못한다. 하지만 분명한 것은 적은 비용이 보다 좋은 성능을 의미한다는 것이다. <br>종종 임시 테이블을 사용하여 많은 테이블들을 포함하는 복잡한 SQL 조인을 쪼개는 것이 효율적일 수도 있다. 예를 들면, 조인이 대량의 데이터가 있는 8개의 테이블을 포함할 때, 복잡한 SQL을 두 <br>세개의 SQL로 쪼개는 것이 낫을 수 있다. 각각의 질의는 많아야 네개정도의 테이블들을 포함하며 <br>중간 값을 저장 하는 것이 낫을 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><strong><span style="FONT-FAMILY: verdana; BACKGROUND-COLOR: #ffdaed">21. YOU CAN REACH THE SAME DESTINATION IN DIFFERENT WAYS. </span></strong></p><p><br><span style="FONT-FAMILY: verdana">많은 경우에, 하나 이상의 SQL문은 의도한 같은 결과를 줄 수 있다. 각각의 SQL은 다른 접근 경로를 사용하며 다르게 수행한다. 예를들면, MINUS(-) 산술자는 WHERE NOT IN (SELECT ) OR <br>ERE NOT EXISTS 보다 더 빠르다. <br>예를들면, STATE와 AREA_CODE에 각각 다른 인덱스가 걸려 있다. 인덱스에도 불구하고 다음의 질의는 NOT IN의 사용으로 인해 테이블 전체를 조사하게된다. </span></p><p><br><span style="FONT-FAMILY: verdana">SELECT CUSTOMER_ID <br>FROM CUSTOMERS <br>WHERE STATE IN ('VA', 'DC', 'MD') <br>AND AREA_CODE NOT IN (804, 410); </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">그러나 같은 질의가 다음 처럼 쓰여진다면 인덱스를 사용하게 된다 <br></span></p><p><span style="FONT-FAMILY: verdana">SELECT CUSTOMER_ID <br>FROM CUSTOMERS <br>WHERE STATE IN ('VA', 'DC', 'MD') <br>MINUS <br>SELECT CUSTOMER_ID <br>FROM CUSTOMERS <br>WHERE AREA_CODE IN (804, 410); </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">WHERE절에 OR을 포함한다면 OR대신에 UNION을 사용할 수 있다. 그래서, SQL 질의를 수행하기 <br>전에 먼저 실행계획을 조심스럽게 평가해야 한다. 이러한 평가는 EXPLAIN PLAN AND TKPROF를 이용하여 할 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">22. USE THE SPECIAL COLUMNS. </span></strong><br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">ROWID AND ROWNUM 열을 이용하라. ROWID를 이용하는 것이 가장 빠르다. <br>예를들면, ROWID를 이용한 UPDATE는 다음과 같다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT ROWID, SALARY <br>INTO TEMP_ROWID, TEMP_SALARY <br>FROM EMPLOYEE; </span></p><p><span style="FONT-FAMILY: verdana">UPDATE EMPLOYEE <br>SET SALARY = TEMP_SALARY * 1.5 <br>WHERE ROWID = TEMP_ROWID; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">ROWID값은 데이터베이스에서 언제나 같지는 않다. 그래서, SQL이나 응용 프로그램이용시 ROWID값을 절대화 시키지 말라. 리턴되는 행들의 숫자를 제한 시키기위해 ROWNUM을 이용하라. 만약에 리턴되는 행들을 정확히 모른다면 리턴되는 행들의 숫자를 제한하기위해 ROWNUM을 사용하라 </span></p><p><span style="FONT-FAMILY: verdana"><br>다음의 질의는 100개 이상의 행들을 리턴하지는 않는다. <br><p></p></span></p><p><span style="FONT-FAMILY: verdana">SELECT EMPLOYE.SS#, DEPARTMENT.DEPT_NAME <br>FROM EMPLOYEE, DEPENDENT <br>WHERE EMPLOYEE.DEPT_ID = DEPARTMENT.DEPT_ID <br>AND ROWNUM &lt; 100; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">23.함축적인 커서대신 명시적인 커서를 사용하라.</span></strong> <br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">함축적 커서는 여분의 FETCH를 발생시킨다. 명시적 커서는 DECLARE, OPEN, FETCH와 CLOSE <br>CURSOR문을 사용하여 개발자에 의해서 생성된다. 함축 커서는 DELETE, UPDATE, INSERT와 SELECT문을 사용하면 오라클에 의해서 생성된다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">24.오라클 병렬 쿼리 옵션을 찾아서 이용하라.</span></strong> <br></span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">병렬 쿼리 옵션을 사용하면, 보다 빠른 성능으로 SQL을 병렬로 실행할 수 있다. <br>오라클 7에서는, 오직 FULL TABLE SCAN에 기반한 쿼리만이 병렬로 수행될 수 있다. <br>오라클 8에서는, 인덱스가 분할되어있다면 INDEXED RANGE SCANS에 기반한 쿼리도 병렬로 처리될 수 있다. 병렬 쿼리 옵션은 다수의 디스크 드라이버를 포함하는 SMP와 MPP SYSTEM에서만 사용될 수 있다. </span></p><p><span style="FONT-FAMILY: verdana">오라클 서버는 많은 우수한 특성을 가지고 있지만, 이러한 특성의 존재만으로는 빠른 성능을 보장하지 않는다. 이러한 특성을 위해서 데이터베이스를 조정해야하며 특성을 이용하기 위해 특별하게 SQL 을 작성해야 한다. 예를 들면, 다음의 SQL은 병렬로 수행될 수 있다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SELECT * --+PARALLEL(ORDERS,6) <br>FROM ORDERS; </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana"><strong><span style="BACKGROUND-COLOR: #ffdaed">25.네트웍 소통량을 줄이고 한번에 처리되는 작업량을 늘려라</span></strong>. </span></p><p><br><span style="FONT-FAMILY: verdana">ARRAY PROCESSING과 PL/SQL BLOCK을 사용하면 보다 나은 성능을 얻을 수 있고 네트웍 소통량을 줄인다. ARRAY PROCESSING은 하나의 SQL문으로 많은 ROW를 처리할 수 있게 한다. 예를 들면, INSERT문에서 배열을 사용하면 테이블내의 1,000 ROW를 삽입할 수 있다. 이러한 기술을 사용하면 주요한 성능 향상을 클라이언트/서버와 배치시스템에서 얻어질 수 있다. </span></p><p><span style="FONT-FAMILY: verdana">복합 SQL문은 과도한 네트웍 소통을 유발할 수 있다. 그러나 만일 SQL문이 단일 PL/SQL 블록안에 있다면, 전체 블록은 오라클 서버에 보내져서 그곳에서 수행되고, 결과는 클라이언트의 APPLICATION에게 돌아온다. </span></p><p><span style="FONT-FAMILY: verdana">개발자와 사용자는 종종 SQL을 데이터베이스에서 데이터를 검색하고 전송하는 간단한 방법으로 사용 한다. 때때로 직접적으로 SQL을 작성하지 않고 코드 발생기를 사용하여 작성한 APPLICATION은 심각한 성능 문제를 일으킨다. 이러한 성능감퇴는 데이터베이스가 커지면서 증가한다. </span></p><p><span style="FONT-FAMILY: verdana"></span>&nbsp;</p><p><span style="FONT-FAMILY: verdana">SQL은 유연하기 때문에, 다양한 SQL문으로 같은 결과를 얻을 수 있다. 그러나 어떤 문은 다른 것보다 더 효율적이다. 여기에 기술된 팁과 기법을 사용하면 빠르게 사용자에게 정보를 제공할 수 있는 APPLICATION과 리포트를 얻을 수 있다 <div class="autosourcing-stub"><p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 11px 0px 7px; PADDING-TOP: 0px; FONT-STYLE: normal; FONT-FAMILY: Dotum"></p></div></span><div class="autosourcing-stub"><p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 11px 0px 7px; PADDING-TOP: 0px; FONT-STYLE: normal; FONT-FAMILY: Dotum">&nbsp;</p></div></div>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/1637305#comments</comments>
		<pubDate>Tue, 22 Apr 2008 23:29:30 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 키 코드 값 ]]> </title>
		<link>http://such.egloos.com/1577598</link>
		<guid>http://such.egloos.com/1577598</guid>
		<description>
			<![CDATA[ 
  <p>vbKeyLButton 1 마우스 왼쪽 단추 <br>vbKeyRButton 2 마우스 오른쪽 단추 <br>vbKeyCancel 3 취소키 <br>vbKeyMButton 4 마우스 가운데 단추 <br>vbKeyBack 8 &lt;백스페이스&gt;키 <br>vbKeyTab 9 &lt;Tab&gt;키 <br>vbKeyClear 12 &lt;Clear&gt;키 <br>vbKeyReturn 13 &lt;Enter&gt;키 <br>vbKeyShift 16 &lt;Shift&gt;키 <br>vbKeyControl 17 &lt;Ctrl&gt;키 <br>vbKeyMenu 18 &lt;Menu&gt;키 <br>vbKeyPause 19 &lt;Pause&gt;키 <br>vbKeyCapital 20 &lt;Caps Lock&gt;키 <br>vbKeyEscape 27 &lt;Esc&gt;키 <br>vbKeySpace 32 &lt;스페이스바&gt;키 <br>vbKeyPageUp 33 &lt;Page Up&gt;키 <br>vbKeyPageDown 34 &lt;Page Down&gt;키 <br>vbKeyEnd 35 &lt;End&gt;키 <br>vbKeyHome 36 &lt;Home&gt;키 <br>vbKeyLeft 37 &lt;왼쪽 화살표&gt;키 <br>vbKeyUp 38 &lt;위쪽 화살표&gt;키 <br>vbKeyRight 39 &lt;오른쪽 화살표&gt;키 <br>vbKeyDown 40 &lt;아래쪽 화살표&gt;키 <br>vbKeySelect 41 &lt;Select&gt;키 <br>vbKeyPrint 42 &lt;Print Screen&gt;키 <br>vbKeyExecute 43 &lt;Execute&gt;키 <br>vbKeySnapshot 44 &lt;Snapshot&gt;키 <br>vbKeyInsert 45 &lt;Ins&gt;키 <br>vbKeyDelete 46 &lt;Del&gt;키 <br>vbKeyHelp 47 &lt;Help&gt;키 <br>vbKeyNumlock 144 &lt;Nun Lock&gt;키 <br><br>KeyA부터 KeyZ까지는 해당 ASCII 값과 같습니다: 'A'부터 'Z' <br>상수 값 설명 <br>vbKeyA 65 A 키 <br>vbKeyB 66 B 키 <br>vbKeyC 67 C 키 <br>vbKeyD 68 D 키 <br>vbKeyE 69 E 키 <br>vbKeyF 70 F 키 <br>vbKeyG 71 G 키 <br>vbKeyH 72 H 키 <br>vbKeyI 73 I 키 <br>vbKeyJ 74 J 키 <br>vbKeyK 75 K 키 <br>vbKeyL 76 L 키 <br>vbKeyM 77 M 키 <br>vbKeyN 78 N 키 <br>vbKeyO 79 O 키 <br>vbKeyP 80 P 키 <br>vbKeyQ 81 Q 키 <br>vbKeyR 82 R 키 <br>vbKeyS 83 S 키 <br>vbKeyT 84 T 키 <br>vbKeyU 85 U 키 <br>vbKeyV 86 V 키 <br>vbKeyW 87 W 키 <br>vbKeyX 88 X 키 <br>vbKeyY 89 Y 키 <br>vbKeyZ 90 Z 키 </p><p>Key0부터 Key9까지는 해당 ASCII 값과 같습니다: '0'부터 '9' <br>상수 값 설명 <br>vbKey0 48 0 키 <br>vbKey1 49 1 키 <br>vbKey2 50 2 키 <br>vbKey3 51 3 키 <br>vbKey4 52 4 키 <br>vbKey5 53 5 키 <br>vbKey6 54 6 키 <br>vbKey7 55 7 키 <br>vbKey8 56 8 키 <br>vbKey9 57 9 키 </p><p>기능 키 <br>상수 값 설명 <br>vbKeyF1 112 F1 키 <br>vbKeyF2 113 F2 키 <br>vbKeyF3 114 F3 키 <br>vbKeyF4 115 F4 키 <br>vbKeyF5 116 F5 키 <br>vbKeyF6 117 F6 키 <br>vbKeyF7 118 F7 키 <br>vbKeyF8 119 F8 키 <br>vbKeyF9 120 F9 키 <br>vbKeyF10 121 F10 키 <br>vbKeyF11 122 F11 키 <br>vbKeyF12 123 F12 키 <br>vbKeyF13 124 F13 키 <br>vbKeyF14 125 F14 키 <br>vbKeyF15 126 F15 키 <br>vbKeyF16 127 F16 키</p><p>숫자키 모음의 키 <br>상수 값 설명 <br>vbKeyNumpad0 96 0 키 <br>vbKeyNumpad1 97 1 키 <br>vbKeyNumpad2 98 2 키 <br>vbKeyNumpad3 99 3 키 <br>vbKeyNumpad4 100 4 키 <br>vbKeyNumpad5 101 5 키 <br>vbKeyNumpad6 102 6 키 <br>vbKeyNumpad7 103 7 키 <br>vbKeyNumpad8 104 8 키 <br>vbKeyNumpad9 105 9 키 <br>vbKeyMultiply 106 곱하기 기호(*) 키 <br>vbKeyAdd 107 더하기 기호(+) 키 <br>vbKeySeparator 108 &lt;Enter&gt;키(숫자키 모음) <br>vbKeySubtract 109 빼기 기호(-) 키 <br>vbKeyDecimal 110 소수점(.)키 <br>vbKeyDivide 111 나누기 기호(/) 키 </p>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/1577598#comments</comments>
		<pubDate>Thu, 03 Apr 2008 00:06:09 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ GetPrivateProfileString API  ]]> </title>
		<link>http://such.egloos.com/1577544</link>
		<guid>http://such.egloos.com/1577544</guid>
		<description>
			<![CDATA[ 
  <p>ini 형식의 파일을 읽고 쓰기 편하게 만들어 놓은 API</p><p><br>kkk.ini 라는 파일에 아래와 같은 내용이 있을 때에<br>-----------------------------------------------------------------------------------------<br>[AAA]<br>a1=안녕하세요<br>a2=안녕히 계세요</p><p>[BBB]<br>b1=어서오세요<br>b2=GG<br>-----------------------------------------------------------------------------------------</p><p>아래처럼 함수를 호출하면<br>-----------------------------------------------------------------------------------------<br>TCHAR buf[256];<br>GetPrivateProfileString("BBB", "b1", "", buf, 256, "kkk.ini");<br>-----------------------------------------------------------------------------------------</p><p>buf 에 "어서오세요" 가 복사됨</p>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/1577544#comments</comments>
		<pubDate>Wed, 02 Apr 2008 23:15:49 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Jxx - 점프 명렁문 ]]> </title>
		<link>http://such.egloos.com/1574754</link>
		<guid>http://such.egloos.com/1574754</guid>
		<description>
			<![CDATA[ 
  <p>Jxx - 점프 명렁문</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 어셈명령어&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 의 미&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 점프 조건</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 1보다 클 경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=0 and ZF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 1보다 크거나 같을경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 1보다 작을 경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JBE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 1보다 작거나 같을경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=1 or ZF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 캐리 플래그가 1일경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=1</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JCXZ&nbsp;&nbsp;&nbsp;&nbsp; CX가 0일경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CX=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 같을 경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 클경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=0 and SF=OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 크거나 같을 경우 점프 (signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF=OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 작을 경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF != OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 작거나 같을 경우 점프 (signed)&nbsp;&nbsp;&nbsp;&nbsp; ZF=1 or SF != OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 무조건 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 조건없음</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 작을 경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=1 or ZF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNAE&nbsp;&nbsp;&nbsp;&nbsp; 결과가 작거나 같을경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 클 경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNBE&nbsp;&nbsp;&nbsp;&nbsp; 결과가 크거나 같을경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=0 and ZF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 캐리 플래그가 0일경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 클 경우 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 작을 경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=1 or SF != OF</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNGE&nbsp;&nbsp;&nbsp;&nbsp; 결과가 작거나 같을 경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF != OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 클 경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF=OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNLE&nbsp;&nbsp;&nbsp;&nbsp; 결과가 크거나 같을 경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=0 and SF=OF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 오버 플로우 하지 않으면 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNP&nbsp;&nbsp;&nbsp; Jump if No Parity(Parity가 뭔지 모르겠어요 ㅠ)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 Signed 가 아닐때 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 결과가 0 이 아닐때 점프Jump if Not Zero&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=0</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 오버 플로우 일 경우 점프(signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jump if Parity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jump if Parity Even&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JPO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jump if Parity Odd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PF=0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signed 이면 점프 (signed)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF=1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 이면 점프&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF=1</p><p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 클럭&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 바이트<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 오퍼랜드&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 808x&nbsp; 286&nbsp;&nbsp; 386&nbsp;&nbsp; 486&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 용량</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jx: jump&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp; 7+m&nbsp;&nbsp; 7+m&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no jump&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jx&nbsp; near-label&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp; 7+m&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; no jump&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 1</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 점프하는것이 그냥 내려오며 실행되는것보다 실행하는데 더 많은 시간을 소요하므로<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 코드를 정리하여 원하는 대로 점프 없이 실행되도록 하는것은 좋은 프로그래밍 연습<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 입니다.</p>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/1574754#comments</comments>
		<pubDate>Wed, 02 Apr 2008 01:48:00 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Linux]리눅스용 혹은 [Unix]유닉스 커맨드 팁 ]]> </title>
		<link>http://such.egloos.com/1547011</link>
		<guid>http://such.egloos.com/1547011</guid>
		<description>
			<![CDATA[ 
  <h4>0.0.0.1 서브 디렉토리까지 파일안의 문자열 모두 검색</h4><!-- % wrong tag % -->find ./ -name "*" -exec grep 'abc' {} \; -print find . -name -print -exec grep abc {} \; grep -r abc * <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-d2794c7ca8b1849931fd7665338f3ab3c42ab6a2"></a></p><h4>0.0.0.2 haha와 huhu가 동시에 들어있는 행 뽑기</h4><!-- % wrong tag % -->grep haha foo.txt | grep huhu <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-6dd4ed018f9ee0dd4e38b2241effc30456d6d412"></a></p><h4>0.0.0.3 찾아서 지우기</h4><!-- % wrong tag % -->find / -name "*.eml" -exec rm -f {} \; <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-33cf86acc3c44c23ad87dad0430452dcb62cf04d"></a></p><h4>0.0.0.4 공사중에 로그인 막기</h4><p>시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠? 그럴 때는, /etc/nologin 이라는 파일을 만들어,공사중 또는 Under Construction이라는 공지를 넣으면 됩니다. <p><a class="con_link" target="_blank" name="head-71fc053d98dba5cc439cb9f5761d7d837eaf0b08"></a></p><h4>0.0.0.5 크기가 가장 큰 파일, 디렉토리 찾기</h4><p>가장 큰 디렉토리를 찾으려면, <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;du&nbsp;-S&nbsp;|&nbsp;sort&nbsp;-n&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-e1d31e5755e76df5db4ea105ac8c7bdf51f7929d"></a></p><h4>0.0.0.6 가장 큰 파일을 찾으려면</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;ls&nbsp;-lR&nbsp;|&nbsp;sort&nbsp;+4n&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-53ef7d086e84f4c1c81b888454068f9e52163f40"></a></p><h4>0.0.0.7 현재 디렉토리의 크기만을 파악할때</h4><!-- % wrong tag % -->[root@dev2 local]# du -c -h --max-depth=0 * 6.4M apache 35M bin 43M dns 1.7M doc 42k etc 1.0k games 42k geektalkd 1.1M gnuws 1.1M include 41k info 19M jakarta-tomcat-3.2.3 0 jre 15M jre118_v3 25M lib 62k libexec 1011k man 1.3M mm.mysql.jdbc-1.2c 937k sbin 3.8M share 1.8M shoutcast-1-8-3-linux-glibc6 5.2M ssl 159M total <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-9a329823b3621ba39baebd6f6a3addcfcb736c84"></a></p><h4>0.0.0.8 시스템 정보 감추기</h4><p>/etc/inetd.conf 파일을 열어서, </p><!-- % wrong tag % -->telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-be8b7c5177e61b8c6fdd457b38590892c568548f"></a></p><h4>0.0.0.9 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">ps&nbsp;-aux&nbsp;|&nbsp;sort&nbsp;+4n&nbsp;</span></tt> 또는 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">ps&nbsp;-aux&nbsp;|&nbsp;sort&nbsp;+5n&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-ed1c22364092fd54469b8f0e7865aa9326343031"></a></p><h4>0.0.0.10 FTP로 들어온 사용자 확인하기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;ftpwho,ftpcount&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-b2c44fed3b12ed6a70898c1f36717e10e5c97ecb"></a></p><h4>0.0.0.11 원하지 않는 사용자 죽이기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[root@dream&nbsp;/root]#&nbsp;skill&nbsp;-KILL&nbsp;sunny&nbsp;</span></tt> </p><p>위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는 <p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[root@dream&nbsp;/root]#&nbsp;skill&nbsp;-KILL&nbsp;-v&nbsp;pts/14&nbsp;</span></tt> <p>이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다. <p><a class="con_link" target="_blank" name="head-fcf541499a87b042d4d67fac13387bf6f7507f69"></a></p><h4>0.0.0.12 less 결과를 vi로 보기</h4><p>less상태에서 v를 누르면 바로 vi로 감 </p><p><a class="con_link" target="_blank" name="head-0f18fc9b5c0d364c3aa8fa31a4e9ac676fef81a3"></a></p><h4>0.0.0.13 vi에서 블럭 설정하기</h4><p>alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다. </p><p>블럭을 설정 하신 뒤, <p>삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p <p><a class="con_link" target="_blank" name="head-2cf29f6edde582cf15665b09c92abac5e36e9ade"></a></p><h4>0.0.0.14 man 페이지 프린트하기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;man&nbsp;-t&nbsp;vi&nbsp;&gt;&nbsp;vi.ps&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-7a93a2cbc6c71c86b34d8145fcb9d932758a5ed9"></a></p><h4>0.0.0.15 ping 무시하기</h4><!-- % wrong tag % -->echo 1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all echo 0 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-b45abd41e3a7627cec5838dd3e15cecd674253fc"></a></p><h4>0.0.0.16 LILO 다시 살리기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;boot&nbsp;:&nbsp;vmlinuz&nbsp;root=/dev/hda6&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-59e2413ce84ac1299e0f4fd46f08fced86e8853b"></a></p><h4>0.0.0.17 특정 사용자 ftp 접근 막기</h4><p>/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다. <p><a class="con_link" target="_blank" name="head-c8629f21f53299bb00885b6fc53b6c609bd8decb"></a></p><h4>0.0.0.18 X 윈도우에서 TV보기</h4><p>리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다. 이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합 니다. 만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -&gt; Video For Linux -&gt; BT848 Video For Linux 항목을 모듈화 시키거나 커널에 포함하십시오. </p><p>TV 카드를 리눅스에 인식시키기 위해서 /etc/conf.modules 파일에 다음과 같은 내용을 삽입하고 컴퓨터를 다시 시작합니다. <p></p><!-- % wrong tag % -->alias char-major-81 bttv # 필립스 튜너의 경우 pre-install bttv modprobe -k tuner # 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9 <!-- % wrong tag % --><p>이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오. <p><a class="con_link" target="_blank" name="head-fc8ba1a89eef34355c5030524482ab71400e5bc3"></a></p><h4>0.0.0.19 ls라는 파일이 포함된 rpm패키지 찾기</h4><p>일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다. </p><!-- % wrong tag % -->rpm -qf /bin/ls [root@piruks /etc]# which ls /bin/ls [root@piruks /etc]# rpm -qf /bin/ls fileutils-4.0i-2mz <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-b799bad682a5d8626dbcc2f0499ad388fa6ef8bb"></a></p><h4>0.0.0.20 현재 rpm패키지의 의존패키지</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;rpm&nbsp;-qR&nbsp;패키지명&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-611f1be82e3ad78ca2d3f23121ed2770117300a0"></a></p><h4>0.0.0.21 현재 디렉토리크기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;du&nbsp;-h&nbsp;--max-depth=1&nbsp;.&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-301b4a05f9709806726211d721b17856988c07ce"></a></p><h4>0.0.0.22 바로 이전 디렉토리로 가기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;cd&nbsp;-&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-6f4d97870e56811a6be94aec41076a3a02caee28"></a></p><h4>0.0.0.23 프로세스명으로 프로세스 죽이기</h4><!-- % wrong tag % -->killall 프로세스명 kill -9 `pidof 프로세스명 <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-6e1443a58ecb9431e2d3c29613abb05525ae1378"></a></p><h4>0.0.0.24 하드웨어 시계맞추기</h4><p>배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다. </p><!-- % wrong tag % -->[root@dev /down]# rdate -s time.kriss.re.kr [root@dev /down]# clock -w <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-7868244430c0f74ff1fb40dc6cd12cbbd5ea8f23"></a></p><h4>0.0.0.25 원격에서 리모트서버의 X application실행시</h4><p>X윈도 app를 실행할때 다음과 같은 에러가 나면 조치 </p><!-- % wrong tag % -->[kang@dev /home/kang] xclock Xlib: connection to "211.222.186.170:0.0" refused by server Xlib: Client is not authorized to connect to Server Error: Can't open display: 211.222.186.170:0.0 export DISPLAY=211.222.186.170:0 xhost +211.222.186.170 <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-774adc088586ff18d79228adf54afcc4daeaa5e4"></a></p><h4>0.0.0.26 링크 파일</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">ln&nbsp;-sf&nbsp;링크할디렉토리&nbsp;링크로&nbsp;만들어질&nbsp;디렉토리&nbsp;</span></tt> 참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음. <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;ln&nbsp;-sf&nbsp;/www/dir_1/r_photo&nbsp;/www/dir_2/r_photo&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-eb7e94813ccc18237768e6346d6f52cd6c25f1a9"></a></p><h4>0.0.0.27 ^M 문자 없애기</h4><!-- % wrong tag % -->a = 1^M def vartest(a):^M a = a + 1^M return a^M a = vartest(a)^M print a^M <!-- % wrong tag % --><p>Unix류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 <sup>M</sup>J 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로 받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면 </p><ul><p>줄 끝마다 보기싫은 ^M이 붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.) </p></ul><p>PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다. <p>위는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠. 하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠. 명령은 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;:%s/(ctrl+v)M//g&nbsp;</span></tt> 입니다. <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;(ctrl+v)M&nbsp;</span></tt> 이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로 m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;%s/이것을/요걸로/g&nbsp;</span></tt> 입니다 그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠. 단, <sup>M의 경우 ctrl+M의 뜻인데 단순히 문자로 </sup>M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;(ctrl+v)M&nbsp;</span></tt> 으로 해주셔야 합니다. <p><a class="con_link" target="_blank" name="head-25265761c5521f347c550d74d2f7f17a3ee279d2"></a></p><h4>0.0.0.28 비어있는 행을 찾기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;#grep&nbsp;-n&nbsp;'^$'&nbsp;filename&nbsp;</span></tt> 정규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자 </p><!-- % wrong tag % -->[...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도 사용 [^..] .. 안에 없는 임의의 한 문자. 범위 사용가능 r* 0회 이상 r 반복 r+ 1회 이상 r 반복 r? 0 혹은 1회의 r r{n,m} n회 이상 m회 이하 r 반복 r1|r2 r1 혹은 r2 (egrep 만) (r) r 의 정규표현(egrep 만) <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-632ab3378fadf13c6fc74a87df1ddbdbb33abbee"></a></p><h4>0.0.0.29 기타 명령어 떼</h4><!-- % wrong tag % -->alias(명령어 간소화하기) <br>apropos(관련된 명령어 찾기) <br>arch(컴퓨터 종류 알기) <br>arp(같은 서브넷의 IP 보여주기) <br>at(작업 시간 정하기) <br>atd(계획성 있는 작업 실행하기) <br>awk(특정 패턴 문자 처리하기) <br>a2p(펄 파일로 바꾸기) <br>badblocks(배드 블럭 검사하기) <br>bc(계산기) <br>biff(메일 수신 소리로 확인하기) <br>bg(후면작업; 배경화면 설정) <br>bind(키나 함수 순서 결합하기) <br>break(루프 빠져나가기) <br>cal(달력보기) <br>builtin(내부 명령어 알아보기) <br>case(조건 처리하기) <br>cat(화면상에서 파일 보기) <br>cd(디렉토리 변경하기) <br>cfdisk(디스크 설정하기) <br>chattr(파일 속성 변경하기) <br>chfn(사용자 정보 변경하기) <br>chgrp(파일, 디렉토리가 속했던 그룹 바꾸기) <br>chmod(파일 권한 바꾸기) <br>chown(파일 주인 바꾸기) <br>chsh(지정된 셸 바꾸기) <br>cksum(CRC값을 점검한다) <br>clear(화면 청소하기) <br>clock(CMOS 시각을 조정하기) <br>cmp(파일 비교하기) <br>colcrt(문자 변환 필터) <br>colrm(열 삭제하기) <br>column(가로 정렬하기) <br>comm(파일 비교 출력하기) <br>command(명령어 알아보기) <br>continue(루프 계속돌기) <br>cp(파일 복사하기) <br>cpio(복사본 만들기) <br>crontab(cron을 관리한다) <br>csplit(파일에 서식, 규칙 정하기) <br>cut(필요한 필드만 출력하기) <br>date(날짜 보기) <br>dd(블럭장치 읽고 쓰기) <br>debugfs(ext2 파일 시스템 디버깅하기) <br>declare(변수 선언하기) <br>df(파일 시스템의 사용량 보기) <br>dirs(디렉토리 목록 표시하기) <br>dmesg(부팅 메시지 보기) <br>dnsdomainname(DNS 이름 출력) <br>domainname(NIS 이름 출력&amp;설정) <br>du(디렉토리와 파일의 용량 파악하기) <br>dumpe2fs(파일 시스템 정보 보기) <br>echo(표준 출력하기) eject(장치 해제하기) elm(메일 관련) enable(내부 명령어 지정) env(환경변수 출력하기) eval(인수 읽기) exec(셸 명령어 실행하기) exit(종료하기) expand(탭을 공백으로 변환하기) export(변수 지정하기) e2fsck(파일 시스템 복구하기) fc(지정된 편집기 받기) fdformat(플로피 디스크 포맷하기) fdisk(파티션 나누기) fg(지정된 작업을 전면 프로세스로 시작하기) file(파일 종류 보기) find(파일 찾기) finger(사용자 정보 알기) fold(정형화하기) fmt(정형화하기) for(반복 실행하기) free(메모리 사용량 알아보기) fsck(파일 시스템 검사하기) fstab(파일 시스템에 대한 고정적인 정보 저장하기) ftp(파일 전송 프로그램) fuser(프로세스 ID 출력) getkeycodes(매핑 테이블 출력하기) grep(특정 문자(열) 검색하기) gzexe(실행 파일 압축하기) gzip(압축하기) halt(시스템 종료하기) hash(기억해 두기; index 역할) head(파일의 앞부분 출력하기) help(도움말 보여주기) host(호스트 정보 보기) history(사용 명령어 목록보기) hostname(서버 이름 알기) id(계정 정보 알기) if(조건문 실행하기) ifconfig(랜카드에 주소 할당하기) imolamod(모듈 설치하기) inetd(인터넷 서비스의 최상위 데몬) init(실행 단계 정하기) ispell(철자법 검사하기) jobs(수행중인 프로세스 알기) kbd_mode(키보드 모드 출력하기) kill(프로세스 죽이기) klogd(커널 로그 데몬) ldd(공유 라이브러리의 의존성 알기) less(페이지 단위로 출력하기) let(정규식 표현하기) lilo(부팅하기) ln(링크하기) locate(패턴에 맞는 파일 찾기) login(로그인하기) logger(시스템 로그 기록하기) logname(사용자 로그인명 보여주기) logout(로그인 셸 종료하기) look(특정 단어 검색하기) losetup(중복 장치 확인하기) lpd(프린트 데몬) lpq(현재 프린트 작업 상태 출력하기) lpr(출력하기) lprm(대기열에 있는 문서 삭제하기) ls(디렉토리 내용보기) lsattr(파일 시스템의 속성 보여주기) lsdev(하드웨어 장치 출력하기) lsmod(모듈 정보 출력하기) mail(메일 관련) make(컴파일하기) man(매뉴얼 보기) mattrib mbadblocks mcd mcopy mdel mdeltree mdir mesg(메시지를 받을 수 있는지 확인하기) mformat minfo mkdir (디렉토리 만들기) mke2fs(파일 시스템 생성하기) mkfs(파일 시스템 만들기) mknod(특수 파일 만들기) mkswap(스왑 영역 지정하기) mlabel mmd mmount mmove mpartition mount(장치 연결하기) more(화면 단위로 출력하기) mrd mren mtoolstest mtype mutt(메일 관련) mv(파일 옮기기) mzip netstat(현재 네트웍 상황 보기) nice(프로세스 우선 순위 변경하기) od(8진수로 파일 보기) passwd(암호 입력하기) pidof(실행중인 프로그램의 프로세스 ID 찾기) pine(메일 관련) ping(네트웍 확인하기) popd(pushd 취소) ps(프로세스 상태 알기) pstree(프로세스 상관관계 알기) pwd(절대경로 보여주기) quota(디스크 한계량 알기) rarp(rarp 테이블 관리하기) rcp(원격 호스트에 파일 복사하기) rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기) rdate(네트웍으로 시간 설정하기) reboot(재부팅하기) rmmod(모듈 지우기) readonly(읽기 전용으로 표시하기) renice(프로세스 우선 순위 바꾸기) reset(터미널 초기화하기) restore(다시 저장하기) rlogin(바로 접속하기) rm(파일 지우기) rmdir (디렉토리 지우기) route(라우팅 테이블 추가/삭제하기) rpm(프로그램 추가/삭제) rpm2cpio(rpm을 cpio로 변환하기) rsh(원격으로 명령어 실행하기) rup(호스트 상태 출력하기) rusers(호스트에 로그인한 사용자 출력하기) rwall(호스트 사용자에게 메시지 뿌리기) script(기록하기) set(변수값 설정하기) setup(시스템 관련 설정하기) showmount(호스트의 마운트 정보 보여주기) shutdown(전원 끄기) sleep(잠시 쉬기) source(스크립트 번역하기) split(파일 나누기) ssh(암호화된 원격 로그인하기) stty(터미널라인 설정 보여주기) su(계정 바꾸기) suspend(셸 중단하기) swapoff (스왑 해제하기) swapon(스왑 활성화하기) sync(버퍼 재설정하기) syslogd(로그인 과정 설정하기) tac(거꾸로 보기) tail(문서 끝부분 출력하기) talk(이야기하기) tar(파일 묶기) tcpdchk(tcp wrapper 설정하기) tcpmatch(네트웍 요청에 대해 예측하기) tee(표준 입력으로부터 표준 출력 만들기) telnet(원격접속하기) test(테스트하기) times(셸에서의 사용자와 시스템 시간 출력하기) top(cpu 프로세스 상황 보여주기) tr(문자열 바꿔주기) true(종료 코드 리턴하기) type(유형 보기) ul(밑줄 처리해서 보여주기) ulimit(제한하기) umask(매스크 모드 설정하기) umount(장치 해제하기) unalias(별명 제거하기) uname(시스템 정보 보기) unexpand(공백 문자를 탭으로 변환하기) uniq(중복된 문장 찾기) useradd(사용자 계정 만들기) userdel(계정 삭제하기) usermod(사용자 계정정보 수정하기) unset(설정 변수 해제) uptime(시스템 부하 평균 보여주기) users(로그인된 사용자 보여주기) w(시스템에 접속한 사용자 상황 알아보기) wait(프로세스 기다리기) wall(모든 사용자에게 메시지 보내기) wc(문자, 단어, 라인수 세기) whatis(명령어의 간단한 설명보기) while(루프 명령어) who(사용자 알기) write(콘솔 상에서 간단한 메시지 보내기) xcopy(반복적으로 복사하기) XFree86 ypchfn(NIS에서 사용하는 chfn 명령어) ypchsh(NIS에서 사용하는 chsh 명령어) yppasswd(NIS에서 사용하는 passwd 명령어) zcat(압축 파일 보기) zcmp(압축 파일 비교하기) zforce(강제로 gz 만들기) zgrep(압축 상태에서 grep 실행하기) zmore(압축 상태에서 more 실행하기) znew(.Z 파일을 .gz로 다시 압축하기) <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-57c4a8445a4d4d48d28e3cd306397236cc35cc82"></a></p><h4>0.0.0.30 각자가 사용하는 컴퓨터의 정보를 알고 싶을때</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[root&nbsp;...]#more&nbsp;/proc/cpuinfo&nbsp;</span></tt> 위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며, <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[root&nbsp;...]#more&nbsp;/proc/meminfo&nbsp;</span></tt> 라고 치면 사용자의 메모리 정보를 볼수 있습니다. </p><p><a class="con_link" target="_blank" name="head-e2634943c8d3837bc11adf1fe45d75e34da6221d"></a></p><h4>0.0.0.31 전체 메일</h4><p>먼저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요! <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[&nbsp;root@aromi&nbsp;/root]#&nbsp;vi&nbsp;nea&nbsp;</span></tt> 안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다. </p><!-- % wrong tag % -->:wq [ root@aromi /root]# <!-- % wrong tag % --><p>만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다. </p><!-- % wrong tag % -->[ root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'` <!-- % wrong tag % --><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[공지]-&gt;&nbsp;</span></tt> 라고 쓴 것은 보낼 메일의 제목입니다. <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;'cat&nbsp;/etc/passwd|gawk&nbsp;-F&nbsp;:&nbsp;'{print$1}''&nbsp;</span></tt> -&gt;먼저 cat으로 passwd파일의 첫번째 나오는 내용을 출력하라는 소리입니다. nea라는 텍스트파일을 메일의 내용으로 보내라는 내용입니다. </p><p><a class="con_link" target="_blank" name="head-b1bd991c82224962d3b88b5a5e6c2cfac447b91a"></a></p><h4>0.0.0.32 디렉토리만 빠르게 검색</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;ls&nbsp;-al&nbsp;|&nbsp;grep&nbsp;"^d"&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-74c68d45ae12ee8fa8805a1529b406b9a39e05e0"></a></p><h4>0.0.0.33 호스트 네임 바꾸기</h4><p>/etc/HOSTNAME file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트 네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다. </p><!-- % wrong tag % -->[ root@linux /root]# vi /etc/sysconfig/network NETWORKING=yes HOSTNAME="linux" GATEWAY="" GATEWAYDEV="" FORWARD_IPV4="yes" <!-- % wrong tag % --><p>바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다. </p><p><a class="con_link" target="_blank" name="head-e1d8bef776492727f4fc9fdb22dd4d014c712257"></a></p><h4>0.0.0.34 틀린명령어 틀린글자만 바꿔서 실행</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;#&nbsp;./configure&nbsp;--prefax=/usr/local/apache&nbsp;</span></tt> 앗, 틀렸습니다. prefax가 아니라 prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다. <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;#&nbsp;^fax^fix^&nbsp;</span></tt> 라고 하면... <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;-&gt;&nbsp;./configure&nbsp;--prefix=/usr/local/apache&nbsp;</span></tt> 라고 됩니다.. </p><p><a class="con_link" target="_blank" name="head-8e42761b35bc432fdc2abf99913ddf52847b2aed"></a></p><h4>0.0.0.35 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;[&nbsp;root@aromi&nbsp;/root]#&nbsp;uname&nbsp;-a&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-04fd07c73a35668c174a47ac119219d490485a29"></a></p><h4>0.0.0.36 열려있는 포트 알아내기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;netstat&nbsp;-anp&nbsp;|&nbsp;grep&nbsp;LISTEN&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-3404338e40e86a1eca05115d1955ed86343594aa"></a></p><h4>0.0.0.37 텔넷 모든 접속자에게 메세지 보내기</h4><p>wall 내용... <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;Ctrl-D&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-adb1da7a7aab8036dfb754654f2c77ece607ab7d"></a></p><h4>0.0.0.38 lsof는 열려있는 파일을 나타내 주는 옵션</h4><p>여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠? </p><p><a class="con_link" target="_blank" name="head-1ec6d2dc40e89eac64c38a7972cf6e18f96c9083"></a></p><h4>0.0.0.39 사용자가 어디에서 무엇을 하는지 알아내기</h4><p>w라는 명령어를 사용하시면 된답니다. 이 때, <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;w&nbsp;[-s]&nbsp;</span></tt> 를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다. </p><p><a class="con_link" target="_blank" name="head-d36cebf7dc9ccf0ed08154505ff0105c6dcbb942"></a></p><h4>0.0.0.40 텔넷 화면 수정</h4><p>로그인화면: <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;/etc/issue.net&nbsp;</span></tt> 로그인후화면: <tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;/etc/motd&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-98d120999335583c07a34ea08b4d2baaf9bb5f40"></a></p><h4>0.0.0.41 하위 디렉토리 한꺼번에 만들기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">&nbsp;mkdir&nbsp;-p&nbsp;music/koreanmusic/ost&nbsp;</span></tt> </p><p><a class="con_link" target="_blank" name="head-c10fdcd4382a1acfa0c76ee2b49ee204dd632cc2"></a></p><h4>0.0.0.42 특정디렉토리의 모든 파일 안의 특정 문자열 치환</h4><!-- % wrong tag % -->for i in $*; do sed "s/paper/PAPER/g" &lt; $i &gt; $i.new mv -f $i.new $i done &lt;chihwan.sh&gt; find ./(chihwan.sh를 포함하지 않는 디렉토리면) -type f -exec chihwan.sh {} \; <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-296ff3405893aed91db0f80fd720d5dd5e306519"></a></p><h4>0.0.0.43 killall 명령 시뮬레이션 (프로세스명으로 죽이기)</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">ps&nbsp;aux&nbsp;|&nbsp;grep&nbsp;프로세스명&nbsp;|&nbsp;grep&nbsp;-v&nbsp;grep&nbsp;|&nbsp;awk&nbsp;'{&nbsp;print&nbsp;$w&nbsp;}'&nbsp;|&nbsp;xargs&nbsp;kill&nbsp;-9&nbsp;</span></tt> </p><ul><li>모든 프로세스 나열 <li>지정한 프로세스만 뽑아냄 <li>grep 명령이 포함된 라인 제거 <li>awk로 두번째 필드만 뽑아냄 <li>xargs에 의해 걸러진 아이디로 죽임 </li></ul><p><a class="con_link" target="_blank" name="head-b87234b3c33b2ed931bf065f93b1a3b6219b6bdf"></a></p><h4>0.0.0.44 find와 grep</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">find&nbsp;.&nbsp;-name&nbsp;"H20021115.*"&nbsp;-exec&nbsp;grep&nbsp;-l&nbsp;'...;........;110100'&nbsp;{}&nbsp;\;</span></tt> </p><p><a class="con_link" target="_blank" name="head-2f4f9f2d2163631817b0753bafb18e0502ca25a1"></a></p><h4>0.0.0.45 vi 검색, 치환</h4><p>구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">:%s/./\U&amp;/g</span></tt> </p><p>모든문자-&gt;대문자 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">g/^$/d</span></tt> <p><a class="con_link" target="_blank" name="head-1d0254a380ac9b18a52b104335f00ae093c166ab"></a></p><h4>0.0.0.46 파일내의 중복되는 행을 제거 : uniq</h4><p>입력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면 동일한 행이 존재할 수 있음. </p><p>sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자] [입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력 -u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자' 만큼의 필드는 무시 <p><a class="con_link" target="_blank" name="head-62bf0f06663d11bdc3b302809c3ea14327812e98"></a></p><h4>0.0.0.47 파일의 결합</h4><p>여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용 </p><!-- % wrong tag % -->cat [파일명1] [파일명2] ... &gt; [출력파일명] cat [파일명1] [파일명2] ... &gt;&amp; [출력파일명] cat [파일명1] [파일명2] ... &gt;&gt; [출력파일명] cat [파일명1] [파일명2] ... &gt;&gt;&amp; [출력파일명] cat - [파일명1], [파일명2] .. &gt;&gt; [출력파일명] cat - [파일명1], [파일명2] .. &gt;&gt;&amp; [출력파일명] % cat &gt; file1 파일명 : file1 ^D % cat &gt; file2 파일명 : file2 ^D % cat file1 file2 &gt; file3 % cat file3 파일명 : file1 파일명 : file2 % <!-- % wrong tag % --><p>행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합 </p><!-- % wrong tag % -->paste [파일명1] [파일명2].. paste -d리스트 [파일명1] [파일명2] ... paste -s [-d리스트] [파일명] d : 행간 결합시 행간 구분문자들의 리스트 s : 한파일의 연속되는 행을 결합 % cat &gt; paste.data1 홍길동 이순신 김유신 % cat &gt; paste.data2 부산 서울 대구 % paste paste.data1 paste.data2 홍길동 부산 이순신 서울 김유신 대구 % paste -d"\n" paste.data1 paste.data2 홍길동 부산 이순신 서울 김유신 대구 % paste -s -d"::\n" paste.data1 홍길동:이순신:김유신 % <!-- % wrong tag % --><p>두 파일을 동일한 필드 값에 따라 행 단위 결합 : join <p>관계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는 행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저 표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭, 개행문자가 기본, 연속적으로 나타날 경우 하나로 취급 <p></p><!-- % wrong tag % -->% cat &gt; join.data1 98001:서원일: 98002:홍길동: 98003:김유신: 98004:이순신: 98010:이상관: % cat &gt; join.data2 부산:98001:441 울산:98002:89 대구:98003:99 서울:98004:120 김해:98010:44 % join -j1 1 -j2 2 -t: join.data1 join.data2 98001:서원일::부산:441 98002:홍길동::울산:89 98003:김유신::대구:99 98004:이순신::서울:120 98010:이상관::김해:44 % join -j1 1 -j2 2 -o 1.2 1.1 2.1 -t: join.data1 join.data2 서원일:98001:부산 홍길동:98002:울산 김유신:98003:대구 이순신:98004:서울 이상관:98010:김해 % <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-29732ff367715ccd9c68c9fd110ec3e18f274558"></a></p><h4>0.0.0.48 파일의 암호화 : crypt</h4><p>파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용 </p><!-- % wrong tag % -->% cat &gt; crypt.data test test 안녕하십니까? ^D % crypt &lt;crypt.data &gt; crypt.data1 Enter key: hello % ls -l crypt* -rw-r--r-- 1 wiseo pro 24 9월 24일 14:47 crypt.data -rw-r--r-- 1 wiseo pro 24 9월 24일 14:48 crypt.data1 % crypt &lt; crypt.data1 Enter key:hello test test 안녕하십니까? % <!-- % wrong tag % --><p><a class="con_link" target="_blank" name="head-3f258dd12289022da9387b1abb57440c1c8d66f6"></a></p><h4>0.0.0.49 개행을 제외한 화면내의 보이지 않는 문자 출력</h4><p>cat -v <a class="con_link" href="http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html" target="_blank"><span style="COLOR: #0033cc">http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html</span></a> </p><p><a class="con_link" target="_blank" name="head-812772b99dac59aced97b8f99dc6f0a5355b4234"></a></p><h4>0.0.0.50 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기</h4><p>grep -h '20030305......01' ./R00* </p><p><a class="con_link" target="_blank" name="head-749f6ebc00e40afe4cc9e67b490977dd3092708a"></a></p><h4>0.0.0.51 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기</h4><!-- % wrong tag % -->ls *.* | awk '{print "mv",$1, $1 }' | sed "s/ \([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)$/ \1\.\_\2/g" <!-- % wrong tag % --><ul><li>현재디렉토리의 모든 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">*.*</span></tt> 파일을 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">*._*</span></tt> 형식으로 바꾼다. <li>더 간단하게 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">ls&nbsp;*.*&nbsp;|&nbsp;sed&nbsp;"s/\([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)/mv&nbsp;\1\.\2&nbsp;\1\.\_\2/g"</span></tt> </li></ul><p><hr><p><a class="con_link" target="_blank" name="head-4dc15f9c35bbb19695ddb422097f327ded6ea568"></a></p><h4>0.0.0.52 어제 날짜 구하기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">$&nbsp;date&nbsp;-v-1d&nbsp;"+%Y-%m-%d"&nbsp;</span></tt> [컴퓨터분류] </p><p><a class="con_link" target="_blank" name="head-b2c44fed3b12ed6a70898c1f36717e10e5c97ecb"></a></p><h4>0.0.0.53 원하지 않는 사용자 죽이기</h4><p><tt class="wiki"><span style="FONT-FAMILY: 굴림체">[root@dream&nbsp;/root]#&nbsp;skill&nbsp;-KILL&nbsp;sunny&nbsp;</span></tt> </p><p>위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">[root@dream&nbsp;/root]#&nbsp;skill&nbsp;-KILL&nbsp;-v&nbsp;pts/14&nbsp;</span></tt> <p>이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다. <a class="con_link" target="_blank" name="head-8a58d7a9a4d047773a8dbc920a28ad081e3e2faa"></a></p><h4>0.0.0.54 UNIX상에서 한글출력이 깨져 나올경우</h4><p>유닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다. 이때부터는 프로그램이 종료된 이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">^n</span></tt> 에 해당하는 문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">^o&nbsp;</span></tt>에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, <tt class="wiki"><span style="FONT-FAMILY: 굴림체">#&nbsp;echo&nbsp;^v^o&nbsp;</span></tt> </p><p>라고 해야겠지만 커맨드가 깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 <tt class="wiki"><span style="FONT-FAMILY: 굴림체">^v^o</span></tt>를 치고 enter 하면 된다 <p><a class="con_link" target="_blank" name="head-e7a4b3161cf6035e1728c5dfbf603152108dcc63"></a></p><h4>0.0.0.55 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기</h4><!-- % wrong tag % -->/bin/ls A?????.html | sed 's/A\(.....\)\.html/\1/g' | xargs -t -i mv 'A{}.html' 'A0{}.html' <!-- % wrong tag % --><p>/bin/ls는 ls가 보통 -F로 파일 종류 표시(*, @등)까지 하기 때문에 그걸 막기 위한 것이고 xargs의 -t는 트레이스모드이다. </p>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/1547011#comments</comments>
		<pubDate>Sun, 23 Mar 2008 23:20:43 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 우분투 아파치 서버의 설정 ]]> </title>
		<link>http://such.egloos.com/1532935</link>
		<guid>http://such.egloos.com/1532935</guid>
		<description>
			<![CDATA[ 
  <div class="article">우분투 아파치 서버의 설정은 /etc/apache2/sites-available/default 의 파일을 수정하고 <br>/etc/init.d/apache2 restart로 적용 가능합니다. <br><br>적용되었는지는 /etc/apache2/sites-enable/default 를 열어 보면 알수 있습니다.<br><br><blockquote>&lt;VirtualHost *&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; ServerAdmin webmaster@localhost <span style="FONT-WEIGHT: bold">&lt;- 시스템관리자 이메일</span><br><br>&nbsp; &nbsp; &nbsp; &nbsp; DocumentRoot /var/www/&nbsp; <span style="FONT-WEIGHT: bold">&lt;- 기본 디렉토리 변경</span><br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;Directory /&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Options FollowSymLinks<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AllowOverride None<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Directory&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;Directory /var/www/&gt;&nbsp; <span style="FONT-WEIGHT: bold">&lt;- 기본 디렉토리 변경</span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Options Indexes FollowSymLinks MultiViews<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AllowOverride None<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Order allow,deny<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allow from all<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Uncomment this directive is you want to see apache2's<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # default start page (in /apache2-default) when you go to /<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span id="callbacknestme2boxtistorycom162763" style="FLOAT: right; WIDTH: 1px; HEIGHT: 1px"><embed id="bootstrapperme2boxtistorycom162763" src="http://me2box.tistory.com/plugin/CallBack_bootstrapperSrc" width="1" height="1" type="application/x-shockwave-flash" invokeurls="false" autostart="false" allowscriptaccess="never" allownetworking="internal" wmode="transparent" enablecontextmenu="false" flashvars="&amp;callbackId=me2boxtistorycom162763&amp;host=http://me2box.tistory.com&amp;embedCodeSrc=http%3A%2F%2Fme2box.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D16%26callbackId%3Dme2boxtistorycom162763%26destDocId%3Dcallbacknestme2boxtistorycom162763%26host%3Dhttp%3A%2F%2Fme2box.tistory.com%26float%3Dleft" swliveconnect="true"></span> &nbsp; &nbsp; #RedirectMatch ^/$ /apache2-default/<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Directory&gt;<br><br>&nbsp; &nbsp; &nbsp; &nbsp; ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;Directory "/usr/lib/cgi-bin"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AllowOverride None<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Order allow,deny<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Allow from all<br>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Directory&gt;<br><br>&nbsp; &nbsp; &nbsp; &nbsp; ErrorLog /var/log/apache2/error.log<br><br>&nbsp; &nbsp; &nbsp; &nbsp; # Possible values include: debug, info, notice, warn, error, crit,<br>&nbsp; &nbsp; &nbsp; &nbsp; # alert, emerg.<br>&nbsp; &nbsp; &nbsp; &nbsp; LogLevel warn<br><br>&nbsp; &nbsp; &nbsp; &nbsp; CustomLog /var/log/apache2/access.log combined<br>&nbsp; &nbsp; &nbsp; &nbsp; ServerSignature On<br><br>&nbsp; &nbsp; Alias /doc/ "/usr/share/doc/"<br>&nbsp; &nbsp; &lt;Directory "/usr/share/doc/"&gt;<br>&nbsp; &nbsp; &nbsp; &nbsp; Options Indexes MultiViews FollowSymLinks<br>&nbsp; &nbsp; &nbsp; &nbsp; AllowOverride None<br>&nbsp; &nbsp; &nbsp; &nbsp; Order deny,allow<br>&nbsp; &nbsp; &nbsp; &nbsp; Deny from all<br>&nbsp; &nbsp; &nbsp; &nbsp; Allow from 127.0.0.0/255.0.0.0 ::1/128<br>&nbsp; &nbsp; &lt;/Directory&gt;<br><br>&lt;/VirtualHost&gt; <div class="autosourcing-stub"><p style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 11px 0px 7px; PADDING-TOP: 0px; FONT-STYLE: normal; FONT-FAMILY: Dotum">&nbsp;</p></div></blockquote></div>			 ]]> 
		</description>
		<category>sundries</category>

		<comments>http://such.egloos.com/1532935#comments</comments>
		<pubDate>Wed, 19 Mar 2008 08:55:55 GMT</pubDate>
		<dc:creator>such</dc:creator>
	</item>
</channel>
</rss>
