<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>머니버그 솔루션 &amp;gt; TIP &amp;gt; Server 팁</title>
<link>http://moneybug.co.kr/bbs/board.php?bo_table=sv_tip</link>
<description>머니버그 솔루션 &amp;gt; TIP &amp;gt; Server 팁</description>
<language>ko</language>
	<item>
	<title>Linux Shell(리눅스) 특수 문자 정리</title>
	<link>http://moneybug.co.kr/bbs/board.php?bo_table=sv_tip&amp;wr_id=2</link>
	<description><![CDATA[<p>매번 어떤 의미인지도 모르면서 그대로 따라만 하다 보니 늘지 않는 것 같아</p>
<p>우선은 리눅스에서 사용하는 특수문자에 대해 정리해 보려고 합니다.</p>
<div class="item_label_bar"></div>
<h2>1. 표준 출력</h2>
<p>표준 출력을 뜻하는 특수 문자는 <span class="command">&gt;</span>입니다. 이 특수문자를 사용하면 다음과 같은 명령이 가능해집니다.</p>
<p class="console"><span class="com"># '&gt;' 표준 출력 (new)</span><br />$ ls &gt; test.txt <span class="com"># 표준 출력을 파일에 기록합니다.</span></p>
<p>ls 명령어를 통해 출력된 내용을 test.txt 파일에 기록합니다.</p>
<p>다만 test.txt 파일은 업데이트가 아닌 새로 기록을 하게 되므로 주의해야 합니다.</p>
<p>그 외에도 표준 출력을 두번 연속 <span class="command">&gt;&gt;</span>으로 사용하게 되면 다음처럼 기록하겠다는 겁니다.</p>
<p class="console"><span class="com"># '&gt;' 표준 출력 (append)</span><br />$ ls &gt;&gt; test.txt <span class="com"># 표준 출력을 test.txt 파일 내용 끝에 추가로 덧붙여 기록합니다.</span></p>
<p>ls 명령어를 통해 출력된 내용을 test.txt 파일 내용 끝에 추가로 덧붙여서 기록합니다.</p>
<hr /><h2>2. 표준 입력</h2>
<p>표준 입력을 뜻하는 특수 문자는 <span class="command">&lt;</span>입니다. 이 특수문자를 사용하면 다음과 같은 명령이 가능해집니다.</p>
<p class="console"><span class="com"># '&lt;' 표준 입력</span><br />$ cat &lt; test.txt <span class="com"># test.txt 파일에서 표준 입력으로 읽어 들입니다.</span></p>
<p>test.txt 파일의 내용을 cat 명령어로 읽어 들인 후 화면에 출력합니다.</p>
<hr /><h2>3. 와일드 카드</h2>
<p>명령어 중 여러가지로 조합할 수 있는 특수문자들입니다. <span class="command">*</span>, <span class="command">?</span> 가 있습니다.</p>
<p>두가지의 차이점은 일치하는 문자의 개수 입니다. <span class="command">*</span> 특수 문자는 모든 문자와 일치하는 와일드 카드 특수 문자이며, <span class="command">?</span> 문자는 하나의 문자와 일치하는 특수 문자입니다.</p>
<p>명령어로는 다음처럼 나타낼 수 있다.</p>
<p class="console">
<span class="com"># '*' 모든 문자와 일치하는 와일드 카드 문자</span><br />
$ ls tes* <span class="com"># test.txt, tes/123.txt 등  일치하는 모든 파일/디렉토리(내부)가 출력됩니다.</span><br /><span class="com"># '?' 하나의 문자와 일치하는 와일드 카드 문자</span><br />
$ ls test.tx? <span class="com"># test.txt, test.txx 등  하나가 일치한 파일을 출력됩니다.</span>
</p>
<hr /><h2>4. 파이프 문자</h2>
<p>어떠한 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 보내는 문자 <span class="command">|</span>을 주로 파이프 문자라고 불립니다.</p>
<p class="console">
<span class="com"># 파이프 문자 예제</span><br /><span class="com"># ps 명령어를 통한 표준 출력을 프로세스 정보 중 "tomcat"이 들어간 프로세스를 찾기 위해 표준 입력을 삽입합니다.</span><br />
$ ps -ef | grep tomcat<br /></p>
<hr /><h2>5. 명령 문자</h2>
<p>해당 부분은 주로 명령(Command)에 관련된 문자로 다음과 같습니다.</p>
<p class="console">
<span class="command com">;</span> # 명령의 끝을 나타냅니다.<br /><span class="command com">||</span> # 이전의 명령이 실패하면 실행하는 조건문 문자입니다.<br /><span class="command com">&amp;&amp;</span> # 이전의 명령이 성공하면 실행하는 조건문 문자입니다.<br /><span class="command com">&amp;</span> # 명령을 백그라운드에서 실행합니다.<br /><span class="command com">$</span> # 변수에 접근할 수 있는 문자입니다.
</p>
<p>이 외에도 <span class="command">#</span> 문자를 쓰게 되면 주석 처리가 가능합니다.</p>
<hr /><h2>6. 변수 접근 기호</h2>
<p>위의 특수 문자들을 이용하면 조금 더 응용 가능한 쉘 커맨드가 가능해집니다.</p>
<p>그 전에 변수에 접근 할 수 있는 특수 문자가 있는데 다음과 같습니다.</p>
<p class="console">
0 # stdin (표준 입력)<br />
1 # stdout (표준 출력)<br />
2 # stderr (에러 출력)
</p>
<p>위와 같은 문자와 변수 접근 문자를 합치면 &amp;1, &amp;2 같은 명령도 가능해집니다. 다음과 같은 커맨드도 가능합니다.</p>
<p class="console">
<span class="com"># 표준 에러 리다이렉션 (stderr 만 출력)</span><br />
$ ./test.sh &gt;&gt; ./test.log 2&gt;&amp;1
</p>
<p>위처럼 test.sh을 실행하면서 나온 표준 에러를 test.log 파일에 덧붙여 쓸 수도 있습니다.</p>
<p>그러나 log 파일이 필요 없을 경우 다음 처럼 쓸 수도 있습니다.</p>
<p class="console">
<span class="com"># 표준 출력이 필요 없을 때</span><br />
$ ./test.sh &gt;&gt; /dev/null 2&gt;&amp;1
</p>
<p> </p>
<ul><li>참고 <a href="https://jdm.kr/blog/4" target="_blank" title="리눅스 특수 문자 정리(Linux Shell)" rel="nofollow noreferrer noopener">https://jdm.kr/blog/4</a></li>
</ul>]]></description>
	<dc:creator>머니버그</dc:creator>
		<dc:date>Tue, 22 Dec 2020 16:45:06 +0900</dc:date>
	</item>
	<item>
	<title>Linux Crontab(리눅스 크론탭) 사용법</title>
	<link>http://moneybug.co.kr/bbs/board.php?bo_table=sv_tip&amp;wr_id=1</link>
	<description><![CDATA[<p>crontab은 주기적으로 특정 작업을 실행해야 하는 경우에 유용하게 쓰입니다.</p>
<p><br /></p>
<p>윈도우 운영체제 에서의 스케줄러와 같은 역할을 합니다.</p>
<div class="item_label_bar"></div>
<h2>1. crontab 은 어떤 경우에 사용하나요?</h2>
<p>ex)</p>
<div class="ex-box">
<p>매일 자정에 오래된 로그 파일을 삭제해야할 때</p>
<p>1시간 간격으로 서버의 디스크 사용량을 운영자에게 메일로 보내야할 때</p>
<p>매주 월요일에 특정 디렉토리를 백업하고 싶을 때</p>
</div>
<hr /><h2>2. crontab 설정 방법</h2>
<p>주기적으로 작업을 수행하기 위한 설정 파일을 crontab이라고 합니다.</p>
<p>crontab 파일의 위치는 OS별로 차이가 있기 때문에 파일을 직접 수정하지 않고 crontab 명령어를 이용해서 추가/변경/삭제를 합니다.</p>
<p> </p>
<p>① crontab 편집</p>
<p class="console">$ crontab -e</p>
<p>위와 같이 입력하면 crontab 명령어 입력을 위한 텍스트 에디터가 실행됩니다.</p>
<p>에디터에 crontab 명령어를 입력후 콜론(:) 입력 후에 <span class="command">wq</span> 를 입력해 crontab을 갱신합니다.</p>
<p> </p>
<p>② crontab 목록 조회</p>
<p class="console">$ crontab -l</p>
<p>cat 명령어로 파일을 읽어들인 것처럼 표준 출력으로 현재 등록된 crontab 목록이 콘솔에 출력됩니다.</p>
<p> </p>
<p>③ crontab 삭제</p>
<p class="console">$ crontab -r</p>
<p><span class="command">crontab -e</span>을 통해 편집해도 되지만, 현재 사용자의 모든 crontab을 삭제하고 싶다면 위의 명령어를 사용하면 됩니다.</p>
<hr /><h2>3. crontab 주기 설정</h2>
<p class="console">*　　　　　　*　　　　　　*　　　　　　*　　　　　　*<br />분(0-59)　　시간(0-23)　　일(1-31)　　월(1-12)　　　요일(0-7)</p>
<p>각 별 위치에 따라 주기를 다르게 설정 할 수 있습니다. 순서대로 분-시간-일-월-요일 순입니다.</p>
<p>그리고 괄호 안의 숫자 범위 내로 별 대신 입력 할 수 있습니다.</p>
<p>요일의 경우 0 일요일, 1 월요일, 2 화요일, 3 수요일, 4 목요일, 5 금요일, 6 토요일, 7 일요일입니다.</p>
<hr /><h2>4. crontab 예제</h2>
<p>쉘에서 "crontab -e"를 통해 편집기가 열려있는 상태인 것으로 가정합니다.</p>
<p>crontab을 설정할 때 한 줄에 하나의 명령만 쓸 수 있습니다. (줄바꿈 문자가 들어가면 안됩니다.)</p>
<p> </p>
<p>① 매 1분마다 실행</p>
<p class="console"># 매 1분마다 test.sh 실행<br />* * * * * /root/script/test.sh</p>
<p> </p>
<p>② 매 30분마다 실행</p>
<p class="console"># 매 30분마다 test.sh 실행<br />*/30 * * * * /root/script/test.sh</p>
<p> </p>
<p>③ 매일 새벽 2시에 실행</p>
<p class="console"># 매일 새벽 2시에 test.sh 실행<br />0 2 * * * /root/script/test.sh</p>
<p> </p>
<p>④ 매주 월요일~금요일 오전 6시에 실행</p>
<p class="console"># 매주 월요일~금요일 오전 6시에 실행 test.sh 실행<br />0 6 * * 1-5 /root/script/test.sh</p>
<p> </p>
<p>⑤ 매 30분마다 작업 결과를 파일에 로깅</p>
<p class="console"># 매 30분마다 test.sh 실행 결과를 log.txt에 로깅<br />*/30 * * * * /root/script/test.sh &gt;&gt; log.txt</p>
<p> </p>
<p>⑥ 특정시간 실행</p>
<p class="console"># 매주 금요일 오전 5시 45분에 test.sh 를 실행<br />45 5 * * 5 /root/script/test.sh</p>
<p> </p>
<p>⑦ 반복 실행</p>
<p class="console"># 매일 매시간 0분, 20분, 40분에 test.sh 를 실행<br />0,20,40 * * * * /root/script/test.sh</p>
<p> </p>
<p>⑧ 범위 실행</p>
<p class="console"># 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행<br />0-30 1 * * * /root/script/test.sh</p>
<p> </p>
<p>⑨ 간격 실행</p>
<p class="console"># 매 10분마다 test.sh 를 실행<br />*/10 * * * * /root/script/test.sh</p>
<p> </p>
<p>⑩ 복잡하게 실행</p>
<p class="console"># 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행<br />*/10 2,3,4 5-6 * * /root/script/test.sh</p>
<div class="ex-box">
<p>주기 입력 방법엔 <span class="command">*</span>, <span class="command">-</span>, <span class="command">/</span> 을 이용하는 방법이 있습니다.</p>
<p>위에서 보셨듯이 각각의 특수기호가 하는 기능이 다르고 조합을 어떻게 하느냐에 따라 필요한 주기를 설정 할 수 있습니다.</p>
</div>
<hr /><h2>4. crontab 사용 팁</h2>
<p>① 한 줄에 하나의 명령만 씁니다.</p>
<p class="console"># 잘못된 예<br />* * * * *<br />/root/script/test.sh</p>
<p class="console"># 잘된 예<br />* * * * * /root/script/test.sh</p>
<p> </p>
<p>② 주석을 달아 봅시다.</p>
<p class="console"># 주석<br />#---------------------------------------------------------------------------------------------------------------------------------------<br /># 맨 앞에 <span class="command" style="color:#000;">#</span>을 입력하면 그 뒤로 나오는 모든 문자는 주석으로 처리 할 수 있습니다.<br />#---------------------------------------------------------------------------------------------------------------------------------------</p>
<p> </p>
<p>③ 로그(log)을 꼭 남겨 둡니다.</p>
<p class="console"># 예<br />*/20 * * * *<br />/root/script/test.sh &gt;&gt; /var/log/test_status.log 2&gt;&amp;1<br />* * 1 * * rm -rf /var/log/test_status.log 2&gt;&amp;1</p>
<p>로그(log)가 많이 쌓이면, 서버 내의 저장공간이 부족하게 되어 서버의 다운 또는 비정상적인 동작을 보일 수 있으니 주기적으로 삭제해야 합니다.</p>
<p> </p>
<p>④ 작성한 crontab을 백업합니다.</p>
<p>혹시라도 <span class="command">crontab -r</span>을 쓰거나 실수로 crontab 디렉토리를 삭제하게 된다면 기존 cron(크론) 내역들이 모두 삭제됩니다.</p>
<p>이런 혹시나 하는 경우를 대비해서 주기적으로 crontab을 백업해 둡니다.</p>
<p class="console">crontab -l &gt; /home/bak/crontab_bak.txt</p>
<p>이렇게 쉘 상에서 치시게 되면 crontab의 내역을 txt파일로 저장하게 됩니다.</p>
<p class="console"># 밤 12시 0분에 자동으로 crontab 백업 실행<br />0 0 * * * crontab -l &gt; /home/bak/crontab_bak.txt</p>
<p>위 처럼 crontab에 추가 해 두면 자동으로 crontab 백업 실행하게 됩니다.</p>
<p> </p>
<ul><li>참고1. <a href="https://jdm.kr/blog/2" target="_blank" title="리눅스 크론탭(Linux Crontab) 사용법" rel="nofollow noreferrer noopener">https://jdm.kr/blog/2</a></li>
<li>참고2. <a href="https://includestdio.tistory.com/31" target="_blank" title="[Linux] crontab 사용법" rel="nofollow noreferrer noopener">https://includestdio.tistory.com/31</a></li>
<li>참고3. <a href="https://www.fun-coding.org/linux_basic6.html" target="_blank" title="리눅스 (linux) 익히기:  crontab 사용법 - 잔재미코딩" rel="nofollow noreferrer noopener">https://www.fun-coding.org/linux_basic6.html</a></li>
</ul>]]></description>
	<dc:creator>머니버그</dc:creator>
		<dc:date>Tue, 22 Dec 2020 11:34:18 +0900</dc:date>
	</item>
</channel>
</rss>