SUBJECT:   SED 명령어 사용법


o sed 스트림 편집기
  ed명령어와 grep명령어 기능의 일부를 합친 것이 sed(stream editor)명령어이다.


  sed명령어도 grep명령어와 같은 필터이지만 이 명령어는 화일을 수정할 수 있게 하는 반면 ed처럼 대화식
  처리는 불가능하다. sed 명령어는 1개 라인씩 입력 라인을 읽어들여 표준 출력에 출력한다.


 

  sed는 각 라인을 읽을 때마다 ed에서 사용하던 형식의 대치작업을 실행한다.


  일치하는 문자열이 있으면 그 문자열을 대치한 후 출력하고 일치하는 문자열이 없으면 그 라인은
  수정되지 않고 그대로 출력된다.

  이 sed 명령어가 ed보다 좋은 점은 라인들을 하나씩 읽고 , 수정하고, 출력하기 때문에 기억장치 안의
  버퍼를 사용하지 않는다는 것이다. 버퍼를 사용하지 않으면 화일의 크기에 제한 없이 작업을 할 수 있다.


  ed와 같이 버퍼를 사용하는 경우는 버퍼의 크기보다 큰 화일은 처리할 수 없으며 대개 버퍼의 크기는

  1MB정도이다. 따라서 sed는 아주 큰 화일을 처리할 때 주로 사용된다.

  sed 명령어를 호출하는 형식은 grep명령어와 같지만 완전한 형식의 대치 연산자를 사용한다는 점만이 다르다.


     # sed "s/hello/goodbye" in.file

  위의 명령어는 in.file이라는 화일에 있는 각 라인에서 첫번째 등장하는 hello라는 문자열을 goodbye로
  교체한 후 그 라인을 표준 출력에 출력한다.


     # echo "1234hello5678" | sed "s/hello/goodbye/"

  대치 명령어를 따옴표로 둘러싸야 올바로 사용할 수 있다. 여기서 문자열은 정규식으로 표현될수 도 있다.
  그외에도 sed명령어에는 여러 가지 연산자를 사용할 수 있다. 다음의 명령어를 사용하면 hello라는

  문자열을 포함하고 있는 모든 문자열을 삭제할 수 있다.

# sed "/hello/d" in.file


  위 명령어의 의미는 "hello라는 문자열을 포함하고 있는 라인을 찾아 그 라인을 삭제하라"는 것이다.

  이 sed 명령어는 다음 명령어와 같은 의미이다.


     # grep -v hello in.file


  라인을 전부 삭제하지 않고 hello라는 문자열만을 삭제하려면 다음 명령어를 사용하다.

     # sed "s/hello//" in.file


  ed와 같이 sed에서도 화일의 일부만을 대상으로 작업하는 경우는 라인의 범위를 지정할 수 있다.

     # sed "3,7s/hello//" in.file


  위의 명령어는 in.file이라는 화일의 라인3에서 7까지만을 대상으로 첫번째 hello를 삭제하고 화일의
  그 외의 부분은 변경시키지 않는다. 또한 다음과 같이 사용하면 라인 번호 대신 문맥을 범위로 
  지정할 수 있다.

     # sed "/hello/,/goodbye/s/bad/good/g" in.file


  위의 명령어는 hello라는 단어를 포함하고 있는 첫번째 라인부터 goodbye라는 단어를 포함하고 있는
  라인까지 검색하면서 bad라는 문자열을 모두 good으로 변경한다.

  또한 문자열 goodbye를 만난 이후에도 다시 다른 hello가 등장하면 다음 goodbye가 나올 때까지 대치
  작업은 반복된다.


sed명령어의 기능은 지금까지 우리가 살펴본 것보다 더 강력하다.


  sed명령어의 -f(file)선택자를 사용하면 명령어를 일일이 키보드에서 입력하지 않고 하나의 화일에
  기억시켜 놓고 사용할 수도 있다.


     # sed -f command.file in.file

  여러 개의 명령어를 연속적으로 자주 사용할 때 이 명령어 화일이 유용하게 사용된다.

  예를 들어 다음과 같은복수 개의 명령어가 화일에 기억되어 있는 경우는


     # vi command.file
       s/hello/goodbye
       s/good/bad

  다음과 같은 명령어를 입력하면


     # echo "1234hello5678" | sed -f command.file


  다음과 같이 출력된다.

     # echo "1234hello5678" | sed -f command.file
       1234badbye5678
  
o sed 기본
     # sed '' ljs --> cat ljs 와 동일


o sed 편집 명령어
      일상적인 sed 명령
    ---------------------------------------------------------------------------------------
     a\          다음 라인(들)을 적용될 라인들에 부가한다  (라인뒤)
     c\          적용될 라인들을 다음 라인(들)로 변경한다  (라인 대체)
     d           적용될 라인들을 삭제한다
     g           단지 첫번째의 것만이 아니라 라인의 모든 부합 패턴 대체가 적용 되게 한다 
     i\          다음 라인(들)을 적용될 라인들 위에 삽입한다  (라인앞)
     p           - n 옵션하에 있을지라도, 라인을 프린트한다
     q           명시된 라인에 도달할 때 중지한다
     r filename  filename을 판독한다. 내용을 출력에 부가한다
     s/old/new/  "old"를 "new"로 대체한다
     =           라인 번호를 프린트한다
     !command    라인이 선택되지 않는 경우 command를 적용한다.
    --------------------------------------------------------------------------------------


o 라인 명시
  sed명령은 두가지 방법을 사용한다. 첫 번째는 번지를 번호로 명시하는것이다.
  여러분은 특정한 라인을 가리키기 위해 단일 번호를 사용할 수 있다.


     # sed '3d' ljs  --> 세번째 라인을 삭제
  또는, 라인들의 범위를 가리키기 위해 콤마(,)로 분리된 두 번호들을 사용할 수 있다.
     # sed '2,4 s/e/#/' ljs  --> 대체 명령은 단지 2-4 라인들에만 적용된다. (단순 대체 명령은 라인에서
                                 첫번째 어커런스에만 적용된다는 점을 기억하라. 따라서 각 적용 라인의
                                 첫 번째 e만이 #로 대체된다)
     # sed -n '/kingdom/p' ljs  --> kingdom이 들어있는 line만 프린트
     # sed '/kingdom/p' ljs  --> 모든 line이 나타나고 그와 동시에 kingdom line이 중복해서 나타남
     # sed '[Pp]rincess/d' ljs  --> princess 또는 Princess를 포함하고 있는 라인들을 삭제함
     # sed '1,/fragrant/d' ljs  --> 라인 1로부터 fragrant를 포함하고 있는 첫번째 라인까지의 모든
                                    라인들을 삭제함


o sed 명령 하이라이트
     # more ljs
       I am a boy
       You are a girk
       He is a doctor
     # sed 'a\\
       Hey la la\! Doo de dah\!' ljs  --> 각 라인뒤에다 Hey la la!를 입력
        I am a boy
        Hey !
        You are a girk
        Hey !
        He is a doctor
        Hey !
     # sed 'a\\
       Oh\! good\\  --> \\을 사용함으로써 하나 이상의 라인들을 부가할 수 있다
       yeh' ljs
     # sed '3a\\
       Good Morning' ljs  --> 3 line뒤에다 내용 삽입
     # sed 'c\\
       Oh marvelous delight! sing to me! ' ljs  --> 기존의 라인들을 이것으로 대체시킴
       Oh marvelous delight! sing to me!
       Oh marvelous delight! sing to me!
       Oh marvelous delight! sing to me!

# sed '2q' ljs  = sed 2q ljs --> q명령은 편집기로 하여금 그것이 명시된 라인에 도착한 뒤
                                      중지하게 한다. 즉 2라인만 보여줌
     # sed -n '1s/a/#/gp' ljs  --> 전체적으로 바꿔줌

o sed의 패턴-부합
      패턴-부합에 대한 sed메타 문자
     -------------------------------------------------------------------
       메타 문자            작    용
     -------------------------------------------------------------------
       \              다음 문자의 특수한 의미를 부정한다
       ^              라인의 시작과 부합한다
       $              라인의 끝과 부합한다
       .              어떠한 단일 문자와도 부합한다
       [ ]            둘러싸인 문자들 중의 어느 하나와 부합한다
       [^...]         ...리스트에 없는 어떠한 문자와도 부합한다
       pat*           0 또는 그 이상의 pat 어커런스들과 부합한다
                      여기에서 pat는 단일문자 또는 [ ]패턴이다
       &              s 명령의 newpattern부분에서 사용되어 oldpattern
                      부분의 재 산출을 나타낸다
     -------------------------------------------------------------------

o 간략한 예
  ----------------------------------------------------------------------------------------
    명 령         결  과
  ----------------------------------------------------------------------------------------
   /Second/       Second를 포함하고 있는 어떠한 라인과도 부합한다.
   /^Second/      Second로 시작하는 어떠한 라인과도 부합한다.
   /^$/          공백라인, 즉 라인의 시작과 끝 사이에 아무것도 없는 라인과 부합한다.
                  이것은 공백 스페이스들로 된 라인과는 부합하지 않는바, 스페이스 자체가
                  문자이기 때문이다.
   /c.t/          cat, cot, 기타 등을 포함하고 있는 라인들과 부합한다. 이 패턴은 단어의
                  일부일 수 있음에 유의하라. 예를 들어, apricot와 acute도 부합된다.
   /./            적어도 한 문자를 포함하고 있는 라인들과 부합한다.
   /\./           피리어드를 포함하고 있는 라인들과 부합한다. \는 .의 특수한 의미를 부정
   /s[oa]p/       sop또는 sap와는 부합하지만 sip 또는 sup와는 부합하지 않는다.
   /s[ ^oa]p/     sip또는 sup와는 부합하지만 sop또는 sap와는 부합하지 않는다.
   s/cow/s&s/     cow를 scows로 대체한다.
   /co*t/         * --> 어떠한 수
  ----------------------------------------------------------------------------------------

 간단한 sed 해법
     # sed '/^$/d' ljs  --> 모든 공백 라인 제거
     # sed '/^ *$/d' --> space로 만들어진 공백까지 제거 (조심! ^와 *사이에 공백이 있어야 한다)
     # sed 'a\\
       ' ljs   --> 각 line마다 공백라인 추가
     # sed '/^#/d' ljs  --> 첫번째 열에 #을 가진 라인 제거
     # sed 's/^/     /' ljs  --> 각 line의 시작을 5 space로 대체

o 다중 명령
     # sed 's/Bob/Robert/g\
            s/Pat/Patricia/g' ljs  --> sh을 사용하는 경우에는 \을 생략하라
     # sed 's/cat/dog/g\
            s/dog/pigs/g' ljs  --> 먼저 모든 cats를 dogs로 변환한 다음에 모든 dogs를 pigs로 변환한다.
     # sed 's/Bob/Robert/g\
            s/Pat[^a-z]/Patricia/g' ljs  --> ^a-z은 a에서 z까지의 문자들이 아닌 모든 문자를
                                             의미한다는 점을 상기하라

o 태그
  위에서 Pat!와 같은 것이 발견될때 !를 포함한 전체 문자열이 Patricia로 대체되므로 !가 소실된다.
  우리는 !를 유지하면서 Pat를 대체하는 방법을 필요로 한다. 우리는 이것을 태그(tag)를 사용하여
  수행할 수 있다. 패턴의 일부를 "태그"하려면, 그것을 좌측에는 \(로 우측에는 \)로 둘러싸라.
  그 다음에, 명령의 newpattern부분에서, 여러분은 그렇게 둘러싸인 패턴의 첫 번째 것은 \1로,
  두번째 것은 \2 등으로 인용할 수 있다. 이 방법을 사용하면 다음의 명령이 부여된다.
      # sed 's/\(Pat\)\([^a-z]\)/\1ricia\2/g' ljs

o 쉘 스크립트와 sed
      # vi twospace
        sed 'a\\
        ' $*   --> $*은 모든 인자들을 나타냄
      # twospace ljs | pr | lpr
   위 예는 sed가 어떻게 하여 UNIX 프로그래밍과 쉘 스크립트에 적합한가를 나타낸다.

출처 : Tong - schick님의 linux통

by 뭔일이여 2007. 7. 24. 16:47

AWK

AWK
  1. awk는 직접 사용자로부터 입력을 받거나 아니면 지정한 파일을 가공하여 표준 출력한다
    표준 출력을 리다이렉션할 수 있다 
  2. 사용법
    • awk   [옵션]   '스크립트'   [-v 변수=값]   [파일(들)]
    • awk   [옵션]   -f  스크립트 파일   [-v 변수=값]   [파일(들)]
    • cf) 편집 스크립트 파일의 사용법
      • ed  : ed -s(script) sourcefile < scriptfile
      • sed :  sed -f(file) scriptfile sourcefile > outputfile
      • awk : awk -f(file) scriptfile sourcefile > outputfile
  3. 옵션
    • -Fc  :  field separator 지정
      • c는 필드 사이를 구분하는 구분자이다
      • 직접 지정하지 않으면 공백을 기준으로 한다
      • 시스템 변수 FS를 지정하는 것과 같은 효과를 지닌다
    • -v  변수 = 값
      • 스크립트를 실행하기 전에 미리 변수를 지정하여 준다
    • -f  스크립트 파일
      • 스크립트를 파일에서 가져온다  
      • -f 옵션을 여러번 사용하여 여러개의 스크립트 파일을 동시에 불러와 지정한 파일에 적용할 수 있다 
  4. 스크립트
    • 패턴 { 동작 }
      커맨드 라인에서는 패턴, 동작 전체를 단일 따옴표로 묶는다
    • 패턴만 있는 경우 : 패턴과 일치하는 레코드(라인)를 화면에 출력한다 
    • 동작만 있는 경우 : 모든 레코드(라인)가 동작의 대상이 된다
  5. 패턴
    1. /정규표현식/
      sed가 지원하지 않는 +, ?, |, ( ) 등의 메타문자도 지원한다   또한
      ^, $를 각 필드의 처음과 끝을 의미하도록 사용할 수도 있다
    2. 비교연산
      숫자 기준, 알파벳 기준 모두 사용 가능하다 
    3. 패턴 매칭 연산
      ~  :  일치하는 부분을 나타낸다
      !~ :  일치하지 않는 부분을 나타낸다
    4. BEGIN
      첫 번째 레코드가 읽혀지기 전에 어떤 동작을 정의하여 사용하고 싶을 때 사용한다 
    5. END
      마지막 레코드가 모두 읽혀진 후 어떤 동작을 정의하여 실행하고 싶을 때 사용한다 
  6. 동작
    • 동작은 모두 { }로 둘러싸야 한다
    • 예제
      • good이라는 문자열을 포함하는 모든 레코드를 출력할 때
        /good/
      • 각 레코드의 첫 번째 필드를 출력할 때
        { print $1 } 
      • good이라는 문자열을 포함하는 레코드의 첫 번째 필드를 출력할 때
        /good/ { print $1 } 
      • 두 개 이상의 필드를 가지는 레코드를 전부 출력할 때(비교연산)
        NF > 2
      • 한 라인(n)을 필드로, 빈 라인("")을 레코드로 구분할 때
        BEGIN { FS = "n" ;  RS = ""} 
      • 첫 번째 필드가 good와 일치하는 레코드에 대해 세 번째 필드를 먼저 출력하고 두 번째 필드를 나중에 출력하고 싶을 때
        $1 ~ /good/ { print  $3 ,  $2 }
      • good이라는 문자열이 몇 개나 들어가 있는지 계산하여 마지막 부분에서 출력하고 싶을 때
        /good/ { ++x }
        END { print x } 
      • 두 번째 필드를 모두 합하고 마지막 부분에서 두 번째 필드의 총합계를 출력하고 싶을 때
        { total += $2 }
        END { print "Total of $2: " ,  total } 
      • 레코드의 길이가 20자 이하인 것을 출력하고 싶을 때
        length($0) < 20 
      • 네 개의 필드를 가지며 good이라는 단어로 시작하는 모든 레코드를 출력하고 싶을 때
        NF == 4  &&  /^good/
      • 빈줄을 제외한 모든 줄을 화면에 출력한다
        NF > 0
  7. awk 시스템 변수
      FILENAME
      현재 파일명
      $0
      입력 레코드
      FS
      입력 필드 구분
      디폴트 :  공백
      $n
      입력 레코드의 N번째 필드
      NF
      현재 레코드 필드 갯수
      ARGC
      커맨드 라인의 인자 갯수
      NR
      현재 레코드 번호
      ARGV
      커맨드 라인 인자를 포함하는 배열
      OFMT
      숫자에 대한 출력 포맷
      디폴트 :  %.6g
      ENVIRON
      환경 변수들을 모아둔 관계형 배열
      OFS
      출력 필드 구분
      디폴트 :  빈줄
      FNR
      NR과 동일
      단지 현재 파일에 적용된다는 점이 다름
      ORS
      출력 레코드 구분
      디폴트 :  newline
      RSTART
      지정한 매칭 연산을 만족하는 문자열의 맨 앞부분
      RS
      입력 레코드 구분
      디폴트 :  newline
      RLENGTH
      지정한 매칭 연산을 만족하는 문자열의 길이
  8. awk 연산자
      산술 : =, +=, -=, *=, /=, %=
      조건 : ? :
      논리 : ||, &&, !
      패턴 : ~, !~
      비교 : <, <=, >, >=, !=,==
      증감 : ++, --
      필드참조 : $
  9. 제어문(C의 제어문과 같다)
    • break
    • continue
    • do {실행} while (조건)
    • exit
    • for (관계형 배열의 요소) {실행}
      펄의 foreach와 같다
    • if (조건) {실행} else {실행}
    • return
    • while
  10. awk 명령어
    • 문자열 연산
      • gsub(reg,s)
        입력 문자열의 전반에 걸쳐 정규표현식 r을 문자열 s로 대치한다
      • gsub(reg,s1,s2)
        문자열 s2에서 정규표현식 r을 s1으로 대치한다 
      • index(s1,s2)
        s1에서 s2의 위치를 넘겨준다  만약 없다면 0을 넘겨준다 
      • length(arg)
        인자의 길이를 넘겨준다 
      • match(s,r)
        문자열 s에서 정규표현식 r과 매칭되는 부분의 위치를 넘겨준다 
      • split(string,array[,seperator])
        구분자를 기준으로(지정하지 않으면 공백 기준)해서 지정한 문자열을 배열로 만든다  배열[1],  배열[2], ....... 
      • sub(r,s),  sub(r,s1,s2)
        gsub과 동일하다
        단지 정규표현식과 일치하는 문자열이 여러개라도 처음 문자열만 대치된다
      • substr(s,m)
        문자열 s에서 m번째 위치에서 끝까지의 문자를 리턴한다 
      • substr(s,m,n)
        문자열 s에서 m번째 위치에서 n번째까지의 문자를 리턴한다 
      • tolower(str)
      • toupper(str)
    • 수치 연산
      • atan2(x,y)
        y/x의 arctangent값을 라디안 단위로 넘겨준다 
      • cos(x)
      • exp(arg)
      • int(arg)
      • log(arg)
      • rand()
        0과 1사이의 난수를 발생한다 
      • sin(x)
      • sqrt(arg)
      • srand(expr)
        인자를 가지고 난수를 발생한다
        인자가 주어지지 않으면 시간을 가지고 난수를 발생한다 
    • 입출력/프로세스
      • close(filename)
        지정한 파일을 닫는다 
      • close(cmd)
        지정한 명령어 파이프를 닫는다 
      • delete array[element]
        지정한 배열 요소를 지운다 
      • getline()
        다음 레코드를 읽어 들인다 
      • getline[variable] [< "filename"]
        파일에서 읽어들인다 
      • next
        다음 레코드(라인)을 입력받는다
        getline()과 유사하지만 /패턴/동작을 새롭게 시작한다
        getline()은 다음 라인을 읽기만 한다 
      • print [args] [> "filename"]
        인자를 출력한다 
      • printf "format" [,expressions] [> "filename"]
        형식에 맞춰 출력한다 
      • sprintf (format [,expressions])
        printf와 마찬가지로 사용하는데 값을 리턴하기만 하고 출력은 하지 않는다 
      • system(command)
        시스템 내부 명령어를 실행한다 
  11. 간단한 예
    • awk  ' BEGIN { for (i = 1;i<=7,i++)  print int(101*rand()) }'
      화면에 1이상 100이하의 난수 일곱 개를 출력한다
    • ls -l  file1  file2  file3  | awk  ' { x += $5 } ;  END { print "Total bytes :  " x } '
      파일들의 크기를 모두 합하여 총 바이트 수를 표시한다
    • awk  ' END { print NR } ' filename
      지정한 파일의 라인이 몇 개인지를 표시한다
    • awk  ' NR % 2 == 0 '
      지정한 파일의 짝수번째의 라인만을 출력해 준다

출처 - 네이버 블로그

by 뭔일이여 2007. 1. 24. 10:17
grep : 패턴을 이용한 search => regular expression을 잘 만드는 것이 필요하다.
  grep option(s) pattern filename(s)
OS/tdir] grep -n dba /etc/group           # -n : 파일 안에서의 패턴이 발견된 라인 및 라인 번호
OS/tdir] grep -v dba /etc/group           # -v  : 패턴이 발견되지 않은 라인
OS/tdir] grep -n dba /etc/group /etc/passwd         # 파일을 여러개 나열...
OS/tdir] grep -i the ~/tdir/*                 # -i : 대소구분 무시(ignore) => the 대소구분 없이
OS/tdir] grep -li the ~/tdir/*                 # -l : 패턴이 들어있는 파일 이름만... 
OS/tdir] grep -c the ~/tdir/*                 # -c : 패턴이 들어있는 라인 번호만...
[패턴을 좀더 정교하게 표현하려면 regular expression을 사용해야 한다]
^      : ^패턴            : 패턴으로 시작하는 모든 라인 찾기
$      : 패턴$           : 패턴으로 끝나는 모든 라인 찾기
.       : d...              : d로 시작하는 4자리 character 찾기
*      : [a-d]*          : a, b, c, d로 시작하는 character 찾기
[]    : [Dd]atabase  : Database 또는 database 찾기
[^]   : [^D]             : D가 나타나지 않는 라인 찾기
OS/tdir] grep -i ^the ~/tdir/*              # the로 시작하는 라인 찾기
OS/tdir] grep -i meal.$ ~/tdir/*          # meal.으로 끝나는 라인 찾기
OS/tdir] grep c...d ~/tdir/*                # c로 시작하고 d로 끝나는 5자리 character 찾기
========================================================================================
▒  egrep(expression grep) : searches  files  for  a pattern of characters
                                          and prints all lines that contain that pattern.
OS/tdir] egrep '(a|A)d+' /etc/passwd   # ad 또는 Ad가 포함된 라인 찾기
OS/tdir] vi grep_test                               # 아래 내용을 추가하세요... 붙여넣기... ^^
An Oracle database is a collection of data treated as a unit.
The purpose of a database is to store and retrieve related information.
A database server is the key to solving the problems of information management.
OS/tdir] egrep 'Oracle|purpose' grep_test   # Oracle 또는 purpose가 포함된 라인 찾기
========================================================================================
sed : stream editor => file을 열지 않고 data를 편집하는 기능
  sed [-options] [address] command file... [>newfile]
# sed '/pattern/d' filename       # file에서 패턴이 포함된 라인을 지우고 그 결과를 화면에 표시
                                               # 원본 파일에는 아무런 변화가 없다.
OS/tdir] cp grep_test sed_test
OS/tdir] cat sed_test
OS/tdir] sed '/purpose/d' sed_test                  # purpose 라는 단어가 들어간 라인 삭제
# sed '#d' filename      : # 라인만 삭제
# sed '$d' filename      : 마지막 라인 삭제
# sed '#,$d' filename   : # 라인부터 마지막 라인까지 지우기
# sed '#,#d' filename   : # 라인부터 # 라인까지 지우기
OS/tdir] sed '1d' sed_test     # 1 라인만 삭제
OS/tdir] sed '$d' sed_test     # 마지막 라인만 삭제
OS/tdir] sed '/purpose/d' sed_test > set_out     # sed 처리 결과를 sed_out 으로 저장
OS/tdir] cat set_out
OS/tdir] sed '/purpose/p' sed_test             # 패턴이 포함된 라인이 두번 출력(print)된다.
OS/tdir] sed -n '/purpose/p' sed_test        # 패턴이 포함된 라인만 출력된다.
OS/tdir] sed 's/$/  Oracle/' sed_test       # 각 라인의 마지막에 원하는 글자 추가
OS/tdir] sed 's/  */#/g' sed_test              # space를 찾아서 #기호로 변환한다.
OS/tdir] sed 's/  */-/g' sed_test              # space를 찾아서 -기호로 변환한다.
                                                              # * 기호 앞에 space가 두개라는 점에 유의
OS/tdir] # 한번에 여러 가지 편집 수행
OS/tdir] sed -e 's/database/DATABASE/g' -e 's/information/INFORMATION/g' sed_test
========================================================================================
awk : 패턴 검색과 처리를 위한 언어
=> 명령어의 이름은 개발자인 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3인의
   머리글자를 사용해서 만든 것이다.
  awk '{ action}' filename
OS/tdir] ls -l | awk '{print $0}'              # 전체 필드가 모두 나타나도록...
drwxr-xr-x   2   prof9i4  dba          512  4월   25일  15:44   a_dir
drwxr-xr-x   2   prof9i4  dba          512  4월   18일  23:53   b_dir
    $1    $2   $3   $4        $5 $6   $7    $8   $9 
                                       $0                                            
OS/tdir] ls -l | awk '{print $1}'                    # 1번 필드만 나타도록...
OS/tdir] ls -l | awk '{print $1, $9}'               # 1번과 9번 필드만 나타나도록...
OS/tdir] ls -l | awk '{print $3 "t" $4 "t" $9}'                # Tab 키가 적용된 결과...
OS/tdir] ls -lt | awk '{print $9, "is using", $5, "bytes"}'     # text 추가
OS/tdir] ls -lt | awk '$5 <= 200 {print $0}'   # 5번 필드가 200 이하일 경우 출력

출처 - http://blog.naver.com/gunny97/90011889518
by 뭔일이여 2007. 1. 11. 11:59
보안을 위하여 보통 ssh를 많이 사용합니다. (openssh)
그런데 계정의 비밀번호가 아니라 비밀키와 공개키를 이용하여 인증을 사용할 수 있습니다. 때론 백업등을 이용하여 스크립트를 실행해서 다른 서버로 옮길 경우에는 보안을 위하여 ssh를 사용하면서도 비밀번호를 넣지 않고 자동으로 키를 이용하여 인증작업을 할 수 있습니다.(스크립트 이용시 필요)

** 암호화 형태는 dsa, rsa 방식이 있으며 어떤 방식으로 하느냐에 따라 나중에 서버쪽에서 세팅파일명이 약간 달라집니다.
(dsa:  authorized_keys/ rsa : authorized_keys2)

여기서 계정은 양쪽 다 taejun 이고 홈 디렉토리는 /home/taejun 이라고 가정합니다.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/taejun/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): xxxxxx
Enter same passphrase again: xxxxxx
Your identification has been saved in /home/taejun/.ssh/id_rsa.
Your public key has been saved in /home/taejun/.ssh/id_rsa.pub.
The key fingerprint is:
65:ac:e5:70:9a:b2:4f:25:c4:d3:02:00:e1:f8:f9:3b taejun@tunelinux.pe.kr


서버에 두개의 파일이 생성됩니다.

$ ll
total 4
drwx------  2 taejun  taejun   512  4 20 19:51 ./
drwxr-xr-x  8 taejun  taejun  1024  4 20 18:24 ../
-rw-------  1 taejun  taejun   887  4 20 19:51 id_rsa  -> 개인키 파일 (자기만이 읽고 쓸 수 있도록 되어있지요?)
-rw-r--r--  1 taejun  taejun   232  4 20 19:51 id_rsa.pub -->> 공개키 파일

여기서 생성된 파일을 접속하고자 하는 서버로 복사를 합니다.

$ scp id_rsa.pub test.co.kr:~/.ssh/authorized_keys2
The authenticity of host 'test.co.kr (211.111.111.11)' can't be established.
RSA key fingerprint is 95:d3:55:e9:0f:f5:53:e0:67:91:0b:cf:97:07:12:98.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'test.co.kr,211.111.111.11' (RSA) to the list of known
hosts.
taejun@test.co.kr's password: xxxxxx
id_rsa.pub           100% |*****************************|   232       00:00

이렇게 하고 난 이후에는 키생성시 입력한 비밀번호를 사용하면 됩니다. 그런데 스크립트 실행시 비밀번호를 입력하지 않아도 자동으로 처리되도록 할 수가 있습니다.

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa


다른 클라이언트에서도 test.co.kr 로 접속을 하려고 하는 경우에는 위에서 설명을 한대로 비밀키와 개인키를 생성하고 새로 생성한 개인키를 서버(test.co.kr)의 autorized_keys2 에 추가해주면 됩니다.
$ cat id_rsa.pub >>~/.ssh/authorized_keys2

authorized_keys2 파일은 인증키를 보관하는 역할을 합니다.

클라이언트에서 서버로 접속하는 경우 서버에서는 authorized_keys2 파일을 통해 공개키가 있는지 확인을 하고 서로의 키를 확인한 다음 인증하는 방식이라고 생각을 하면 될 듯 합니다.

출처 - 네이버 블로그
by 뭔일이여 2007. 1. 9. 11:16

$man scp

SCP(1)                  FreeBSD General Commands Manual                 SCP(1)

NAME
    scp -- secure copy (remote file copy program)

SYNOPSIS
    scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
        [-l limit] [-o ssh_option] [-P port] [-S program]
        [[user@]host1:]file1 [...] [[user@]host2:]file2

DESCRIPTION
    scp copies files between hosts on a network.  It uses ssh(1) for data
    transfer, and uses the same authentication and provides the same security
    as ssh(1).  Unlike rcp(1), scp will ask for passwords or passphrases if
    they are needed for authentication.

    Any file name may contain a host and user specification to indicate that
    the file is to be copied to/from that host.  Copies between two remote
    hosts are permitted.

usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
          [-l limit] [-o ssh_option] [-P port] [-S program]
          [[user@]host1:]file1 [...] [[user@]host2:]file2

SCP를 이용하여 데이터를 백업하기 위해서는 서비스 서버와 백업 서버의 트러스트(trusted) 관계를 만들고 sshd에서 서비스 할 수 있도록 수정해 주어야 한다.

localhost#vi /etc/ssh/sshd_config

AuthorizedKeysFile      .ssh/authorized_keys (주석 제거)

머신 1
O/S : FreeBSD
용도 : Service Server
IP : 192.168.0.1

머신 2
O/S : FreeBSD
용도 : Backup Server
IP : 194.168.0.2

1) 먼저 머신 2에서 root권한으로 트러스트 관계를 설정할 dsa키를 만들어야 한다.

localhost# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
f1:a7:45:4f:e8:e7:2b:d8:f2:ae:d5:a1:76:22:59:9c
root@localhost

2) 이제 만들어진 파일을 머신 1로 전송

localhost# scp .ssh/id_dsa.pub
root@192.168.0.1:
Password:
id_dsa.pub                          100% 1116     1.1KB/s   00:00

3) 머신 1로 접속하여 확인
localhost# ls
test.txt  id_dsa.pub
localhost# cat id_dsa.pub > .ssh/authorized_keys
localhost# rm id_dsa.pub
localhost# chmod 700 .ssh
localhost# chmod 644 .ssh/authorized_keys

4) 이제 테스트하기 위해 test.html을 백업해 보자.
localhost# cd /www/data
localhost# ls
localhost# test.html <---(이 파일을 백업할 것임)

5) 머신 2 에서 아래 명령을 실행
localhost# scp root@192.168.0.1:/www/data/index.html /backup/index.html
index.html                                     100% 1333     1.3KB/s   00:00
localhost# ls /backup/index.html
index.html

※ cron을 활용하여 주기적인 데이터 백업을 할 수 있다.
머신 1에서는 주기적으로 데이터를 tar압축
머신 2에서는 주기적으로 데이터를 scp백업
-끝-

출처 - 네이버 지식인

by 뭔일이여 2007. 1. 8. 16:21
텔넷을 사용하실줄 아신다는 가정하에 설명합니다...
아래사항은 telnet(ssh) 으로 접속을 하신후 설치 가능합니다.
웹호스팅서비스를 받아야 가능합니다..

출처 - 네이버 블로그
by 뭔일이여 2006. 11. 16. 13:29

현존하는 방법에는 3가지가 있습니다.

http://www.phpbuilder.com/columns/alberto20000919.php3 에서 Alberto Dainotti 라는 사람이 말했듯이...

1. freetds 0.51 을 이용한 방법 - 한글문제가 아직 해결이 안되었다
2. Sybase Client Library - php 컴파일할 때 .h 파일이 없다
3. odbc 를 이용한 방법

입니다.

자료출처 : http://sung.world.co.kr

by 뭔일이여 2006. 11. 16. 12:38
종래에는 홈페이지가 자국인들만 이용할 것을 예상하고 제작하므로써 외국인 즉, 비한글 사용자들에 대한 서비스를 미쳐 염두에 두지 못하므로써 한글이 ?????$%^&( 처럼 깨져 보이는 무지함을 보였던 것이 사실입니다.이제는 홈페이지 제작도 유니코드(UTF-8) 인코딩 방식이 세계적 추세이며 이러한 추세에 맞추어 MySql도 기본언어를 utf8(UTF-8 인코딩) 방식으로 변경하였으므로, 홈페이지를 종래 euc-kr 등 한글로만 표기하던 방식도 UTF-8 인코딩 방식으로 업데이트해야 할 때 입니다. UTF-8 인코딩 방식은 한국어, 일어, 중국어, 태국어, 아랍어 등 만국어 표기가 가능한 방식입니다.

참고사이트: http://database.sarang.net (알짜초보님)

by 뭔일이여 2006. 11. 11. 14:57
| 1 |