http://namedit.tistory.com/archive/201409

 

저는 CentOS를 사용하겠습니다.

버젼은 6.4 입니다.


리눅스는 PAM : Pluggable Authentiaction Module 이라는

장착식 인증 모듈을 사용하고 있습니다.

이 모듈은 리눅스 시스템의 인증을 제공합니다.

자세한 내용은 http://se.uzoogom.com/131 을 참고하시길 바랍니다.


일단 vi 를 사용하여 /etc/pam.d/system-auth 을 엽니다.



  1. # auth 문단의 첫번째 위에 아래 문장을 추가합니다.
  2. auth       required    pam_tally2.so onerr=fail deny=3 reset
  3. # pam_tally2가 PAM의 인증 Module 중 하나이고 3번 틀리면 접속을 거부하고
  4. # 관리자에 의해 리셋 가능하다는 뜻입니다.
  5. # 이제 account 문단의 첫번째 위에 아래 문장을 추가합니다.
  6. account    required    pam_tally2.so onerr=fail
  7. # ESC 키를 눌러 Insert Mode에서 빠져 나온 후 :wq 를 입력하여 쉘로 돌아옵니다.




이제 일반사용자로 로그인할때 3번 틀려보겠습니다.





Account locked due to 4 failed logins 라는 메세지와 함께

정상적인 비밀번호를 입력하여도 접속이 불가능합니다.


이제 이 Lock을 풀려면 Root에서 풀어줘야합니다.


pam_tally2 라는 명령어를 사용하면 접속에 실패한 사용자를 볼 수 있습니다.



Login           Failures      Latest failure              From

사용자         실패횟수      마지막 시도한 시간      터미널 번호


이제 Unlock을 하기위한 명령어를 알아봅니다.

pam_tally2 --user 사용자이름 --reset



Reset이 완료되었습니다.

이제 다시 접속해봅니다.



정상적으로 로그인이 되었습니다.

'리눅스' 카테고리의 다른 글

MySQL Log 종류  (0) 2016.04.14
VIM 환경설정  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
Posted by 캐논볼
,

MySQL Check 제약

프로그래밍 2016. 3. 29. 10:52

http://warmz.tistory.com/entry/MySQL-DB-%ED%85%8C%EC%9D%B4%EB%B8%94-Check%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 


Check(제약조건) 
 - 컬럼에 들어갈 수 있는 값들을 제한할 수 있다.
 - 만약 넣으려는 값이 체크 조건에 맞지 않으면 에러가 발생한다.

예)

 

1
2
3
4
5
Create Table piggy_bank
(
    id Int Auto_Increment Not Null Primary Key,
    coin CHAR(1) Check (coin IN ('P', 'N', 'D', 'Q'))
)

 


예) 기존의 테이블의 컬럼(gender)에 제약 조건('M' or 'F') 설정하기

 

1
2
Alter Table my_contacts
Add Constraint Check gender IN ('M', 'F');

 

 


  * MySQL에서는 Check가 데이터의 무결성을 강제하지 않는다.
    - MySQL에서는 체크 제약조건을 사용해서 테이블을 만들 수는 있지만 아무 효과가 없다. 
      MySQL은 이를 무시한다. 

'프로그래밍' 카테고리의 다른 글

PHP timezone 설정  (0) 2016.04.27
알파 버전 / 베타 버전 / RC  (0) 2016.04.04
한글 인코딩 종류  (0) 2015.09.30
PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
Posted by 캐논볼
,

윈도우7 한글 변환

IT 생활 2016. 3. 29. 10:22

http://blog.naver.com/81xowlths/220630504658

 



잇님들 방갑습니다. ^^
역시나 사골폿팅으로 찾아뵈었습니다.

가끔 윈도우 사용하다보면 한글이 입력이 안되거나
한글로 변환이 안되는 경우를 종종 볼수 있습니다.
영어로만 타이핑되고 한글로 변환이 안되는 경우
짜증입니다.
제컴퓨터에서 그랬고 친구 컴터에서도 같은 증상이
생겨서 기록도 남길겸 해서 한글 씁니다.

혹시 잇님들 중에 저같은 경험이 생기면
참고해서 처리하시면 님좋고 저도 좋고 ㅎㅎ
다들 좋은것 아니겠어요

한글변환 안되어서 짜증나셨던 경험 있으신분들은
제맘 이해하실듯 합니다.



위 이미지를 보시겠지만 검색창에 한글이 변환되지 않습니다.
물론 윈도우 창 어디에서도 한글이 입력되지 않아요







한글 변환이 안될경우 임시조치로는
윈도우 시작키를 누른후 실행창에 ctfmon 을 입력해서
클릭하시면 바로 변경하여 사용할수 있습니다.

허나 재부팅을 하게 되면 다시 원상태로 돌아온다는 단점이
시작 프로그램에 ctfmon 파일을 넣어주는 방법도 있지만
그것보단 레지스터리를 수정해서
윈도우 시작시 자동으로 실행되는 방법을 알려드립니다.





윈도우 키 + R 버튼을 선택하거나
시작 버튼을 눌러 최하단에 있는 검색창에
regedit 를 입력해 줍니다.





짜란 알수 없는 폴더라 엄청나게 열립니다.
햐 이건 뭐란 말인가 ~~~~??




최 상단으로 올라가서 위 사진의 보이는 경로로 차근 차근 내려옵니다.
트리구조이고 탐색기 구조와 같으니 쉽게 하실수 있을겁니다.




해당 폴더로 오셨으면
마우스 오른쪽 키를 눌러
새로만들기 -> 문자열 값을 선택합니다.






문자열값에는 ctfmon 을 입력해 줍니다.





금방 만든 ctfmon 을 더블 클릭하면 문자열편집이라는 창이 열리는데
값 데이터 란에 입력해 주면 됩니다.
어떻게 ~~~?
이렇게
c:\windows\system32\ctfmon.exe 를 입력해 줍니다.






혹시 안되시는 분은 ctfmon.exe 파일을 검색해서
파일정보의 경로를 확인하신후 수정입력 하시면 됩니다.



'IT 생활' 카테고리의 다른 글

ESXi  (0) 2016.04.06
프로비저닝(Provisioning)  (0) 2016.04.06
P-ATA(IDE) / S-ATA  (0) 2016.03.03
Active Directory  (0) 2015.10.21
URI / URL / URN  (0) 2015.08.26
Posted by 캐논볼
,
http://zetawiki.com/wiki/Awk_%ED%95%84%EB%93%9C_%EB%B3%80%EC%88%98,_%EB%B9%8C%ED%8A%B8%EC%9D%B8_%EB%B3%80%EC%88%98
 
awk Field Variables
awk 필드 변수 목록
awk Built-in Variables
awk 빌트인 변수 목록

awk 필드 변수 ★★★[편집]

  • $0 → 모든 필드 (레코드 값 그대로)
  • $1 → 첫번째 필드
  • $2 → 두번째 필드
  • $(NF-2) → 마지막 전전 필드
  • $(NF-1) → 마지막 전 필드
  • $NF → 마지막 필드

awk 빌트인 변수[편집]

  • ARGC - 명령 인자 수 ★
  • ARGIND
  • ARGV - 명령 인자 배열 ★
  • BINMODE
  • CONVFMT - 숫자변환 형식
  • ENVIRON - 환경변수 배열
  • ERRNO
  • FIELDWIDTHS
  • FILENAME - 현재 파일명 ★
  • FNR - (현재 파일 내) 현재 레코드 번호 ★
  • FS - 구분자 정의(기본값은 공백문자, 정규식 사용가능) ★★
  • IGNORECASE
  • LINT
  • NF - 레코드 필드 수 ★★
  • NR - 현재 레코드 번호 ★★
  • OFMT - 숫자 출력 형식
  • OFS - 출력 필드 구분(기본값은 빈 문자열) ★
  • ORS - 출력 레코드 구분(기본값은 개행문자) ★
  • PROCINFO
  • RLENGTH - 검색된 문자열의 길이 ★
  • RS - 입력 레코드 구분(기본값은 개행문자) ★
  • RSTART - 검색된 문자열의 첫부분 ★
  • RT
  • SUBSEP - 다중 서브스크립트 구분(기본값은 034[1])
  • TEXTDOMAIN

같이 보기[편집]

주석[편집]

  1. 이동 아스키코드 034는 파일구분자

참고 자료[편집]

'리눅스' 카테고리의 다른 글

VIM 환경설정  (0) 2016.03.30
pam_tally2 확인 및 초기화  (0) 2016.03.30
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
tcpwrapper iptable 차이  (0) 2015.10.05
Posted by 캐논볼
,

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0K6Pu&articleno=6271130&_bloghome_menu=recenttext

 

1. substring  함수

 

 

 ${var:start:length}

    var : 변수명

    start : 변수 값인 문자열로부터 substring 기능을 수행할 시작 위치 인덱스 번호로써 0부터 시작

    length : 추출할 문자열 길이, length를 서술하지 않으면 start로 시작하는 나머지 전제 문자열을 추출한다.

 

위 함수(기능)는 POSIX 기준인 본쉘(sh)에서는 지원하지 않고 콘쉘 및 배쉬쉘에서 지원하는 기능이다. 보편적인 프로그래밍 언어(또는 인터프리터)에서 제공하는 함수인 substring의 기능을 수행하는 것으로써 문자열의 일부분을 추출한다. 원본 문자열(var의 값)은 변경하지 않는다.

 

예제)

 

1   $ var="abcdef"

2   $ a=${var:0}

3   $ echo $a

4   abcdef

5   $ a=${var:0:3}

6   $ echo $a

7   abc

8   $ a=${var:3:0}

9   $ echo $a

10

11 $ a=${var:3:1}

12 d

 

 

 

2. cut 시스템 호출

 

 

 -c 옵션    단순 substring 함수와 동일한 기능으로 인덱스가 0부터 시작하지 않고 1부터 시작하는 것이 다르다.
 -f 옵션    필드 구분자(delimitr)를 지정하여 문자열 중 특정 필드를 추출한다.

 

cut은 /usr/bin 등의 디렉토리에 존재하는 실행프로그램으로써 보편적으로 주어진 입력(파일 또는 표준입력)에서 특정 필드 또는 컬럼을 추출하는 프로그램이다. 이러한 시스템 호출을 통한 문자열 조작은 cut 뿐만 아니라 sed, awk를 이용하여 수행될 수 있다. 위에 열거한 -c, -f 옵션 외에도 다양한 기능을 갖고 있으나 여기서는 -c, -f 옵션에 대하여 간단한 예를 들어 설명한다.

 

예제) cut -c

 

1  $ echo abc defghi | cut -c1

2  a

3  $ echo abc defghi | cut -c1-5

4  abc d

5  $echo abc defghi | cut -c2-5

6  bc d

 

${var:start:length}와 다르게 -c의 뒤에 붙는 시작 위치 인덱스 번호가 0-base 인덱스가 아닌 1-base 인덱스이고 또한 두 번째 인덱스 번호는 추출할 문자열 길이가 아닌 컬럼 인덱스 번호가 된다. 즉, ${var:start:length}는 from-length이고 cut -c는 from-to이다.

 

예제) cut -f

 

1  $ echo abc defghi | cut -f1

2  abc defghi

3  $ echo abc defghi | cut -f1 -d" "

4  abc

5  $ echo abc defghi | cut -f2 -d" "

6  defghi

7  $ echo abc defghi | cut -f2

8  abc defghi

 

특정 필드를 추출하며 -d 옵션으로 필드 구분자를 지정한다. 따로 필드 구분자를 지정하지 않으면 탭 문자를 기본 필드 구분자로 처리한다. 7번 라인에서 필드 구분자가 탭 문자이므로 -f2에 해당하는 두 번째 필드가 공백이어야 할 것 같으나 문자열에서 필드 구분자를 만나지 못하면 필드 추출을 하지 않고 입력된 문자열을 출력한다. 때문에 2번 라인에서 출력된 값 역시 1번 필드를 나타내는 것이 아니고 입력된 문자열에서 필드 구분자를 만나지 못했으므로 입력 값을 그대로 출력한 결과가 되는 것이며, 정상적으로 필드를 찾아서 출력한 것은 3번과 5번 명령 뿐이다.

 

cut은 실행프로그램 호출이므로 유닉스 명령어 cut을 참고하면 자세히 알 수 있을 것이다.

 

 

 

 

 

3. null 비교 문자열 조작 기능

 

 

 ${#var}     변수 var가 가지는 문자열의 길이를 구한다.
 ${var:-word}

     1. 변수 var의 값이 null이 아니면 : var의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면         : word의 값을 반환, var의 값은 변하지 않는다.

 ${var:=word}

     1. 변수 var의 값이 null이 아니면 : var의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면        : word의 값을 반환, var의 값은 word의 값으로 대체된다.

 ${var:+word}

     1. 변수 var의 값이 null이 아니면 : word의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면        : null을 반환, var의 값은 변하지 않는다.

 ${var:?word}

     1. 변수 var의 값이 null이 아니면 : var의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면        : null이면 에러 메시지인 word를 출력하고, 쉘 스크립트를 종료한다.

 

     2번 째 경우이고 word가 생략되었다면 "parameter null or not set" 라는 메시지를 출력하고 쉘 스크립트를

     종료한다.

 

위의 표에서 ${var:+word}의 경우에만 변수 var의 값이 null이 아니면 word의 값을 반환하고, 나머지 경우에는 모드 var를 반환하는 것으로 다른 작업과는 반대의 성향을 보인다.. 그리고 var의 값이 변하는 경우는 ${var:=word}의 작업에서 var값이 null인 경우에만 var의 값이 word로 대체된다.

 

 

 

 

 

4. 일치되는 패턴 제거 후 나머지 문자열 반환

 

 

 ${var%pattern}    끝에서 부터 word와 패턴이 일치하는 var의 최소 부분(첫번째 일치)을 제거하고 나머지를 반환한다.
 ${var%%pattern}    끝에서 부터 word와 패턴이 일치하는 var의 최대 부분(마지막 일치)을 제거하고 나머지를 반환한다.
 ${var#pattern}    처음 부터 word와 패턴이 일치하는 var의 최소 부분(첫 번째 일치)을 제거하고 나머지 부분을 반환한다.
 ${var##pattern}    처음 부터 word와 패턴이 일치하는 var의 최대 부분(마지막 일치)을 제거하고 나머지 부분을 반환한다.

 

위의 설명에서 pattern은 정규식이 아니라 *와 ?의 와일드 카드 패턴이다. %% 또는 ## 의 경우 pattern이 일치하지 않을 때 까지 반복해서 var의 값을 검색하지만 % 와 # 는 처음 일치하는 패턴이 나올 때 까지만 찾는다. 실제로 리눅스(우분투)의 bash에서 테스트를 해본 결과 와일드 카드 *에 대해서는 정상적으로 수행되었으나 또 다른 와일드 카드인 ?에 대해서는 %%와 ##에 의한 반복적인 패턴 매칭이 수행되지 않았다.

 

예제) ${var%pattern}

 

1  $ var="usr/X11R6/bin/startx"

2  $ result=${var%/*}

3  $ echo $var

4  usr/X11R6/bin/startx

5  $ echo $result

6  usr/X11R6/bin

 

이 예제에서 2번째 라인의 와일드카드 패턴인 /* 의 의미가 슬래쉬(/)로 시작하면서 0개 이상 문자열이 뒤따르는 것을 의미하므로 "/startx" 부분이 제거된 값인 "/usr/X11R6/bin"이 변수 result에 치환되었다. 변수 var의 값은 변하지 않았다.

 

예제) ${var%%pattern}

 

1  $ var="usr/X11R6/bin/startx"

2  $ result=${var%%/*}

3  $ echo $var

4  usr/X11R6/bin/startx

5  $ echo $result

6  usr

 

여기서는 2번째 라인에 연산자를 %%로 사용했으므로 뒤에서부터 반복적으로 매칭되는 패턴을 찾아간다. 패턴이 일치하는 "/startx" 가 제거되고 반복적으로 "/bin" 과 "/X11R6" 역시 "/*"의 와일드 카드 패턴에 일치하므로 제거되었고 "usr"은 슬래쉬(/)로 시작하지 않으므로 패턴이 매치되지 않았기 때문에 "/X11R6/bin/startx" 부분이 제거된 값인 "usr"이 변수 result에 치환되었다. 마찬가지로 변수 var의 값은 변하지 않았다.

 

예제) ${var#pattern}

 

1  $ var="usr/X11R6/bin/startx"

2  $ result=${var#/*}

3  $ echo $var

4  usr/X11R6/bin/startx

5  $ echo $result

6  usr/X11R6/bin/startx

 

이 예제는 앞에서 부터 패턴을 찾는데 변수 var의 값이 슬래쉬(/)로 시작하지 않으므로 매치되는 패턴을 찾지 못하므로 변수 var의 값에서 제거되는 부분이 없이 "usr/X11R6/bin/startx"의 값이 그대로 result에 치환된다. 2번째 라인에 연산자를 ##로 사용하여도 처음부터 패턴을 찾지 못하므로 같은 결과가 나온다.

 

예제) ${var##pattern}

 

1  $ var="/usr/X11R6/bin/startx"

2  $ result=${var##/*}

3  $ echo $var

4  /usr/X11R6/bin/startx

5  $ echo $result

6  

 

이번에는 변수 var값의 앞에 슬래쉬(/)를 붙여 보았다. 결과적으로 와일드카드 패턴인 "/*"에 매치되는 "/usr"이 제거되고 반복적으로 "/X11R6", "/bin"과 "/startx"가 제거되어 변수 result에는 null 값이 치환된다. 2번째 라인에서 ##가 아닌 #를 썼다면 result의 값은 "/X11R6/bin/startx"이 된다.

 

예제) 와일드카드 ?를 사용한 경우

 

1  $ var="/aa/aa/aaa/aa/aa"

2  $ result=${var##/??}

3  $ echo $var

4  /aa/aa/aaa/aa/aa

5  $ echo $result

6  /aa/aaa/aa/aa

 

위의 경우에 ## 연산자를 사용했으므로 슬래쉬(/)로 시작하고 두개의 문자가 뒤따르는 문자열을 반복적으로 제거해야 하므로 "/aa/aa/aa"가 제거된 "a/aa/aa"가 결과 값으로 반환되어야 하지만 실제로는 처음 한번 매치되는 패턴인 "/aa"만 제거되었다. 때문에 패턴비교 문자열 조작 기능을 사용할 때는 가급적 와일드카드 ?는 사용하지 않거나 주의를 하여 사용하는 것이 좋을 듯하다.

'리눅스' 카테고리의 다른 글

pam_tally2 확인 및 초기화  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
tcpwrapper iptable 차이  (0) 2015.10.05
htaccess 설정방법  (0) 2015.09.22
Posted by 캐논볼
,

MySQL 함수

카테고리 없음 2016. 3. 22. 16:06

http://egloos.zum.com/piccom/v/2866254


MySQL 함수

숫자 관련 함수

ABS(숫자) : 절대값 출력.
    select abs(123);
CEILING(숫자) : 값보다 큰 정수 중 가장 작은 수.
   --양수일 경우는 소숫점 자리에서 무조건 반올림(4.0과 같은 소숫점 자리 0 값은 제외)
   --음수일 경우는 소숫점 자리를 무조건 버림
    select ceiling(4.0);
    select ceiling(4.1);
    select ceiling(4.9);
FLOOR(숫자) : 값보다 작은 정수 중 가장 큰 수[실수를 무조건 버림(음수일 경우는 제외)].
   --음수일 경우는 [.0/.00/.000/...] 을 제외하고 무조건 소숫점을 버리고 반내림(?)
    select floor(4.0);
    select floor(4.1);
    select floor(4.9);
    select floor(-4.6789);
ROUND(숫자,자릿수) : 숫자를 소수점 이하 자릿수에서 반올림.(자릿수는 양수,0,음수를 갖을 수 있다.)
    --자릿수를 생략하면 소숫점이 5 이상일 때 반올림/자릿수를 지정하면 지정한 자리수에서 반올림
    select round(4.5);
    select round(4.55);
    select round(-4.5);
    select round(4.556);
    select round(4.556,0);
    select round(4.556,1);
    select round(4.556,2);
    select round(45.556,-1);
    select round(455.556,-2);
TRUNCATE(숫자,자릿수) : 숫자를 소수점 이하 자릿수에서 버림.
   ==>만일 자릿수를 소숫점 이전으로 정하면 소숫점이하는 버리고 나머지 값은 0 값으로 처리
      / 예) truncate(9999,-3) --> 9000
   ==>또는 자릿수를 소숫점이하로 정하며, 해당숫자가 자릿수보다 소숫점이 모자랄경우 0 값으로 대치
      / 예) truncate(999,3) --> 999.000
   --반드시 자릿수를 명시해주어야 한다
   --음수일 경우는 해당자릿수에서 소숫점을 버리면서 무조건 반올림
   ==>(자릿수 숫자에서 이후 숫자가 0 일 경우는 제외 / 예)-4.0,0/-400,-2/-4.1230,4)
   ==>음수 역시 자릿수를 소숫점이하로 정하며, 해당숫자가 자릿수보다 소숫점이 모자랄경우 0 값으로 대치
   ==>또한 자릿수를 소숫점 이전으로 정하면 소숫점이하는 버리고 나머지 값은 역시 0 값으로 처리
POW(X,Y) 또는 POWER(X,Y) : XY
   --소숫점이 있는 경우도 실행, 단 음수는 양수로 승처리
   select pow(-2.5,2);
   select pow(1.5,2);
MOD (분자, 분모) : 분자를 분모로 나눈 나머지를 구한다.(연산자 %와 같음)
   select mod(12,5);    ==> 2
   select 12%5;           ==> 2
GREATEST(숫자1,숫자2,숫자3...) : 주어진 수 중 제일 큰 수 리턴.
   select greatest(100,101,90);
LEAST(숫자1,숫자2,숫자3...) : 주어진 수 중 제일 작은 수 리턴.
   select least(100,101,90);
INTERVAL(a,b,c,d.....) : a(숫자)의 위치 반환
   --두 번째 이후는 오름차순 정렬이 되어야 함
   예) INTERVAL(5,2,4,6,8) ==> 2
        5는 4와 6사이에 존재, 4~6사이의 위치가 앞에서 2번째
   select interval(4,1,2,3,5,6);
문자 관련 함수
ASCII(문자) : 문자의 아스키 코드값 리턴.
   SELECT ASCII('문자');
   select ascii('A');
CONCAT('문자열1','문자열2','문자열3'...) : 문자열들을 이어준다.
   select concat('ASP,','PHP,','SQL',' WEB STUDY');
INSERT('문자열','시작위치','길이','새로운문자열') : 문자열의 시작위치부터 길이만큼 새로운 문자열로 대치
   '시작위치' 와 '길이'는 문자열이 아니므로 작은따옴표로 굳이 묶어주지 않아도 된다.
   select insert('MySql web study','7','3','offline');
   select insert('MySql web study',7,3,'offline');
REPLACE('문자열','기존문자열','바뀔문자열') : 문자열 중 기존문자열을 바뀔 문자열로 바꾼다.
   select replace('MySql web study','web','offline');
INSTR('문자열','찾는문자열') : 문자열 중 찾는 문자열의 위치값을 출력
   --값이 존재하지 않으면 0값 리턴
   select instr('MySql web study','s');
   select instr('MySql web study','S');
LEFT('문자열',개수) : 문자열 중 왼쪽에서 개수만큼을 추출.
   select left('MySql web study',5);
   select left('MySql web study','5');
RIGHT('문자열',개수) : 문자열 중 오른쪽에서 개수만큼을 추출.
   select right('MySql web study',5);
   select right('MySql web study','5');
MID('문자열',시작위치,개수) : 문자열 중 시작위치부터 개수만큼 출력
   select mid('MySql web study',7,3);
   select mid('MySql web study','7','3');
SUBSTRING('문자열',시작위치,개수) : 문자열 중 시작위치부터 개수만큼 출력
   select substring('Mysql web study',11,5);
   select substring('Mysql web study','11','5');
LTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다.
   select ltrim('          web study');
RTRIM('문자열') : 문자열 중 오른쪽의 공백을 없앤다.
   select rtrim('web study          ');
TRIM('문자열') : 양쪽 모두의 공백을 없앤다.
   select trim('     web study      ');
LCASE('문자열') 또는 LOWER('문자열') : 소문자로 바꾼다.
   select lcase('MYSQL');
   select lower('MySQL');
UCASE('문자열') 또는 UPPER('문자열') : 대문자로 바꾼다.
   select ucase('mySql');
   select upper('mysql');
REVERSE('문자열') : 문자열을 반대로 나열한다.
   예) REVERSE('abcde') ==> edcba
   select reverse('lqSyM');
논리 관련 함수, 집계함수
--논리 관련 함수
IF(논리식,참일 때 값,거짓일 때 값)
   논리식이 참이면 참일 때 값을 출력하고 논리식이 거짓이면 거짓일 때 출력한다.
IFNULL(값1,값2)
값1이 NULL 이면 값2로 대치하고 그렇지 않으면 값1을 출력

--집계 함수
COUNT(필드명)
   NULL 값이 아닌 레코드 수를 구한다.
SUM(필드명)
   필드명의 합계를 구한다.
AVG(필드명)
   각각의 그룹 안에서 필드명의 평균값을 구한다.
MAX(필드명)
   최대값을 구한다.
MIN(필드명)
   최소값을 구한다.
날짜 관련 함수
NOW() 또는 SYSDATE() 또는 CURRENT_TIMESTAMP()
   현재 날짜와 시간 출력
   ※ 함수의 상황이 숫자인지 문자열인지에 따라
      YYYYMMDDHHMMSS 또는
      'YYYY-MM-DD HH:MM:SS' 형식으로 반환한다.
   예)
   select now();
   ==> '2001-05-07 09:10:10'
   select now() + 0;
   ==> 20010507091010
CURDATE() 또는 CURRENT_DATE()
   현재 날짜 출력
   ※ 함수의 상황이 숫자인지 문자열인지에 따라
      YYYYMMDD 또는
      'YYYY-MM-DD 형식으로 반환한다.
   예)
   select curdate();
   ==> '2001-05-07'
   select curdate() + 0;
   ==> 20010507
CURTIME() 또는 CURRENT_TIME()
   현재 시간 출력
   ※ 함수의 상황이 숫자인지 문자열인지에 따라
   HHMMSS 또는 'HH:MM:SS' 형식으로 반환한다.
   예)
   select curtime();
   ==> '09:10:10'
   select curtime() + 0;
   ==> 091010
DATE_ADD(날짜,INTERVAL 기준값)
   날짜에서 기준값 만큼 더한다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
   예)
   select date_add(now(), interval 2 day);
   ==> 오늘보다 2일 후의 날짜와 시간 출력.
   select date_add(curdate(), interval 2 day);
   ==> 오늘보다 2일 후의 날짜 출력.
DATE_SUB(날짜,INTERVAL 기준값)
   날짜에서 기준값 만큼 뺸다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
   select date_sub(now(),interval 2 day);
   ==> 오늘보다 2일 전의 날짜와 시간 출력.
   select date_sub(curdate(), interval 2 day);
   ==> 오늘보다 2일 전의 날짜 출력.
YEAR(날짜) : 날짜의 연도 출력.
   select year('20000101');
   select year(20000101);
   select year('2000-01-01');
   select year(now());
   select year(curdate());
   select year(date_add(now(),interval 2 year));
   select year(date_sub(curdate(),interval 2 year));

MONTH(날짜) : 날짜의 월 출력.
   select month('20001231');
   select month(20001231);
   select month('2000-12-31');
   select month(now());
   select month(curdate());
   select month(date_add(now(),interval 2 month));
   select month(date_sub(curdate(),interval 2 month));

MONTHNAME(날짜) : 날짜의 월을 영어로 출력.
   select monthname(20021221);
   select monthname('20000721');
   select monthname('2000-08-10');
   select monthname(now());
   select monthname(curdate());
   select monthname(date_add(now(),interval 17 month));
   select monthname(date_sub(curdate(),interval 11 month));

DAYNAME(날짜) : 날짜의 요일일 영어로 출력.
   select dayname(20000121);
   select dayname('20010123');
   select dayname('2001-06-22');
   select dayname(now());
   select dayname(curdate());
   select dayname(date_add(now(),interval 21 day));
   select dayname(date_sub(curdate(),interval 333 day));

DAYOFMONTH(날짜) : 날짜의 월별 일자 출력.
   select dayofmonth(20030112);
   select dayofmonth('20011231');
   select dayofmonth('2001-12-23');
   select dayofmonth(now());
   select dayofmonth(curdate());
   select dayofmonth(date_add(now(),interval 56 day));
   select dayofmonth(date_sub(curdate(),interval 33 day));

DAYOFWEEK(날짜) : 날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6))
   select dayofweek(20011209);
   select dayofweek('20001212');
   select dayofweek('2003-03-21');
   select dayofweek(now());
   select dayofweek(curdate());
   select dayofweek(date_add(now(),interval 23 day));
   select dayofweek(date_sub(curdate(),interval 31 day));

WEEKDAY(날짜) : 날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6))
   select weekday(20000101);
   select weekday('20030223');
   select weekday('2002-10-26');
   select weekday(now());
   select weekday(curdate());
   select weekday(date_add(now(),interval 23 day));
   select weekday(date_sub(curdate(),interval 33 day));

DAYOFYEAR(날짜) : 일년을 기준으로 한 날짜까지의 날 수.
   select dayofyear(20020724);
   select dayofyear('20001231');
   select dayofyear('2002-01-01');
   select dayofyear(now());
   select dayofyear(curdate());
   select dayofyear(date_add(curdate(),interval 44 year));
   select dayofyear(date_sub(now(),interval 25 month));
   select dayofyear(date_add(now(),interval 55 day));
   select dayofyear(date_sub(curdate(),interval 777 hour));
   select dayofyear(date_add(now(),interval 999999 minute));

WEEK(날짜) : 일년 중 몇 번쨰 주.
   select week(now());
   select week(date_sub(curdate(),interval 12 month));

FROM_DAYS(날 수)
   --00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력.
      ※ 날 수는 366 이상을 입력 그 이하는 무조건 '0000-00-00' 으로 출력.
   --또한 9999-12-31 [from_days(3652424)] 까지의 날짜가 출력가능 하다고는 하나
      정확히 말하면 0000-03-15 [from_days(3652499)] 까지의 날짜가 출력가능함.
   --따라서 날 수는 366 이상 3652424[3652499] 이하가 되어야 한다.
   select from_days(3652424);
   select from_days('3652499');

TO_DAYS(날짜)
   --00 년 00 월 00일 부터 날짜까지의 일자 수 출력.
   --from_days와 비교해 볼 때 정확한 날짜범위는 3652424 일 수 까지임을 알 수 있다.
   select to_days('99991231');
   select to_days('0000-03-15');
   응용 예제1) 자신이 살아 온 날수
   select to_days(now()) - to_days('본인생일자');
   select to_days(now()) - to_days('1970-10-10');
   응용 예제2) 살아 온 날수를 이용하여 자신의 나이를 만으로 구하기
   select (to_days(now())-to_days('1970-10-10'))/365;
   select floor((to_days(now())-to_days('19701010'))/365);

DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력
DATE타입구분기호설명구분기호설명
년도%Y4자리 연도%y2자리 년도
%M
%b
긴 월 이름 (January, ...)
짧은 월 이름(Jan, ...)
%m
%c
숫자의 월 (01...12)
숫자의 월 (1...12)
요일%W긴 요일 이름 (Sunday, ...)%a짧은 요일 이름 (Sun, ...)
%D
%w
월 내에서 서수 형식의 일(1th, ...)
숫자의 요일 (0=Sunday, ...)
%d
%e
%j
월 내의 일자 (01...31)
월 내의 일자 (1...31)
일년 중의 날수 (001...366)
%l
%h
%I
12시간제의 시 (1...12)
12시간제의 시 (01...12)
12시간제의 시 (01...12)
%k
%H
12시간제의 시 (0...23)
12시간제의 시 (00...23)
%i숫자의 분 (00...59)
%S숫자의 초 (00...59)%s숫자의 초 (00...59)
시간%r12시간제의 시간 (hh:mm:ss AM 또는 PM)%T24시간제의 시간 (hh:mm:ss)
%U일요일을 기준으로 한 주 (0...52)%u월요일을 기준으로 한 주 (0...52)
기타%%문자 '%'%pAM 또는 PM

   ☞ 예)
   select date_format(now(),'%Y:%M:%p');
   ==> 2001:May:PM

▶ DATABASE() : 현재의 데이터베이스 이름을 출력한다.

▶ PASSWORD('문자열')
: 문자열을 암호화한다.

▶ FORMAT(숫자,소수이하자리수) : 숫자를 #,###,###.## 형식으로 출력
   --임의의 소수점자릿수를 생성한다./소숫점을 필요한 만큼 취한다.
   --소숫점을 만들어 같은 길이로 한다음 동일하게 프로그램에서 불러와서 소숫점을 버리고
      필요한 곳에 출력하는 등에 응용할 수 있다.
   select format(123,5);
   select format(123.12345600123,9);
   select format(123.123,-3);
   ※ 소숫점이하자리수가 0 이나 음수값은 해당이 안됨



Posted by 캐논볼
,

Traceroute는 ICMP 와 IP 헤더의 TTL필드를 사용한다. TTL필드(time-to- live)는 8 비트 필드로서 송신자는 그 값을 초기화한다. 현재 권고되고 있는 초기값은 구체적으로 64이다. 예전의 시스템은 15에서 32였다.
TTL 필드의 목적은 데이터그램이 전송도중 무한 라우팅 루프에 빠지는 것을 방지하기 위함이다. 예로서 라우터가 스톱하거나 두 라우터간의 접속이 끊겼을 경우 라우팅 프로토콜을 이용해서 잃어버린 경로를 검출하고 그것을 동작시킨다. 이 시간동안 데이터그램이 라우팅루프에서 사라지게 될 수도 있다. TTL필드는 루프를 도는 데이터그램에 상한선을 두게 된다.
만약 라우터가 TTL필드가 0또는 1인 IP 데이터그램을 받았다면, 라우터는 그 데이터그램을 포워드하지 않는다. (이와 같은 데이터그램을 수신한 목적지 호스트는 더 이상 라우트할 필요가 없으므로 이것을 응용 계층으로 보낸다. 그러나 TTL이 0인 데이터그램을 받는 호스트는 거의 없다)
대신에 라우터는 데이터그램을 버리고 원래 호스트에게 ICMP 메시지에 "시간초과"("time exceeded")를 알린다. Traceroute에 있어서의 요점은 ICMP메시지를 포함하고 있는 IP데이터그램이 송신자 주소인 라우터의 IP주소를 포함하고 있다는 것이다.
이제는 Traceroute의 동작에 대해 생각할 수 있을 것이다. 즉 TTL 이 1인 IP 데이터그램을 목적지 호스트에게 보낸다. 데이터그램을 다루는 첫번째 라우터는 TTL을 감소시키고, 데이터그램을 버리고 ICMP 시간 초과를 송신자에게 돌려보낸다. 이것을 통해 경로상에서 첫째 라우터의 위치를 발견한다. 다음에 Traceroute는 TTL 이 2인 데이터그램을 보낸다. 그리하여 두 번째 라우터의 IP 주소를 찾는다. 이것은 목적지 호스트까지 도착할 때까지 계속된다. 그러나 도착한 IP 데이터그램이 TTL 1의 값을 가진다 할 지라도 목적지 호스트는 버리려하지 않고 ICMP시간초과 메시지를 발생시킨다. 왜냐하면 데이터그램은 마지막 목적지에 도착했기 때문이다. 우리는 데이터그램이 어떻게 목적지에 도착했는지 결정할 수 있을까?
Traceroute는 목적지 호스트가 사용하지 않은 것 같은 UDP 포트 번호 (30,000 보다 큰 값)를 선택하여 데이터그램을 보낸다. 이것은 데이터그램이 도착될 때 목적지 호스트의 UDP 모듈이 ICMP "port unreachable" 에러를 발생하게 하는 원인이 된다. 모든 Traceroute는 도착된 ICMP 메시지간에 시간초과(time exceeeded)와 port unreachable를 구별하는 것이 필요하다.
Traceroute 프로그램은 출력 데이터그램의 TTL필드를 설정할 수 있어야 한다. TCP/IP로의 모든 프로그래밍 인터페이스가 이것을 제공하지는 않으며, 모든 구현이 이 능력을 지원하지 않는다. 그러나 대부분의 현재 시스템은 지원하기 때문에 Traceroute를 실행할 수 있다. 이 프로그래밍 인터페이스는 사용자가 슈퍼 유저 권한을 가질 것을 요구한다.

 

+ traceroute에서 사용되는 UDP는 port unreachable 같은 응답메시지를 전송하지 못한다. 따라서 ICMP가 UDP 관리를 위해 예외적으로 대신 보내준다.

'네트워크' 카테고리의 다른 글

백홀망  (0) 2016.05.12
SNMP  (0) 2016.04.29
SNMP Trap  (0) 2012.11.01
PoE  (0) 2012.10.29
광케이블 종류  (0) 2012.09.14
Posted by 캐논볼
,
Linux는 분석기 라이브러리를 사용하여 호스트 이름에 해당하는 IP 주소를 확보합니다. /etc/host.conf 파일은 이름 분석 방법을 지정합니다. /etc/host.conf 파일의 항목은 이름을 분석하는 데 사용할 서비스와 순서를 분석기 라이브러리에 알려 줍니다. vi 편집기를 통해 host.conf 파일을 편집하여 다음 라인을 추가하십시오.
# Lookup names through DNS first then fall back to /etc/hosts. 
order bind,hosts
# Machines with multiple IP addresses. 
multi on 
# Check for IP address spoofing.
nospoof on

order 옵션은 서비스 순서를 나타냅니다. 이 샘플 항목에서는 분석기 라이브러리가 먼저 이름 서버에 연결하여 이름을 분석한 후 /etc/hosts 파일을 확인하도록 지정합니다. 모든 서버에서 보다 나은 성능과 보안을 위해서는 분석기 라이브러리가 먼저 이름 서버를 확인하고 bind 파일과 hosts 파일(호스트)을 확인하도록 설정하십시오. 이러한 구성을 적용하려면 DNS 및 BIND 소프트웨어가 설치되어 있어야 합니다.

multi 옵션은 /etc/hosts 파일이 다중 IP 주소를 가질 수 있는지 여부를 판별합니다. 둘 이상의 IP 주소를 가진 호스트는 멀티홈드(multihomed)라고 합니다. 다중 IP 주소가 있다는 것은 호스트에 여러 네트워크 인터페이스가 있다는 것을 의미하기 때문입니다.

nospoof 옵션은 이 시스템에서 스푸핑을 허용하지 않도록 처리합니다. IP 스푸핑은 컴퓨터를 속여서 사용자의 거짓 식별 정보를 믿도록 하는 보안 침입입니다. 이러한 유형의 공격 시, 시스템은 실제 서버처럼 보이도록 설정한 후 종료 시스템, 기타 서버 또는 대용량 데이터 저장소 시스템을 실제화하기 위해 연결과 기타 유형의 네트워크 활동을 실행합니다. 이 옵션은 모든 유형의 서버에서 설정으로 지정되어야 합니다.

'리눅스' 카테고리의 다른 글

awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
tcpwrapper iptable 차이  (0) 2015.10.05
htaccess 설정방법  (0) 2015.09.22
MySQL 외부 접속 설정  (0) 2015.09.07
Posted by 캐논볼
,

P-ATA(IDE) / S-ATA

IT 생활 2016. 3. 3. 10:28

http://timewizhan.tistory.com/trackback/33

 

요즘 작업을 하면서 정말 여러가지 손대게 된다... 덕분에 공부는 많이 하지만 ;;

아무튼 마더보드에 부착하는 하드웨어 인터페이스에 대해 알아보기로 하자. 흔히 IDE, SCSI, SATA 등등 여러가지가 있지만 많이 알려져 있는 3개에 대해서 알아보도록 하자.

먼저 IDE(Intergrated Drive Electronics)로 ATA 혹은 PATA(Parallel ATA)로 알려져 있다. IBM 하드 디스크에 표준화된 인터페이스 이다. 하드 디스크와 마더 보드에 연결된 버스를 통해 통신이 되게 한다. IDE는 보통 16 비트(ISA : Industry Standard Architecture) 버스를 기본으로 하지만 여타의 버스와도 통신이 가능하다.

 

 

위의 그림을 통해 HDD와 연결하여 통신을 하게 된다.

잠깐!! ATA가 무엇인지 좀 알아보고 가자. IDE가 (P-ATA도 불리기도 하니깐..)
ATA는 Advanced Technology Attachment로 디스크나 여러 드라이브등에 IDE와 연결 혹은 접속하기 위한 규격을 말한다. 그렇다면 PATA는 말 그대로 병렬로 데이터가 전송되는 식이다.

그렇다면 바로 SATA를 알아볼까?
Serial ATA이다. 보통 마더 보드에 있는 하드 디스크와 광학 디스크 같은 장치를 연결한다. 병력 방식을 추구하는 PATA와는 달리 직렬 방식을 사용한다.

 

 

위 사진과 같이 생겼다. 하드 디스크도 SATA용 ,IDE용이 있다. 그렇다면!! PATA와 SATA의 차이는 무엇일까.
About.com 의 비교하는 기사를 참고해 보았다.(http://compreviews.about.com/od/storage/l/aaSerialATA.htm).. 참고로 영어.. ;;;;
그래서 기사 원문을 약하디 약한 영어로 해석해 보았다.

Serial vs. Paralled

2가지의 형태의 기본적인 차이점은 얼마나 데이터를 즉, 디바이스와 프로세서에 데이터를 보내는 방식이다. 전통적으로 ATA 디바이스와 컨트롤러는 병렬 데이터 전송 메커니즘을 사용했다. 병렬 처리는 CPU 한 클락에 동시에 여러 채널에서 데이터를 보낼 수 있는 가장 기본적인 방법이기 때문이다. 오늘날 IDE 디바이스와 컨트롤러에서 사용되는 ATA/100 의 경우에서는 데이터를 16 비트 채널로 전송한다. 하지만 병렬 처리의 문제는 데이터를 보내기 위해 요구되는 선의 크기이다. 그 이유로 ATA 케이블은 점점 넓어지고 있다. 그래서 40, 80 선들이 데이터 전송을 위해 요구된다. 이러한 다양한 선들이 서로서로 간섭을 줄 수 있는 문제점이 발생한다. 더더욱 높은 클락 스피드가 있는 곳에서는 서로 간의 간섭이 더욱 심해진다.

몇년이 지나고, 직렬 통신 기술에 대해 많은 진보가 이루어졌따. 특히 USB의 발전과 함께 직렬 전송은 다양한 채널을 사용하는 병력 인터페이스와는 다르게 한개의 채널로 사용 가능해 졌다. 이는 같은 클락 속도에서는 직렬 통신은 데이터를 덜 전송한다. 하지만 더 적은 선을 사용하고 서로간의 간섭이 적어진다. 이런 것을 통해 높은 클락 스피드에서는 병렬 방식보다 더 높은 스피드에서도 동작이 가능하다는 것을 나타낸다.

 

 

//////////////////////////////////////////////////////////////////////////

 

 

Parallel ATA (PATA) 와 Serial ATA (SATA) 의 비교
 

PATA

SATA 

 버스트 데이터 속도 Data Burst Rate

최대 133 MB/s

 최대 150 MB/s (SATA 1)
최대 300 MB/s (SATA 2)

 지속적인 처리량 Sustained Throughput

52 MB/s

55 MB/s

 케이블 고정 핀 Cable Pins

40

7

 전원 연결 핀 Power Connector Pins

4

15

 케이블 길이 Cable Length

18"

40" (1 meter)

 핫 플러그 Hot-pluggable

No

Yes

 전력 소모 Power Consumption

5V

250mV

 점퍼 설정 Jumper Settings

Yes (Drive 0 or 1)

No

'IT 생활' 카테고리의 다른 글

프로비저닝(Provisioning)  (0) 2016.04.06
윈도우7 한글 변환  (0) 2016.03.29
Active Directory  (0) 2015.10.21
URI / URL / URN  (0) 2015.08.26
익스플로러 우클릭 해제  (0) 2015.08.19
Posted by 캐논볼
,

상체 치료

신변잡기 2016. 2. 1. 15:26

< 도 수 >

 

ㅁ 흉추 운동

 - 네발 자세 -> 한쪽 팔만 앞으로 최대한 뻗고 -> 반대쪽 아래방향으로 최대한 뻗기, 시선은 움직이는 손 끝으로

 

- 고양이 자세, 최대한 움직이고 척추 분절 움직임

 

 

< 필라테스 >

 

ㅁ 흉추 운동

 - 천장을 보고 팔을 어깨 옆으로, 발은 토우 자세로 뻗음 -> 손목의 각도는 무리가 가지 않을 정도 -> 몸을 직선으로 만들어주고 -> 한쪽 발을 몸쪽으로 당겨서 다리들어올림 -> 내릴때는 토우 자세 -> 골반이 최대한 안정적으로 유지되는게 포인트

 

 - 슈퍼맨/스위밍 자세, 엎드려서 손바닥을 바닥에 어깨넓이로 대고 시작 -> 그냥 올리고 내리기 -> 손바닥 떼기 -> 손바닥 짚지 않고 연속하기

 

 - 폼롤러를 척추에 대고 척추 분절 스트레칭

'신변잡기' 카테고리의 다른 글

starbike.com 직구 후기  (0) 2015.12.29
근력 운동 정리 - 상체  (0) 2015.10.16
근력 운동 정리  (0) 2015.10.06
재활 운동 정리  (0) 2015.08.04
내일이 졸업식 입니다.  (0) 2012.02.16
Posted by 캐논볼
,