1. SQL문장 응답속도 향상을 위한 고려사항
2. SQL문장의 효율향상 방안


응답속도 향상을 위한 튜닝(TUNING)방법론에 있어서 SQL문장 튜닝을
가장먼저 고려해야 한다.
정보시스템 성능저하의 가장큰 요인이 개발자의 잘못된 SQL문장 때문이라고
해도 과언은 아니다. 같은량의 DATA를 가지고 같은일을 하는 SQL문장이
최적화되면 최소 10배에서 100배까지 응답속도의 차이를 나타내고 있기 때문이다.
어떻게 하면 효율적으로 SQL문장을 사용할 수 있고, 잘못사용하고 있는
SQL문장들은 어떻게 하면 고효율을 내도록 바꿀수 있는지에 대한 방법론을
기술하겠다.

1. SQL문장 응답속도 향상을 위한 고려사항
1.1 SQL문장 사용시 고려사항
APPLICATION PROGRAM을 개발할때 SQL문장을 활용함에 있어 개발자는
다음과 같은 사항을 숙지 하여야 한다.
1)SQL은 그자체가 하나의 APPLICATION
2)SQL은 사용방법에 따라 크게 확장
3)SQL은 집합개념을 바탕으로한 비절차형 언어
4)동일한 실행결과를 추출하는 다양한 형태의 SQL이 존재
5)ACCESS PATH에 따라 PERFORMANCE차이가 매우 크다
6)실행결과보다 처리과정에 유의해서 사용

1.2 SQL문장의 고효율을 위한 고려사항
SQL문장이 고효율을 발휘하기 위해서는 다음과 같은 항목을
점검하여야 한다.
1)INDEX를 활용한 성능향상
2)JOIN방법개선을 통한 성능향상
3)실행경로 최적화로 인한 성능향상
4)부분처리를 활용한 성능향상

2. SQL문장의 효율향상 방안
2.1 INDEX를 활용한 성능향상
INDEX는 TABLE내에서 ROW를 신속하게 찾아내기 위해 사용된다.
INDEX는 KEY와 ROWID로 구성된다. KEY는 ROW에 있는 한개의 COLUMN이거나
혹은 COLUMN의 조합이다. RDBMS의 INDEX 엔트리는 B*-TREE메카니즘을 사용해
저장되며 이는 KEY값에 가장짧은 접근경로를 보장한다. KEY값을 찾아내기
위해 필요한 I/O는 최소이고, 일단 발견되면 ROWID는 직접TABLE에 있는 ROW를
찾는데 사용된다.
2.1.1 INDEX의 적용기준
INDEX의 적용기준은 다음과 같은 기준으로 선정한다.
1)6 BLOCK이상의 TABLE에 적용(6 BLOCK이하는 연결고리만)
2)COLUMN의 분포도가 10~15% 이내인 경우 적용
3)분포도가 범위이내이더라도 절대량이 많은 경우에는 단일테이블 클러스터링을
검토할것
4)분포도가 범위 이상이더라도 부분범위처리를 목적으로 하는 경우에는 적용
5)INDEX만을 사용하여 요구를 해결하고자 하는 경우는 분포도가 나쁘더라도
적용할수 있슴(손익분기점 : APPLICATION TUNING)

1 컬럼값의 평균 ROW수
분포도 = --------------- * 100 = --------------------- * 100
컬럼값의 종류 테이블의 총 ROW수

2.1.2 INDEX의 선정기준
INDEX를 선정하고자 할때에는 다음과 같은 기준을 따를때 최상의 효율을
발휘할 수 있다.
1)분포도가 좋은 COLUMN은 단독적으로 생성하여 활용도 향상
2)자주 조합되어 사용되는 경우는 결합INDEX 생성
3)각종 ACCESS 경우의 수를 만족할 수 있도록 INDEX간의 역활분담
4)가능한 수정이 빈번하지 않는 COLUMN
5)기본키 및 외부키(조인의 연결고리가 되는 COLUMN)
6)결합INDEX의 COLUMN순서 선정에 주의
6.1)항상 사용하는가?
6.2)항상 '='로 사용되는가?
6.3)분포도가 좋은 COLUMN우선
6.4)SORT순서는?
6.5)어떤 COLUMN을 추가? (후보선수)
7)반복수행(LOOP 내)되는 조건은 가장빠른 수행속도를 내게 할 것
8)실제 조사된 ACCESS 종류를 토대로 선정 및 검증

2.1.3 INDEX의 선정시 고려사항
INDEX를 선정하고자 할때 고려사항은 다음과 같다.
1)새로 추가된 INDEX는 기존 ACCESS경로에 영향을 미칠수 있음
2)지나치게 많은 INDEX는 오버헤드를 발생
3)넓은 범위를 INDEX로 처리시 많은 오버헤드 발생
4)옵티마이저를 위한 통계데이타를 주기적으로 갱신
5)INDEX의 개수는 테이블의 사용현태에 따라 적절히 생성
6)분포도가 양호한 COLUMN도 처리범위에 따라 분포도가 나빠질수 있음
7)INDEX의 사용원칙을 준수해야 INDEX가 사용되어짐
8)조인(JOIN)시에 INDEX의 사용여부에 주의

2.1.4 INDEX의 선정 정차
INDEX를 선정하고자 할때는 다음과 같은 절차를 따라야 한다.
1)해당 테이블의 ACCESS 유형조사
2)대상 COLUMN의 선정 및 분포도 분석
3)반복 수행되는 CRITAICAL ACCESS PATH의 해결
4)클러스터링 검토
5)INDEX COLUMN의 조합 및 순서의 결정
6)시험생성 및 테스트
7)수정이 필요한 APPLICATION 조사 및 수정
8)일괄적용

2.1.5 EQUAL이 INDEX에 미치는 영향
검색조건절에 EQUAL(=)이 있을때 결합INDEX를 생성하면 TABLE을 직접
검색하는 횟수가 줄어든다.

2.1.6 추가된 INDEX COLUMN의 역활
기존에 생성된 INDEX에 많이 사용하는 COLUMN을 추가함으로써 성능향상을
가져올 수도 있고, 오히려 성능저하를 시킬수도 있다.

2.1.7 INDEX를 사용하지 않는 경우
기존에 INDEX를 효율적으로 만들었음에도 불구하고, 개발자의 의도와는
달리 INDEX를 사용하지 않는 경우가 있다.

1)INDEX COLUMN의 변형
SELECT *
FROM DEPT
WHERE SUBSTR(DNAME, 1,3) = 'ABC';
<수정후>
SELECT *
FROM DEPT
WHERE DNAME LIKE 'ABC%';
2)INDEX COLUMN의 변형(INTERNAL)
SELECT *
FROM DEPT
WHERE DNAME = 10;
<수정후>
SELECT *
FROM DEPT
WHERE DNAME = '10';
2)NOT OPERATOR 사용
SELECT *
FROM DEPT
WHERE DNAME <> 'ABC';
<수정후>
SELECT *
FROM DEPT
WHERE NOT EXISTS (SELECT DNAME
FROM DEPT
WHERE DNAME = 'ABC');
3)NULL, NOT NULL
SELECT *
FROM DEPT
WHERE DNAME IS NOT NULL;
SELECT *
FROM DEPT
WHERE DCODE IS NOT NULL;
<수정후>
SELECT *
FROM DEPT
WHERE DNAME > ' ';
SELECT *
FROM DEPT
WHERE DCODE > 0;

2.1.8 COST_BASED와 RULE_BASED
OPTIMIZER에는 COST_BASED와 RULE_BASED의 두가지 종류가 있으며,
RULE_BASED에서는 INDEX가 지정되어 있으면 INDEX를 사용하지만,
COST_BASED에서는 TABLE내의DATA의 분포도에 따라 INDEX를 사용하기도
하고, 사용하지 않는등 OPTIMIZER에 의해 취사 선택된다.

2.1.9 OPTIMIZER의 취사 선택
OPTIMIZER에서 COST_BASED로 사용할 경우 수집된 통계정보에 따라 COST가
작은쪽을 선택하게 되며 이에 따라서 INDEX가 사용되지 않기도 하고
일부만 사용하기도 한다.

2.2 JOIN 방법개선을 통한 성능향상
두개이상의 TABLE을 JOIN해서 사용할때 JOIN방법에 따라서 수행속도의
차이는 현저히 나타난다.
즉, 처리결과는 같지만 연결하기 위하여 처리하는 일량에서 차이가 난다.

2.3 실행경로 최적화로 인한 성능향상
개발자가 작성한 SQL문장이 아무리 효율적으로 작성하였다고 하더라도
OPTIMIZER에 의해 실행경로가 변경될 경우 고효율을 발휘할수 없게되므로
실행경로를 확인해볼 필요가 있다.
=> 응답속도가 느린 SQL문장의 경우 실행경로의 확인이 필수항목

2.4 부분처리
부분적으로 가공하여 즉시 처리한 후, 다음처리를 위하여 준비하는 방식
2.4.1 부분처리의 사용 기준
1)조건을 만족하는 전체집합이 아닌 일부분만을 ACCESS
2)DATA량이 많아도 PERFORMANCE에 지장이 없고, 오히려 향상
3)INDEX나 CLUSTER를 적절히 활용하여 부분범위 처리방식으로 유도
4)QUERY를 이원화하여 일부분씩 SCAN하도록 유도
5)TABLE은 ACCESS하지 않고 INDEX만 사용하도록 유도
6)ROWNUM을 활용

2.4.2 INDEX를 활용한 부분처리
RDBMS를 사용하는데에 있어서 INDEX의 활용은 필수적인 요소이지만,
특히 부분범위 처리를 하고자 할때에는 더욱 그효과를 발휘할 수 있다.
우리가 어떤 작업의 결과를 특정한 값에 의한 정렬된 값의 순의로 얻기를
희망한다고 가정해보자
RDBMS를 사용하여 개발된 APPLICATION에서 ORDER BY 구문을 사용하면,
작업한 결과를 한번 더 SORT를 통하여 정렬작업이 수행되므로,
응답속도는 정렬작업에 소용되는 시간만큼 더욱 느려질 뿐만 아니라,
전체가 완전히 처리될때까지 기다릴수 밖에 없다.
그러나 INDEX를 활용하면 부분 범위 처리를 할수 있을뿐만 아니라,
INDEX에 의해 미리 정렬된 값들을 보유하고 있기 때문에 정렬에 소요되는
시간도 줄일수 있게되어 응답속도는 훨신 빨라질것이다.

2.4.3 INDEX만으로 부분처리
어떤 처리결과를 GROUP화 하여 계산된 결과치를 얻기를 원하는 경우에
RDBMS를 이용하는 처리에서 사용되는 문장이 GROUP BY구문이다.
이때 INDEX만 처리하여 결과를 얻는 경우와 TABLE을 ACCESS하여
원하는 결과를 얻는 경우와는 응답속도에서 상당한 차이가 있다.
즉, INDEX만 처리하여 결과를 얻는경우는 부분범위를 처리할 수 있고,
TABLE을 ACCESS하여 결과를 얻는 경우는 전체 범위를 처리할 수 밖에 없다.

2.4.4 MAX 이용으로 부분처리
한 TABLE의 특정한 COLUMN이 MAX인 값을 얻고자 할때, 역순으로 정렬된
INDEX를 이용하면 보다 효율적인 응답속도를 얻을수 있다.
즉, TABLE을 ACCESS하여 MAX값을 얻고자 할때에는 TABLE을 검색후
처리된 결과를 SORT하여 얻어진다.
그러나 역순으로 정렬된 INDEX를 이용하면 검색된 첫번째 ROW가
최대값이므로 다른 ROW들은 검색할 필요가 없어지며, 부분범위를
처리할 수 있게된다.

2.4.5 EXISTS를 이용한 부분처리
PL/SQL에서 어떤 SQL문장을 처리하기전에 TABLE을 검색하여
조건에 해당하는 ROW가 있으면 갱신을 수행하고, 해당하는
조건의 ROW가 없으면 입력하는 처리를 하는 경우가 있다.
이때 TABLE에 해당하는 조건을 COUNT하여 이용하는 방법과
EXISTS문장을 이용하는 방법이 있는데, EXIST문장을 이용하면 보다
효율적인 응답속도를 얻을 수 있다.
즉, COUNT를 이용하는 방법은 TABLE에 해당하는 조건을 전부 검색 하지만
EXISTS의 처리는 해당하는 조건이 한건만 검색되면 처리를 종료한다.

2.4.6 ROWNUM을 이용한 부분처리
PL/SQL에서 어떤 SQL문장을 처리하기전에 TABLE을 검색하여
조건에 해당하는 ROW가 있으면 갱신을 수행하고, 해당하는
조건의 ROW가 없으면 입력하는 처리를 하는 경우가 있다.
이때 TABLE에 해당하는 조건을 COUNT하여 이용하는 방법과
앞서 설명한 EXISTS문장과 동일한 방법으로 ROWNUM문장을 이용하는 방법이
있는데, ROWNUM문장을 이용하면 보다 효율적인 응답속도를 얻을 수 있다.
즉, COUNT를 이용하는 방법은 TABLE에 해당하는 조건을 전부 검색 하지만
EXISTS의 처리는 해당하는 조건이 한건만 검색되면 처리를 종료한다.

 

출처 : http://cafe.naver.com/target 카페명 : Are you Ready ?? 


 

java.sql.SQLException: ORA-00911: 문자가 부적합합니다

이런 오류가 날땐

해당 SQL 문 마지막에 " ; "를 확인 해 보시길..

 

SELECT MAX(ISSUE_CD) FROM JN_ISSUE;

이거 보면서 정상적인 코드인데 왜이러나 그랬는데.. ㅡㅡ;

 

자바 소스코드 안에 구현된 SQL 쿼리문

마지막에 ; 때문이란다..

 

헐..

 

지우니 되네..


======================================================================
유닉스 명령어 정리
======================================================================

---------------------------
1.DOS와 비슷한 명령어
---------------------------

----------------------------------------------------------------------

(1). cat

기능 : 파일의 내용을 화면에 출력. DOS의 'type' 명령과 유사.
사용법 : cat [options] <file1> <file2> … <fileN>

옵션
-n : 행번호를 붙여서 출력.

예제 :
# cat /etc/fstab
: /etc/fstab의 내용을 화면에 출력
사용팁 : 리눅스에서 두개이상의 옵션을 붙힐때는 앞의
'-'는 한번만 사용하고 영문자만 붙혀서 사용.

----------------------------------------------------------------------

(2). cd

기능 : 디렉토리 변경.
그냥 'cd'만 입력하고 엔터키를 누르면 자기 자신의 홈디렉토리로 이동.
사용법 : cd <디렉토리>

예제
# cd ~dalma
: dalma 라는 유저의 홈디렉토리로 이동

# cd
: 자기자신의 홈디렉토리로 이동

# cd ..
: 현재 디렉토리에서 부모디렉토리로 이동

# cd /usr/bin
: /usr/bin 디렉토리로 이동

주의점 : cd 명령 후 반드시 한칸 띄우도록 하자.

----------------------------------------------------------------------

(3). cp

기능 : 파일 복사
사용법 : cp [options] <file1> <file2> … <fileN> <destination>

옵션
-b : 덮어쓰거나 지울 때 백업본의 파일을 만든다.
-d : symbolic link 파일을 그대로 복사한다.
-f : 같은 파일의 이름을 가지는 파일이 있는 경우 이 파일을 지운 후 복사한다.
-i : 같은 파일 이름을 가지는 파일이 있는 경우 사용자에게 확인 후 복사한다.
-R : 서브디렉토리를 포함하여 복사한다.

예제
# cp .bash_profile temp.bash_profile
: .bash_profile 파일을 temp.bash_profile로 복사

# cp -R ../home/tmp/* .
: 현재 디렉토리의 부모 디렉토리에 있는 '/home/tmp' 디렉토리 밑의 서브디렉토리를
포함한 모든 디렉토리를 현재의 디렉토리로 복사.

주의점 : DOS와는 달리 현재 디렉토리로 복사할 때 <DESTINATION>을 생략해서는 안된다.
현재 디렉토리를 뜻하는 '.'을 두번째 예제와 같이 꼭 붙혀주도록 하자.

----------------------------------------------------------------------

(4). date

기능 : 시스템의 날짜와 시간을 표시하고 이를 수정
사용법 : date

----------------------------------------------------------------------

(5). ls

기능 : 파일과 디렉토리를 출력
사용법 : ls [option] <file1> <file2> … <fileN>

옵션
-a : 디렉토리내의 숨김 파일까지 모두 표시
-l : 파일의 사용허가, 소유자, 그룹, 파일의 크기, 날짜 등을 출력
-F : 파일의 형태와 함께 출력되는데 출력되는 파일의 형태는 '*', '@', '|', '=' 등이며,
이것은 각각 실행 파일, 심볼릭 링크, FIFO 소켓을 나타낸다.
-m : 쉼표를 구분하여 파일을 가로로 출력한다.
-R : 서브디렉토리의 내용을 포함하여 파일을 출력한다.

예제 :
# ls -alF /home/dalma
: /home/dalma 디렉토리에 있는 모든 파일을 파일의
사용허가, 소유자, 그룹, 파일의 크기, 날짜등을 포함하여
파일의 형태와 함께 출력

사용팁 : 리눅스를 비롯한 유닉스에서는 파일의 처음이 '.'로 시작하면
숨겨진 파일로 인식.
즉, '.bash_profile' 같은 파일은 '-a' 옵션을 붙히지 않으면 'ls'명령으로 확인을 할 수가 없다.

----------------------------------------------------------------------

(5). man

기능 : 도움말을 출력
사용법 : man [option] <COMMAND>

예제 : 'man ls' (ls 명령어의 도움말을 출력한다.)

----------------------------------------------------------------------

(6). mkdir

기능 : 새로운 디렉토리를 만드는 데 사용한다. DOS의 'md' 명령과 유사하다.
사용법 : mkdir [option] <directory1> <directory2> … <directoryN>
옵션
-p : 지정된 모든 서브디렉토리까지 함께 생성한다.
-m mode : mode에 해당하는 사용 허가로 디렉토리를 생성한다. Mode에 대한 설명은 뒤에서 설명할 'chmod' 명령에서 함께 설명한다.
예제 : 'mkdir /home/dalma/tmp' (/home/dalma 디렉토리 밑에 tmp 디렉토리를 만든다.)

----------------------------------------------------------------------

(7). more

기능 : 주어진 파일의 내용을 한 화면씩 출력한다. DOS의 'more' 명령과 유사하다.
사용법 : more <file1> <file2> … <fileN>
옵션 : 리눅스에서의 more 명령은 DOS에서와는 다르게 실행중 화면이 정지해 있을 때 명령어가 제공되는데 이 명령어를 이용하여 파일의 내용을 편리하게 볼 수 있다.
h : 도움말
[space], z : 다음 페이지를 출력
[Return] : 한 라인씩 스크롤시킴
d, <Ctrl+D> : 반 페이지씩 스크롤시킴
q, Q : 종료
f : 다음 페이지를 출력
b, : 앞 페이지를 다시 출력
/<검색어> : <검색어>에 해당되는 단어를 검색
= : 현재라인을 출력
:!<COMMAND> : <COMMAND>에 의해 주어진 명령어를 실행
<Ctrl+L> : 화면을 다시 리프레쉬 시킴
:f : 현재 파일 이름과 라인을 출력
사용팁 : 유닉스와 파이프 명령 '|'을 이용해서 다른 명령과 함께 조합하여 사용할 수 있다. 예를 들어 'cat /home/dalma/readme | more' 를 입력하면 /home/dalma/readme 파일을 화면에 출력하는데 한화면씩 끊어서 출력을 하고, 'ls /home/dalma |more' 명령을 입력하면 /home/dalma 디렉토리 안의 내용을 한화면씩 출력한다.

----------------------------------------------------------------------

(8). mv

기능 : 파일을 다른 파일이나 디렉토리로 이동시키거나 파일의 이름을 바꾼다. DOS에서는 'ren' 명령이나 'move' 명령과 유사하다.
사용법 : mv [option] <file1> <file2> … <fileN> <destination>
옵션
-b : 파일을 지우기 전에 백업본을 만든다.
-f : 옮겨질 디렉토리에 같은 파일이 있으면 덮어쓴다.
-i : 옮겨질 디렉토리에 같은 파일이 있는지 확인한다.
-u : 옮겨질 디렉토리에 구버전의 파일이 있는 경우에만 옮긴다.
예제
'mv /home/dalma /home/bar' (/home/dalma 디렉토리를 /home/bar 디록토리로 이름을 바꾼다)
'mv /home/dalma/readme /home/foo/README' (/home/dalma/readme 파일을 /home/foo/README 파일로 이동한다.)
사용팁 : 리눅스에서는 파일명에 대소문자를 철저히 구분한다. 즉 'readme'파일과 'README' 파일은 엄현히 다른 파일이다.

----------------------------------------------------------------------

(9). pwd

기능 : 현재 작업하고 있는 디렉토리의 절대경로명을 보여준다. DOS의 'cd' 명령어와 유사하다.
사용법 : pwd
주의점 : 도스에서 'cd' 명령을 입력하면 현재 디렉토리의 절대경로를 보여주지만 리눅스에서 'cd' 명령을 입력하면 자신의 홈디렉토리로 이동해 버린다. 절대경로를 알기 위해서는 'pwd' 명령을 써야 한다.

----------------------------------------------------------------------

(10). rm

기능 : 파일을 지우는 명령으로 DOS의 'del', 'deltree' 명령과 유사하다.
사용법 : rm [option] <file1> <file2> … <fileN>
옵션
-f : 삭제중 오류가 발생하더라도 에러 메시지를 출력하지 않는다.
-i : 삭제하기 전에 확인을 한다.
-r : 서브디렉토리를 포함하여 지운다.
-v : 지워지는 파일 이름을 출력한다.
예제
'rm -rf /home/dalma/tmp' (/home/dalma/tmp 디렉토리를 서브디렉토리를 포함해서 모두 지운다.)
'rm .history' (.history 파일을 지운다.)
주의점 : 슈퍼유저 계정인 'root'로 이 명령을 쓸때는 아주 신중을 가해야 한다. 특히 '-r' 옵션을 쓰면 실수로 리눅스 전체를 날릴 수 있기 때문에 가급적 '-i' 옵션과 함께 사용하도록 한다. 'alias rm rm -i' 명령을 내리면 rm 명령을 쓸 때 마다 -i 옵션이 자동으로 추가된다.

----------------------------------------------------------------------

(11). rmdir

기능 : 빈 디렉토리를 지우는 명령으로 DOS의 'rm' 명령과 유사하다. 그러나 'rm -r' 명령으로 대처할 수 있기 때문에 그렇게 많이 쓰이지는 않는 명령이다.
사용법 : rmdir [option] <directory1> <directory2> … <directoryN>
옵션
-p : 지우고자 하는 디렉토리의 부모디렉토리까지 지운다.
예제 : 'rmdir -p /home/dalma' (/home 디렉토리에 파일이 존재하지 않을 경우라면 /home 디렉토리까지 지운다.)

----------------------------------------------------------------------

--------------------
2.User에 관한 명령어
--------------------

----------------------------------------------------------------------

(1). chgrp

기능 : 파일의 그룹소유권을 바꾼다.
사용법 : chgrp [option] <newgroup> <files>
옵션
-R : 한 디렉토리내의 모든 파일이나 하위 디렉토리의 그룹소유권을 바꾼다.
예제
'chgrp admin /home/dalma/readme' (/home/dalma/readme 파일의 그룹소유권을 admin으로 바꾼다.)
'chgrp -R admin /home/dalma (/home/dalma 디렉토리아래의 모든 파일의 그룹 소유권을 admin으로 바꾼다.)


----------------------------------------------------------------------

(2). chmod

기능 : 파일에 대한 개인, 그룹, 타인에 대한 접근 권한을 변경.
사용법 : chmod [options] <mode> <files>

옵션
r : 읽기 권한 설정
w : 쓰기 권한 설정
x : 실행 권한 설정 (디렉토리의 경우는 접근 권한)

u : 파일의 소유자(user)
g : 그룹(group)
o : 기타(other)

a : 전체사용자(all)
+ : 권한 추가
- : 권한 삭제
= : 권한 지정

예제
# chmod a+r * (현재 디렉토리의 모든 파일을 모든 사용자가 읽을 수 있도록 설정)
# chmod +r * (위예제와 상동)
# chmod o-r, o-w * (현재 디렉토리의 모든 파일을 기타사용자에게 읽기, 쓰기 권한을 없앰)
# chmod og-x stuff (stuff 파일에서 그룹과 기타사용자에게 실행권한을 없앰)
#chmod u+rwx stuff (stuff 파일에서 파일 소유자가 읽기, 쓰기, 실행권한을 추가)
#chmod a=r *.txt (.txt로 끝나는 모든 파일을 전체 사용자가 읽을 수만 있도록 지정)

사용팁 : 숫자를 이용하여 특정권한을 지정

'4'는 읽기 권한
'2'는 쓰기 권한
'1'은 실행 권한

즉, 읽기, 쓰기권한 지정 => 4+2 = 6 로 표시
예를 들면
stuff라는 파일에 소유자에게는 모든권한을 그룹과 다른 사용자에게는 읽기, 실행권한을 주려면
# chmod 755 stuff

----------------------------------------------------------------------

(3). chown

기능 : 파일의 소유권을 바꾼다.
사용법 : chown [option] <newuser> <file>
옵션 :
-R : 한 디렉토리내의 모든 파일이나 하위 디렉토리의 그룹소유권을 바꾼다.
예제 :
'chown igi /home/dalma/readme' (/home/dalma/readme 파일의 소유권을 igi으로 바꾼다.)
'chown -R igi /home/dalma (/home/dalma 디렉토리아래의 모든 파일의 소유권을 igi으로 바꾼다.)
사용팁 : 리눅스에서는 chown 명령을 통해서 파일의 소유권과 그룹의 소유권을 한번에 바꿀 수 있다. 이를 위해서는 chown의 <NEWUSER>란에 'igi.admin'이라고 입력하면 파일의 소유권은 'igi' 파일의 그룹소유권은 'admin'으로 바뀌어진다.

----------------------------------------------------------------------

(4). su

기능 : 시스템에 접속한 상태에서 재로그인없이 다른 사람 ID로 접속한다.
사용법 : su [option] [user ID]
옵션
- : 이 옵션이 없으면 자신의 환경변수의 값을 가지고 다른 사람 ID의 권한만 갖지만 이 옵션을 붙히면 그 사용자의 환경변수의 내용까지 완벽하게 복사를 한다.
예제
'su' (사용자 ID없이 명령을 내리면 자동으로 root로 접속을 시도한다.)
'su - dalma' (dalma ID로 접속을 하는데 dalma의 환경변수의 내용까지 맞춘다.)
사용팁 : 리눅스에서는 외부에서 접속을 할 때 root로의 접속을 금지하고 있다. 이유는 보안상의 문제인데 가급적(가능한) root에서의 작업은 피하고 root의 권한이 필요하면 일반 사용자 ID로 작업을 하다가 su 명령을 이용하여 root로 접속하는 습관을 들이는게 좋다.

----------------------------------------------------------------------

(5). who

기능 : 시스템에 어떤 사람이 로그인하고 있는가를 보여준다.
사용법 : who
write
기능 : 특정사용자와 대화를 시작한다.
사용법 : write [ttyname]
예제
'write dalma' (dalma에게 표준입력을 이용하여 대화하기 시작한다.)
'write dalma /dev/tty21' (/dev/tty21에 있는 dalma와 대화를 시작한다.)
사용팁 : 마지막의 [ttyname]은 한사용자가 동시에 두번이상 접속을 하였을경우 대화할 터미널을 결정하는 부분이다. 그리고 어떤 사용자와 대화를 마쳤을 경우 [CTRL+D]를 눌러주면 대화를 종료한다.

----------------------------------------------------------------------

(6). find

기능 : 디스크에서 특정 파일을 찾아낸다.
사용법 : find <경로명> [expression]
옵션
-name filename : 찾을 filename을 입력한다.
-perm octperm : 특정 권한을 가진 파일을 검색한다. 이때 권한은 숫자형태로 입력한다.
-type t : 특정 종류의 파일을 (디렉토리, 일반파일 등등) 검색한다.
-size n : 크기가 n인 파일을 검색한다.
-mtime n : n일동안 변경된 파일을 검색한다.
-print : 파일 이름을 출력한다.
-maxdepth levels : 검색 시 서브디렉토리를 levels만큼만 진입을 해서 검색한다..
-mindepth levels : maxdepth와 반대의 명령어로 검색 시 서브디렉토리의 깊이가 level 이상부터 검사를 한다.
예제
'find ~ -name '*.doc' -print (접속한 사용자의 홈디렉토리에 있는 파일 중에서 .doc로 끝나는 모든 파일을 화면에 보여준다.)
'find ~ -type d -print' (접속한 사용자의 홈디렉토리에 있는 파일 중 디렉토리만 출력한다.)

----------------------------------------------------------------------

(7). ln

기능 : 특정파일의 링크파일을 만든다.
사용법 : ln [option] <file1> <file2>, ln [option] <file1> <file2> … <fileN> <directory>
file1의 링크를 file2에 만든다. file2가 명시되어 있지 않으면 현재 디렉토리에 링크를 만든다.
옵션
-s : 심볼릭 링크를 만든다. 이 옵션을 넣고 링크를 만들면 파일의 형태가 'l'로 표기가 된다.
예제
'ln /usr/base /usr/lock' (/usr/base에 /usr/lock라는 링크를 만든다.)
'ln com1 com2 com3 /bin' (/bin에 com1, com2, com3의 링크를 만든다.)

----------------------------------------------------------------------

(8). grep

기능 : 주어진 패턴을 포함하는 파일의 라인을 출력시킨다.
사용법 : grep [option] <pattern> <file1> <file2> … <fileN>
옵션
-C : 패턴이 일치하는 문장의 아래 위 두 라인까지 포함하여 출력한다.
-c : 패턴이 일치하는 라인의 개수를 출력한다.
-i : 대소문자를 구분하지 않고 패턴과 일치하는 것을 찾는다.
-v : 패턴과 일치하지 않는 내용을 출력한다.
-w : 패턴과 한단어로 일치해야 출력한다.
-x : 패턴과 전체 라인이 일치해야 출력한다.
예제
'grep linux /home/dalma/readme' (readme 파일 중에서 linux라는 패턴을 포함하는 모든 라인을 출력한다.)
'grep -c /bin/bash /etc/passwd (/etc/passwd 파일에서 /bin/bash의 개수 -로그인셀이 본셀인 사용자의 수를 출력한다.)
'grep -v '^[0-9]' readme' (readme 파일에서 숫자로 시작하지 않는 모든 라인을 보여준다.
사용팁 : 마지막 예제에서 '^[0-9]'의 표현은 좀 생소한 표현일것이다. 이것은 정규식이라고 해서 어떤 문자패턴을 표현하는 하나의 표현식이다. 간단히 설명을 하면 '[0-9]'는 0에서 9까지를 의미하고 '^'는 반대의 의미를 나타낸다. 즉 '^[0-9]'는 0-9로 시작하지 않는 표현이라는 뜻을 가지게 된다.

----------------------------------------------------------------------

(9). wc

기능 : 그렇게 많이 쓰이는 명령은 아니지만, 리눅스 프로그래머가 자신이 짠 소스의 총라인이 얼마인지 아님 특정 단어의 개수를 조사할 때 쓰이는 명령으로 특정 단어나 문자 또는 행의 수를 세는 명령이다.
사용법 : wc [option] <file1> <file2> … <fileN>
옵션
-c : 문자의 수만 센다.
-l : 행의 수만을 센다.
-w : 단어의 수만을 센다.
사용예
'wc /home/dalma/readme' (readme 파일의 행, 단어, 문자의 수를 출력한다.)
'who | wc -l' (현재 접속한 사람의 수를 표시한다.)
사용팁 : 리눅스는 혼자서 쓰는 운영체제가 아니라 여러 사람이 동시에 사용을 하는 운영체제이다. who는 리눅스에 접속한 모든 사용자의 목록을 보여주는 명령이고 '|'는 파이프 기호라고 해서 여러 개의 명령어를 조합할 때 쓰이는 기호이다. 즉, 파이프 앞의 출력의 내용을 파이프 뒤의 명령의 입력으로 넣어주는 기능을 한다. 위의 예제에서 'who | wc -l' 명령은 'who' 명령의 결과를 'wc -l'의 입력으로 넣어준다. 그래서 현재 접속한 사용자의 개수를 알수 있는것이다.

----------------------------------------------------------------------

----------------
3.시스템 명령어
----------------

----------------------------------------------------------------------

(1). df (disk free)

기능 : 디스크의 남은 공간을 보여준다.
사용법 : df [option] [FileSystem | File]

옵션
-k : kilobyte 단위로 보여준다.
-m : megabyte 단위로 보여준다.

예제
# df -k
(kilobyte단위로 남은 공간을 보여준다. -기본값)
# df .
(현재 디렉토리가 포함되어 있는 파티션의 남은공간을 보여준다.)

----------------------------------------------------------------------

(2). du

기능 : 특정 디렉토리에서 하부디렉토리까지 포함한 디스크의 사용량을 보여주는 명령이다.
사용법 : du [option] [files]
옵션
-a : 디렉토리에 있는 파일 하나하나의 크기를 출력한다.
-s : 총 사용량만 표시해 준다.
-k : 사용량을 kilobyte 단위로 출력해준다.
-h : 용량을 보기 좋게 표시해준다.
예제
'du -a' (현재 디렉토리의 디스크 사용량을 파일단위로 모두 출력한다.)
'du -s *' (현재 디렉토리의 첫번째 단계까지만 디스크의 사용량을 출력한다.)

----------------------------------------------------------------------

(3). env

기능 : 현재 시스템 사용자들의 환경 변수를 보여준다.
사용법 : env

----------------------------------------------------------------------

(4). free

기능 : 가상메모리를 포함한 메모리의 사용현황을 보여준다.
사용법 : free

----------------------------------------------------------------------

(5). id

기능 : 자신의 ID번호와 자신이 속한 그룹의 ID를 보여준다.
사용법 : id

----------------------------------------------------------------------

(6). kill

기능 : 특정 프로세서에게 특정 시그널을 보낸다.
사용법 : kill [-signal_number] [process id]
예제 u 'kill -HUP 549' (549번 프로세서에 HUP신호를 보낸다.)

----------------------------------------------------------------------

(7). ps

기능 : 사용자나 시스템 프로세서의 상태에 관한 정보 출력
사용법 : ps [option]

옵션
-a : 전체 사용자의 모든 프로세서를 출력
-l : 결과를 상세하게 출력
-u : 사용자 이름과 프로세서 시작 시간을 출력
-x : 제어터미널을 갖고 있지 않은 프로세서를 출력

예제
# ps -aux
: 전체 사용자의 제어터미널을 갖고 있는 프로세서를 포함하여
사용자 이름과 프로세서 시작시간을 포함하여 출력. 일반적으로 많이 쓰이는 형태
 

출처 : Tong - taesantaesan님의 IT 운영체제통


 

-vmargs
-Xverify:none
-XX:+UseParallelGC
-XX:PermSize=64M
-XX:MaxPermSize=128M
-XX:MaxNewSize=64M
-XX:NewSize=64M
-Xms512m
-Xmx512m

 

위에껀 이클립스 실행 옵션입니다.
이제부터 간단히 위의 옵션에 대해 알아보도록 하죠.

 

1. -Xverify:none
옵션
remote - 원격 클래스 로드의 엄격한 클래스 확인 가능

all - 모든 클래스 로드의 엄격한 클래스 확인 가능
none - 엄격한 클래스 확인 불가능

 

설명 : 이 스위치는 Java 바이트 코드 확인 기능을 꺼서 클래스 로드 속도를 높이고

시작 중에 확인만을 위해 클래스를 로드해야 할 필요도 없애 줍니다.

시작 시간이 단축되기 때문에 이 스위치를 사용하지 않을 이유가 없습니다.

 

추측 : none은 대충모드?-_-

 

 

2. -XX:+UseParallelGC
JDK 1.4에서부터 새로 적용되는 GC방법은
Parallel GC와 Concurrent GC 두가지 방법이 있다.
Parallel GC는 Minor GC를 좀더 빨리하게 하는 방법이고 (Throughput 위주)
Concurrent GC는 Full GC시에 시스템의 멈춤(Pause)현상을 최소화하는 GC방법이다.

 

추측 : 위 설명으로 보아 좀더 빠른 gc방법을 사용한다라고 설정하는듯.

 


3. -XX:PermSize=64M
   -XX:MaxPermSize=128M

PermSize 설명 :
Perm Size는 Java Application 자체(Java class etc..)가 로딩되는 영역이다.

 

추측 : application class라는게  로딩될때 메모리부족현상이 있을것 같으니 임의로 설정

 

 

4. -XX:MaxNewSize=64M
   -XX:NewSize=64M

NewSize 설명 : JVM은 NEW/YOUNG영역, Old역역, Perm영역 3가지가 존재
NEW/YOUNG역역은 새로운 객체가 생성되자마자 저장되고
생긴지 얼마 안되는 객체가 저장되는 곳이다. 시간이 지나면 Old역역으로 이동.

 

추측 : 새로운 객체가 생성되는 NEW/YOUNG영역의 크기를 설정

 

 

5. -Xms512m
   -Xmx512m

설명 : 전체 Heap size는 ?ms와 ?mx로 Heap 사이즈의 영역을 조정할 수 있다.
       예를 들어 ?ms512m ?mx 1024m로 설정하면
       JVM은 전체 Heap size를 application의 상황에 따라서
       512m~1024m byte 사이에서 사용하게 된다.

 

추측 : 두값의 사이즈를 같게 하는것이 좋다고 하네요.

 

 


위 옵션에서 제일 중요한것은 -Xverify:none인것 같군요


-Xverify:none에서 클래스 검사 방식에서 실행속도에
영향이 많이 가는듯.
나머지 옵션은 자신의 RAM용량에 맞춰서 적당히 주시면 될듯합니다.

그럼 이만.

 

관련 참조자료

http://blog.naver.com/linesaver/100031420572

http://blog.naver.com/linesaver/100031420693

http://www.wansecurity.com/share/078_ADCL_LNX_32_NLV/db2/linux/java/docs/jre/runtimeguide.lnxia32.ko.htm

 

출처 : 모바일공작소 (cafe.naver.com/mcreator)


 

# find 검색할폴더명 -name "*.jpg" > file_list.txt

하면 file_list.txt에 쫙~ 리스트업 됨

 

그러고 나서

wc -l file_list.txt

하면
jpg 파일만 검색해서 리스트 만든 것의 개수를 wc 명령어로 확인 할수 있음~ ^^


+ Recent posts