'분류 전체보기'에 해당되는 글 124건
- 2008.04.18 unix vi편집기
- 2008.01.11 Windows 개발시 유용한 Utility
- 2008.01.11 ATL 컴파일 에러
- 2007.12.29 바탕화면 휴지통 없애기
- 2007.12.21 XP SP3 RC1 다운로드
- 2007.12.19 구글 어스와 네이버 지도 등 합성 하기
- 2007.12.18 xp powertoy
- 2007.12.17 한글판 xp 에서 sp3 설치 하는 방법 2
- 2007.12.11 UMPC 관련 쇼핑몰
- 2007.12.10 JAVA DB 연결 하기
unix vi편집기
1) Vi 시작, 종료
먼저 vi를 실행시키는 것과 종료시키는 것에 대해 살펴보자.
vi를 실행시키기 위해서는 쉘 상태에서 vi라고 입력하면 된다.
$ vi file name |
먼저 vi를 실행시키면
$ vi 기존의 화면은 사라지고 새로운 하나의 화면이
~ |
이제 vi 편집기에서 빠져 나가기로 하자. 현재 상태에서 콜론(:)을 입력해보자.
~ |
그러면 화면 하단에 콜론(:)이 나타날 것이다. 이제 이곳에서 vi 편집기의 명령을 쓸수가 있다. 이곳에서 q를 입력한 다음 [Enter]를 치면 vi를 종료한다.
~ |
2. Vi내에서의 이동
vi 편집기안에서 커서를 이동하는 것에 대해 알아보자. 우리가 일반적으로 알고 있는 방법과는 전혀 다른 방법으로 UNIX의 vi에서는 작업한다는 것을 여러분은 바로 느낄 수가 있을 것이다.
이제 하나의 test 파일을 가지고 vi 편집기에서 직접 이동하는 것을 연습해 보도록 하겠다.
1) 간단한 이동
홈 디렉토리의 .csrhc 파일은 중요한 파일이므로 이 파일은 놔두고, 그 파일을 test라는 파일로 복사하여 사용하여보자.
$ cp .cshrc test $ vi test |
vi를 실행시키면 아래와 같은 새로운 화면이 나타난다.
# @(#)cshrc 2.0 Apr 1 1995 TriGem umask 022 set path=(/usr/sbin /usr/ccs/bin /usr/bin /usr/ucb /sbin /etc \ /usr/X11R5/bin /usr/openwin/bin /usr/local /usr/local/bin \ /usr/lib/nis /opt/SUNWspro/SC3.0.1/bin .) if ( $?prompt ) then set history=32 endif set filec setenv DISPLAY unix:0 setenv OPENWINHOME /usr/openwin setenv EDITOR /usr/ucb/vi "test" 42 행, 1409 문자 |
맨 아래 하단에 있는 ["test" 42 행, 1409 문자]는 test라는 파일에 대한 간단한 정보를 나타내고 있다. 처음 나오는 것은 파일의 이름을 두 번째는 test 파일의 내용이 총 42줄로 되어 있다는 것을 마지막으로 1409 문자는 test 파일에는 총 1409자의 문자가 들어있다는 것을 뜻하는 것이다.
이제 vi안에서 커서를 어떻게 이동하는 가를 알아보자.
[H] : ← 왼쪽으로 한 문자 이동
[J] :↓ 아래로 한 줄 이동
[K] :↑ 위로 한 줄 이동
[L] :→ 오른쪽으로 한 문자 이동
위 4개의 커서 제어키를 이용하여 왼쪽, 오른쪽, 위 그리고 아래로 이동 할 수 있는 것이다.
2) 줄의 처음과 마지막으로 이동
이번에는 현재 커서가 위치한 줄의 처음과 끝으로 이동하는 것에 대해 알아보겠다.
[0] : 그 줄의 처음으로 이동
[Shift]+[4]: 그 줄의 끝으로 이동
그리고 0은 커서가 위치한 줄의 시작 부분인 처음으로 이동, $는 그 줄의 끝으로 이동하게 해준다.
3) 단어 단위로 이동
단어 단위로 이동하기 위해서는 -h, j, k, l- 키를 가지고 이동하는 것보다는 다음의 w와 b로 이동하는 것이 더욱 효율적이다.
[w] : 다음 단어의 첫 글자로 이동
[b] : 앞 단어의 첫 글자로 이동
[W] : 다음 단어의 첫 글자로 이동 (띄어쓰기를 기준으로)
[B] : 앞 단어의 첫 글자로 이동 (띄어쓰기를 기준으로)
4) 페이지 단위 이동
[Ctrl]+[F] : 한 페이지 뒤로 이동
[Ctrl]+[B] : 한 페이지 앞으로 이동
[Ctrl]+[D] : 반 페이지 뒤로 이동
[Ctrl]+[U] : 반 페이지 뒤로 이동
[G] : 파일의 마지막으로 이동
5[G] : 5번째 줄로 이동
3. Vi 입력, 추가
이동하는 것에 대해 알아보았다. 이것들을 충분히 연습하여 vi에서 커서의 이동을 자유 자래로 할 수 있도록 연습하기 바란다.
이번 절에서는 vi에서 어떻게 텍스트를 입력하고 수정하는지를 알아보기로 하자.
1) 입력모드 들어가기
vi는 일반적인 워드프로세서와는 좀 색다른 방법으로 텍스트를 입력한다. 예를 들어 설명하기로 하자. 일단 존재하지 않는 새로운 파일 exam으로 작업해 보도록 하겠다.
$ vi exam |
이곳에서 다음과 같은 새로운 텍스트를 입력해 보기로 하자.
This is a exam file. I'm kkjjmm. It is the KOREA. |
텍스트를 입력하기 위해 'T'를 치면 UNIX는 '삑' 소리를 내면서 입력되지가 않는다. UNIX는 텍스트를 입력하기 위한 특별한 명령이 있다.
[i] : 삽입 모드로 들어가기
[a] : 파일에 텍스트 삽입(부가모드)
[o] : 현재 줄 아래에 새로운 줄 만들기
[O] : 현재 줄 아래에 새로운 줄 만들기
위 4가지 입력 모드로 들어가기 위한 명령들이다. 이제 텍스트를 삽입하기 위해 ?를 입력한 다음 텍스트를 입력하면 vi 화면에 글자들이 나타나질 것이다.
This is a exam file. I'm kkjjmm. It is the KOREA. |
이것으로 텍스트를 입력할 수 있었다. 이제 그만 텍스트 입력을 끝내기로 하자. 입력모드에서는 저장하거나 끝내는 작업을 할 수 없다. 이러한 명령들은 명령모드에서만 작업을 할 수 있다. 처음에 vi를 시작하면 그때의 상태가 명령모드로 되어있다.
그럼 명령모드로 들어가기 위해서는 어떻게 해야 할까?
현재 상태에서 [Esc]를 누르면 입력모드에서 빠져나와 명령모드의 상태가 된다. 한번 더 [Esc]를 누르면 '삑' 소리가 들릴 것이다.
[Esc] : 삽입모드에서 명령모드로 전환
2) 텍스트 추가하기
입력한 내용을 자세히 보면 수정해야 할 곳이 있다. 먼저 첫 번째 줄에서 처음과 마지막에 *를 추가하고, 두 번째로 exam을 example로 바꾼 다음 마지막으로 맨 아래 줄에
It is a vi editor.
라고 추가하고자 한다.
This is a exam file. I'm kkjjmm. It is the KOREA. |
그럼 'T'자 앞에 '*'를 추가하기 위해서는 커서를 'T'자에다 놓고 [i]로 삽입모드로 들어간 다음 '*'를 추가하고 [Esc]로 명령모드로 돌아온다. 그리고 'file.' 다음에 *를 추가하기 위해 '.'에 커서를 놓고 [a]로 부가모드로 들어간 다음 '*'를 추가한다. 이때 [i]를 눌렀을때와는 한가지 다른점이 있는데 그것은 입력모드와는 다르게 부가모드는 커서가 다음 칸으로 이동한 다음 그곳에서부터 텍스트를 추가할 수 있다는 것이다. 이렇듯 그 줄의 맨 마지막에 텍스트를 추가하기 위해서는 [a]의 부가모드가 필요하다.
두 번째로 커서를 이동하여 [a]나 [i]로 'exam'을 'example'로 바꾸어준다.
마지막으로 제일 하단에 텍스트를 추가하기 위해서는 커서를 마지막 줄로 이동시킨다음 [o]를 누르면 현재 줄 아래에 새로운 줄이 하나 생긴다. 이곳에서 새로운 줄을 추가시킨다.
이제 작업을 그만하고 vi를 종료시키도록 하자. ':q'를 누르면 vi는 다음의 메시지를 출력시켜준다.
변경된 부분이 보관되지 않았음 (:quit! 무시) |
위의 메시지는 파일을 저장하지 않고 끝내려고 한다는 것이다. 저장하지 않고 빠져 나가려면
: q!
를 치면 된다. 파일을 저장하려면 콜론(:)을 누르고 [w]를 누르면 커서가 위치하고 있는 곳의 바로 앞까지가 exam이라는 파일로 저장이 된다.
[w] : 텍스트 저장
4. 텍스트 삭제
바로 조금 전에 작업한 exam 파일을 가지고 vi의 새로운 방법을 연습해 보도록 하겠다.
vi에서 텍스트를 삭제하기 위해서는 다음의 명령어를
[x] : 한 글자 삭제
[d][w] : 한 단어 삭제
[D] : 한 줄 삭제
[d][d] : 한 줄 삭제
3[d][d] : 3줄 삭제후 버퍼에 저장
삭제한 것을 취소하거나 변경한 것을 취소하기 위해서는,
[u] : 변경 내용 실행 취소
[U] : 현재 라인의 모든 변경 내용 취소
이러한 명령들을 입력하면 된다.
*This is a example file.* I'm kkkjjjmm. It is the KOREA. It is a vi editor. |
위에서 네 번째 줄의 "It" 를 삭제해 보도록 하자. 그러면 커서를 이동하여 삭제하고자 하는 글자에 위치시킨 다음 [x]를 누르면 누를 때마다 한 글자씩이 지워지며 뒤의 글자들이 한자씩 왼쪽으로 이동한다.
이번에는 한 단어씩을 지워보도록 하자. [d][w]를 한 번 누르면 "is"가 지워지고 또 한번 누르면 "the"가 지워진다. 이 상태에서 [u]를 눌러보자. 어떻게 되는가? 방금 전에 삭제한 "the"가 다시 화면에 나타날 것이다. 다시 한 번 [u]를 누르면 이번에는 지워질 것이다. 이 명령은 방금 전에 실행한 명령을 취소하는 기능을 가지고 있기 때문에 이런 현상이 나타나는 것이다.
이번에는 [U]를 누르면 현재 라인에서 삭제한 모든 문자가 다시 복구되어질 것이다. 다시 [U]를 누르면 어떻게 되는가? 변하는 것이 없을 것이다.
그럼 다시 "It is the"를 삭제하고, 아래 줄로 이동한 다음 [U]를 눌러보자. 이번에는 삭제한 문자들이 복구가 되지 않을 것이다. 이것으로 [U] 명령은 현재 줄에서만 적용이 되고 줄이 바뀌면 제 기능을 발휘하지 못한다는 것을 알 수 있을 것이다.
*This is a example file.* I'm kkkjjjmm. KOREA. It is a vi editor. |
이번에는 [D]를 누르면 어떤 변화가 있는가? 이것은 현재 커서가 위치한 곳부터 그 줄의 끝가지를 지워준다는 것을 알 수 있을 것이다.
다음으로 커서를 마지막 줄의 "v"에 위치시킨 다음 [d][d]를 누르면 그 줄 전체가 삭제된다는 것을 볼 수 있을 것이다.
[U]를 눌러서 복구시킨 다음 커서를 "e"에 놓고 [Shift]+[~]를 누르면 "E"로 바뀌는 것을 볼 수가 있다. 계속해서 [Shift]+[~]를 누르면 "editor"가 "EDITOR"로 바뀐다. 다시 커서를 앞으로 이동해서 [Shift]+[~]를 누르면 다시 소문자로 바뀐다는 것을 확인할 수 있을 것이다. 즉, 대소문자를 변환하기 위해서는
[Shift]+[~]: 대소문자 변환
5. 텍스트의 검색
6장에서 pg 명령어에 대해 공부할 때 /kkkjj라고 하면 이 패턴이 들어있는 라인으로 이동하던 것을 기억하고 있을 것이다. vi에서도 어떤 패턴을 검색할 수 있는데, 방법은 pg에서와 같다.
/pattern |
test라는 파일의 명령모드 상태에서 /bin이라고 입력한 다음 Enter를 치면 커서가 bin이라는 패턴이 있는 곳으로 이동하여 있을 것이다.
/ |
다음의 bin이라는 패턴으로 이동하기 위해서는 //를 입력하면 된다.
현재 커서가 있는 곳에서 앞으로 검색하기 위해서는 다음과 같이 하면 된다.
?pattern |
?set를 입력하면 set이라는 패턴을 현재 커서가 위치한 곳에서 앞으로 검색하여 이동한다.
? |
앞으로 검색을 계속하려면 ?를 입력하면 간단히 할 수 있다.
[n] : // 또는 ??와 같은 기능
[N] : 현재 찾기 진행 방향의 반대로 검색
텍스트를 편집하는 경우에는 각 줄에 줄 번호가 있으면 편리할 것이다.
: set number |
와 같이 하면 화면 왼쪽에 숫자가 나올 것이다. 이것은 줄 번호를 나타내는 것이다.
6. 텍스트의 복사와 이동
편집기에서 작업 중에서 중요한 것은 텍스트의 편집일 것이다. 특정한 단어나 라인을 복사하여 다른 곳에 쓰거나 이동하는 것 등은 자주 쓰이는 것이다. 텍스트를 복사하거나 이동할 때는 지금까지의 명령어와는 좀 다른 방법으로 한다.
1. 작업하려고 하는 텍스트를 복사하거나 삭제한다.
2. 텍스트를 복사하거나 이동하고자 하는 곳으로 커서를 이동한다.
3. 1에서 복사하거나 삭제한 텍스트를 커서가 있는 곳에 옮긴다.
복사하거나 삭제하면 vi는 이것을 버퍼(임시 기억 장소)에 복사한다. 우리는 이제 버퍼에 있는 텍스트로 작업을 하는 것이다.
여기에서 사용되는 명령어를 보면
[y][w] : 단어 복사
[y]$ : 줄의 끝가지 복사
[Y] : 현재 줄 복사
위와 같다. 3yw라고 하면 현재 커서가 있는 곳에서부터 3단어를 복사하라는 것이다.
y)는 커서가 위치한 문장의 끝까지 복사, y}는 문단의 끝까지 복사하라는 것이다.
3Y라고 하면 3줄을 복사하라는 것이다.
이제 이렇게 복사한 텍스트들을 원하는 장소에 옮겨보기로 하자.
텍스트를 옮기고자 하는 곳으로 커서를 이동한 다음
[p] : 커서가 위치한 곳에서 오른쪽으로 텍스트를 붙인다.
[P] : 커서가 위치한 곳에서 왼쪽으로 텍스트를 붙인다.
p를 누르면 텍스트를 옮길 수가 있다.
만약 줄 단위로 복사하였다면 p를 누르면 현재 커서가 위치한 곳의 아래에 텍스트가 위치할 것이다.
Windows 개발시 유용한 Utility
ATL 컴파일 에러
LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
와 같은 에러가 발생 할 경우
Project -> Setting -> c/c++ 탭 -> General 카테고리 -> Preprocessor Definition 에서
_ATL_MIN_CRT <-- 이것을 제거 한다.
바탕화면 휴지통 없애기
바탕화면에서 휴지통 아이콘 제거 항목을 사용으로 변경 해준다.
그리고 재부팅 하면 휴지통이 없어 짐
XP SP3 RC1 다운로드
다운로드 링크 :
http://fileforum.betanews.com/download/Microsoft_Windows_XP_Service_Pack_3/1197391546/1
구글 어스와 네이버 지도 등 합성 하기
xp powertoy
한글판 xp 에서 sp3 설치 하는 방법
HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control >Nls >Language
InstallLanguage 와 Default 가 있습니다.
이녀석의 값을 0412 -> 0409로 바꾸는 것입니다.
설치가 영문으로 된것처럼 속이는 것이죠.
JAVA DB 연결 하기
1.odbc인 경우
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jbdc:odbc:FirstDB");
conn=DriverManager.getConnection("jbdc:odbc:DNSname","id","pass");
▒▒ 연결셋팅 ▒▒
시작→제어판→관리도구→데이터원본→시스템DSN→추가→microsoft access driver선택
2.oracle인경우
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:system_id","scott",tiger");
▒▒ 연결셋팅 ▒▒
★윈도우환경셋
시작→제어판→관리도구→데이터원본→시스템DSN→추가→microsoft ODBC for Oracle선택
★직접셋팅
C:\oracle\product\10.2.0\db_1\jdbc\lib 폴더의 ojdbc14.jar 복사해서
C:\jdk1.6\jre\lib\ext 와 C:\jre1.6\lib\ext 에 복사
★mysql connector설치
홈페이지(www.mysq.com)에서 mysql-connector-java-5.1.0.zip다운후 압축풀고
mysql-connector-java-5.1.0-bin.jar 파일을 C:\jdk1.6\jre\lib\ext 와
C:\jre1.6\lib\ext 에 복사
★입클립스 셋팅
Window→reperences→installed JREs에서 jre1.6선택후 Edit클릭→JRE home directory에서 위에서 복사한
C:\oracle\product\10.2.0\db_1\jdbc\lib 폴더의 ojdbc14.jar선택→OK
★Db 이름 찾기
C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN폴터의 tnsnames.ora파일을 열어서확인
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 702E3)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) <--요기 orcl이 이름
)
)
3.mysql인경우
Class.forName("org.gjt.mm.mysql.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root",kbj002");
Class.forName("com.mysql.Driver");
String url="jdbc:mysql://localhost:3306/test";
String id="root";
String pwd="";
con=DriverManager.getConnection(url,id,pwd);
---------------------------- Odbc 예 제 -----------------------------------------
import java.sql.*;
public class DriverTest{
public static void main(String grgs[]){
Connection con;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:jdbc","java","java");
System.out.println("Success!");
}
catch(SQLException ex){System.out.println("SQLException:"+ex);}
catch(Exception ex){System.out.println("Exception:"+ex);}
}
}
----------------------------odbc 예 제 -----------------------------------------
import java.io.*;
import java.sql.*;
class JDBC_Select{
public static void main(String grgs[]){
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:jdbc";
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select * from member";
try{
Class.forName(driver);
con=DriverManager.getConnection(url,"java","java");
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
System.out.println("ID1\t\t id\t\t pass\t\t name\t\t e_mail\t\t\t\t phone\t\t zipcode\t job");
System.out.println("-------------------------------------------------------------------------------------------");
while(rs.next()){
System.out.print(rs.getLong("ID1")+"\t\t");
System.out.print(rs.getString("id")+"\t\t");
System.out.print(rs.getString("pass")+"\t\t");
System.out.print(rs.getString("name")+"\t\t");
System.out.print(rs.getString("e_mail")+"\t\t");
System.out.print(rs.getLong("phone")+"\t\t");
System.out.print(rs.getString("zipcode")+"\t\t");
System.out.println(rs.getString("job")+"\t\t");
}
}catch(Exception e){
System.out.println("데이터 베이스 연결 실패");
}
finally{
try{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(con!=null)con.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
----------------------------odbc 예 제 -----------------------------------------
import java.io.*;
import java.sql.*;
class JDBC_Select1{
public static void main(String grgs[]){
String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:jdbc1";
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select * from member";
try{
Class.forName(driver);
con=DriverManager.getConnection(url,"java","java");
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
ResultSetMetaData rsm=rs.getMetaData();
int cols=rsm.getColumnCount();
for (int i=1; i<=cols; i++){
System.out.print(rsm.getColumnName(i)+"\t\t");
}
System.out.println();
while(rs.next()){
for(int i=1; i<=cols; i++){
System.out.print(rs.getObject(i)+"\t\t");
}
System.out.println();
}
}catch(Exception e){
System.out.println("데이터 베이스 연결 실패");
}
finally{
try{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(con!=null)con.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
---------------------------- Oracle 예 제 -----------------------------------------
import java.io.*;
import java.sql.*;
class JDBC_Select2{
public static void main(String grgs[]){
String driver ="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:orcl";
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select * from emp";
try{
Class.forName(driver);
con=DriverManager.getConnection(url,"scott","tiger");
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
ResultSetMetaData rsm=rs.getMetaData();
int cols=rsm.getColumnCount();
for (int i=1; i<=cols; i++){
System.out.print(rsm.getColumnName(i)+"\t\t");
}
System.out.println();
while(rs.next()){
for(int i=1; i<=cols; i++){
System.out.print(rs.getObject(i)+"\t\t");
}
System.out.println();
}
}catch(Exception e){
System.out.println("데이터 베이스 연결 실패");
}
finally{
try{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(con!=null)con.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
---------------------------- MySql 예 제 -----------------------------------------
import java.io.*;
import java.sql.*;
class JDBC_Select3{
public static void main(String grgs[]){
String driver ="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/mysql";
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select * from personal";
try{
Class.forName(driver);
con=DriverManager.getConnection(url,"root","");
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
ResultSetMetaData rsm=rs.getMetaData();
int cols=rsm.getColumnCount();
for (int i=1; i<=cols; i++){
System.out.print(rsm.getColumnName(i)+"\t\t");
}
System.out.println();
while(rs.next()){
for(int i=1; i<=cols; i++){
System.out.print(rs.getObject(i)+"\t\t");
}
System.out.println();
}
}catch(Exception e){
System.out.println("데이터 베이스 연결 실패");
}
finally{
try{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(con!=null)con.close();
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}