[Android] 한글 TextToSpeech 서비스 사용 예제

상황

안드로이드상 에서 한글 TTS 기능을 사용해 본다. (안드로이드에서는 기본적으로 한글 TTS 기능을 지원하지 않기에 삼성 TTS, 또는 SVOX 를 설치하여야 한다.)

TextToSpeechHandle 클래스
  • TTS 서비스를 초기화 하고, 관련 함수를 Wrapping 한 클래스
  • Messenger 를 이용하여 음성 출력후 완료 응답을 받을수 있도록 구현
  1 package net.ecilaz.TestTTS;
  2 
  3 import java.util.HashMap;
  4 import java.util.Locale;
  5 
  6 import android.content.Context;
  7 import android.media.AudioManager;
  8 import android.os.Message;
  9 import android.os.Messenger;
 10 import android.os.RemoteException;
 11 import android.speech.tts.TextToSpeech;
 12 import android.speech.tts.TextToSpeech.OnInitListener;
 13 import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
 14 
 15 public class TextToSpeechHandle implements OnInitListener, OnUtteranceCompletedListener {
 16 
 17     public static final String initialize_      = "initalize";
 18     public static final int SUCCESS             = 1;
 19     public static final int FAILURE             = 0;
 20 
 21     private boolean initialize_ok_              = false;
 22     private Context context_                    = null;
 23     private TextToSpeech text_to_speech_        = null;
 24     private HashMap<String, String> hash_alarm_ = null;
 25     private HashMap<String, Messenger> hash_cb_ = null;
 26     private HashMap<String, Integer> hash_res_  = null;
 27 
 28     --*
 29      * 기본 생성자이며 TextToSpeech 기능을 이용하기 위해서는 Initailze 함수를 명시적으로 호출해야 한다.
 30      * ex)
 31      *     TextToSpeechHandler ttsh = new TextToSpeechHandle();
 32      *     ttsh.Initailze();
 33      --
 34     public TextToSpeechHandle() {
 35     }
 36 
 37     --*
 38      * 
 39      * @param context : 유저의 액티비티 또는 서비스의 인스턴스
 40      --
 41     public TextToSpeechHandle(Context context) {
 42         Initailize(context, 0, null);
 43     }
 44 
 45     --*
 46      * 
 47      * @param context : 유저의 액티티비 또는 서비스의 인스턴스
 48      * @param res : TextToSpeech 서버스를 초기화 하고 성공 여부를 알려줄 Message 의 what 값
 49      * @param initailize_cb : TextToSpeech 서비스를 초기화 하고 성공여부를 알려줄  콜백용 Messenger
 50      --
 51     public TextToSpeechHandle(Context context, int res, Messenger initailize_cb) {
 52         Initailize(context, res, initailize_cb);
 53     }
 54 
 55     --*
 56      * 
 57      * @param context : 유저의 액티티비 또는 서비스의 인스턴스
 58      * @param res : TextToSpeech 서버스를 초기화 하고 성공 여부를 알려줄 Message 의 what 값
 59      * @param initailize_cb : TextToSpeech 서비스를 초기화 하고 성공여부를 알려줄  콜백용 Messenger
 60      --
 61     public void Initailize(Context context, int res, Messenger initailize_cb) {
 62 
 63         //초기화 후 실수로 재 호출 하지 않도록 막아준다.
 64         if(IsAvailableTextToSpeech() == true) {
 65             LogUtil.Trace();
 66             return;
 67         }
 68 
 69         hash_alarm_     = new HashMap<String, String>();
 70         hash_cb_        = new HashMap<String, Messenger>();
 71         hash_res_       = new HashMap<String, Integer>();
 72 
 73         if(initailize_cb != null) {
 74             hash_cb_.put(initialize_, initailize_cb);
 75             hash_res_.put(initialize_, res);
 76         }
 77 
 78         this.context_   = context;
 79 
 80         text_to_speech_ = new TextToSpeech(context_, this);
 81         text_to_speech_.setOnUtteranceCompletedListener(this);
 82     }
 83 
 84     --*
 85      * TextToSpeech 서비스를 종료한다.
 86      --
 87     public void Finalize() {
 88         text_to_speech_.shutdown();
 89         initialize_ok_ = false;
 90     }
 91 
 92     --*
 93      * 
 94      * @return : TextToSpeech 서비스의 초기화 성공 여부를 리턴함 (true: 성공, false: 실패) 
 95      --
 96     public boolean IsAvailableTextToSpeech() {
 97         return initialize_ok_;
 98     }
 99 
100     --*
101      * 
102      * @param text : TextToSpeech 서비스를 이용하여 음성을 출력할 메시지
103      * @param flush_yn : 음성출력의 큐 모드 (true: 큐를 비우고 바로 출력, false: 메시지를 큐잉)
104      --
105     public void speakText(String text, boolean flush_yn) {
106         speakText(text, null, 0, null, flush_yn);
107     }
108 
109     --*
110      * 
111      * @param text : TextToSpeech 서비스를 이용하여 음성을 출력할 메시지
112      * @param request_id : 음성 출력 요청을 구분할 ID(콜백 Messenger 를 구분할 ID 로 사용, null일 경우 콜백 호출 안함)
113      * @param res : text 를 음성 출력한후 완료 콜백 Message 의 what 값
114      * @param speak_cb : text 를 음성 출력한후 완료 콜백용 Messenger(null 일 경우 콜백 호출 안함)
115      * @param flush_yn : 음성출력의 큐 모드 (true: 큐를 비우고 바로 출력, false: 메시지를 큐잉)
116      --
117     public void speakText(String text, String request_id, int res, Messenger speak_cb, boolean flush_yn) {
118 
119         if(speak_cb == null || request_id == "" || request_id == null) {
120             hash_alarm_.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
121         }
122         else {
123             hash_alarm_.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, request_id);
124             hash_cb_.put(request_id, speak_cb);
125             hash_res_.put(request_id, res);
126         }
127 
128         text_to_speech_.speak(text, flush_yn ? TextToSpeech.QUEUE_FLUSH : TextToSpeech.QUEUE_ADD, hash_alarm_);
129     }
130 
131     --*
132      * 
133      * @param request_id : 음성 출력 요청을 구분할 ID(콜백 Messenger 를 구분할 ID 로 사용)
134      * @param success_yn : 요청 처리 결과 여부 (1: 성공, 0: 실패)
135      --
136     private void InvokeCallback(String request_id, int success_yn) {
137         Messenger messenger = hash_cb_.get(request_id);
138         if(messenger == null) { return ; }
139 
140         Integer res = hash_res_.get(request_id);
141         if(res == null) { return ; }
142 
143         try {
144 
145             Message msg = Message.obtain();
146             msg.what = res;
147             msg.arg1 = success_yn;
148             msg.obj = request_id;
149             messenger.send(msg);
150 
151         } catch (RemoteException e) {
152             LogUtil.Trace(e);
153         }
154         finally {
155             hash_cb_.remove(request_id);
156             hash_res_.remove(request_id);
157         }
158     }
159 
160     --*
161      * TextToSpeech.OnInitListener 구현 : TTS 언어를 Locale.KOREA 로 셋팅하고 언어 지원 여부를 검사한다.
162      * 
163      --
164     public void onInit(int status) {
165 
166         if(status != TextToSpeech.SUCCESS) {
167             LogUtil.Debug(String.format("TextToSpeechManager.onInit(%d) fail!", status));
168             InvokeCallback(initialize_, FAILURE);
169             return ;
170         }
171 
172         int result = text_to_speech_.setLanguage(Locale.KOREA);
173         if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
174             LogUtil.Debug(String.format("TextToSpeech.setLanguage(%d) fail!", Locale.KOREA));
175             InvokeCallback(initialize_, FAILURE);
176             return ;
177         }
178 
179         initialize_ok_ = true;
180         InvokeCallback(initialize_, SUCCESS);
181     }
182 
183     --*
184      * TextToSpeech.OnUtteranceCompletedListener 구현 : 음성을 출력이 완료되면 콜백을 호출한다.
185      * 
186      --
187     public void onUtteranceCompleted(String utterance_id) {
188         InvokeCallback(utterance_id, SUCCESS);
189     }
190 }
191 
TestTTSActivity 클래스
  • TextToSpeechHandle 을 생성하고, EditText 의 내용을 음성 출력하는 예제
 1 package net.ecilaz.TestTTS;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.os.Handler;
 7 import android.os.Message;
 8 import android.os.Messenger;
 9 import android.speech.tts.TextToSpeech;
10 import android.view.View;
11 import android.view.View.OnClickListener;
12 import android.widget.Button;
13 import android.widget.EditText;
14 
15 public class TestTTSActivity extends Activity {
16 
17     private static final int MY_DATA_CHECK_CODE = 0;
18     private static final int RES_TTS_INITIALIZE = 2;
19 
20     private EditText edittext_;
21     private Button button_;
22     private TextToSpeechHandle ttsh_;
23     private Messenger messenger_ = new Messenger(new IncomingHandler());
24 
25     class IncomingHandler extends Handler {
26         @Override
27         public void handleMessage(Message msg) {
28             switch (msg.what) {
29             case RES_TTS_INITIALIZE:
30                 if(msg.arg1 == 1) {
31                     ttsh_.speakText("TTS 서비스가 정상적으로 초기화 되었습니다.", false);
32                     button_.setEnabled(true);
33                 }
34                 break;
35             default:
36                 super.handleMessage(msg);
37                 break;
38             }
39         }
40     }
41 
42 
43     --* Called when the activity is first created. --
44     @Override
45     public void onCreate(Bundle savedInstanceState) {
46         super.onCreate(savedInstanceState);
47         setContentView(R.layout.main);
48 
49 
50         Intent checkIntent = new Intent();
51         checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
52         startActivityForResult(checkIntent, MY_DATA_CHECK_CODE );
53 
54         edittext_ = (EditText)findViewById(R.id.et);
55         edittext_.setEnabled(true);
56         button_ = (Button)findViewById(R.id.read);
57         button_.setEnabled(false);
58         ttsh_ = new TextToSpeechHandle();
59 
60         button_.setOnClickListener(new OnClickListener() {
61                 public void onClick(View v) {
62                 String text = edittext_.getText().toString();
63                 ttsh_.speakText(text, true);
64                 }});
65 
66     }
67 
68     @Override
69     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
70 
71         if(requestCode == MY_DATA_CHECK_CODE) {
72 
73             if(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
74                 ttsh_.Initailize(this, RES_TTS_INITIALIZE, messenger_);
75             }
76             else {
77                 Intent installIntent = new Intent();
78                 installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
79                 startActivity(installIntent);
80             }
81         }
82     }
83 
84     @Override
85     public void onPause(){
86         super.onPause();
87     }
88 
89     @Override
90     public void onResume(){
91         super.onResume();
92     }
93 
94     @Override
95     public void onDestroy(){
96         super.onDestroy();
97         ttsh_.Finalize();
98     }
99 }
LogUtil 클래스
  • LogCat 을 이용하여 로그를 남긴다.
 1 package net.ecilaz.TestTTS;
 2 
 3 import android.util.Log;
 4 
 5 public class LogUtil {
 6 
 7     private static final String TAG = "TestTTS";
 8 
 9     public static void Info(String msg) {
10         Log.i(TAG, msg);
11     }
12 
13     public static void Debug(String msg) {
14         Log.d(TAG, msg);
15     }
16 
17     public static void Warning(String msg) {
18         Log.w(TAG, msg);
19     }
20 
21     public static void Error(String msg) {
22         Log.e(TAG, msg);
23     }
24 
25     public static void Trace() {
26         java.lang.Exception e = new java.lang.Exception();
27         StackTraceElement ste[] = e.getStackTrace();
28 
29         Log.e(TAG, "[Trace] " + ste[1].getClassName() + "."
30                 + ste[1].getMethodName() + "(" + ste[1].getFileName() + ":"
31                 + ste[1].getLineNumber() + ")");
32     }
33 
34     public static void Trace(Exception e) {
35         StackTraceElement array[] = e.getStackTrace();
36 
37         Log.e(TAG, "[StackTrace]");
38         for(StackTraceElement ste : array) {
39 
40             Log.e(TAG, "        " + ste.getClassName() + "."
41                     + ste.getMethodName() + "(" + ste.getFileName() + ":"
42                     + ste.getLineNumber() + ")");
43         }
44     }
45 }
참고
  • TTS 초기화가 완료되는 시점을 알수 없기에 TextToSpeech.OnInitListener 인터페이스의 onInit()에서 Messenger 를 이용하여 완료 응답을 받도록 함.
  • 또한, 특정 Text 의 음성 출력 완료 응답을 받기 위해 Messenger 를 이용함.
  • TestTTSActivity 클래스는 에러 처리가 제대로 되어 있지 않기에 예제로써 만 사용해야 함

by Mays | 2012/04/15 04:15 | Programming. | 트랙백 | 덧글(0)

[Java] 로그에서 C 의 __FUNCTION__ 와 __LINE__ 처럼 사용하기

상황

C 또는 C++ 에서는 __FUNCTION__, __LINE__, __FILE__ 등과 같은 매크로를 이용하여 파일이나 라인넘버를 로그에 남길수 있다. 그러나 Java 에는 매크로 기능이 없으므로 Exception 을 이용하여 Trace 로그를 남기도록 한다.


Log 클래스
  • Exception 을 생성하여 StackTraceElement 를 얻은후 이를 이용하여 로그를 남긴다.
  • getClassName() : 패키지 명 이 포함된 클래스 명
  • getMethodName() : 메소드 명 ( __FUNCTION__ )
  • getFileName() :  파일 명 ( __FILE__ )
  • getLineNumber() : 라인 넘버 ( __LINE__ )
  • getClassName() 과 getMethodName() 을 조합  : ( gcc 의  __PRETTY_FUNCTION__ )
 1 package net.ecilaz.ecilaztest.util;
 2 
 3 public class Log {
 4 
 5     public static void TRACE() {
 6         java.lang.Exception e = new java.lang.Exception();
 7         StackTraceElement ste[] = e.getStackTrace();
 8 
 9         System.out.println("[Trace] " + ste[1].getClassName() + "."
10                 + ste[1].getMethodName() + "(" + ste[1].getFileName() + ":"
11                 + ste[1].getLineNumber() + ")");
12     }
13 
14     public static void STACK_TRACE() {
15         boolean first = true;
16 
17         java.lang.Exception e = new java.lang.Exception();
18         StackTraceElement array[] = e.getStackTrace();
19 
20         System.out.println("[StackTrace]");
21         for(StackTraceElement ste : array) {
22             if(first == true) { first = false; continue; }
23 
24             System.out.println("        " + ste.getClassName() + "."
25                     + ste.getMethodName() + "(" + ste.getFileName() + ":"
26                     + ste.getLineNumber() + ")");
27         }
28     }
29 }

Main 클래스
  • Log 클래스를 이용하여 실제로 Trace 메시지를 남겨보는 예제
 1 package net.ecilaz.ecilaztest;
 2 
 3 
 4 import net.ecilaz.ecilaztest.util.Log;
 5 
 6 
 7 
 8 class Alice {
 9     public void Func() {
10         Log.TRACE();
11     }
12 }
13 
14 
15 
16 class Bob {
17     public void Func() {
18         Log.STACK_TRACE();
19     }
20 }
21 
22 
23 
24 public class Main {
25     /-*
26      * @param args
27      *-
28     public static void main(String[] args) {
29 
30         Log.TRACE();
31 
32         Alice a = new Alice();
33         Bob b = new Bob();
34 
35         a.Func();
36         b.Func();
37     }
38 }

결과 화면

참고
  • Log 클래스의 라인 9 ~ 11 과 라인 24 ~ 27 처럼 클래스명 + 메소드명 (파일명 : 라인넘버) 식으로 로그를 남긴다면 이클립스의 콘솔창에서 소스 바로가기 하이퍼 링크가 동작한다. (단, 클래스명 앞에 아무것도 없거나 스페이스만 있다면 가능. "\t" 문자등을 삽입한다면, 하이퍼 링크가 동작 안됨)
  • StackTraceElement 를 얻어서 프린트 포멧만 변경한다면 구미에 맞게 간단한 로깅 처리가 가능할듯 하다.

by Mays | 2012/04/11 01:49 | Programming. | 트랙백 | 덧글(0)

[Tools] eclipse 에서 vim 사용

상황

eclipse 에서 vi 를 이용하기 위해 viplugin 와 vrapper 을 설치해 보았으나, eclipse 의 단축키 와  vi 단축키가 겹치는 문제 및  "ctrl+v" 가 "복사하기" 키로 작동하는 등, 구미에 썩 맞지 않은 관계로 포기하고 eclipse 에서 외부툴을 실행해주는 기능이 있기에, 이를 이용하여 vim 을 연동해 사용해보려 한다.


외부툴 설정

eclipse 메뉴 -> Run -> External Tools ->External Tools Configurations ...


작업디렉토리를 선택한 파일의 디렉토리로 설정한후 해당 파일을 vim 으로 열기


자바 소스를 eclipse 워크스페이스/프로젝트/src 디렉토리로 설정후 해당 파일을 vim으로 열기


참고
  • vim 으로 열려고하는 파일 경로에 space 가 있을 경우가 있으므로 Arguments 항목에서 "" 로 묶어준다.
  • eclipse에서 선택한 파일의 커서가 위치한 곳에서 vim을 띄워주고 싶으나 Arguments 변수가 없는관계로 포기함.
  • vi plugin 보다는 vim 을 외부도구로 띄워서 파일만 편집하고, 나머지는 eclipse 에서 사용하는 편이 훨씬 편리함.
  • 외부 툴 변수 관련 은 이곳을 참고 (bobos 님 노트 : http://jusung.springnote.com/pages/5444173)

by Mays | 2012/04/05 21:45 | Programming. | 트랙백 | 덧글(0)

[IT] iPhone & iPad 에서 구글 캘린더 전체 동기화

상황
 iPhone & iPad 에서 구글 계정을 Exchange 로 연동하여 사용 할 경우, iOS의 캘린더로
 구글 캘린더의 내용을 볼수가 있다. 다만, 아무런 설정을 하지 않을 경우 구글 계정의 "기본캘린더" 만
 연동됨으로 매우 불편하다.


해결방법
 iPhone & iPad 의 사파리 웹브라우저로 http://m.google.com/sync 에 접속하여, 캘린더를 설정할수가 있다.


 1. 사파리 웹 브라우저로 http://m.google.com/sync 에 접속 후 언어 변경

 2. English(US) 를 선택

 3. 디바이스 선택

 4. 동기화할 캘린더를 선택 후 저장

 5. 이후, iOS의 캘린더에서 구글 캘린더와 연동한 내용을 확인할수 있다.

by Mays | 2012/03/18 03:31 | IT. | 트랙백 | 덧글(0)

[OS] CentOS 네트워크 설정 iptables

환경
VMware - CentOS 6.2 64bits

상황
CentOS 를 설치후 특별한 설정을 하지 않은 상황에서, 특정 서버 포트로의 접속이 되지 않는다.
로컬에서 해당 포트로 telnet 접속은 정상적으로 연결되지만, 외부에서만 되지 않는다.
이럴경우, 공유기 나 외부요인을 배제하고, 먼저, 방화벽을 살펴보고, 방화벽 규칙에 해당 포트를 허용하도록 한다.


1. 방화벽 설정 stop 후 외부에서의 접속이 잘되는지 확인
[root@centos etc]# /sbin/service iptables stop
iptables: 방화벽 규칙을 지웁니다:                          [  OK  ]
iptables: 체인을 ACCEPT 규칙으로 설정 중:  filter    [  OK  ]
iptables: 모듈을 언로드하는 중:                             [  OK  ]

 
2. 외부에서의 접속이 문제 없다면, 방화벽 규칙 적용
[root@centos etc]# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# user setting (192.168.3.1/24 서브넷에서 dest 8080 포트로 접속 허용)
-A INPUT -m state --state NEW -m tcp -p tcp --source 192.168.3.1/24 --dport 8080 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

 

3. 규칙 적용후 외부에서의 접속확인
[root@centos etc]# /sbin/service iptables restart
iptables: 방화벽 규칙을 지웁니다:                          [  OK  ]
iptables: 체인을 ACCEPT 규칙으로 설정 중:  filter    [  OK  ]
iptables: 모듈을 언로드하는 중:                             [  OK  ]
iptables: 방화벽 규칙 적용 중:                               [  OK  ]


4. 방화벽을 적용후 외부에서도 잘 연결된다면 OK

by Mays | 2012/03/16 17:17 | System. | 트랙백 | 덧글(0)

[Server] PHP 세션 만료 타임 수정

php.ini

세션 만료 타임을 24시간으로 변경

session.cookie_lifetime = 0 ; 초 (0일경우 브라우저를 닫을때까지 쿠키가 유효함)
session.cache_expire = 1440 ; 분 
session.gc_maxlifetime = 86400 ; 초

by Mays | 2010/09/20 15:04 | System. | 트랙백 | 덧글(0)

[IT] 맥용 곰플레이어 소식

맥용 곰플레이어(맥곰)가 곧 공개되는 모양이다. 맥유저로써 동영상 플레이어는 VLC 를 애용하고 있었지만,
곰플레이어의 그 편함을 잊을수 없었는데, 마침 잘되었다.  또한, 아이폰 런칭 과 맥용 곰플레이어 공개 등
좋은 소식이 자주 들려 오니 맥유저로써 기쁘기 그지 없다. 
그나저나, 한국은 맥 유저가 많지는 않지만 점점 늘어나는 추세이고, 외국은 맥을 많이 이용한다고는 하는데,
아마도 이번 맥용 곰TV 와 곰플레이어 공개 소식은 해외를 위한 교두보 역활을 위한 것일듯 하다.

by Mays | 2009/12/26 15:47 | IT. | 트랙백 | 덧글(0)

[OS] FreeBSD 에서 bash 사용

환경
 VMware - FreeBSD 7.2

상황
 FreeBSD 를 인스톨하면 bash 패키지를 설치 하지 않는 이상 bash 를 바로 사용할수 없다.
 또한 설치 화면에서 bash를 인스톨 하였더라도 유저 생성시 bash 를 지정하지 않으면,
 디폴트로 다른 쉘을 사용하게 된다. 또한 root 는 기본적으로 csh 를 사용 하도록 되어
 있으므로, bash 쉘로 바꿔 보도록 한다.

패키지 확인
 front# pkg_info | grep bash
 bash-4.0.10_2       The GNU Project's Bourne Again SHell
 위와 같이 "bash-4.0.10_2 ... " 로 나온다면 bash 가 이미 설치 되어 있는 것이다.

패키지 설치
 front# cd /usr/ports/shells/bash
 front# make install clean

쉘 변경
 front# rehash
 front# chsh -s /usr/local/bin/bash
    또는
 front# rehash
 front# chsh
 #Changing user information for root.
 Login: root
 Password:
  ...
 Shell: /bin/csh
 ..
 에서 /bin/csh/usr/local/bin/bash 로 변경하고 저장하고 나가면 된다.

 "chsh : user information updated" 가 출력되면, 성공적으로 쉘이 변경된것이다
 그리고, 다음번 로그인시 bash 로 적용되어 있을것이다.

by Mays | 2009/12/26 04:55 | System. | 트랙백 | 덧글(0)

[OS] FreeBSD 시스템 모니터링 유틸( systat )

환경
 VMware - FreeBSD 7.2


명령
 systat [-display] [refresh-interval]


설명
 systat 는 swap 상태, 디스크 I/O 상태, virtual memory 상태, 네트워크 및 인터페이스 등의 상태를
 사용자가 알아 보기 쉽도록 일목 요연하게 보여준다. iostat, netstat, vmstat 등은 문자와 숫자로
 구성된 전형적인 텍스트 기반이라 쉽게 접근하기 어려우나, systat 는 처음 사용하더라도 바로
 알아볼수 있을정도로 명확하다.


사용 예
 ( 자세한것은 man systat 참고 하기 바라며,  결과 화면에서 나가려면
 Ctrl +c 또는 : 를 입력한후 quit 입력하여 종료한다.)

 1초 마다 디스크 I/O 상태 확인
 [root@front snmp ]$ systat -iostat 1

 1초 마다 vitual memory 상태 확인
 [root@front snmp ]$ systat -vmstat 1

 1초 마다 인터페이스 트래픽 확인
 [root@front snmp ]$ systat -ifstat 1

 1초 마다 네트워크 상태 확인
 [root@front snmp ]$ systat -netstat 1

 1초 마다 tcp 상태 확인
 [root@front snmp ]$ systat -tcp 1

by Mays | 2009/12/25 17:05 | System. | 트랙백 | 덧글(2)

[OS] CentOS 네트워크 설정

환경
 VMware - CentOS 5.2

네트워크 설정


 터미널에서 setup 명령을 이용하여 셋업 유틸리티를 실행 시킨다.


 "Network Configuration" 항목을 선택후 아래 "Run Tool"을 선택한다.


 자신 머신에 설치된 네트워크 인터페이스를 선택한다 ( ex : eth0 )


 위 화면에서 각자의 시스템에 맞게 네트워크 환경을 설정한다.


 네트워크 설정을 마치고 셋업 유틸리티 화면에서 빠져나간다.




 ifdown 명령어로 인터페이스 eth0 를 down 시키고, ifup 명령어로 인터페이스 eth0을 다시 up 시킨다.
 (설정을 다 마치고 ifconfig 명령어로 네트워크 설정이 제대로 되었는지 확인한다.)
 또는 아래처럼 /etc/init.d/network restart 로 네트워크 설정을 재 가동 할수 있다.

 

by Mays | 2009/12/25 05:24 | System. | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶