2010. 7. 7.

[SSL] openssl 인증서 생성 방법

[key 파일 생성]
openssl genrsa -des3 -out filename.key 1024
암호
-- 암호 없이 할려면 openssl genrsa -out filename.key 1024
-- 암호를 추가 할려면 openssl rsa -in filename.key -des3 -out new_filename.key
-- 암호 제서시 openssl rsa -in filename.key -out new_filename.key


[csr생성]
openssl req -new -key filename.key -out filename.csr
일반적인 값을 입력하고 common Name에 원하는 도메인 값입력
email주소에 도메인 관리자 메일 주소입력

[crt생성]
openssl req -key filename.key -x509 -nodes -sha1 -days 365 -in filename.csr -out filename.crt
내용보기
openssl x509 -noout -text -in filename.crt
openssl req -noout -text -in filename.csr
openssl rsa -noout -text -in filename.key



ex)

Key 생성

openssl genrsa -des3 -out mail.test.com.key 1024

[root@www ~/ssl/]# openssl genrsa -des3 -out mail.test.com.key 1024
Generating RSA private key, 1024 bit long modulus
....++++++
.................++++++
e is 65537 (0x10001)
Enter pass phrase for mail.test.com.key: 패스워드 입력
Verifying - Enter pass phrase for mail.test.com.key: 동일 패스워드 입력


Csr 생성

openssl req -new -key mail.test.com.key -out mail.test.com.csr

[root@www ~/ssl/]# openssl req -new -key mail.test.com.key -out mail.test.com.csr
Enter pass phrase for mail.test.com.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:kr
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Gangnamgu
Organization Name (eg, company) [My Company Ltd]:Test Copr
Organizational Unit Name (eg, section) []:supper
Common Name (eg, your name or your server's hostname) []:mail.test.com
Email Address []:admin@test.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 엔터
An optional company name []:ucert




Cst 생성

openssl req -key mail.test.com.key -x509 -nodes -sha1 -days 3650 -in mail.test.com.csr -out mail.test.com.crt

[root@www ~/ssl/]# openssl req -key mail.test.com.key -x509 -nodes -sha1 -days 3650 -in mail.test.com.csr -out mail.test.com.crt
Enter pass phrase for mail.test.com.key: 패스워드 입력



위와같이 생성 하면 됩니다.



이젠 아파치 설정에서 ssl.conf 파일을 수정 하면 된다.

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXORT56:RC+RSA:+HIG:+MEDM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /apachedomains/conf/ssl/mail.test.com.crt
SSLCertificateKeyFile /apachedomains/conf/ssl/mail.test.com.key


그리고 재가동 하면 확인 끝

2010. 4. 6.

FTP 접근 사용자 접근 정보를 한곳에서 처리하는 방법(netrc)

FTP 접근 사용자 접근 정보를 한곳에서 처리하는 방법(netrc)


- 보통 리눅스에서는 .netrc파일을 통해 접속하고자하는 원격지의 아이디와 암호를 관리할 수 있습니다. .netrc 파일을 $HOME 디렉토리에 만드시면 되는데, 그 내용을 다음과 같이 구성됩니다.

사용자 계정 홈 디렉토리에 .netrc 만들어 아래 와 같이 작성한다.
- 형식
machine "호스트 정보" login "계정" password "패스워드"
ex)
vi /home/test/.netrc

machine 192.168.1.5 login test password 123456


[test@localhost ~]$ cat .netrc
machine domainname login user_id password user_pass




계정정보가 들어간 FTP 쉘 스크립트
============================================================================================================
#!/bin/sh
USERNAME="test"
PASSWORD="123456"
HOST="192.168.1.5"
PENSION_DATA_DIR="/data/source/"
GET_FILE="*.*"
#
echo `date +%Y'-'%m'-'%d`
mkdir $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`
cd $PENSION_DATA_DIR
mv $PENSION_DATA_DIR/$GET_FILE $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`

{ echo $USERNAME $PASSWORD
echo cd /batch/smd
echo bin
echo prompt
echo mget $GET_FILE
echo bye
} | ftp -n -v $HOST >> /home/test/batchftp.log
#
ls -al $PENSION_DATA_DIR
============================================================================================================


netrc를 사용한 FTP 쉘 스크립트
============================================================================================================
#!/bin/sh
HOST="192.168.1.5"
PENSION_DATA_DIR="/data/source"
GET_FILE="*.*"
#
echo `date +%Y'-'%m'-'%d`
mkdir $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`
cd $PENSION_DATA_DIR
mv $PENSION_DATA_DIR/$GET_FILE $PENSION_DATA_DIR/`date +"%Y%m%d" --date '1 days ago'`

{
echo cd /batch/smd
echo bin
echo prompt
echo mget $GET_FILE
echo bye
} | ftp -v $HOST >> /home/test/batchftp.log
#
ls -al $PENSION_DATA_DIR
============================================================================================================


기타 TIP

.netrc 제대로 만들었는데도 ftp 접속이 자동으로 안될 경우에는 권한을 600 으로 주었는지 확인한다.
















.netrc

.my.cnf

.login



위의 파일들은 사용자 홈계정에 위치하는 조금은 생소한 환경설정 파일이다. (솔라리스8 리눅스는 확인 못했음)

각각의 역할은 다음과 같다.



.netrc - 자동으로 ftp 에 로그인하게 하는 역할을 한다.



machine 서버이름 login 계정 password 패스워드



.my.cnf - 자동으로 원격지 mysql에 접속하는 역할을 한다.



[client]

user=계정

password=패스워드

[mysqld]

language=korean



.login - 잘은 모르겠는데 사용자 환경에 있어 .cshrc 보다 먼저 읽히는거 같다. 아래의 내용이 들어가있다.

stty erase "^H"
stty kill "^U"
stty intr "^C"
stty eof "^D"
stty susp "^Z"
stty stop "^-"



쉘프로그램 돌릴때 stty 어쩌구 에러가 나면 위의 내용이 중복 처리된 부분이다. 이럴때 뒤져보면

.cshrc 와 .login 안에 중복 처리되있는 경우가 있다.

2009. 11. 9.

[find] 명령어

[find] 명령어

find ---주어진 파일명과 동일한 파일을 찾고, 그 경로를 출력한다.

# find / -name newbie -print

최상위 루트 디렉토리부터 검색하여 검색된 파일을 한 행에 하나씩 표준 출력

# find . -name newbie -print

현제의 작업 디렉토리에서 검색

# find / -size +1000 -print

최상위 루트에서 크기가 1000블록 이상인 파일 검색

# find . -size -1000 -print

현 디렉토리에서 크기가 1000블록 이하인 파일 검색

# find . -mtime +10 -print

10일 이전에 수정된 파일 검색

# find . -mtime -10 exec rm {} :

10일 이내에 수정한 파일을 검색하여 모두 지운다

# find / -cmin 5 -print

5분전에 마지막으로 수정된 파일을 찾을 수 있다.

# find /home -empty -print

/home 디렉토리에 용량이 0인 파일과 디렉토리를 찾는다.

# find / -perm -4000 -print

퍼미션이 4000 이상인 파일을 모두 출력한다.
출처 : http://www.linuxno1.com/

find ./ -name "*.jsp" -exec grep "request" {} ; -print
디렉토리내에(하위디렉토리포함) *.jsp라는 파일안에 request라는 단어가 있는 지 찾아서 뿌려줍니다.

find ./ -name "*.jsp" -exec perl -pi -e "s/search/replace/g" {} ; -print
디렉토리내에 *.jsp라는 파일명을 가진 파일을 찾고 그 안에 search라는 단어가 포함되어 있을경우, replace로 수정합니다.
문자열안에 " 이 들어갈 경우 x22로 써줍니다.

find ./ -mtime 0
24시간 내에 수정된 파일을 뿌려줍니다.

아쉽게도 출력되는 것에 대한 제어는 잘 모르겠습니다. ㅡ.ㅡ;



특정 용량 이상의 파일을 찾고 싶을때
find /home/ -size +2000000

특정 확장자의 파일을 찾고 자동으로 지우고 싶을때
find /home/ -name *.asf -exec rm -rf {} ;

퍼미션 706인 디렉토리를 차자서 707로 변환
find /home/ -perm 706 -type d -exec chmod 707 {} ;
chmod 707 `find -perm 706`

사용자 계정에서 환경설정 파일 검색했나 확인
find /home/ -maxdepth 2 -name .bash_history -exec grep -H .conf {} ; |
less

3일 이내 동안 수정된 파일 확인
find /home/ -mtime -3

3시간 이내 동안 수정된 파일 확인
find /home/ -mmin -3

수정된지 3시간 이후된 파일
find /home/ -mmin +3

현재폴더에서 수정된지 1시간 이내의 파일들만 압축
tar cvzf filename.tgz $( find ./ -type f -mmin -60 )

2009. 11. 3.

리눅스 특정 파일 확장자 한번에 변경 스크립트

리눅스 특정 파일 확장자 한번에 변경 스크립트 입니다.

#!/bin/bash
for i in `find -name *.jad`
do
echo $i `echo $i|sed 's/.jad/.java/'`
mv $i `echo $i|sed 's/.jad/.java/'`
done

2009. 10. 8.

[Oracle] 함수 계산 누적 값 더하기

Quiz> 아래와 같이 결과 값을 만들어라.
COL1 COL2
---- ----------
A 10
C 20
D 10
B 30

COL1 COL2 SUM
---- ---------- ----------
A 10 10
C 20 30
D 10 40
B 30 70


[풀이]
SQL> create table exam1(
2 id varchar2(2),
3 num number)
4 ;
SQL> insert into exam1 values('A',10);

1 row created.

SQL> insert into exam1 values('C',20);

1 row created.

SQL> insert into exam1 values('D',10);

1 row created.

SQL> insert into exam1 values('B',30);

1 row created.

SQL> select * from exam1;

ID NUM
---- ----------
A 10
C 20
D 10
B 30

SQL>
1 select min(y.id) col1, min(y.num) col2, sum(x.num) sss
2 from exam1 x, exam1 y
3 where x.rowid<=y.rowid
4 group by y.rowid
5* order by sss

COL1 COL2 SSS
---- ---------- ----------
A 10 10
C 20 30
D 10 40
B 30 70

2009. 10. 7.

[아이피 대역 계산법]

[아이피 대역 계산법]
4.16.5.0 ~ 5.7.4.0 AA

1. (4*256*256*256)+(16*256*256)+(5*256)+0 = 67108864+1048576+1280+0
2. (5*256*256*256)+(7*256*256)+(4*256)+0 = 83886080+458752+1024+0

-> 68158720 ~ 84345856 = 여기까지의 숫자가 AA의 IP 대역이라 계산할 수 있다.

2009. 9. 14.

[Oracle] 함수 기능

* 단일 행 함수

-함수가 정의된 SQL문이 실행될 때 각각의 ROW에 대해 수행되며 ROW 당 하나의 결과를 리턴 해줍니다.

-인수로는 상수,변수,표현식들이 사용될 수 있습니다.

-SELECT,WHERE,ORDER BY 절에 사용할 수 있습니다.



구 분 | 함수 | 내 용

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

LOWER 모든 문자를 소문자로

UPPER 모든 문자를 대문자로

INITCAP 첫 글자는 대문자,나머지는 소문자로

CANCAT 첫 번째 문자와 두 번째 문자를 연결

SUBSTR 문자의 길이를 리턴할 때

LENGTH 문자의 길이를 리턴할 때

NVL 널값을 다른 값으로 대체할 때

NVL2 조건에 의해 널값을 다른 값으로 대체할 때

SUBSTR 특정 문자의 문자열중 필요 부분만 선별하여 사용

문자 RTRIM 서브 스트림의 정확한 위치와 길이를 요구(오른쪽)

함수 LTRIM 서브 스트림의 정확한 위치와 길이를 요구(왼쪽)

RPAD 문자열을 제외한 공간에 지정한 문자열로 대체(오른쪽)

LPAD 문자열을 제외한 공간에 지정한 문자열로 대체(왼쪽)

TRANSLATE 첫 문자는 탐색집합의 첫 문자로 대체(2번째도 동일)

REPLACE 특정 문자열을 다른 문자열로 대체

SOUNDX 같은 단어 또는 유사한 사운드 단어를 음성학적으로

LENGTH 문자의 실제 길이를 변환할 때

LENGTHB 문자열의 실제 길이를 변환할 때

INTSTR 문자열 내의 특정 스트림의 위치

NULLIF 조건이 같으면 NULL,다르면 지정된 값을 리턴할 때

COALESCE 조건에 따라 여러 가지 값을 리턴할 때

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

시스템 USER 현재 DB 사용자

함수 USERID 현재 DB 사용자에게 할당되는 사용자번호

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



*문자함수의 예제

EX) -2개의 문자값을 결합합니다.

SQL>SELECT CONCAT(CONCAT(ename, ' is a '),job)

FROM emp;



CONCAT(CONCAT(ENAME,'ISA

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

SMITH is a CLERK

ALLEN is a SALESMAN



-정의된 문장 단어의 첫 번째 문자를 대문자로 변환

SOL> SELECT INITCAP( 'the soap') FROM DUAL;



INITCAP(

-----------

The Soap



-정의된 문장의 왼쪽 나머지 공간을 지정한 문자로 채웁니다.

SQL> SELECT LPAD( 'Page 1' , 15 , '*.') FROM DUAL;



LPAD( 'PAGE1',15

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

*.*.*.*.*Page 1



-정의된 문장의 왼쪽부터 지정된 단어가 발견되면 제거합니다.

SQL> SELECT LTRIM( 'xyxXxyLAST WORD','xy') FROM DUAL;



LTRIM('XYXXX

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

XxyLAST WORD



-정의된 문장에서 해당 문자가 발견되면 지정된 문자로 변경합니다.

SQL> SELECT REPLACE( 'JACK and JUE' , 'J' , 'BL') FROM DUAL;



REPLACE( 'JACKA

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

BLACK and BLUE



-정의된 문자의 오른쪽 나머지 공간을 지정한 문자로 채웁니다.

SQL> SELECT RPAD(ename, 11 ,'ab' ) FROM emp WHERE ename = 'TURNER' ;



RPAD(ENAME , 11 ,'AB')

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

TURNERababa



-정의된 문자의 오른쪽부터 지정된 단어가 발견되면 제거합니다.

SQL> SELECT RTRIM( 'TURNERyxXxy' , 'xy') FROM DUAL ;



RTRIM( 'TU

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

TURNERyxX



-정의된 문장의 지정된 위치부터 해당 길이 만큼만 추출합니다.

SQL> SELECT SUBSTR( 'ABCDEFG' , 3 , 2 ) FROM DUAL ;



SU

-------

CD



-정의된 문장의 뒤에서부터 지정된 위치의 해당 길이 만큼만 추출합니다.

SQL> SELECT SUBSTR ( 'ABCDEFG' , -3 , 2 ) FROM DUAL ;



SU

--------

EF



-문자 'Q'를 ASCII 코드로 변환합니다.

SQL> SELECT ASCII ( 'Q' ) FROM DUAL ;



ASCII ( 'Q' )

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

81



-정의된 문장에서 지정된 위치에 존재하는 문자의 위치 값을 찾아 줍니다.

SQL> SELECT INSTR ( 'CORPORATE FLOOR' , 'OR' ,3 ,2 ) FROM DUAL ;



INSTR ( 'CORPORATEFLOOR' , 'OR' , 3 , 2 )

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

14



-정의된 문장의 길이를 변환합니다.

SQL> SELECT LENGTHB ( '가나다라마바사') FROM DUAL ;

LENGTH( '가나다라마바사' )

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

14



-정의된 단어 중에 가장 높은 값을 찾아줍니다.

SQL> SELECT GREATEST ( 'HARRY' , 'HARIOT' ,'HALORD' ) FROM DUAL ;



GREAT

---------

HARRY



-정의한 컬럼이 NULL이면 지정한 값으로 대체합니다.

SQL> SELECT NVL (sal , 0 ) , NVL( ename , '*' ) , NVL(hiredate , '01-JAN-02' ) FROM emp ;

NVL(SAL , 0 ) NVL(ENAME , NVL(HIRE

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

800 SMITH 80/12/17





*시스템 함수

-현재 어떤 사용자로 데이터 베이스에 접속하였는지 알 수 있습니다.

SQL> SELECT USER FROM dual ;



USER

-------

SCOTT







* 숫자함수/날짜함수

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

구 분 함 수 내 용

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

ROUND 해당 소수점 자리에서 반올림할 때

TRUNC 해당 소수점 자리에서 절삭할 때

MOD(m/n) m을 n으로 나누고 남은 나머지를 리턴할 때

ABS 숫자 값을 절대값으로 바꾼다

SIGN 숫자가 양수:+1, 음수:-1, 0:0

숫자함수 FLOOR 실수값을 정수값으로

CEIL 그 수보다 가장 크거나 작은값을 리턴

POWER 해당 수에 대한 지수값을 표현

LOG 로그값으로 변환

SIN SIN값

COS COS값

TAN TAN값

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

SYSDATE 현재 시스템 날짜를 보여줄 때

ADD_MONTHS 지정한 날짜에 몇 월을 추가한 결과의 월을 계산할 때

LAST_DAY 해당 월의 마지막 날짜를 알고자 할 때

날짜함수 NEW_TIME 해당 표준시로 시간을 변환할 때

NEXT_DAY 해당 날짜의 다음 지정한 날짜로 현환할 때

NONTH_BETWEEN 지정된 월 간의 월수를 알고자 할 때

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



* 숫자함수 예제....

-정의된 값을 절대값으로 변환 합니다

SQL> SELECT ABS(-15) FROM DUAL ;

ABS(-15)

-----------

15



-정의된 값의 올림된 값으로 변환합니다

SQL> SELECT CEIL(15.7) FROM DUAL ;



CEIL(15.7)

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

16



-정의된 값의 내림된 값으로 변환합니다

SQL> SELECT FLOOR(15.7) FROM DUAL ;



FLOOR(15.7)

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

15



-정의된 산술식의 COSINE 값으로 변환합니다

SQL> SELECT COS(180*3.14/180) FROM DUAL ;



COS(180*3.14/180)

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

-.99999873



-정의된 숫자의 지수승값을 계산합니다

SQL> SELECT EXP(4) FROM DUAL ;



EXP(4)

---------

54.59815



-뒤에 정의된 수로 앞에 정의된 수를 나눈 나머지 값을 반환합니다

SQL> SELECT MOD(11,4) FROM DUAL ;



MOD(11,4)

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

3



-정의된 수를 지정한 자리 수에서 반올림합니다

SQL> SELECT ROUND(15.193 , 1) FROM DUAL ;



ROUND(15.193 , 1)

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

15.2



-정의된 값이 음수이면 -1 , 0 이면 0, 양수이면 1을 리턴합니다

SQL> SELECT SIGN(-15) FROM DUAL ;



SIGN(-15)

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

-1



-정의된 수를 지정한 자리 수 에서 절삭합니다

SQL> SELECT TRUNC(15.97 , 1) FROM DUAL ;



TRUNC(15.79 , 1)

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

15.7



* 날짜 함수 예제



-현재 시스템 날짜를 제공합니다

SQL> SELECT SYSDATE FROM DUAL ;



SYSDATE

-----------

06/11/13



-해당 날짜에 지정한 달 수만큼 더합니다

SQL> SELECT HIREDATE , ADD_MONTHS(HIREDATE , 1)

FROM EMP WHERE EMPNO = 7782 ;



HIREDATE ADD_MONT

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

81/06/09 81/07/09



-정의된 날짜의 달에서 마지막 일이 몇 일인지 알 수 있습니다

SQL> SELECT HIREDATE , LAST_DAY(HIREDATE)

FROM EMP WHERE EMPNO = 7782 ;



HIREDATE LAST_DAY

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

81/06/09 81/06/30



-정의된 두 날짜간의 차이 값을 알 수 있습니다

SQL> SELECT HIREDATE , MONTHS_BETWEEN(SYSDATE , HIREDATE)

FROM EMP WHERE EMPNO = 7782 ;



HIREDATE MONTHS_BETWEEN(SYSDATE , HIREDATE)

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

81/06/09 252.930883



-정의된 날짜를 녀도 값을 기준으로 반올림 합니다

SQL > SELECT

ROUND(TO_DATE(' 27-OCT-98' , 'DD-MON-YY' ) ,

'YEAT' ) FROM DUAL ;



ROUND(TO

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

99/01/01






변환 함수

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

구 분 함 수 내 용

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

TO_CHAR 숫자,날짜 타입의 Data를 varchar2타입으로 변환

변환함수 TO_NUMBER 숫자를 포함하는 문자 String을 number 타입으로 변환

TO_DATE 문자 String을 날짜 타입으로 변환

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



*날짜 형식 요소

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

형식 요소 설 명

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

MM 달 수(ex : 10)

MON 월 이름을 3자리 문자로 표현(ex : JAN , FEB , MAR 등)

MONTH 월 이름(ex : JANUARY,FEBUARY,MARCH 등)

DD 날짜 (ex : 14)

D 주의 일수 (ex : 4)

DY 요일 이름을 3자리 문자로 표현(ex : SUN , MON , TUE 등)

DAY 요일 이름(ex : SUNDAY , MONDAY 등)

YYYY 년도 4자리 수 (ex : 2002)

YY 년도의 마지막 2자리(ex : 02)

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



*시간 형식 요소

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

형식 요소 설 명

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

9 숫자(ex : 9999 → 1534)

0 자리 수가 비면 0으로 채워줌 ( ex : 09999 → 01534 )

$ 금액에 $를 표시해줌 (ex : $99999 → $1534 )

. 명시한 위치에 소수점을 표시함 (ex : 99999.99 → 1534.00 )

, 명시한 위치에 콤마를 표시함 (ex : 999,999 → 1,534 )

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



변환 함수 예제들.....

-현재 날짜가 한 주에서 몇번째 일인지 알 수 있습니다

SQL> SELECT SYSDATE , TO_CHAR ( SYSDATE , 'D' )

FROM dual ;



SYSDATE TO_CHAR

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

02/09/26 5



-정의된 날짜의 출력 포맷을 DD-MM-YY로 출력합니다

SQL> SELECT ename , TO_CHAR(hiredate , 'DD-MM-YY' ) HIREDATE

FROM emp ;



ENAME TO_CHAR(hiredate , 'DD-MM-YY' )

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

SMITH 17 11 90

ALLY 20 02 91

......................



-일자를 출력할 때 0 값을 제거합니다(09 → 9 , 01 → 1)

SQL> SELECT ename , TO_CHAR (hiredate , 'fmDD-MM-YY' ) HIREDATE

FROM emp ;



ENAME TO_CHAR(hiredate , 'fmDD-MM-YY' )

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

....................................

MARTIN 9 09 91

....................................



-문자 100을 숫자값으로 출력합니다

SQL> SELECT TO_NUMBER ( '100' ) FROM dual ;



TO_NUMBER

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

100



-현재 시간을 AM , PM 표기법으로 출력합니다

SQL> SELECT TO_CHAR( SYSDATE , 'AM HH:MI ' )

FROM dual ;



TO_CHAR(

-----------

오전 10 : 10



-숫자값을 출력할 때 금액표시를 합니다

SQL> SELECT TO_CHAR( 12506 , '$9099,999' ) FROM dual ;



TO_CHAR(

-----------

$010,234



-정의된 날짜를 지정한 포맷으로 출력합니다

SQL> SELECT TO_DATE( '01-JUL-99' , 'DD-MM-YY' )

FROM dual ;



TO_DATE(

-----------

99/07/01



-정의된 시간을 지정한 포맷으로 출력합니다

SQL> SELECT TO_DATE( '01:30' , 'HH24:MI' ) FROM dual ;



TO_DATE

----------

13:30




단일행함수
* NVL2 ( Colum, Express1, Express2 )



-해당 컬럼이 null이면 Express-2 의 값을 , null이 아니면 Express-1의 값을 리턴해 줍니다.

오라클 이전 버전에서 사용되던 NVL함수는 정의된 컬럼의 값이 null인 경우 지정한 값으로

대체하는 기능을 가지고 있었습니다. 반대로, NVL2 함수는 정의된 컬럼의 값이 지정한

값인 경우 null값으로 대체된다.

NVL2 함수는 해당 컬럼이 null 값이 아니면 Express2의 값을 리턴해 주고 null 값이면

Express3의 값을 리턴해 주는 기능을 가지고 있습니다.

SQL> SELECT empno, ename, nv12( comm, comm.*1.1, 0 )

FROM emp ;



EMPNO ENAME COMM NVL2( COMM, COMM*1.1, 0 )

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

7369 SMITH 0

7499 ALLEN 300 330

7521 WARD 500 550

7566 JONES 0

..............................................

->COMM이 null인 경우 null이 아닌 경우





* NULLIF ( Express1, Express2 )



-Express-1과 Express-2의 값을 비교하여 그 값이 같으면 null을 리턴하고 다르면 Express-1의

값을 리턴해 줍니다.

NULLIF 함수는 Express-1 과 Express-2 의 값을 비교하여 그 값이 같으면 null 값을 리턴하고

서로 다른 값을 가지고 있으면 Express-1의 값을 리턴해 주는 함수입니다.

LENGTH(first_name)의 값과 LENGTH(last_name)의 값을 NULLIF 함수로 비교하여 같으면

null 값을 화면에 출력하고 다르면 LENGTH(first_name)의 값을 화면에 출력합니다.



SQL> SELECT empno, ename, nullif( comm, 0 )

FROM emp ;



EMPNO ENAME COMM NULLIF( COMM, 0 )

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

7369 SMITH

7370 ALLEN 300 300

7521 WARD 500 500

7566 JONES

7654 MARTIN 1400 1400

.....................................

->COMM이 NULL이므로 NULL, COMM이 NULL이 아니므로 COMM값으로...



*COALLESCE 함수

이 함수는 EXPRESS-1의 값이 NULL값이 아니면 EXPRESS-1의 값을 화면에 출력해 주고

NULL 값이면 EXPRESS-2의 값을 EXPRESS-1의 값과 EXPRESS-2의 값모두 NULL이면

EXPRESS-N의 값을 화면에 출력해 주는 함수입니다. 문법에서 정의된 각 컬럼에서 NULL이

아닌 첫 번째 컬럼의 값을 돌려줍니다.



SQL> SELECT coalesce( comm,sal ) FROM emp ;



COALESCE( COMM,SAL )

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

800

300



SQL> SELECT coalesce ( comm, 100 ) FROM emp ;



COALESCE( COMM,100 )

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

100

300

500

->이 문법은 COALESCE([컬럼],[값]) 문법에서 정의된 컬럼이 NULL이면 정의된 값을

더한 결과를 돌려줍니다. 원래 NULL이지만 100을 더한 값이 출력됩니다.



*TRIM함수

이 함수는 오라클 8i 버전에서 추가된 함수이며 이전 버전에서 제공되던 LTRIM 함수와

RTRIM 함수를 결합한 형태의 함수입니다. TRIM 함수는 문자값의 왼쪽 또는 오른쪽 부분에

정의한 문자값이 존재하면 그 문자를 절삭시키는 기능을 가지고 있습니다. TRIM 함수는

3가지 종류의 기능을 가지고 있습니다.



-먼저,LEADING은 이전의 LTRIM 함수와 동일한 기능을 가지고 있습니다.정의된 컬럼의 값

왼쪽에 해당 문자열이 존재하면 문자값을 절삭시켜서 화면에 출력합니다.

SQL> SELECT ename, TRIM( LEADING 'A' FROM ename ) as TRIM

FROM emp

WHERE ename LIKE 'A%' ;



ENAME TRIM

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

ALLEN LLEN

ADAMS DAMS



-TRAILING은 이전의 RTRIM 함수의 기능을 가지고 있으며 컬럼값의 오른쪽에 존재하는 문자값을

절삭해줍니다.

SQL> SELECT ename, TRIM( TRAILING 'N' FROM ename ) as TRIM

FROM emp

WHERE ename LIKE '%N' ;



ENAME TRIM

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

ALLEN ALLE

MARTIN MARTI



-BOTH는 왼쪽, 오른쪽에 해당 문자열이 있으면 절삭해 주는 기능을 가지고 있습니다.

SQL> SELECT ename, TRIM( BOTH 'A' FROM ename ) as TRIM

FROM emp

WHERE ename LIKE 'A%' ;



ENAME TRIM

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

ALLEN LLEN

ADAMS DAMS

->ENAME 컬럼에서 마지막 문자가 'A'인 값은 발견되지 않았고 첫번째 문자가 'A'인 사원은 ALLEN과 ADAMS

^M문자없애기

^M문자없애기

vi로 문서를 보다 보면 줄끝마다 ^M 이 보이는 경우가 있습니다.
이는 윈도우시리즈(도스포함)에서 작성된 문서를 유닉스로 볼때 생기는 현상 입니다.

이런 현상이 왜 생기는 이유는 윈도우와 유닉스에서의 ASCII화일 형식이 서로 다릅니다.

일단 윈도우에서는 엔터시에 한줄을 내리고 커서를 앞으로 보내주지만 즉,엔터 한번으로
두 명령이 입력되는거죠..

하지만 유닉스에서는 엔터치면 단지 줄만 바뀌죠..즉 한번의 엔터는 단지 한번의 명령일 뿐 입니다..^^;

그래서 도스파티션에 있는 화일을 그냥 카피하면 ^M자들이 지저분하게 보이죠..

반대로 유닉스용 화일을 도스로 카피해서 도스용 에디터로 보면 전부 한줄로 붙어서 나타나게 된답니다.

아래는 몇가지 방법입니다.

1. vi 에디터를 이용해서 ^M 문자 없애는 방법

1) tr 을 이용합니다.
vi 에디터에서 다음과 같이 입력합니다. 여기서 1G는 첫라인으로 간다는
뜻이고, 느낌표부터는 쉘명령 tr을 이용한다는 겁니다.

1G!Gtr -d ^M

2) ed 명령을 사용합니다.
vi 에디터에서 다음과 같이 입력합니다. 여기서 : 는 아시다시피
명령모드로 가는 거구, 1은 첫라인을 $는 마지막 라인을 의미합니다.
그러므로 여기서 1,$ 는 첫라인부터 마지막라인까지라는 뜻이겠죠?
s는 substitute의 약자로써 다음의 /피대체어/대체어/ 에서
피대체어를 대체어로 바꾼다는 것입니다. 여기서는 ^M을 없애라는
뜻이겠죠? 마지막의 g는 global의 약자로 각 라인에서 해당문자열이
나올때마다 몽땅 바꾸라는 의미.

:1,$s/^M//g


2. perl 을 이용하는 방법

perl -pi -e 's/\r//' inputfile


3. sed 를 이용하는 방법

1 번 vi 에디터를 이용하는 방법에서 언급 되었습니다. 커맨드라인상에서
바로 수정하는 방법.

sed 's/^M//g' inputfile > outputfile


4. awk 를 이용하는 방법

print $0 는 문서전체를 의미합니다.

awk '{print $0,"\r"}' inputfile > outputfile


5. tr 을 이용하는 방법

1 번 vi 에디터를 이용하는 방법에서도 언급되었지만 에디터를 부르지
않고 커맨드라인상에서 바로 고치는 방법입니다. -d 옵션은 delete를 의미.

tr -d '\015' < inputfile > outputfile


6. mcopy 이용시 옵션을 주는 방법

-t 옵션을 이용하면 mcopy로 복사할때 ^M 문자가 없어지고 copy됩니다.

mcopy -t a:/test.cap .

7. fromdos 명령을 이용하는 방법

간단히 리눅스에 포함되어있는 유틸리티를 이용하는 방법입니다. fromdos는
도스용 문서를 리눅스(유닉스)용으로, todos는 리눅스에서 도스용으로 변환
할때 사용할 수 있습니다.

fromdos inputfile


참고 : ^M 의 입력은 [Ctrl+V][Ctrl+M] 입니다.


또다른 방법하나.

//g$s/
요렇게 하면 몽땅 지워집니다.
1 은 첫라인부터
$ 은 마지막라인까지
s 는 다음과 같이 바꾸는데...
^M 은 입력할때 Ctrl+V M 요렇게 해야허구...
// 는 원래 요사이에 뭔 string이 들어가야하지만
없애야하기에 암껏두 안썼음.
g 는 문서전체에 걸쳐 몽땅...

이게 귀찮으시면 그냥 fromdos 명령 사용하세요~


저는 보통 vi 편집기 명령모드에서 :1,$s/^M//g 이걸로 ^M을 없애고 있습니다..

2009. 8. 19.

wget 을 웹소스 땡기기

다운받는 경로

http://www.gun.org/software/

(리눅스용은 대부분 디폴트로 깔려있습니다.)



설치 방법

# tar xvfz wget-5.x.x.tar.gz

# ./configure

# make install



사용 방법

# wget http://www.naver.com/index.html

현재 디렉토리에 index.html 파일을 가져옵니다.

index.html 파일에 링크되어 있는 것까지 가져오려면 -r 옵션을 사용합니다.

# wget -r http://www.naver.com/index.html

-r 옵션은 재귀적을 의미하는 recursive 입니다. 디렉토리 구조와 파일을 그대로 가져옵니다.

재귀적 탐색의 깊이 레벨은 기본값이 5로 설정되어 있으며, -l depth 옵션을 사용하여 바꿀수 있습니다.

기본갑이 -l 5 인데 이 레벨이 증가함에 따라 복사해오는 파일은 지수 함수적으로 증가하게 됩니다.



특정페이지와 링크된 것만 받고싶으면

# wget -r www.naver.com/index.html/doc/lecture/lecture.html

이렇게 하면 lecture.html과 이파일과 링크된 파일들을 복사해 옵니다. 이 과정에서 링크된 파일 중 상위 디렉토리에 있는 것도 있는데, 이 파일들을 빼고 원하는 파일이 있는 디렉토리와 그 이하에서만 받아오려면 아래와 같은 명령을 수행 합니다.

# wget -r -np www.naver.com/index.html/doc/lecture/lecture.html

-np 옵션은 no-parent를 의미합니다.



사이트에서 이미지나 오디오 파일 등을 제외하고 html 문서만 가져오고 싶으면

# wget -r -np -A html, htm www.naver.com/index.html

-A 옵션은 accept를 의미합니다. 만약 이와 반대로 일부 파일을 제외하고 싶으시면 -R 옵션을 사용 합니다. reject를 의미합니다.

# wget -r -R gif, jpg, jpeg www.naver.com/index.html

gif, jpg, jpeg만 제외하고 나머지만 가져옵니다.



-L 옵션은 상대주소를 이용한 링크들만 불러옵니다. 타 호스트에 있는 자료는 불러오지 않습니다.

대부분 html내의 링크는 상대주소를 이용하기 때문에 크게 중요하지는 않습니다.

# wget -r -L www.naver.com/index.html

만약 타 호스트의 자료까지 재귀적 탐색에 넣고싶으면 H 옵션을 씁니다. span-hosts를 의미합니다.



- 참고 -

wget -r http://대상사이트/ --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020529



위 명령어대로 실행시키면 해당 사이트에 끊임없이 접속해서 그곳의 파일들을 긁어옵니다.

(F5 새로고침을 계속 누르는 것 이상으로 효과적이라도 함)

실행해보면 당해 디렉토리에 공격대상사이트의 이름으로 된 폴더가 생기게 되고 그곳에 파일이 계속 저장됩니다.



p.s 브라우져에서 보이는 것만 긁어온다. 소스자체를 긁어오는 것이 아니다.

2009. 8. 18.

리눅스 명령어 알고싶어요

alias(명령어 간소화하기)
apropos(관련된 명령어 찾기)
arch(컴퓨터 종류 알기)
arp(같은 서브넷의 IP 보여주기)
at(작업 시간 정하기)
atd(계획성 있는 작업 실행하기)
awk(특정 패턴 문자 처리하기)
a2p(펄 파일로 바꾸기)
badblocks(배드 블럭 검사하기)
bc(계산기)
biff(메일 수신 소리로 확인하기)
bg(후면작업; 배경화면 설정)
bind(키나 함수 순서 결합하기)
break(루프 빠져나가기)
cal(달력보기)
builtin(내부 명령어 알아보기)
case(조건 처리하기)
cat(화면상에서 파일 보기)
cd(디렉토리 변경하기)
cfdisk(디스크 설정하기)
chattr(파일 속성 변경하기)
chfn(사용자 정보 변경하기)
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)
chmod(파일 권한 바꾸기)
chown(파일 주인 바꾸기)
chsh(지정된 셸 바꾸기)
cksum(CRC값을 점검한다)
clear(화면 청소하기)
clock(CMOS 시각을 조정하기)
cmp(파일 비교하기)
colcrt(문자 변환 필터)
colrm(열 삭제하기)
column(가로 정렬하기)
comm(파일 비교 출력하기)
command(명령어 알아보기)
continue(루프 계속돌기)
cp(파일 복사하기)
cpio(복사본 만들기)
crontab(cron을 관리한다)
csplit(파일에 서식, 규칙 정하기)
cut(필요한 필드만 출력하기)
date(날짜 보기)
dd(블럭장치 읽고 쓰기)
debugfs(ext2 파일 시스템 디버깅하기)
declare(변수 선언하기)
df(파일 시스템의 사용량 보기)
dirs(디렉토리 목록 표시하기)
dmesg(부팅 메시지 보기)
dnsdomainname(DNS 이름 출력)
domainname(NIS 이름 출력&설정)
du(디렉토리와 파일의 용량 파악하기)
dumpe2fs(파일 시스템 정보 보기)
echo(표준 출력하기)
eject(장치 해제하기)
elm(메일 관련)
enable(내부 명령어 지정)
env(환경변수 출력하기)
eval(인수 읽기)
exec(셸 명령어 실행하기)
exit(종료하기)
expand(탭을 공백으로 변환하기)
export(변수 지정하기)
e2fsck(파일 시스템 복구하기)
fc(지정된 편집기 받기)
fdformat(플로피 디스크 포맷하기)
fdisk(파티션 나누기)
fg(지정된 작업을 전면 프로세스로 시작하기)
file(파일 종류 보기)
find(파일 찾기)
finger(사용자 정보 알기)
fold(정형화하기)
fmt(정형화하기)
for(반복 실행하기)
free(메모리 사용량 알아보기)
fsck(파일 시스템 검사하기)
fstab(파일 시스템에 대한 고정적인 정보 저장하기)
ftp(파일 전송 프로그램)
fuser(프로세스 ID 출력)
getkeycodes(매핑 테이블 출력하기)
grep(특정 문자(열) 검색하기)
gzexe(실행 파일 압축하기)
gzip(압축하기)
halt(시스템 종료하기)
hash(기억해 두기; index 역할)
head(파일의 앞부분 출력하기)
help(도움말 보여주기)
host(호스트 정보 보기)
history(사용 명령어 목록보기)
hostname(서버 이름 알기)
id(계정 정보 알기)
if(조건문 실행하기)
ifconfig(랜카드에 주소 할당하기)
imolamod(모듈 설치하기)
inetd(인터넷 서비스의 최상위 데몬)
init(실행 단계 정하기)
ispell(철자법 검사하기)
jobs(수행중인 프로세스 알기)
kbd_mode(키보드 모드 출력하기)
kill(프로세스 죽이기)
klogd(커널 로그 데몬)
ldd(공유 라이브러리의 의존성 알기)
less(페이지 단위로 출력하기)
let(정규식 표현하기)
lilo(부팅하기)
ln(링크하기)
locate(패턴에 맞는 파일 찾기)
login(로그인하기)
logger(시스템 로그 기록하기)
logname(사용자 로그인명 보여주기)
logout(로그인 셸 종료하기)
look(특정 단어 검색하기)
losetup(중복 장치 확인하기)
lpd(프린트 데몬)
lpq(현재 프린트 작업 상태 출력하기)
lpr(출력하기)
lprm(대기열에 있는 문서 삭제하기)
ls(디렉토리 내용보기)
lsattr(파일 시스템의 속성 보여주기)
lsdev(하드웨어 장치 출력하기)
lsmod(모듈 정보 출력하기)
mail(메일 관련)
make(컴파일하기)
man(매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg(메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs(파일 시스템 생성하기)
mkfs(파일 시스템 만들기)
mknod(특수 파일 만들기)
mkswap(스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount(장치 연결하기)
more(화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt(메일 관련)
mv(파일 옮기기)
mzip
netstat(현재 네트웍 상황 보기)
nice(프로세스 우선 순위 변경하기)
od(8진수로 파일 보기)
passwd(암호 입력하기)
pidof(실행중인 프로그램의 프로세스 ID 찾기)
pine(메일 관련)
ping(네트웍 확인하기)
popd(pushd 취소)
ps(프로세스 상태 알기)
pstree(프로세스 상관관계 알기)
pwd(절대경로 보여주기)
quota(디스크 한계량 알기)
rarp(rarp 테이블 관리하기)
rcp(원격 호스트에 파일 복사하기)
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate(네트웍으로 시간 설정하기)
reboot(재부팅하기)
rmmod(모듈 지우기)
readonly(읽기 전용으로 표시하기)
renice(프로세스 우선 순위 바꾸기)
reset(터미널 초기화하기)
restore(다시 저장하기)
rlogin(바로 접속하기)
rm(파일 지우기)
rmdir (디렉토리 지우기)
route(라우팅 테이블 추가/삭제하기)
rpm(프로그램 추가/삭제)
rpm2cpio(rpm을 cpio로 변환하기)
rsh(원격으로 명령어 실행하기)
rup(호스트 상태 출력하기)
rusers(호스트에 로그인한 사용자 출력하기)
rwall(호스트 사용자에게 메시지 뿌리기)
script(기록하기)
set(변수값 설정하기)
setup(시스템 관련 설정하기)
showmount(호스트의 마운트 정보 보여주기)
shutdown(전원 끄기)
sleep(잠시 쉬기)
source(스크립트 번역하기)
split(파일 나누기)
ssh(암호화된 원격 로그인하기)
stty(터미널라인 설정 보여주기)
su(계정 바꾸기)
suspend(셸 중단하기)
swapoff (스왑 해제하기)
swapon(스왑 활성화하기)
sync(버퍼 재설정하기)
syslogd(로그인 과정 설정하기)
tac(거꾸로 보기)
tail(문서 끝부분 출력하기)
talk(이야기하기)
tar(파일 묶기)
tcpdchk(tcp wrapper 설정하기)
tcpmatch(네트웍 요청에 대해 예측하기)
tee(표준 입력으로부터 표준 출력 만들기)
telnet(원격접속하기)
test(테스트하기)
times(셸에서의 사용자와 시스템 시간 출력하기)
top(cpu 프로세스 상황 보여주기)
tr(문자열 바꿔주기)
true(종료 코드 리턴하기)
type(유형 보기)
ul(밑줄 처리해서 보여주기)
ulimit(제한하기)
umask(매스크 모드 설정하기)
umount(장치 해제하기)
unalias(별명 제거하기)
uname(시스템 정보 보기)
unexpand(공백 문자를 탭으로 변환하기)
uniq(중복된 문장 찾기)
useradd(사용자 계정 만들기)
userdel(계정 삭제하기)
usermod(사용자 계정정보 수정하기)
unset(설정 변수 해제)
uptime(시스템 부하 평균 보여주기)
users(로그인된 사용자 보여주기)
w(시스템에 접속한 사용자 상황 알아보기)
wait(프로세스 기다리기)
wall(모든 사용자에게 메시지 보내기)
wc(문자, 단어, 라인수 세기)
whatis(명령어의 간단한 설명보기)
while(루프 명령어)
who(사용자 알기)
write(콘솔 상에서 간단한 메시지 보내기)
xcopy(반복적으로 복사하기)
XFree86
ypchfn(NIS에서 사용하는 chfn 명령어)
ypchsh(NIS에서 사용하는 chsh 명령어)
yppasswd(NIS에서 사용하는 passwd 명령어)
zcat(압축 파일 보기)
zcmp(압축 파일 비교하기)
zforce(강제로 gz 만들기)
zgrep(압축 상태에서 grep 실행하기)
zmore(압축 상태에서 more 실행하기)
znew(.Z 파일을 .gz로 다시 압축하기)