2016년 12월 27일 화요일

파일삭제

1. rm
 -r : 해당 폴더안에 있는 모든 파일들까지 같이 삭제하고 자기자신 즉 폴더까지 삭제하는 옵션
 -i : 각 파일들이나 폴더를 삭제할 때 삭제할 것인가를 묻도록 하는 옵션
 -f : 파일이 있든 없든 오류를 표출하지 않고 무조건 삭제하는 옵션

rm -rf [디렉토리명] // 리눅스 디렉토리(하위 디렉토리, 파일 포함)를 삭제
rm -rf * // 현재 디렉토리의 모든 것을 삭제



2. rmdir
  rmdir은 디렉토리만 삭제하는 명령으로 디렉토리 안에 파일이 존재하는 경우 디렉토리가 삭제되지 않습니다. 따라서, rmdir을 사용하시려면 디렉토리안을 먼저 삭제하신후에 해당 명령을 사용하여 디렉토리를 삭제해야 합니다.

rmdir [디렉토리명]

2016년 12월 15일 목요일

wait_timeout관련


*디폴트 타임아웃 확인
show variables like '%timeout';

*정보 설명
connect_timeout  :  MySQL 서버 접속시에 접속실패를 메시지를 보내기까지 대기하는 시간

delayed_insert_timeout  :  insert시 delay될 경우 대기하는 시간

innodb_lock_wait_timeout  :  innodb에 transaction 처리중 lock이 걸렸을 시 롤백 될때까지 대기하는 시간.
innodb는 자동으로 데드락을 검색해서 롤백시킨다.

innodb_rollback_on_timeout  :  innodb의 마지막 구문을 롤백시킬지 결정하는 파라미터.
timeout은 진행중인 transaction을 중단하고 전체 transaction을 롤백하는 과정에서 발생한다.

interactive_timeout  :  활동중인 커넥션이 닫히기 전까지 서버가 대기하는 시간

net_read_timeout  :  서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

net_write_timeout  :  서버가 클라이언트에 데이터를 쓰는 것을 중단하기까지 대기하는 시간

slave_net_timeout  :  마스터/슬레이브로 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

table_lock_wait_timeout  :  테이블 락을 중단하기까지 대기하는 시간

wait_timeout  :   활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간

* Solution.

1) autoreconnect=true // 트랜잭션 오류 가능성있음
- 커넥션이 끊어지면 자동 재접속
jdbc:mysql://(host):(port)/(db_name)?autoReconnect=true
ex) jdbc:mysql://127.0.0.1:3306/seoulnetworks?autoReconnect=true

2) validationQuery 사용 //추천
-Mysql
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="validationQuery" value="select 1"/>
 </bean>

- Oracle
validationQuery="select 1 from dual"





Mysql캐릭터셋확인 및 변경

* 캐릭터셋 확인

#database 확인
SELECT default_character_set_name FROM information_schema.SCHEMATA S
WHERE schema_name = "mydb";

#table 확인
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "mydb"
  AND T.table_name = "mytable";


#column 확인
SELECT character_set_name FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb"
  AND table_name = "mytable"
  AND column_name = "mycolumn";

#Show 명령어 사용(추천)
SHOW FULL COLUMNS FROM mytable;

*캐릭터셋 변경

#데이터베이스 디폴트 캐릭터셋 변경
alter database [dbname] DEFAULT CHARACTER set utf8;

#utf-8일때는 utf8 , utf8_general_ci
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼 VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci

#euc-kr일때는 euckr , euckr_korean_ci
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼 VARCHAR(255) CHARACTER SET euckr COLLATE euckr_general_ci


#테이블의 모든 컬럼의 charset 를 변경할 경우
alter table 테이블명 convert to character set utf8;
alter table 테이블명 convert to character set euckr;




mysql캐릭터셋확인

mysql charater set

* character set 확인
mysql> show variables like 'c%';


* my.cnf 수정
[root@localhost local]# vi /etc/my.cnf


[client]
#추가
default-character-set = utf8

[mysqld]
#추가
init_connect= SET collation_connection = utf8_general_ci
init_connect= SET NAMES utf8
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
#추가
default-character-set = utf8

[mysql]
#추가
default-character-set = utf8

* mysql 재시작
[root@localhost local]# service mysqld restart

mysqld 를 정지 중:                                         [  OK  ]
mysqld (을)를 시작 중:                                     [  OK  ]
[root@localhost local]#

2016년 12월 6일 화요일

ORA-12516

Problem
ORA-12516: TNS:리스너가 프로토콜 스택과 일치하는 처리기를 찾을 수 없습니다.

Cause
Oracle DB를 이동하여 Application을 가동하다 보면 위와 같은 Message와 마주칠 수 있습니다.

이는 동시 처리 가능한 Processes parameter 값을 초과했기 때문에 더 이상 Session을 연결할 수 없다는 message입니다.

Resolution
Processes parameter 값을 변경해주면 됩니다.

1. Oracle에 접속합니다.

<oracle @ oracle ~># sqlplus / as sysdba


2. Processes parameter 값을 확인합니다.

  1) show parameter를 이용하는 방법

SQL > show parameter processes;

NAME                                   TYPE     VALUE
-------------------------------------------------
aq_tm_processes               integer      1
db_writer_processes           integer      1
job_queue_processes          integer     10
log_archive_max_processes  integer      2
processes                          integer    150

  * 현재 동시 처리 가능한 Processes 값은 150입니다.

  2) select 문을 사용하는 방법

SQL > select * from v$resource_limit

RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
processes                119 150        150        150
sessions                 76 166        256        256
enqueue_locks         90 256       3350       3350
enqueue_resources 48 145       1344  UNLIMITED
ges_procs                 0 0          0          0
ges_ress                 0 0          0  UNLIMITED
ges_locks                 0 0          0  UNLIMITED
ges_cache_ress           0 0          0  UNLIMITED
ges_reg_msgs         0 0          0  UNLIMITED
ges_big_msgs         0 0          0  UNLIMITED
ges_rsv_msgs           0 0          0          0
gcs_resources           0 0          0          0
gcs_shadows         0 0          0          0
dml_locks               2 2       1124  UNLIMITED
temporary_table_locks 0 111  UNLIMITED  UNLIMITED
transactions         1 1        281  UNLIMITED
branches                 0 0        281  UNLIMITED
cmtcallbk                 0 10        281  UNLIMITED
max_rollback_segments 12 36        281      65535



  * 첫 번째 줄의 processes에서 가장 오른쪽이 Limit 값입니다.

3. Processes parameter 변경

SQL > alter system set processes = 500 scope = spfile;
System Altered.


동시에 처리 가능한 Process의 숫자를 500개로 증가시켰습니다.

4. DB 재시작

SQL > shutdown immediate

Database closed.
Database dismounted.
Oracle instance shut down.

SQL > startup

ORACLE instance started.

Total System Global Area 219223120 bytes
Fixed Size 451664 bytes
Variable Size 201326592 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.

설정 값 적용을 위해 DB를 재시작합니다.


5. 설정 적용 확인

2번에서 알려드린 QUERY 문으로 확인하시면 설정이 변경 된 것을 알 수 있습니다.

2016년 10월 5일 수요일

FormData한글깨짐

var form = new FormData(); 사용시.

-각종 파라미터및 blob 파일까지 넘길수 있다.
-한글은 깨지기 때문에 인코딩해서 넘긴다.
// 클라이언트
var data = new FormData();
data.append("thumb_name",encodeURIComponent(name));
data.append("thumb_true_Name",trueName);
data.append("thumb_total_page",pages);

$.ajax({
url:_url,
processData: false,
                contentType: false,
        type: 'POST',
        data: data,
dataType: "json",
async: false, // false => 비동기를 동기로
        success:function(createResult){   // 결과변수 중복되면 안됨                            
            //console.log(uploadResult.result);        
        //console.log("1");
        value = createResult.result;        
        },      
        error:function(e){
            //alert(e.responseText);
        console.log("error");
        }
    });

// 서버
URLDecoder.decode(tDTO.getThumb_name(),"UTF-8")

2016년 8월 9일 화요일

아파치, 톰캣설치

리눅스 우분투 아파치 톰캣 연동하기

오늘은 아파치를 설치하고 톰캣과 연동해 보려고 한다.
연동해 보기 전에 아파치와 톰캣을 연동하는 이유는 뭘까?

톰캣은 정적인 페이지를 로드하기에 아파치 보다 느린 처리속도를 보인다.
톰캣은 설정할 수 있는 내용들이 아파치에 비해 부족하다.
톰캣은 아파치보다 부하에 약하다.
톰캣만으로는 서블릿/JSP밖에 서비스할 수 없다.
톰캣과 아파치를 연동하여 부하분담이 가능하다.(다수의 톰캣 구성으로의 로드밸런싱의 의미가 아닌 톰캣만으로 처리가능한 static page를 apache에서 대신함으로써의 부하 분담)


개발할때는 톰캣하나로만 돌려서 상관없을 것 같고 실제 운영할 때는 아파치와 톰캣을 연동하는게 성능이나 퍼포먼스를 향상시켜준다.

이제 아파치 톰캣을 연동해 보겠다.

1. 아파치 설치

apt-get install apache2


apache2 설치는 apt-get 패키지로 설치한다.
저 한줄만 입력하면 설치가 끝난다. 정말로 간단하다.







2. mod_jk 설치

apt-get install libapache2-mod-jk


mod_jk모듈은 톰캣과 아파치를 연결시켜주는 모듈이다.
이 모듈도 apt-get 명령어로 설치한다.



3. mod_jk 설정

vi /etc/libapache2-mod-jk/workers.properties

// 톰캣이 설치되어 있는 경로
workers.tomcat_home=/usr/local/tomcat8

// 자바가 설치되어 있는 경로
workers.java_home=/usr/local/java

// 사용할 worker의 이름을 셋팅한다.
// 아파치에 톰캣을 하나 이상 연결할 때는 woker.list=prj1,prj2 이런식으로 설정하면 된다.
// 그냥 기본으로 설정으로 셋팅
worker.list=ajp13_worker

// 각각의 worker list별로 설정.
// 여기서 포트는 톰캣에 설정되어 있는 ajp port를 적어준다.
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1


위에서 바꿔준 부분은 tomcat과 java 설치 경로만 바꿔주고 나머지는 default셋팅 그대로 두었다. 각자 상황에 맞게 설정하자.





4. 톰캣 설정

vi /usr/local/tomcat8/conf/server.xml

// 혹시 이부분이 주석처리 되어 있다면 주석을 제거한다. 위에서 worker.properties 파일에서 지정한 port번호이다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


// docBase는 톰캣에 올릴 프로젝트 경로, path는 도메인/path명이 된다.
// docBase를 지정하지 않으면 기본적으로 톰캣의 디폴트 디렉토리가 설정된다.

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
    <Context  path="/" reloadable="true" />
    ......
</Host>


톰캣과 커넥터를 연결하기 위한 설정이다.
http://localhost/path 경로로 접근시에 apache에서 tomcat으로 docBase에 설정된 경로로 연결을 해준다.
docBase설정을 하지 않을경우 기본적으로 톰캣 설치 경로의 webapps의 ROOT폴더를 바라본다.

5. 아파치 설정

vi /etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /usr/local/tomcat8/webapps/ROOT
ServerName monchertongtong.com      // 설정된 도메인
ServerAlias www.monchertongtong.com

JkMount /* ajp13_worker
JkMount / ajp13_worker


설정들이 많이 되어 있을텐데 제일 아래 부분쯤에 위와 같이 JkMount를 추가해 준다.
http://ip/PATH경로로 시작하는 주소는 모두 커넥터 설정에서 지정한 WORKER_LIST로 연결을 해준다.





6. 아파치, 톰캣 재시작

service apache2 restart
cd /usr/local/tomcat8/bin
./shutdown.sh
./startup.sh


7. 브라우저 확인






주소 입력창을 보면 8080port가 빠져있다. 아파치 톰캣 연동 성공했다.







물론 8080port를 붙인 주소로도 접속이 가능하다.
다음번에는 프로젝트 하나 다운받아서 톰캣에 올려보도록 하겠다.

2016년 6월 8일 수요일

타입변환

문자열을 숫자로 변환
int atoi(char *source_buffer)
long atol(char *source_buffer)
float atof(char *source_buffer)

숫자를 문자열로 변환
char *itoa(int value, char *string, int radix)
char *ltoa(long value, char *string, int radix)
char *ftoa(float value, char *string, int radix)

실수형 숫자를 문자열로 변환
char *ecvt(double value, int count, int *dec, int *sign)

부동소수점 숫자를 문자열로 변환
char *fcvt(double value, int count, int *dec, int *sign)
char *gcvt(double value, int digits, char *buffer)

2016년 5월 31일 화요일

SSD

1. SSD의 성능을 확인하는 법
SSD의 성능을 확인하려면 많이들 Crystal Disk Benchmark나 HD Tune을 사용하시지만 SSD 전용 벤치마크툴인 ATTO Disk Benchmark나 AS SSD Benchmark를 사용하시는 것이 가장 정확합니다. 여기서 잠깐 참고하실 점은, 여러개의 SSD를 RAID0으로 묶어 그 성능을 확인하려는 경우에는 레이드 컨트롤러에 따른 호환성의 문제로 몇몇 툴에서 벤치마킹이 제대로 이루어지는 경우가 많다는 것입니다. 어쨋든 SSD 성능 벤치마크는 되도록 ATTO나 AS SSD Benchmark가 가장 정확하다는 점을 기억해주시기 바랍니다.

2. SSD의 성능을 결정짓는 요소
SSD의 객관적인 성능은 제품상의 스펙이나 벤치마크 툴로 알 수는 있습니다만 이것이 실체감 성능과 반드시 비례하는 것이 아니라는 점을 꼭 기억하셔야 합니다. 다시 말해서 어떤 제품의 스펙이나 벤치마크 수치가 가장 높다고 해서 실제 작업 시 가장 빠르다는 점이 아닌 것이죠. 그럼 어떻게 실성능을 확인해야 되느냐.. 그 방법은 각종 웹싸이트에서 실제 벤치마킹을 보는 수 밖에 없습니다. SSD의 성능을 결정짓는 가장 큰 요소는 바로 컨트롤러입니다. 이는 컨트롤러에 따라서 파일작업 시 이뤄지는 메모리 읽기/쓰기 알고리즘이 달라지므로 작업 효율에 차이가 발생하기 때문입니다.
모든 SSD는 자체적으로 컨트롤러를 가지고 있습니다. 컨트롤러의 종류는 인디링스나 마벨, 혹은 인텔 컨트롤러 등 제품에 따라서 각각 다릅니다. 현재 가장 효율적인 컨트롤러는 인텔 컨트롤러가 되겠습니다.

3. SSD를 포맷하는 방법
일반적인 포맷은 빠른 포맷을 이용하면 됩니다. 로우 레벨 포맷이나 일반 포맷은 SSD의 물리적 특성상 적합하지 않습니다.
그러므로 SSD를 포맷한다고 성능이 더 나아지지 않습니다.
사실 포맷이라는 것은 HDD를 위한 기술이므로 SSD를 제대로 초기화를 하기 위해선 SSD 전용 초기화 툴을 사용하셔야 합니다.
SSD 전용 초기화 툴은 안타깝게도 통일된 것이 없으며, 현재 제조사에 따라서 각기 다른 초기화 툴을 권장하고 있습니다.
일례로 인텔 SSD 같은 경우에는 HDDErase을, OCZ SSD의 경우 Sanitary Erase 사용을 권고하고 있습니다.

-----------------------------------------------------------------------------------------------------------------
4. 새로 구매한 SSD를 사용하는 방법
새로 구매한 SSD를 바로 꽂게 되면 인식을 하지 못합니다.
새로 HDD를 사는 경우와 마찬가지로 먼저 빠른 포맷을 해서 볼륨을 만들어주신 후 사용하시면 됩니다.
볼륨을 만드는 방법은 윈도우 비스타, 윈도우 7인 경우 시작메뉴에서 '컴퓨터 관리'를 입력 후 엔터를 쳐서 나오는 아래 그림의 화면에서 해당 SSD를 선택하여 그림과 같이 포맷을 해주면 됩니다.

5. SSD를 최적화 하기 위한 BIOS 설정 - 1
SSD는 HDD와는 동작 원리가 다르기 때문에 제 성능을 뽑기 위해선 BIOS 설정 부터 만져주셔야 합니다.
BIOS를 들어가는 방법은 컴퓨터에 따라 전원 인가 후 처음 나타나는 포스팅 화면에서 DEL키 등을 눌러 들어갈 수 있습니다-->F2
이후 통상적으로 IDE 모드로 되어있는 SATA 작동방식 옵션을 AHCI로 바꿔주시면 됩니다.
(정확한 메뉴는 메인보드마다 조금씩 다릅니다)
참고로 복수개의 SDD를 RAID0로 사용하는 경우 RAID 모드로 두시면 자동으로 AHCI도 적용이 됩니다.
또한 참고로 구세대 메인보드에선 AHCI 모드를 지원하지 않는 경우도 있습니다.

6. SDD를 최적화 하기 위한 BIOS 설정 - 2
다음은 전원 관리에 대한 BIOS 설정을 만져주셔야 합니다.
바이오스에서 전원 관리 옵션을 보시면 EIST, C-STATE, C1E 세 가지가 존재합니다.
SSD 동작의 최적화를 위해선 모든 전원관리 옵션을 비활성화 하시는 것이 좋습니다. 하지만 이는 소폭의 전력소비 증가를 가져옵니다.
하지만 고담시는 C-STATE와 C1E를 반드시 비활성화 하시길 추천드리는 바입니다.

7. SSD를 최적화 하기 위한 윈도우 설정 - 필수 항목들
먼저 SSD를 최적화하여 사용하기 위해선 윈도우 7을 요구합니다.
윈도우 7 부터 공식적으로 SSD를 지원하기 때문입니다. 따라서 아래의 설정들은 윈도우 7에선 따로 만져주지 않아도 자동으로 셋팅됩니다. 그렇지만 아무쪼록 한 번 확인해 주는 것이 좋겠지요?
1) Indexing 비활성화 - 윈도우 탐색기> SSD가 설치된 드라이브를 우클릭> 속성> 일반 >이 드라이브의 파일속성및 내용색인 허용  비활성화 함(uncheck)
2) 디스크 조각모음 비활성화 - 윈도우 탐색기> SSD가 설치된 드라이브를 우클릭> 속성>도구> 지금 조각모음> 일정구성
예약실행에 Uncheck
(참고로 SSD는 디스크 조각모음을 전혀 필요하지 않습니다. 조각모음은 HDD에서만 효과가 있는 알고리즘 입니다)
3) 최대전원절전 비활성화 - 제어판> 전원 옵션> 설정 변경 >고급 설정> 하드디스크에서 전원 끄기를 사용 안함으로 설정합니다

8. SSD를 최적화 하기 위한 윈도우 설정 - 선택 항목들
이하 항목들은 사용자의 취향에 따라서 설정을 해도 되고 안해도 됩니다.
1) Super Fetch 비활성화
  windows search
2) 가상 메모리 사용 비활성화
 [sysdm.cpl]:  [내 컴퓨터>속성>고급 시스템 설정> [시스템 속성] 창을 열 수 있습니다.
 [고급] > 성능 - 메모리 사용 및 가상 메모> [페이징 파일 없음]

3) 시스템 복원 비활성화
[시스템 보호] 탭- 시스템 복원 기능을 사용하지 않게끔 설정합니다. 구성 버튼을 누른 후, 삭제와 시스템 보호 해제를 선택합니다.
차지하는 용량이나 기록 작업 등을 줄이기 위함입니다.

 윈도우 시작 메뉴-보조프로그램-시스템 도구에서 [디스크 조각 모음]을 실행합니다.
 윈도우에서 기본으로 디스크 조각 모음을 하게끔 스케줄을 예약하는데, SSD에서는 이 조각 모음을 할 필요가 없습니다.
 HDD와 달리 헤드가 움직이고 플래터가 돌아가는 게 아니니까요. 예약 설정을 없애, 디스크 조각 모음이 실행되지 않도록 합니다
-------------------------------
사용자 계정컨트롤 끄기
시작>제어판>사용자계정> 사용자 계정 컨트롤 설정변경> 알리지 않음
-------------------
9. SSD 상태의 최적화 - 펌웨어 업데이트
펌웨어 업데이트는 SSD 컨트롤러의 성능을 최적화 하는 데에 매우 중요합니다.
보통 최근에 산 제품일 수록 최신의 펌웨어가 탑제될 가능성이 높습니다.
펌웨어 업데이트는 제조사 마다 그 방식이 다르므로 여기선 설명을 생략합니다.

10. 트림 Trim 기능 활성화
조건
1) 먼저 운영체제가 윈도우 7 이어야만 합니다
2) BIOS에서 SATA 작동 방식이 AHCI 여야 합니다
3) 해당 SSD가 트림 기술이 지원되어야 합니다 (인텔의 경우 G2 부터 가능하며 펌웨어는 2CV102HA 이상 부터 가능합니다)
다음 현재 트림 기술이 적용되었는지를 확인하려면 도스창에서 다음을 입력해 보세요.
fsutil behavior query DisableDeleteNotify
그럼 값이 나오는데 0이 나오면 트림이 작동중이며 1이 나오면 작동하지 않는다는 뜻입니다.
이럴 때는 다시 도스창에서 fsutil behavior query DisableDeleteNotify 0을 입력하시면 됩니다.

11. 가장 중요한 부분 !!
사용공간의 20~30%는 항상 비워두세요.
SSD는 작동 원리상 사용 가능한 빈 공간이 전체적인 퍼포먼스에 굉장히 큰 영향을 미칩니다.
따라서 SSD 용량을 마치 HDD 사용하듯이 꽉꽉 채워 쓰는 것은 굉장히 안좋습니다.
물론 SSD가 용량이 적긴 합니다만.. 최고의 성능을 위해선 항상 20~30%을 비워두세요.
==============================================================
http://www.parkoz.com/zboard/view.php?id=my_tips&no=13949

XP 를 사용하시려고 하면 AHCI 드라이버를 플로피로 올리시거나 드라이버 통합 OS를
제작하셔야하는 불편함이 있습니다. 또한 OS의 자동 trim이 지원되지 않습니다.
그리고 일정 기간마다 인텔 툴박스를 사용해서 최적화를 꼭 해주셔야 속도저하가 없습니다.

드라이버는 윈7 기본 AHCI 드라이버를 사용하셔도 크게 문제는 없습니다만
좀 더 최적화된 성능을 보기 위해서는 Intel Rapid Storage V9.6 이상 드라이버를
설치해주시는게 좋습니다

윈도우 서비스는 Superfetch 와 Windows Search, Disk Defragmenter 정도만
사용안함으로 해주시면 별 무리없습니다.



=================================================================================================================
자료출처: cafe.daum.net/MagicWeaver
=================================================================================================================
자 SSD의 기본적인 성능을 보앗으니, 최적화를 알아봅시다.
그럼 제일 중요한거부터!!
1. TRIM(트림)기능 활성화
앞서 말씀드린것과 같이, SSD는 셀을 지속적으로 비우지 않으면 금방 쓰기속도가 느려져 버립니다.
이 쓰기속도 일정화를 위해 반드시 필요한 것이 셀에 기록이 지워졌다는 것을 인식하고 셀을 지우라
고 명령하게 하는 TRIM기능입니다. SSD를 쓸 거라면 운영체제는 윈도우7을 쓰라는 것이 바로 이
의미입니다. 앞에서도 설명했지만, SSD를 고려하지 않았던 XP나 VISTA는 자동트림기능이 빠져 있
습니다. 수동트림 툴을 따로 구해서 지속적으로 트림을 하셔야됩니다.
그 방법은 전 7을 쓰므로 모릅니다.(무책임 ㅈㅅ;;) 걍 윈도우7쓰는게 제일 확실하고 좋습니다.
(가끔보니 수동툴썻다가 하드가 날아간 경우도 있다는군요 =_=;)
이 트림기능은 활성화를 위해 반드시 필요한 것이 SSD가 트림기능 지원이 가능하냐는 것입니다. 구
형 SSD는 이런 기능이 전혀 없어서 아예 트림이 불가능한 경우도 있습니다. 인텔 컨트롤러나 인디링
스 베어풋 컨트롤러를 가진 SSD에는 트림기능이 활성화가 되니 걱정하지 마세요. 두번째로 펌웨어
입니다. SSD가 되더라도 펌웨어가 구형이면 소용이 없습니다. 최신 펌웨어가 성립되어야 합니다. 세
번째로 하드 설치 모드가 AHCI인 상태에서 윈도우 7이 깔려야 합니다. 이 세번째의 경우에는 SSD에
따라 다릅니다. 인텔 SSD의 경우에는 무슨 방식으로 설치하더라도 트림기능이 활성화됩니다만, 그
렇지 않은 SSD도 있습니다. 다만 인텔 SSD의 경우에도 AHCI방식이 속도가 좀 더 빠르니 AHCI로 OS
를 설치하시는것을 권장합니다.

*하드설치모드는 3종류가 있습니다. IDE, AHCI, RAID 이렇게 세 종류인데요, 이중 속도가 가장 빠른
것은 RAID입니다. 하지만 이 방법은 SSD가 2개 이상 필요하므로 지금은 생각하지 맙시다. 예전 하드
에서 사용했던 설치 방식이 IDE방식입니다. 이것이 좀 더 발전시킨 방식이 AHCI라고 생각하시면 됩니
다. 설치방식은 컴퓨터의 CMOS 셋팅에 들어가 설정을 바꿔주시면 됩니다. 다만, OS설치하기전에
해주셔야 됩니다. 설치한 후에 바꾸시면 OS설치를 새로 해주셔야 됩니다.
이상태에서 윈도우7을 까시면 자동적으로 트림기능이 활성화됩니다. 트림기능이 정상적으로 확인하기
위해서 CMD를 관리자 권한으로 들어가서 아래와 같이 치시면 됩니다.

fsutil behavior query DisableDeleteNotify라고 치시면 밑에 DisaableDeleteNotify라고 뜨는거 보이시죠?
옆에 숫자가 0이면 트림기능이 활성화된 것이고, 1이라고 쓰여있으면 그렇지 않은 것입니다. 트림 활성화
가 안돼있으면 위의 문제를 다시한번 확인해주세요.
제일 중요한 겁니다. 밑에꺼 다해도 이게 안되있으면 SSD는 며칠 못쓰고 답답해서 못쓸껍니다.

2. 디스크 조각모음 끄기.
디스크 조각모음이란, 하드디스크 안의 디스크가 기록되어있는 부분이 여기저기 흩어져있거나 엉뚱하게 뭉
쳐있어 데이터가 조각나 일명 "디스크 단편화 문제"라는 것이 생기는지라 하드가 느려집니다. 이 조각난 데
이터를 정리해주는 것이 디스크 조각모음 인데요, SSD가 디스크인가요? 아닙니다. 이건 고체상태의 저장장
치(Solid State Drive)입니다. 디스크 단편화문제따위 생기지 않습니다. 애초에 읽기속도가 고속이므로 조각
모음을 할 필요가 없습니다. 컴퓨터->SSD인 하드 오른쪽 클릭->속성->도구->지금 조각 모음->예약사용->
예약실행 체크 해제->확인 이순서대로 디스크 조각모음 사용을 중단해주세요

3. 포맷은 빠른포맷으로.
만약 SSD안 파일을 셀을 안비우고 그냥 지운다 친다면 절대 느린포멧을 하면 안됩니다. 저도 정확한 이유는
모르겟는데 느린포맷을 햇다간 오히려 SSD의 성능이 떨어진다구 하더군요.(이유 함 알아봐야겟뜸 ㅠ0ㅠ)
빠른포맷으로 하시길 바랍니다. 기록만 지우는거니 금방 끝납니다. 물론 기록과 함께 트림기능도 사라지니
자동트림은 안됩니다만;

4. 셀을 비울땐 디스크 초기화 툴을 써라
하드를 느린포맷하듯이 SSD의 셀을 비우려면 디스크 초기화 툴을 써야 합니다. 가장 대표적인 것이 HDD
ERASE입니다. 셀을 완전히 비우는 툴입니다. 사용법은 도스부팅을 하는 툴을 써서 순서대로 적용해주시면
됩니다. 다만 실행 전에 CMOS에서 하드모드를 AHCI에서 IDE로 바꿔주세요. IDE모드에서만 작동합니다.

5. 인터넷 임시파일 이동
인터넷 익스플로러는 처음 페이지를 열면 다음에 같은 페이지를 열때 빨리 열기 위해 파일을 하드디스크에
받아놓습니다. 이를 임시파일이라고 하는데요, 수시로 지워졌다가 다시기록되었다가 하는 파일을 SSD에
깔면 성능에 치명적인 영향이 올 수 있습니다. 익스플로러 창->도구->인터넷 옵션->검색 기록의 삭제->
옆의 설정->폴더이동->SSD외의 하드디스크로 위치 이동. 이 방법으로 적용해주시면 됩니다.
이정도만 해도 윈도우7의 트림기능은 완벽에 가깝기 때문에 충분한 성능이 나옵니다. 좀 더 추가적으로 CMOS
셋팅에서 전원관리하고 절전기능끄고 하는것도 있지만, 그건 다음에 다시한번 정리하도록 하겠습니다. 위의
것이 제일 중요하다고 생각하시면 되겟네요. 그럼 새해복 많이 받으세요 ^0^

2016년 5월 8일 일요일

Oracle column modify varchar2 to clob

Oracle column modify varchar2 to clob

Oracle 에서 varchar2 타입을 CLOB 타입으로 변경하는 경우
‘ALTER TABLE 테이블명 MODIFY’ 로는 변경이 되지 않는다.

구글링해서 알아낸 방법!

1. 기존 컬럼(varchar2)의 데이터를 옮길 새 컬럼(CLOB)을 만든다.
2. 기존 컬럼의 값을 새 컬럼에 UPDATE 한다.(복사)
3. 데이터가 잘 복사 되었는지 확인한다.(손실되면 큰일이므로 반드시 확인 후 commit 처리!)
4. 복사가 잘되었으면 COMMIT! 아니면 ROLLBACK!
5. 기존 컬럼을 삭제한다.
6. 새 컬럼의 이름을 기존 컬럼의 이름으로 변경한다.

ALTER TABLE <table_name> ADD ( <new_column_name> CLOB );
UPDATE <table_name> SET <new_column_name> = <old_column_name>;
ALTER TABLE <table_name> DROP ( <old_column_name> );
ALTER TABLE <table_name> RENAME COLUMN <new_column_name> TO <old_column_name> ;

2016년 1월 5일 화요일

GC overhead limit exceeded

HTTP Status 500 - Handler processing failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded
에러발생시

Catarina.sh에 추가해준다.

JAVA_OPTS 위치에

export JAVA_OPTS="-Djava.awt.headless=true -server -Xms2048m -Xmx4096m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

2016년 1월 4일 월요일

폴더용량확인

남은 용량
-h 는 kilo, mega, giga 단위로 보여줌
-t  는 파일시스템의 종류를 보여줌 / 유닉스에서는 볼륨별로 분류해서 보여주는 듯
df -h -T

df .
현재 경로가 해당된 파티션의 용량과 i-node등 정보 출력

폴더 용량
du -sh home
home 디렉토리 용량 확인
-s sum 폴더안의 합계만을 출력함

du . 현재 디렉토리 용량 확인(즉 du 타겟 디렉토리 형식 임)

du -h --max-depth=1 .
-h 휴먼의 약자로 보기 쉽게 함 --max 부분은 하위깊이가 1 즉, 하위폴더를 체크 안함
. 은 타겟 디렉토리임

파일 개수
find . | wc -l 현재 디렉토리 . 을 포함
ls | wc -l 현재 디렉토리 제외

vi

[1] 시작

셀상에서 vi [파일명]를 입력하면 새로운 문서를 편집할 수 있는 환경이 만들어 집니다.

예) >vi
기존의 문서를 편집하고자 할 때에는 파일의 이름을 구체적으로 명시합니다.
예) >vi file1
지정한 파일의 내용을 읽기 전용으로 열어서 볼 때는 다음과 같이 명시합니다.
예) >vi -R file
>view file

[2] vi의 세가지 모드

vi명령어는 어떻게 구성되어 있을까요?
vi명령어는 다음과 같이 입력 모드, 명령 모드, 콜론 모드(ex 모드) 크게 세가지로 분리됩니다.
① 입력 모드 - i, a, o, I, A, O를 누른 후 텍스트를 입력할 수 있는 상태
② 명령 모드(Esc모드) - ESC키를 누른 상태
③ 콜론 모드(Ex모드) - ESC키를 누르고, :(콜론)을 입력한 상태

그리고, 이러한 기본적인 모드들을 다른 편집기의 활용과 비교해보자면, 다음과 같습니다.
① 입력 모드 - 다른 편집기에서 타이핑을 하여 파일의 내용을 입력하는 과정
② 명령 모드 - 다른 편집기의 편집(Edit) 메뉴에서 제공하는 복사(Copy), 붙이기(Paste),삭제(Delete) 등의 편집 기능의 활용
③ 콜론 모드(ex 모드) - 다른 편집기의 파일(File) 메뉴에서 수행하는 열기(Open), 저장 (Save), 다른 이름으로 저장(Save as) 등의 명령 수행
vi는 실행될 때 명령 모드에서 시작하고, 실행을 종료할 때에는 콜론 모드에서 종료 명령을 수행합니다. 또한 vi는 대문자와 소문자 구분을 확실히 해두어야 한다.

(1) 입력 모드
글자를 입력하기 위해서는 입력모드로 가야하는데, 'i'를 입력하면, 하단에 --INSERT--가 나오면서, 글자를 입력할 수 있는 입력모드로 바뀝니다.
입력 모드로 들어가는 대표적인 방법은 i 키를 누르는 것이지만, 이외에도 몇 가지 방법이 더 있습니다.

- i : Insert, 현재 커서의 위치에 글자를 삽입
   - I : Insert, 커서가 있는 줄(line)의 맨 앞에 글자를 삽입
   - a : Append, 현재 커서 위치의 다음 칸에 글자를 추가
   - A : Append, 커서가 있는 줄(line)의 맨 뒤에 글자를 추가
   - o : Open line, 현재의 줄 다음에 새로운 줄을 삽입
   - O: Open line, 현재의 줄 앞에 새로운 줄을 삽입

★ 영/한 변환은 Shift+Spacebar를 입력하면 됩니다.


(2) 명령 모드
입력 모드에서 명령 모드로 다시 전환하려면 Esc 키를 누르기만 하면 됩니다. ESC 키를 누르고 문자를 입력하려고 하면 비프음만 날 뿐 입력은 되지 않을 것입니다.
리눅스에서는 명령모드가 따로 있습니다. 명령모드는 편집모드라고도 하는데, 글을 입력시키는 방법이 아닌 수정과 편집을 할 수 있는 상태임을 기억해 두어야 합니다. 즉, 명령모드에서는 복사,삭제, 붙이기. . .등의 작업이 이루어 집니다. 또한, 입력모드를 통해 삽입 등 잘못된 명령을 내렸을 때 'u'라는 명령어를 통해서 Undo, 즉 복구가 가능하게 할 수 있습니다.

(3) 콜론 모드
명령모드에서 콜론 모드로 전환하려면 ':'명령을 실행시키면 됩니다. 콜론 모드는 vi에서 사용할 수 있는 명령어들을 이용하는 곳입니다. 윈도우 환경에서라면 메뉴 바와 같은 역할을 한다고 볼 수 있습니다. 파일을 저장하거나 vi를 종료하는 등의 일을 수행할 수 있습니다. 콜론 모드로 들어가려면 Esc를 누른 후 ":"를 누르면 됩니다. 콜론 모드에 들어가게 되면 화면 아래쪽에 ':' 표시가 나타나게 되며, 여기서 원하는 작업에 해당하는 명령을 입력하고 Enter 키를 치면 됩니다. 아래 그림에서 아래쪽에 ":wq"라는 표시가 눈에 뜨일 것입니다. ":" 이 상태가 바로 앞에서 말한 콜론모드의 형태입니다.

[3] 종료
종료 명령은 앞에서 잠깐 콜론 모드에서 이루어 집니다.
편집한 데이터를 저장하고 종료하려면, wq(Write and Quit)를 입력합니다.

예) :wq
저장하지 않고, 강제로 종료하려면, q!(Quit!)를 입력합니다.
예) :q!
vi를 끝내지 않고, 현재 작업 중인 내용을 저장만 하려면, w를 입력합니다.
예) :w

[4] vi명령어의 간단한 문법
(반복횟수)(편집명령)(반복횟수)(커서이동명령)
현재의 위치에서, 커서이동명령의 내용순서대로, 문서의 임의위치로 이동하는 순간, 편집명령어의 내용이 수행됩니다.

[5] 정규표현식의 특수 기호들
   - . : 한글자를 대표하는 기호 (dos 의 ? 와 동일)
   - * : 여러개의 문자를 동시에 대표하는 기호
   - ^ : 줄의 처음시작
   - $ : 줄의 맨끝
   - % : 처음줄부터 끝줄까지
   - \ : 특수한 기호들이 가지는 뜻을 없앨때 사용
   - \< : 단어의 시작과 대응합니다
   - \> : 단어의 끝과 대응합니다
   - [^] : 묶여진 문자를 제외한 아무것이나 대응합니다
   - \ : 이어지는 기호를 문자 그대로 해석합니다
   - [ ] : 일정한 제한을 두어 글자를 대표하고자 하는 기호
   - [a-z] : a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 를 대표
   - [A-Z] : A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z 를 대표
   - [AB] : A 또는 B
   - p[aeiou]t : pat, pet, pit, pot, put 를 대표
   - [0-9] : 0,1,2,3,4,5,6,7,8,9 를 대표



[6] 명령 모드(ESC 모드)에서 사용되는 몇가지 기호
- 다음과 같은 기호는 기본적인 것으로 필수적으로 알아두시기 바랍니다.
- G : 화일의 맨끝으로
- ^ : 현재줄의 맨앞 (빈칸무시)으로
- 0 : 현재줄의 맨앞으로
- $ : 현재줄의 맨 뒤로
- % : 짝을 이루는 기호 확인
- w : 다음 단어로
- b : 이전 단어로
- e : 현재 단어의 끝 글자



[7] 커서 움직이기
- 명령모드 상태에서 커서를 마음대로 움직일 수 있습니다.
① 글자 단위 이동
- h : 커서를 한칸 왼쪽으로 이동하는 명령
- j : 커서를 한줄 아래로 이동하는 명령
- k : 커서를 한줄 위로 이동하는 명령
- l : 커서를 한칸 오른쪽으로 이동하는 명령
- Backspace : 커서를 한칸 왼쪽으로 이동하는 명령
- Space : 커서를 한칸 오른쪽으로 이동하는 명령

② 줄 단위 이동 - ^ : 빈칸을 무시하고, 커서를 현재 줄의 첫글자로 이동하는 명령
- 0 : 커서를 현재줄의 처음으로 이동하는 명령
- $ : 커서를 현재줄의 맨끝으로 이동하는 명령
- % : 짝을 이루는 기호 확인하기
- + : 커서를 다음줄의 처음으로 이동하는 명령
- - : 커서를 이전 줄의 처음으로 이동하는 명령
- Return : 커서를 다음줄의 처음으로 이동하는 명령
- n| : 현재줄의 n 번째 열로 (n은 임의의 숫자)
- H(Home) : 커서를 화면상에 처음줄로 이동하는 명령
- M(Middle) : 커서를 화면상에 중간줄로 이동하는 명령
- L(Last) : 커서를 화면상의 마지막줄로 이동하는 명령
- nH : 화면상의 처음줄로부터 n 줄 밑으로 이동(n은 임의의 숫자)
- nL : 화면상의 마지막줄로부터 n 줄 위로(n은 임의의 숫자)
- g(Go) : 파일의 마지막 줄로 이동하는 명령
- nG : n번째 줄로 건너뛰는 명령
- gg : 맨 마지막줄로
- ngg : n 번째줄로
- n : n 번째줄로

③ 단어 단위 이동 - w(word) : 커서를 다음단어의 첫글자로 이동하는 명령
- b(back) : 커서를 이전단어의 첫글자로 이동하는 명령
- e(end) : 커서를 다음단어의 끝 글자로 이동하는 명령
- E : ?, ! 등 구두점을 무시하고, 현재 단어의 끝으로 이동
- ) : 다음 문장의 시작으로 이동하는 명령
- ( : 이전 문장의 시작으로 이동하는 명령
- } : 다음 문단의 시작으로 이동하는 명령
- { : 이전 문단의 시작으로 이동하는 명령
- ]] : 다음 섹션의 시작으로 이동하는 명령
- [[ : 이전 섹션의 시작으로 이동하는 명령

④ 화면단위 이동
- vi에는 스크롤 기능이 없는 대신 화면 단위로 이동하는 명령어들이 있습니다.
- Control + F (Forward) : 한화면 밑으로 이동
- Control + B (Backward) : 한화면 위로 이동
- Control + D (Down) : 반쪽화면 밑으로 이동
- Control + U (Upon) : 반쪽화면 위로 이동
- Control + E : 커서는 현재위치 그대로 화면만 한줄씩 위로 이동
- Control + Y : 커서는 현재위치 그대로 화면만 한줄씩 아래로 이동
- z : 커서의 위치와 함께, 화면상의 맨위로
- nz : n번 라인을 화면상의 맨위로
- z : 커서의 위치와 함께, 화면상의 중간으로
- z- : 커서의 위치와 함께, 화면상의 맨아래로
※ - Control + G : 현재 편집하고 있는 문서의 상태를 알 수있다
- Control + L : 화면 재표시 (글자가 깨졌을 경우; 윈도의 F5와 비슷)
- Control + R(edraw) : 화면 재표시 (글자가 깨졌을경우)



[8] 편집하기
① 복사, 붙이기, 합치기
- y (Yank) : 복사하기
- yy : 한 줄 전체의 내용을 복사한다
- 2yy : 두줄복사
- nyy : 현재 줄 이하로 n개의 줄을 복사한다 (n은 임의의 숫자, 2yy는 2줄 복사)
- ynw : n개의 단어를 복사한다(y2w는 두 개의 단어를 복사)
- yw : 한단어 복사
- y2w : 두단어 복사
- y$ : 현재 위치에서 그 줄의 끝까지 복사한다
- y0(y^) : 현재 위치에서 그 줄의 처음까지 복사한다
- yG : 현재 위치에서 파일의 끝까지 복사한다(G는 파일의 마지막 줄)
- Y : 한 줄 전체의 내용을 복사한다 (yy 와 동일)
※ 마지막 명령어의 반복 - . : 마지막에 수행한 명령어를 반복한다.
-2. : 명령어를 2번 반복한다.
- p (Put or Paste) : 붙이기
- p : 버퍼에 저장된 내용을 커서의 오른쪽으로 붙여 넣는다.
- 2p : 아래로(오른쪽으로) 두번 붙이기
- np : n번만큼 p 명령을 반복. 2p라면 버퍼의 내용을 두 번 붙여넣는다
- P : 위로(왼쪽으로) 붙이기
- 2P : 위로(왼쪽으로) 두번 붙이기
- nP : 버퍼에 저장된 내용을 커서의 왼쪽으로 붙여넣는다. 사용법은 p와 같다
- xp : 두 문자를 바꾸는 명령
- deep : 두 단어를 바꾸는 명령
- ddp : 두 줄을 바꾸는 명령
- J(Join) : 여러 줄의 내용을 한 줄로 합친다
- J : 현재줄을 윗줄에 붙인다. (두줄 합치기)
- nJ : n개의 줄을 합쳐 한 줄로 만든다. 커서는 원본 문서의 마지막 줄의 첫번째 위치(합쳐진 줄에서는 중간)에 놓인다. 5J는 5줄로 이루어진 내용을 한 줄로 만든다

② 지우기, 복구하기, 바꾸기 - dnw : n개의 단어를 지운다
- d$ : 커서가 있는 위치에서 그 줄의 끝까지 지우기
- D : 커서부터 줄의 끝까지 삭제합니다. (d$ 와 동일)
- d (Delete) : 지우기
- dd : 현재커서가 위치한 줄의 전체를 삭제합니다.
- 2dd : 두줄지우기
- ndd : n줄지우기 (n 은 임의의숫자)
- dw : 한단어 지우기
- d2w : 두단어 지우기
- d0(d^) : 그줄 처음까지 지우기
- dG : 커서가위치한 곳으로 부터 문서 끝까지 지우기
- d move : 커서가 위치한 곳부터 move까지 삭제
- dlG : 커서가 위치한 곳으로부터 편집버퍼의 맨앞까지 삭제.
- :lined : 지정한 줄을 삭제
- :line, lined : 지정한 범위를 삭제
- u (Undo) : 되살리기 명령으로 버퍼에 저장되어 있는 원래의 내용을 복구
- u : 한번복구하기
- 'nu' : (n은 임의의 숫자) 형식으로 사용하며, n 단계까지의 명령을 복구할 수 있다
- 2u : 두번복구하기

- c (Change) : 바꾸기
- cc : 한줄 바꾸기
- 2cc : 두줄 바꾸기
- ncc : n개의 줄 바꾸기(n은 임의의 숫자)
- cw : 한단어 바꾸기
- ce : 공백을 제외하고 한단어를 바꾸기
- c2w : 두단어 바꾸기
- c$ : 그 줄 끝까지 바꾸기
- c0(c^) : 현재 위치에서 파일의 끝까지 바꾼다
- c : 그 줄 끝까지 바꾸기 (c$)와 동일
- cmove : 커서부터 move까지 변경
- r (Replace) : 한글자 바꾸기
- 2r : 두글자 바꾸기
※ r 명령어는 insert 모드로 바뀌지 않는다.
- R : 바꾸면서 삽입이 아닌 수정(modify) 모드로 들어간다. 윈도에서 Insert 키를 누르고 수정 상태로 들어가는 것과 같다
- s : 한글자 지우고 insert 모드로 - cl 와 동일
- S : 한줄지우고 insert 모드로 - cc 와 동일
- ~ : 대문자 < - > 소문자 바꾸기 - 영문자에만 해당
※ 지우기와 바꾸기의 차이점은 바꾸기는 명령어 후에 vi 편집모드로 바뀐다.



[9] 찾기
- /요 : 현재 위치에서 아래쪽 방향으로 '요'라는 단어를 찾는다
- ?요 : 현재 위치에서 위쪽 방향으로 '요'라는 단어를 찾는다
- / : 단어 찾기를 반복한다(웨에서 아래쪽 방향으로)
- n : 단어 찾기를 반복한다(아래쪽 방향으로)
- ? : 단어 찾기를 반복한다 (아래족에서 위쪽 방향으로)
- N : 단어 찾기를 반복한다 (위쪽 방향으로)
- fx : 현재줄에서 x문자 찾기 - x 는 한개의 글자
- Fx : 현재줄에서 반대방향으로 x문자 찾기 - x 는 한개의 글자
- tx : 현재줄에서 x문자를 찾아서 바로전에 커서놓기
- Tx : 현재줄에서 반대방향으로 x문자를 찾아서 바로후에 커서놓기
- ; : 현재 줄에서 글자 찾기를 반복한다(뒤로)
- ' : 현재 줄에서 글자 찾기를 반복한다(앞으로)
※ 찾기와 편집명령의 응용
- d/simple : simple 이라는 단어가 나올때까지 지우기
- d/^scully : 줄의 맨앞에 scully 라는 단어가 나올때까지 지우기
- y/yahoo : yahoo 라는 단어가 나올때까지 복사하기

[10] 편집모드 지정하기
- i : insert 현재커서위치
- I : 현재커서가 위치한 줄의 맨처음에
- a : append 현재커서위치 바로 다음에
- A : 현재커서가 위치한 줄의 맨끝에
- o : open 현재커서위치 바로 아래줄에
- O : Open 현재커서위치 바로 윗줄에

[11] 표시하기(Marking)
mx : mark 현재의 커서위치를 x 라는 문자로 기억 보이지 않는 북마크
- `x : 기억된 x 위치로 이동
- `` : 이동하기 전의 위치로 (제자리)
- ' ^_ x : 기억된 x 위치의 맨 앞으로 이동
- '' : 이동하기 전 위치의 맨앞으로 이동

[12] 버퍼 이용하기
- "xyy : x 라는 이름의 버퍼에 한줄 복사 하기
- "xp : x 라는 이름의 버퍼에 저장된 내용을 붙이기
- := : 현재 줄번호 보여주기
- :/pattern/ = pattern 이 위치한 줄번호 보여주기



[13] ex 명령어 익히기
vi서 사용하는 ex 명령어는 이전 ex 편집기에서 지원하던 기능들입니다. ex 모드(콜론 모드)에서 사용하는 명령어는 열기(Open), 저장(Save), 다른 이름으로 저장(Save as) 등의 명령을 수행합니다. ex 모드는 Esc 키를 누르고 ':' 키를 입력하여 들어갈 수 있다는 것과 종료시의 명령어에 대해서는 앞에서 설명하였기에 생략하기로 하겠습니다.
① ex 명령어의 기본형식
(범위지정) (명령어) (명령이 수행될 위치)
:k,l command m
예)
- :1,10 co 50 : 1 줄 부터 10 줄 까지를 50 줄 이후로 복사
- :34,50 d : 34 줄 부터 50 줄 까지 삭제
- :100,150 m 10 : 100 줄 부터 150 줄까지를 10 줄 이후로 옮김
- :.,$ d : 현재줄부터 끝까지 지우기
- :.,+20 co -4 : 현재줄부터 20줄을, 4줄 위에 복사하기
- :-,+ t 0 : 위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기
- :/pattern/ d : pattern 이 들어있는 줄 지우기
- :/pattern/ -nd : pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기
- :/pattern/ +nd : pattern 이 들어있는 줄로부터 n 번째 아랫줄 지우기
- :/pattern1/,/pattern2/d : pattern1 이 들어있는 줄부터, pattern2 가 들어있 는 줄까지 지우기
- :.,/pattern/ m 23 : 현재줄부터 pattern 이 들어있는 줄까지, 23번줄 이 후로 옮기기
② g 옵션 붙여 문서전체에 적용하기
- :g/리눅스 : 파일 전체에서 '리눅스'가 있는 마지막 줄로 이동한다
- :g/리눅스/ p : 파일 전체에서 '리눅스'가 있는 줄을 보여준다
- :g/리눅스/ nu : 파일 전체에서 '리눅스'가 있는 줄을 번호와 함께 보여준다
- :60,100 g/리눅스/ p : 60∼100줄 사이에서 '리눅스'가 있는 줄을 보여준다
- :g/리눅스/d : 문서 전체에서 '리눅스'가 있는 줄을 제거한다
③ 저장 및 종료하기
- :w : 저장하기 (write)
- :q : 종료하기 (quit)
- :wq : 저장하고 종료하기
- :xv저장하고 종료하기 (:wq 와 동일)
- :w! : 강제로 저장하기 (read-only 로 열었을경우)
- :q! : 편집한 내용을 저장하지 않고 종료하기
- :w new_file_name : 새로운 파일이름으로 저장하기
- :w %.new : 현재화일 이름에 .new 를 붙여서 새로운 화일로 저장
- :230,$ w file_name : 230 줄부터 끝줄까지 file_name 으로 저장하기
- :.,600 w file_name : 현재줄부터 600줄까지 file_name 으로 저장하기
- :1,10 w new_file : 1줄부터 10줄까지 new_file 로 저장하기
- :340,$ w >> new_file : 340줄부터 끝줄까지 new_file 에 추가하기

④ 읽기
- :r[ead] filename : 현재위치에 filename 읽어들이기
- :r /usr/local/data : 현재위치에 /usr/local/data 읽어들이기
- :185 r /usr/local/data : 185줄 이후에 /usr/local/data 읽어들이기
- :$r /usr/local/data : 맨끝줄 이후에 /usr/local/data 읽어들이기
- :0 r /usr/local/data : 맨윗줄에 /usr/local/data 읽어들이기
- :/pattern/ r /usr/local/data : pattern 이 존재하는 줄에 /usr/local/data 읽어들이기
⑤ 다중편집하기
vi file1 file2 :file1과 file2라는 두 개의 문서를 읽어들인다. 먼저 읽는 문서는 file1이다
- :args :현재 편집중인 화일목록을 보여준다
v - :n :두 번째 문서(file2)를 편집할 수 있다
- :e # :이후부터는 ':e #' 명령을 사용하여 문서를 번갈아 열며 편집할 수 있다
- :prev[ious] :이전화일로 돌아간다
주의 - 편집중인 화일이 저장되지 않으면 다음 화일로 넘어갈수 없다
* * 새로운 파일 편집하기
- :e file1:새로운 파일(file1)을 읽어들여 편집한다
- e[dit] file_name :새로운 file_name 편집하기
- :e! :현재의 편집중인 내용을 무시하고 가장 최근에 편집한 내용을 다시편집하기
⑥ g 옵션과 바꾸기
- :m,n s/old/new/g - :g/pattern/ s/old/new/g
예 )
: 1,5 s/리눅스/linuk/gc :1줄부터 5 줄까지 리눅스를 linuk 로 확인해가면서 바꾼다.
:g/문자 /s/파일/file/g : '문자'가 있는줄만을 찾아서 '파일'을 'file'로 바꾼다.
:% s/버퍼/buffer/g :처음줄부터 마지막줄까지, 버퍼 를 buffer 로 바꾼다.
* * 프로그램 소스 코드에서 괄호 짝 찾기
프로그램이나 HTML 소스에는 수많은 괄호(< >, ,…)가 사용되게 마련입니다. 때문에 편집을 하다 보면 괄호의 짝을 잃어버려 프로그램 오류가 나는 경우도 빈번합니다. 이럴 때 vi는 편리한 기능을 제공합니다. 해당 괄호 위에 커서를 놓은 후 키를 누르면 짝이 되는 괄호의 위치로 이동합니다.

[14] 예기치 않은 시스템 다운후 되살리기
- vi -r :되살릴수 있는 모든 파일의 이름을 보여준다.
- vi -r file :vi에디터를 실행하여 지정한 파일을 되살리는 옵션이다

[15] 디스플레이 제어
^L : 현재의 화면을 다시 불러온다
:set number : 내부의 줄번호로 내용을 불러온다
:set nonumber : 내부의 줄번호로 내용을 되 불러 오지 않게 하는 옵션이다
예) set number 실행시 다음과 같이 줄번호가 나타납니다
- /rexp : 지정된 정규표현식에 대해 앞으로 이동한다.
- / : 이전의 패턴에 대해 앞으로 검색을 반복하는 명령
- ?rexp : 지정된 정규 표현식에 대해 뒤로 이동하는 명령
- ? : 이전의 패턴에 대해 뒤로 검색을 반복하는 명령
- n : : /나 ? 명령에 대해 같은 방향으로 반복하는 명령
- N : : /나 ? 명령에 대해 반대방향으로 반복하는 명령

[16] 줄의 길이조정
- r :Return : 문자를 새로운 라인으로 변경하는 명령
- J :줄을 결합하는 명령
- :set wm=n : 오른쪽으로 n문자 위치에서 자동적으로 줄을 나누는 명령



[17] 편집버퍼를 통한 이동
- ^F : 한 화면 아래로 이동
- ^B : 한화면 위로 이동
- n^F : n 화면 아래로 이동
- n^B : n화면 위로 이동
- ^D : 반화면 아래로 이동
- ^U : 반화면 위로 이동
- n^D : n 줄만큼 아래로 이동
- n^U : n 줄만큼 위로 이동

[18] 쉘 명령실행
중단하고 지정한 셸 명령을 실행
- :!! : vi를 중단하고 이전의 셸 명령을 실행
- :sh : vi를 중단하고 셸을 실행
- :!csh : vi를 중단하고 새로운 C쉘을 실행
[19] 패턴에 의한 치환
- :s/pattern/replace/ : 현재 줄을 치환한다
- :lines/pattern/replace/ : 지정한 줄을 치환한다
- :line,lines/pattern/replace/ : 지정한 범위를 모두 치환한다
- :%s/pattern/replace/ : 모든 줄을 치환한다

[20]데이터 읽기
- :liner file : 파일의 내용을 지정한 줄 다음에 삽입한다
- :r file : 파일의 내용을 현재줄 다음에 삽입한다
- :liner !command : 명령의 결과를 지정한 줄 다음에 삽입한다
- :r !command : 명령의 결과를 현재줄 다음에 삽입한다
- :r !look pattern : 지정한 패턴으로 시작되는 단어를 삽입한다

[21] 편집 중 파일 바꾸기
- :e file : 지정한 파일을 편집한다
- :e! file : 지정한 파일을 편집하며 자동점검을 생략한다

[22] 수정의 취소, 반복
- u : 수정했던 마지막 명령을 취소한다
- U : 현재 줄을 저장한다
- . : 수정했던 마지막 명령을 반복한다

[23] 문자 삭제
- xv : 커서가 있는 문자를 삭제한다
- X : 커서의 왼쪽 문자를 삭제한다

[24]여러줄의 복사및 이동
- : linecotarget : 지정한 줄을 복사하여 대상줄 밑에 삽입한다
- :line,linecotarget : 지정한 범위를 복사하여 대상줄 밑에 삽입한다
- :linemtarget : 지정한 줄로 이동하여 대상줄 밑에 삽입한다
- :line,linemtarget : 지정한 범위로 이동하여 대상줄 밑에 삽입한다

[25] 데이터 처리를 위한 셸 명령
- n!!command : n번 줄에서 명령을 실행한다
- !move command : 커서의 위치로 부터 이동한 곳까지 명령을 실행한다
- !move fmt : 커서의 위치로 부터 이동한곳까지 줄들을 형식에 맞춘다.

2016년 1월 3일 일요일

yum clean all


-- yum update 안될때
vi /etc/resolv.conf 파일 확인
첫줄에 nameserver 8.8.8.8 삽입



yum clean all 후

[root@centos6test ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=i386&repo=os
error was 14: PYCURL ERROR 6 - "" Error: Cannot find a valid baseurl for repo: base
edit network interface. For my case, I used eth0 in CentOS 6.X In CentOS 7 you can use the "ensxxx" interface.
vim /etc/sysconfig/network-scripts/ifcfg-eth0
update NM_CONTROLLED to no
ONBOOT=no => yes 톰캣구동안됨
NM_CONTROLLED=no 
BOOTPROTO=dhcp or none  (DHCP install 가능)
DNS1=8.8.8.8
DNS2=4.2.2.2
restart the network interface
ifdown eth0
ifup eth0