'분류 전체보기'에 해당되는 글 150건

  1. 2013.07.09 grep으로 특정문자열 제외 + 빈줄제거
  2. 2013.04.08 awk 로 특정 라인에 특정 문자 삽입하기 2
  3. 2012.12.21 RGB 추출기
  4. 2012.12.05 무료 PDF 변환 프로그램
  5. 2012.12.03 awk 관련 추가 설명 2
  6. 2012.07.18 사라진 바탕화면 보기 빠른실행 아이콘 만들기
  7. 2012.07.18 네트워크 패킷 캡쳐 방법 비교
  8. 2012.07.13 RTP 패킷 에서 걸러내기
  9. 2012.03.22 CPU 과부하와 MEM 과부하 프로세스 찾는 스크립트
  10. 2011.09.19 파일 사이즈가 0 인 개수 확인 스크립트
  11. 2011.09.07 1초 마다 특정 작업을 하는 스크립트
  12. 2011.09.03 파일 비교 스크립트 8
  13. 2011.08.05 날짜 표시 쉘 스크립트
  14. 2011.06.18 솔라리스 PKG 추가 / 제거
  15. 2011.06.17 파일 라인안에 앞에 내용 추가 / 맨뒤에 내용 추가 방법
  16. 2011.05.17 리눅스 여유 메모리 체크 관련 2
  17. 2011.03.17 솔라리스 계정 aging 관련 ( expire 현상 )
  18. 2011.03.17 SIGTRAN 구조
  19. 2010.11.16 리눅스에서 임의의 파일 생성 2
  20. 2010.09.27 FTP 이란? File Transfer Protocol 2
2013. 7. 9. 18:56

grep으로 특정문자열 제외 + 빈줄제거

grep 으로 특정 문자열 제외 + 빈줄 제거 


grep -v "#" | grep -v '^$' 


주로 시스템 기본 conf 파일들의 경우 주석이 많은데 해당 주석을 제거하고 보고

동시에 빈줄로 나오는 라인까지 제거 하는 방법

2013. 4. 8. 21:32

awk 로 특정 라인에 특정 문자 삽입하기

awk 를 통해서 특정 데이터 파일안의 몇번째 라인에 

특정 라인을 삽입할 수 있다.


예를 들어 data.txt 라는 파일안에 아래와 같은 내용이 있을 때.

aaa 11

bbb 22

ccc 33


bbb 22 라는 두번째 라인 다음에 

test 44 라는 라인을 넣고자 할 때에는 다음과 같이 awk 를 실행시킨다.


[si@localhost script]$ cat data.txt

aaa 11

bbb 22

ccc 33

[si@localhost script]$ awk 'NR==2 {print $0"\ntest 44"}' data.txt

bbb 22

test 44


NR 이라는 옵션은 라인을 지정하는 옵션이며 NR==2 즉 2번째 라인일 경우에는

print $0 즉 2번째 라인은 모든 내용을 출력하고

그 뒤에 "" 로 묶인 내용을 출력한다.

쌍따옴표로 묶인 내용의 시작이 라인 구분 표시자인 \n 으로 시작되기 때문에

라인을 바꾸게 되고 

그 뒤에 test 44 를 찍게 된다.



2012. 12. 21. 11:51

RGB 추출기

컵퓨터 바탕화면의 특정 색깔을 인식해서 RGB 값으로 보여주는 프로그램이다.


가끔씩 필요할 때가 있다.


원본 글 : http://ddiggam.tistory.com/52


프로그램 : 

Spuit.exe



안녕하세요.
잠깐 짬내서 RGB추출 프로그램을 만들어 봤습니다.

비슷한 프로그램이 이미 존재하지만 바이러스가 존재하는 파일들이 많더라구요.
그래서 최대한 가볍게 하나 만들어 봤습니다.

사용방법
1. 클라이언트 프로그램 안에서 마우스 왼쪽버튼을 누른다.
2. 마우스를 누르고 있는 상태에서 RGB추출할 이미지의 픽셀에 마우스를 가져한다.
3. 원하는 값을 확인한다.


RGB값은 클립보드에도 저장됩니다. 참고하세요.



업그래이드 할 경우 트위터에 알려드리겠습니다.(@bodling2002)

2012. 12. 5. 18:11

무료 PDF 변환 프로그램

doPDF 라는 프로그램으로 


프린트로 프로그램이 설치되며 

어느 워드든 한글이든 프로그램이든 출력이 지원되는 문서프로그램으로는 PDF 파일로 변환이 가능하다.!!


설치된 이후에는 출력할 때 doPDF v7 이라는 게 보이고

그것을 선택하고 프린트하게 되면 

PDF 파일을 어디에 저장할 지 경로를 묻는 창이 뜨게 된다.


적당한 경로를 지정해주고 저장을 누르면 pdf 파일이 만들어진다.


http://www.dopdf.com/download.php




dopdf-7.exe


2012. 12. 3. 17:20

awk 관련 추가 설명

원문 : http://blog.naver.com/PostView.nhn?blogId=jjjhyeok&logNo=20151320029



awk는 명령어를 사용하다보면, 의외로 자주쓰는데, 지금까지 얼추 맞춰서 쓰다가 문서는 찾았습니다만, 위키에 없어서 찾은것들을 정리해서 글을 씁니다. 공개되어있는 문서를 찾아서 했기에, 절대 창작문서가 아닙니다. 

조금 길어지다 보니.. 형식이 마구 틀어지고, 테이블 무서지고 있습니다... 그런데, 위키초보라서 잡기가 매우 힘들군요... 좀.. 도와주세요 ㅠ.ㅠ --maylinux

1 Awk란?

awk는 프로그램 툴이다. 이 툴은 상당히 배우기 쉽고, 사용하기가 편리하다. 왜 그럴까? awk는 기본적으로 데이터 처리를 위한 상당히 잘 만들어진 프로그래밍 모델을 가지고 있다. 이 말은 돌려서 얘기한다면, 일반적인 프로그램을 짜기에는 불편하다는 얘기가 될수 있다. 즉 perl에서 지원하는 여러가지 API 함수를 이용한 프로그램이나, 복잡한 정규표현식을 처리하기에는 많은 어려움이 있다는 것이다. 즉, awk는 awk 나름대로의 용도라는 것이 있다는 말이다. 물론 awk 가지고도 여러가지 복잡한 일반 프로그래밍이 가능하지만, 솔직히 이러한 것을 처리할때에는 awk 보다는 다른 프로그램을 사용하는 것이 좋다. 일단 간단히 얘기하자면, awk는 데이터 양식의 문서나 또는 자료를 처리하여 다른 형태의 문서 또는 결과물을 출력하는데 쓰인다. 실제로 awk의 프로그램 동작 모델은 이것을 위해 아주 잘 만들어져 있다. 뭐, 잘 만들어져 있는지 아닌지는 다음의 글들을 읽어야 알겠지만, 일단은 그렇다는 걸 기억해두기 바란다.


2 awk의 구조(Model)

awk는 위에서 언급한 바와 같이 데이터 처리를 위해 최적화되어 있다고 했다. 그러면, 어떠한 모델이 데이터 처리에 적합한 것일까? 일단 아래의 내용을 보고 나서 계속 설명하겠다.

1. 시작(BEGIN) : 입력데이터를 실행하기에 적합한 형태로 바꾸어주는 단계이다. 프로그램적인 말로는 preprocess라고 한다.

2. 실행(Routine) : [시작 단계]에서 잘 처리된(정규화된) 데이터를 실제 루틴으로 처리하는 것이다. 여기서 데이터는 처리 루틴에 따라 처리가 되며, 입력값이 루틴을 거쳐 결과값이 나오게 된다.

3. 끝(END) : [시작 단계]와 마찬가지로, 데이터가 처리된 후에 처리해야 할 내용들을 담고 있다. 결과의 추가 출력들을 예로 들 수 있다.


3 awk 프로그램

3.1 일반적인 awk 의 용도 및 사용방법(Using Model)

awk는 일반적으로 데이터 또는 유사 데이터양식의 파일 및 자료를 처리하는데 쓰인다. 예를 들어 통계 자료나, text 형식의 access(MicroSoft), 실험식의 계산 결과 등을 통계를 낸다던지 비교 분석 한다던지 다른 형태의 문서(결과물)로 변환하는 등의 작업에 사용된다. 따라서 이러한 작업에 있어서 awk는 100%의 작업효율을 가져올수 있다. 물론 perl이나, 유사프로그램을 사용해도 좋지만, 특별하게 복잡한 구조를 가지지 않는다면, 굳이 "토끼 잡는데, 소잡는 칼을 쓸 이유는 없다"는 것이다. awk만으로 충분하며, 또한 sed나 다른 GNU 유틸을 병합하여 사용하는 것이 단일 perl 프로그램이나, 기타 데이터 처리 프로그래밍 언어를 사용하는 것보다 훨씬 낫기 때문이다.

개인적인 관점으로는 GNU 유틸들은 상당히 유연하고(flexible)하고, 간편하지만, 실제적으로 개개의 GNU 유틸로 작업을 하기에는 상당히 힘이 든다. 그러나, 이들 GNU 유틸들을 적절하게 조합하여 사용하면, 기존의 여타 프로그램들과 동등한 기능을 발휘하는 멋진 프로그램이 될 수 있는 것이다.

그래서 보통의 작업은 awk 하나만 가지고, 모두 다 처리할 수가 없다. 하고자 하는 일의 일부분을 awk가 맡을수 있는 것이다. 보통의 일반적인 awk의 사용은 다음과 같은 단계를 거치게 된다.

  1. egrep 및 grep 을 이용한 데이터 파일의 구조 확인을 한다.
  2. 정규화가 가능한지를 확인하고, sed로 테스트 해본다. awk가 처리할만큼 정규화가 되어 있다면, 바로 awk를 사용한다.
  3. sed로 정규화된 양식을 awk로 처리한다. 

데이터의 양식 데이터는 일반적으로 Record와 Fields를 가진다. 일반적으로 한라인(한줄)이 1 record가 되고, Fields의 구분은 "□"(공백문자)를 구분자로 하게 된다. (레코드와 필드에 대해서 이해가 가지 않는 사람은 DataBase에 대한 개요 등을 참고하기 바란다.)

일반적으로 awk가 처리할 수 있는 데이터의 형식은 다음과 같다.

■■■□■■■■□■■■□■■■□■■■■■■□■■■■
■■■■□■■□■■■■■■■□■■■■□■■□■■■■
■■□■■■■■■■■■□■■□■■□■■■■■■■■□■

위의 데이터는 아래의 형식으로 바뀌게 된다.

record1:■■■■■■■■■■■■■■■■■■■■■■■
record2:■■■■■■■■■■■■■■■■■■■■■■■
record3:■■■■■■■■■■■■■■■■■■■■■■■
Field 1Field 2Field 3Field 4Field 5Field 6
$1$2$3$4$5$6

(위의 표가 잘 이해되지 않는다면, DB 입문서 등을 읽어보도록 한다.)

각 라인이 한 레코드가 되며, 스페이스로 분리된 문자열이 Field(또는 Column)으로 나뉘게 된다. 실제로는 한 레코드가 한 라인과 일지 않을 수도 있으며, Field 를 구분하는 것도 공백문자가 아닐수도 있다. 자세한 내용은 다음의 예제를 보면서 이해를 할 수 있을 것이다.

3.2 Example 1 - 간단한 awk 사용

# cat exam_result.dat
박종규 95점
이억운 98점
이훈강 99점
엄성기 100점
정영원 97점
박오근 98점
여기서 각 줄이 한 레코드가 된다. 그리고, "박종규 95점"이란 내용에서 "박종규", "95점"이란 문자열이 각각의 필드(항목)가 되는 것이다.

간단히 이름을 출력해 보기로 하자
# awk '{print $1}' exam_result.dat
박종규
이억운
이훈강
엄성기
정영원
박오근
print 명령은 간단히 처리중에 필요한 내용을 출력하는 함수이다. "$1"은 1st(첫번째) 필드를 지시한다. 마찬가지로 점수를 출력하려면, "$1" 대신에 "$2"를 입력하면 된다. 그러면, 라인의 전체 내용을 출력하려면 어떻게 해야 하는가? "$0"를 사용하면, 라인의 전체 내용을 출력할 수 있다.

이제 여기에서 시험친 사람들의 총점을 구하려고 한다. 어떻게 해야 할까? 일단 합계는 숫자만이 가능한데, 현재는 "95점", "98점"과 같이 "점"이라는 글자가 포함되어 있어, 필드로 구분해 내어도 계산이 불가능하다. 그러면, 일단 sed 프로그램을 사용해 "점"이라는 글자를 삭제하여 연산이 용이하도록 만들어보자.

sedscr의 내용
# cat sedscr
s/점$//

# sed -f sedscr exam_result.dat
박종규 95
이억운 98
이훈강 99
엄성기 100
정영원 97
박오근 98
자 이제 계산할 수가 있을 듯 하다. 그러면, 프로그램을 짜보자.
# sed -f sedscr exam_result.dat | awk 'BEGIN{ sum = 0; print "총점 출력 프로그램"; } {sum += $2} END {print "합계 : " sum}'
총점 출력 프로그램
합계 : 587
위의 내용을 설명하도록 하면 다음과 같다.

BEGIN{ sum = 0; print "총점 출력 프로그램"; } 위에서 언급된 awk의 모델링에서 BEGIN 부분에 해당한다. 루틴이 돌아가기 이전에 필요한 작업을 이 부분에 기재할 수 있으며, 출력의 머릿말 등을 달아둘 수 있다. 합계를 내기 위한 변수 sum을 지정하고, 그 값을 0으로 초기화하였다.

{sum += $2} 실제 프로그램 내용이다. 위에서 Routine(루틴)이라 설명한 곳이다. 이 부분은 한 필드마다 적용이 되며, 함수나 루틴을 사용하여 필요한 작업을 수행한다. 현재의

END {print "합계 : " sum} 위에서 언급한 END(마지막) 처리 부분이다. 모든 연산이 끝나고 난 다음 마지막 출력 양식이라든지 결과값을 출력한다. 현재 소스는 합계 내역을 출력한다.

위의 소스는 알아보기 힘들기 때문에, awk 코드 부분을 파일로 저장하여 실행하는 방법을 써보도록 하자.

아래의 내용으로 sum.awk 파일을 작성해 보자
#!/bin/awk
#
# This Program is for Summing of exam_result.
#

# BEGIN : 프로그램 시작 처리
BEGIN {
    sum = 0;
    print "총점 출력 프로그램";
}

# ROUTINE : 프로그램 본문
{
    sum += $2;
}

# END : 프로그램 마무리 처리
END {
    print "합계 : " sum;
}
위에서 첫줄의 #!/bin/awk는 앞으로의 내용들은 /bin/awk 프로그램을 사용해서 번역(처리)을 하겠다라는 지정 구문이다. 쉘스크립트의 "#!/bin/sh"와 같은 역할을 한다고 생각하면 될 것이다. 첫줄 이외에 "#"으로 시작하는 문장들은 모두 주석이다. 프로그램의 설명이나, 함수, 루틴에 대한 설명을 적어둔다. 각 내용은 한줄이 끝날때마다 ";"(세미콜론)을 붙여서 분리를 한다.

자, 위의 awk 스크립트 파일로 실행을 해 보기로 하자.
$ sed -f sedscr exam_result.dat | awk -f sum.awk 
awk 스크립트 파일을 호출할 때에는 "-f 파일이름" 옵션을 사용한다는 것을 기억해야 한다.

자, 그러면 이 프로그램에서 평균은 어떻게 구할 수 있을까? 이미 눈치를 챈 사람들이 있을 것이다. sum.awk 파일을 수정해 보자.
#!/bin/awk
#
# This Program is for Summing of exam_result.
#

# BEGIN : 프로그램 시작 처리
BEGIN {
    sum = 0;
    print "총점 출력 프로그램";
}

# ROUTINE : 프로그램 본문
{
    sum += $2;
}

# END : 프로그램 마무리 처리
END {
    print "합계 : " sum;
        average = sum / NR;
    print "평균 : " average;
}
실행을 하면 아래와 같이 된다.
$ sed -f sedscr exam_result.dat | awk -f sum.awk 
총점 출력 프로그램
합계 : 587
평균 : 97.8333

3.3 awk의 내부변수

awk에는 awk가 내부적으로 가지는 변수들이 있다. 이 변수들을 사용하여, 필드 및 레코드의 구분을 좀더 다양하게 할 수 있으며, 좀더 flexible(유연한)프로그램을 짤 수가 있다. 아래에 각 내부 변수들에 대해서 설명해두었다.

FS필드 구분자 - Fields Seperator
RS레코드 구분자 - Records Seperator
NF현재 레코드의 필드수(Number of Fields)
NR현재 파일에서 레코드 넘버(Number of Records)
FNR입력파일이 여러개인 경우에 현재 파일에서의 NF를 표시한다.
OFS출력시의 FS(Output Fields Seperator). 이 값을 변경하게 되면, 출력시의 FS 가 바뀌게 된다.
ORS출력시의 RS(Output Records Seperator). 이 값을 변경하게 되면, 출력시의 RS 가 바뀌게 된다.

3.4 Example 2 - awk 프로그램 응용

여기서 FS 와 RS 에 대한 부가 설명을 해야 할 것 같다. 일반적으로 데이터는 보통 한 라인이 한 레코드에 해당하고, 빈칸이나, 탭 등이 필드를 구분한다. 그러나, 실제로 데이터파일에서 이런식으로 처리가 되지 않는 경우가 있으며, 굳이 데이터 파일만이 아니라, 다른 형식의 파일도 처리하기 때문에 FS, RS는 임의 설정이 가능해야 한다. 예를 들어 다음과 같은 명함 목록 파일을 보자.
# cat cards.dat
백종규
리눅스넷(주)
부산 광역시 연제구 연산동 한창 빌딩 432호
051-851-2761

김진욱
이지시스템
서울시 서초구 방배2동 450-3 3층
02-3473-6282
위의 데이터 파일은 한줄이 한 레코드가 되지 않는다는 걸 알수 있다. 한 레코드는 한줄이 비워진 줄, 즉 정규식으로 표현하자면 "\n\n"으로 구분되어 있으며, 레코드내에서 필드의 구분은 개행("\n")으로 구분된다. 따라서, 위의 데이터에서 이름과 전화번호만을 출력하고 싶다면, 다음과 같이 awk 스크립트를 작성할 수 있다.
#!/bin/awk
BEGIN { 
        RS = "\n\n"; 
        FS = "\n"; 
}
{ 
        print $1, $NF; 
}
위의 스크립트에서 BEGIN 부분에서 RS와 FS를 임으로 "\n\n"과 "\n"으로 변경하였다. 또한 루틴부분에서는 첫번째 필드($1)와 마지막 필드($NF)의 내용을 출력하도록 하였다. NF현재 레코드에서 필드의 숫자를 나타낸다. 여기서 인자값을 호출하는 "$"을 붙이게 되면, 마지막 필드값이 출력이 되는 것이다.


4 또다른 요약 페이지

  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 변수 = 값
      • 스크립트를 실행하기 전에 미리 변수를 지정하여 준다
      • $를 쓰지 않고 변수 이름만 쓰면 된다. C에서 #define처럼 생각하면 될 것이다.
    • -f 스크립트 파일
      • 스크립트를 파일에서 가져온다
      • -f 옵션을 여러번 사용하여 여러개의 스크립트 파일을 동시에 불러와 지정한 파일에 적용할 수 있다 

  4. 스크립트
    • 패턴 { 동작 }
      • 커맨드 라인에서는 패턴, 동작 전체를 단일 따옴표로 묶는다
      • 패턴만 있는 경우 : 패턴과 일치하는 레코드(라인)를 화면에 출력한다
      • 동작만 있는 경우 : 모든 레코드(라인)가 동작의 대상이 된다 

    • 패턴
      • /정규표현식/ sed가 지원하지 않는 +, ?, |, ( ) 등의 메타문자도 지원한다 또한 ^, $를 각 필드의 처음과 끝을 의미하도록 사용할 수도 있다
      • 비교연산 숫자 기준, 알파벳 기준 모두 사용 가능하다
      • 패턴 매칭 연산 ~ : 일치하는 부분을 나타낸다 !~ : 일치하지 않는 부분을 나타낸다
      • BEGIN 첫 번째 레코드가 읽혀지기 전에 어떤 동작을 정의하여 사용하고 싶을 때 사용한다
      • END 마지막 레코드가 모두 읽혀진 후 어떤 동작을 정의하여 실행하고 싶을 때 사용한다 

  5. 동작
    • 동작은 모두 { }로 둘러싸야 한다
    • 예제
      • 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 

  6. awk 시스템 변수
    FILENAME현재 파일명$0입력 레코드
    FS입력 필드 구분 디폴트 : 공백$n입력 레코드의 N번째 필드
    NF현재 레코드 필드 갯수ARGC커맨드 라인의 인자 갯수
    NR현재 레코드 번호ARGV커맨드 라인 인자를 포함하는 배열
    OFMT숫자에 대한 출력 포맷 디폴트 : %.6gENVIRON환경변수들을 모아둔 관계형 배열
    OFS출력 필드 구분 디폴트 : 빈줄FNRNR과 동일 단지 현재 파일에 적용된다는 점이 다름
    ORS출력 레코드 구분 디폴트 : newlineRSTART지정한 매칭 연산을 만족하는 문자열의 맨 앞부분
    RS입력 레코드 구분 디폴트 : newlineRLENGTH지정한 매칭 연산을 만족하는 문자열의 길이

  7. awk 연산자
    • 산술 : =, +=, -=, *=, /=, %= 조건 : ? : 논리 : ||, &&, ! 패턴 : ~, !~
    • 비교 : <, <=, >, >=, !=,== 증감 : ++, -- 필드참조 : $
  8. 제어문(C의 제어문과 같다)
    • break
    • continue
    • do {실행} while (조건)
    • exit
    • for (관계형 배열의 요소) {실행}
    • 펄의 foreach와 같다
    • if (조건) {실행} else {실행}
    • return
    • while 

  9. 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) 시스템 내부 명령어를 실행한다 

  10. 간단한 예
    • 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 ' 지정한 파일의 짝수번째의 라인만을 출력해 준다 


배열이 썩 훌륭하게 지원되는데 세부 동작이 좀 예상 밖입니다. for(var in arr)를 돌리면 var에 1,2,3,...이 들어갈 뿐입니다. awk에서 배열의 특성 때문인데 정확한 건 메뉴얼을 찾아보도록 하고, 여기서는 배열을 한 번 뒤집어서 흔히 생각하는 반응대로 쓰는 법을 소개합니다. 이는 메뉴얼에도 나와 있는 내용입니다.

split(string, tmp)
for (var in tmp) {
    new[tmp[var]] = var
    delete tmp[var]
}

split은 문자열을 쪼개는 것으로 세 번째 인자에 구분자를 주면 그것에 맞춰 쪼개고, 아니면 FS에 지정된 걸로 동작합니다. 그리고 그 배열을 훑어서 tmp의 key와 value를 반대로 다른 배열에 저장하고 tmp를 지웁니다. 그 다음에 for(var in new)라고 하면 애초에 string에 있던 값들이 var에 들어갈 겁니다.

2012. 7. 18. 16:07

사라진 바탕화면 보기 빠른실행 아이콘 만들기

바탕 화면 보기 아이콘을 직접 다시 만들려면 다음과 같이 하십시오.

  1. 시작실행을 차례로 클릭하고 열기 상자에 notepad를 입력한 다음 확인을 클릭합니다.
  2. 다음 텍스트를 잘 복사하여 메모장 창에 붙여 넣습니다.
    [Shell]
    Command=2
    IconFile=explorer.exe,3
    [Taskbar]
    Command=ToggleDesktop
  3. 파일 메뉴에서 다른 이름으로 저장을 클릭한 다음 해당 파일을 "Show desktop.scf"로 바탕 화면에 저장합니다. 바탕 화면에 바탕 화면 보기 아이콘이 만들어집니다.
  4. 바탕 화면 보기 아이콘을 클릭한 후 빠른 시작 도구 모음으로 끕니다.

2012. 7. 18. 15:43

네트워크 패킷 캡쳐 방법 비교

리눅스에서 네트워크 상의 패킷을 캡쳐하기 위한 방법은 몇개가 있습니다


리눅스가 그렇듯 CLI 에서의 패킷 캡쳐가 더 쉽고 편합니다. 

물론 바로 보고 마우스로 클릭하는 것도 좋긴 하지만 GUI 접속이 되지 않는 원격지 서버의 경우에는 CLI 명령어가 

필요한 경우가 더 많습니다.


tcpdump  (CLI)

ethereal (GUI) -> tethereal (CLI)

wireshark (GUI) -> tshark (CLI ) 


ethereal 은 최신 리눅스에서는 wireshark 로 이름이 바뀌었습니다.


중요한 것은 패킷을 잡고 저장을 하는 방법을 우선 알아야 할 것 입니다. 


힘들게 man 페이지 까지를 읽지는 않더라도 --help 로 옵션 정보는 봐주셔야 하겠죠? 

[root@localhost ~]# tcpdump --help

tcpdump version 3.9.4

libpcap version 0.9.4

Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]

                [ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]

                [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]

                [ -W filecount ] [ -y datalinktype ] [ -Z user ]

                [ expression ]


(1) tcpdump 로 패킷 캡쳐하고 저장하기


tcpdump -i eth0 -w test.cap


- i 옵션은 물리적 인터페이스를 지정하기 위한 옵션입니다.

    만약 모든 인터페이스에서 패킷을 잡기를 원한다면 any 로 지정하면 됩니다.


- w 옵션은 잡은 패킷을 특정 파일로 저장을 하는 옵션입니다.

       파일명은 임의로 가능하며 pcap 이나 cap 확장자로 저장하시면 됩니다.


가끔 리눅스에서 PATH 를 잡아주지 않아서 명령어를 못 찾는 경우에는 which tcpdump 명령어로 

절대경로로 tcpdump 명령어가 어디에 있는지 확인하고 패킷을 잡아주세요

중지하는 것은 crtl +c 로 중지하면 됩니다.


[root@localhost ~]# which tcpdump

/usr/sbin/tcpdump

[root@localhost ~]# /usr/sbin/tcpdump -i eth0 -w test.cap

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

3 packets captured

3 packets received by filter

0 packets dropped by kernel

[root@localhost ~]# 


(2) tethereal 로 패킷 캡쳐하고 저장하기

[root@localhost ~]# tethereal -i eth0 -w test2.cap

Running as user "root" and group "root". This could be dangerous.

Capturing on eth0

[root@localhost ~]#


위의 tcpdump 명령어와 옵션은 유사합니다.


(3) tshark 로 패킷 캡쳐하고 저장하기

[root@localhost ~]# tshark -i eth0 -w test3.cap

Running as user "root" and group "root". This could be dangerous.

Capturing on eth0

[root@localhost ~]# 


솔라리스에서는 기본적으로 snoop 이란 명령어를 통해서 패킷 캡쳐가 가능합니다.

snoop 은 위에서 언급한 패킷캡쳐 명령어들과 다른 옵션을 가지고 있습니다. 

물론 기능적으로는 같지요 패킷 캡쳐 + 저장을 하는 거니깐요


(4) 솔라리스 에서 snoop 으로 패킷 캡쳐하고 저장하기

snoop -d ce0 -o test.cap


- d 옵션은 물리적 인터페이스를 선택 

- o  옵션은 캡쳐를 파일로 저장 


[root@localhost:/ ] snoop --help

snoop: illegal option -- help


Usage:  snoop

        [ -a ]                  # Listen to packets on audio

        [ -d device ]           # Listen on interface named device

        [ -s snaplen ]          # Truncate packets

        [ -c count ]            # Quit after count packets

        [ -P ]                  # Turn OFF promiscuous mode

        [ -D ]                  # Report dropped packets

        [ -S ]                  # Report packet size

        [ -i file ]             # Read previously captured packets

        [ -o file ]             # Capture packets in file

        [ -n file ]             # Load addr-to-name table from file

        [ -N ]                  # Create addr-to-name table

        [ -t  r|a|d ]           # Time: Relative, Absolute or Delta

        [ -v ]                  # Verbose packet display

        [ -V ]                  # Show all summary lines

        [ -p first[,last] ]     # Select packet(s) to display

        [ -x offset[,length] ]  # Hex dump from offset for length

        [ -C ]                  # Print packet filter code

        [ -q ]                  # Suppress printing packet count

        [ -r ]                  # Do not resolve address to name


        [ filter expression ]


Example:

        snoop -o saved  host fred


        snoop -i saved -tr -v -p19

[root@localhost:/ ] 




2012. 7. 13. 17:44

RTP 패킷 에서 걸러내기

RTP 패킷에서 comfort noise 찾기 


rtp.p_type == 13


RTP 패킷에서 DTMF ( RFC2833 찾기 ) 


rtpevent

2012. 3. 22. 22:27

CPU 과부하와 MEM 과부하 프로세스 찾는 스크립트

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
2011. 9. 19. 22:23

파일 사이즈가 0 인 개수 확인 스크립트

1. 현재 디렉토리 내에서 파일사이즈가 0 가 아닌 파일의 개수를 확인하는 쉘 스크립트 

#!/bin/bash


ls -l | grep '^-' | awk '{print $9}' > imsy


CNT=0


for i in `cat imsy`

do

        if [ -s $i ]

        then

                CNT=`expr $CNT + 1`


        else

                shift

        fi

done

echo $CNT
rm -rf ./imsy 


 
마지막에 출력되는 CNT 변수가 현재 디렉토리 내의 파일 사이즈가 0 보다 큰 파일들의 개수임.

2. 반대로 파일사이즈가 0 인 것들의 개수를 구하는 스크립트

#!/bin/bash


ls -l | grep '^-' | awk '{print $9}' > imsy


CNT=0


for i in `cat imsy`

do

        if [ -s $i ]

        then

shift

        else

            CNT=`expr $CNT + 1`


        fi

done

echo $CNT
rm -rf ./imsy 

 
2011. 9. 7. 18:59

1초 마다 특정 작업을 하는 스크립트


1초마다 특정 작업 ( 아래 command 부분만 편집 ) 을 하는 스크립트
현재는 ifconfig 명령어 하나를 수행하게 되어 있음.

남기는 로그 파일은 DATE 를 따라가기 때문에 분단위로 로그를 쌓을 것인지 아니면
시간단위로 할 것인지는 DATE 의 변수를 어디까지 지정하냐에 따라 달림.

ENDTIME 을 지정하여 그 시간 ( 혹은 분단위까지 ) 까지만 수행되고 스크립트 종료됨.

COUNT 를 넣었고 필요하면 COUNT 를 echo 해서 로그파일에 넣을 수도 잇음 

#!/bin/bash

### Script Ending time configuration

DATE=`date +%Y%m%d%H`  
# Date is 2011090713 this is HOUR setting

#DATE=`date +%Y%m%d%H%M`  
# Date is 201109071314 if you want minute setting used this line alse modify the ENDTIME line

ENDTIME=2011090714


### base config

COUNT=0

DIR=$PWD


### loop stage

while true

do

        if [ $ENDTIME -eq $DATE ]

        then

                exit 1 # exit script 

        else

                ## Command input stage

                ifconfig | tee -a  $DIR/Result_$DATE.txt

                #echo $DATE >  $DIR/Result_$DATE.txt

                ## Command ending

                COUNT=`expr $COUNT + 1`
                echo $COUNT >> $DIR/Result_$DATE.txt
                sleep 1

        fi

done

 
2011. 9. 3. 22:14

파일 비교 스크립트 8


최종 버전 파일 비교 스크립트 
어느 txt 파일이든 사이즈의 크기는 상관없음.
a.txt 와 b.txt 에 담긴 내용을 sort 하여 비교 


파일 비교 스크립트

(1) comm -12 a.txt b.txt
양쪽 모두에 존재

(2) comm -23 a.txt b.txt
a_only.txt

(3) comm -13 a.txt b.txt
b_only.txt


#!/bin/bash


### sort stage 

sort -u a.txt > imsy 

cat imsy > a.txt

sort -u b.txt > imsy

cat imsy > b.txt


### compare stage 

comm -12 a.txt b.txt > duble.txt

comm -23 a.txt b.txt > a_only.txt

comm -13 a.txt b.txt > b_only.txt


### Result stage 


echo "################################"

echo " a_only.txt is existed in a.txt"

echo "################################"


echo "################################"

echo " b_only.txt is existed in b.txt"

echo "################################"


echo "#########################################"

echo " double.txt is existed in a.txt & b.txt"

echo "#########################################"


 
2011. 8. 5. 00:49

날짜 표시 쉘 스크립트

1. 오늘 날짜를 표시하는 스크립트 

 #!/bin/bash

DATE=`date +%y%m%d`
DATE2=`date +%Y%m%d`
echo $DATE
echo $DATE2



출력결과는 다음과 같다.
110804
20110804 

2. 어제 날짜를 출력하는 스크립트

#!/bin/bash


### DATE cal ###

YEAR=`date +%Y`

MON=`date +%m`

DAY=`date --date '1 days ago' +%d`


DATE=${YEAR}${MON}$DAY

echo $DATE

 
출력결과

[si@localhost temp]$ sh date.sh

20110803 

여기서는 하루 전의 날짜를 구하는게 어려웠는데 찾아보니 위와 같이 쉽게 표현이 되더군요
더하고 빼고 등등의 귀찮을 작업을 할려고 했지만 
위에 처럼 좋은 게 있었네요.

3. 년도/월/일/시간/분 을 따로 구하여 한꺼번에 표시
 

#!/bin/bash


YEAR=`date +%Y`

MON=`date +%m`

DAY=`date +%d`

HOUR=`date +%H`

MIN=`date +%M`


echo "Now is"\ ${YEAR}${MON}${DAY}${HOUR}${MIN}

 
출력결과

Now is 201108042346

날짜를 표시하는 것은 여러가지 방법이 있으나 기본적으로 date 명령어를 활용하여 표현하게 됩니다.
DATE 자체로만 쓰이지 않고 주로 로그표시나 파일 생성 등 광범위하게 쓰일 수 있지요.^^

스크립트는 이런 조각조각이 모여서 만든다고 생각하심 좀 더 쉽게 접근할 수 있을 거 같습니다.




 
2011. 6. 18. 22:53

솔라리스 PKG 추가 / 제거

1. 솔라리스 PKG 추가 명령어

 pkgadd  명령어로 해당 패키지를 추가할 수 있다. 

패키지는 웹을 통해 다운 받을 수 있다. 
http://www.sunfreeware.com/indexsparc10.html


2. 솔라리스 PKG 제거  

example) sendmail 패키지 제거 
# pkgrm SUNWsndmr 
# pkgrm SUNWsndmu  

 
2011. 6. 17. 20:48

파일 라인안에 앞에 내용 추가 / 맨뒤에 내용 추가 방법

1. 긴 라인으로 구성된 파일이 있을 때 각 라인마다 특정 단어를 라인의 맨 앞에 추가하고자 하는 경우

vi 편집기로 들어가서 해당 파일을 수정하여야 한다.

vi test.txt

편집기 들어가 있는 상태에서 라인의 맨 앞에 삽입할 내용( aaa ) 를 다음과 같이 명령어로 입려

:%s/^/aaa/g

2. 라인의 맨 뒤에 특정 단어를 추가하고자 할 경우

vi test.txt

:%s/$/aaa/g

이렇게 입력하면 aaa 라는 단어가 각 라인의 맨 앞 또는 뒤에 추가되는 것을 확인할 수 있다.  
2011. 5. 17. 14:07

리눅스 여유 메모리 체크 관련

리눅스 시스템에서는 top 명령어로 나오는 출력 중에서 free 필드의 값으로 
여유메모리를 판단하는데 그것보다는
free -mt ( Mega 단위로 표시 ) 명령어로 확인하는 것이 더 낫다.

[root@localhost ~]# free -mt

                 total           used      free     shared    buffers     cached

Mem:          1769       1641        128          0        176       1351

-/+ buffers/cache:        113       1656

Swap:         4579          0       4579

Total:        6349       1641       4707

 
여기서 free 항목이 여유메모리이지만

실제로 메모리를 크게 잡아먹지 않는 데몬이 떠 있지 않아도 free 가 매우 적게 보이는 경향이 있다.

하지만 이것은 정상상태이다.

vmstat 1 10 ( 1초마다 10번 통계값을 출력 / 첫번째 출력값은 무시한다 why? 통계이므로 첫번째 값은 무시 ) 

[root@localhost ~]# vmstat 1 10

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 0  0    108 129356 181168 1383480    0    0     4     6    7   11  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1026  139  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1012   97  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1019  126  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1010  108  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0    28 1027  160  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1004   87  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1025  157  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1010   97  0  0 100  0  0

 0  0    108 129356 181168 1383488    0    0     0     0 1019  124  0  0 100  0  0


 
여기서 보면 실제로 cashe 메모리가 높게 사용되고 잇는 것을 알 수 있다.
하지만 캐시메모리는 실제로는 free 메모리로 보는 것이 옳다.

리눅스에서는 자동적으로 모든 램의 공간을 버퍼 캐쉬로 사용하여 메모리를 효율성을 높이고 있으며

프로그램에서 많은 메모리를 필요로 하는 경우에는 자동으로 캐쉬의 크기를 줄인다.

그렇다면 위에서 실제로 사용가능한 메모리는 free+buffers+cached 이다.

-/+ buffers/cache: 줄이 이러한 내용을 반영하고 있다 

( 원문 : http://tunelinux.pe.kr/tune/tunning-pse/tunning.html )  
2011. 3. 17. 11:19

솔라리스 계정 aging 관련 ( expire 현상 )

* 계정 expire 테스트 과정 
 
1. test 유저생성 후 최초 shadow 파일
useradd -d /user1/test -s /usr/bin/csh  -g users -m test

[root@localhost:/ ] cat /etc/shadow | grep test
test:*LK*:::::::

2. /etc/default/passwd 에서 
MAXWEEKS=
MINWEEKS=
을 

MAXWEEKS=1
MINWEEKS=1
으로 변경 

3. passwd test  로 test 의 암호변경

4. 이후 test 의 shadow 파일
[root@localhost:/ ] cat /etc/shadow | grep test
test:ElDAk3ozroP8M:15050:7:7::::

5. 이후에 다시 변경하더라도 shadow 파일은 바뀌지 않음.
[root@localhost:/ ] passwd test
New Password: 
Re-enter new Password: 
passwd: password successfully changed for test
[root@localhost:/ ] 
[root@localhost:/ ] cat /etc/shadow | grep test
test:DBbyTmnUecSwA:15050:7:7::::

6. 시스템날짜를 일주일 앞으로 변경하여 test 계정의 패스워드가 expire 되는 것을 확인


7.이후에 로그인시도시 
login: test
Password: 
Choose a new password.
New Password: 
telnet: The first 8 characters of the old and new passwords must differ by at least 3 positions.
Try again
( 여기서 기존의 패스워드와는 다른 패스워드를 넣어야 함 must differ 최소한 3군데 이상 틀린.)

Choose a new password.
New Password: 
Re-enter new Password: 
telnet: password successfully changed for test


8. shadow파일을 다음과 같이 변경
test:whbZLDLK7rnZY:15058:::::: 

이후 passwd test 로 다시 패스워드 설정

[root@localhost:/ ] cat /etc/shadow | grep test
test:e1kGSsbZPaj22:15058::::::


9. 다시 시스템날짜를 일주일 더 앞으로 설정후 aging 이 일어나는지 확인
[root@sgsrc2:/ ] date 04011100
Fri Apr  1 11:00:00 KST 2011

다시 패스워드 재설정을 물어봄.



--------------------------------
결론적으로 이야기하면 최초 aging 을 설정하는 것은 /etc/default/passwd 파일의
MAXWEEKS=
MINWEEKS=
이 두개 의 설정값이다. 

MINWEEKS 비밀번호를 바꾸지 못하는 일 수를 주 단위로 설정, /etc/shadow 파일에서는 하루 단위로 설정이 가능함
MAXWEEKS 비밀번호를 바꾸지 않고 현재 비밀번호를 사용할 수 있는 일 수를 주 단위로 설정, /etc/shadow 파일에서는 하루 단위로 설정이 가능함 

이것을 적용하고 나서 어느 계정이든 ( 심지어 root 까지 ) MINWEEK 에 설정된 시간이 지나게 되면 
해당 계정의 패스워드가 expire 되게 되고 
재로그인시 패스워드를 재설정하라는 메시지가 뜨게 됩니다.

하지만 위의 경우는 일반계정의 경우이며 root 패스워드가 expire 가 되었다고 나왓을 때에는 
로컬에서 접속하여 변경하여야 합니다.
즉 KVM 같은 것을 사용하여 로컬에서 GUI 를 통해서 root 로그인 시도를 하였을 때 
알람이 하나 뜨고 New password 를 물어볼 것입니다. 



이때 root 패스워드를 재설정하고 /etc/default/passwd 파일의 MAXWEEKS 와 MINWEEKS 를 값이 없도록 변경한 뒤에, 문제가 된 해당 계정의 /etc/shadow 파일의 4번째 5번째 필드를 지워줘야 한다

shadow 파일의 필드들은 콜론 (:) 으로 구분됩니다.. 콜론은 지우면 안됩니다.

추가적으로 아래는 shadow 파일의 필드 설명입니다. 

/etc/shadow 파일 형식

(1)test33:
(2)$1$U.6P.t/R$nE.fAQoQxSZi3CjdWHx.a/:
(3)14883:
(4)0:
(5)99999:
(6)7:
(7):
(8)14911:

(1):(2):(3):(4):(5)


passwd 파일과 마찬가지로 섀도우 파일도 ":" 콜론 문자로 각 항목을 구분하며 각각은 다음과 같다:

(1)사용자이름. 최대 8자. 대소문자를 구분하며 대개의 경우에는 소문자로만 구성된다. /etc/passwd 파일의 사용자이름과 짝을 이룬다.

(2)패스워드. 13 글자로 암호화 됨. 비어있는 경우 (즉, ::) 는 (보통은 좋은 방법이 아니지만) 로그인하는데 패스워드가 필요없다는 것을 나타내며, 

``*'' 라고 되어 있으면 (즉, :*:) 그 계정은 막아두었다는 것을 나타낸다.

(3)패스워드를 마지막으로 바꾼 날이 (1970년 1월 1일로부터) 며칠째의 날인지 나타내는 항목.

(4)최소 며칠이 지난 뒤에 패스워드를 바꿀 수 있는지를 나타내는 항목 (0이면 언제든지 바꿀 수 있다는 의미)

(5)패스워드를 반드시 바꿔야 하는 날로 부터 며칠이나 지났는지를 나타내는 항목 (99999 는 무지무지 오랫동안 패스워드를 바꾸지 않았다는 것을 나

타낸다)

(6)패스워드가 만기가 되었음을 며칠 동안 사용자에게 계속 주의를 줄 것인지 나타내는 항목 (1주일 동안 알려주려면 7)

(7)패스워드가 만기가 되어서 계정이 사용불가가 된지 며칠이나 되었는지 나타내는 항목

(8)계정이 사용불가가 된 것이 1970년 1월 1일부터 계산하여 며칠째였는지 나타내는 항목

(9)미래의 사용을 위해서 잡아둔 항목 



     
     
     
     
 

'솔라리스10' 카테고리의 다른 글

솔라리스 PKG 추가 / 제거  (0) 2011.06.18
솔라리스 10 NIC 의 speed / duplex 변경 방법  (0) 2010.06.23
2011. 3. 17. 10:14

SIGTRAN 구조

다음의 그림은 레이어별로 나타낸 Sigtran 의 구조입니다.

No.7 과 Sigtran 을 레이어별로 표시를 한 것입니다.

왼쪽이 전통적인 SS7 또는 No.7 의 레이어이고 

오른쪽은 Sigtran 의 레이어입니다. 


No7 과 Sigtran 의 가장 중요한 차이점은 

No7 은 STP 와 STP 간에 물리적인 실선으로 연결이 되며

SIGTRAN 은 STP 와 STP 간에 아이피 즉 네트워크로 연결이 된다는 차이점입니다.

그 위에 올라가는 상위 레이어들은 같습니다.

즉 SG(signaling gateway) 까지의 연동이 물리적 이냐 ? 아님 네트워크이냐? 에 따라 나뉘는 것이 가장 큰 차이점입니다.

 

sigtran이해.pdf

2010. 11. 16. 17:32

리눅스에서 임의의 파일 생성

용량없는 파일을 생성하는 것은 touch 명령어를 사용하여 생성한다.

[root@localhost ~]# touch a
[root@localhost ~]# ls -l a
-rw-r--r-- 1 root root 0 11월 16 17:31 a


특정한 용량을 지정하여 파일을 생성하는 것은 다음과 같이 한다. 

# dd if=/dev/zero of=/home/tongseob/100M.dd bs=100M count=1
1+0개의 레코드를 입력하였습니다
1+0개의 레코드를 출력하였습니다
# ls -l 100M.dd
-rw-r--r--    1 root     root     104857600  1월 17 18:55 100M.dd



2010. 9. 27. 15:47

FTP 이란? File Transfer Protocol



1. FTP 란 무엇인가? 

 우리가 자주 사용하지만 막상 인식을 하지는 잘 못하는 프로토콜이다.

웹상에서 파일을 PC로 다운받거나 또는 업로드를 할 때에 FTP 를 사용하게 됨에도 불구하고 말이다.

FTP 는 말 그대로 파일을 전송하기 위한 TCP/IP 프로토콜이다. 마치 HTTP 가 웹을 해석하고 전달하기 위한 프로토콜인 것처럼 FTP 는 파일을 주고 받기 위해서 필요한 프로토콜인 것이다.

FTP 는 서버와 클라이언트로 나눠진다. 
FTP 서버는 항상 TCP Port 21 로 listen 하고 있어서 서버 자신에게로 오는 ftp 클라이언트들의 요청을 받아 들일 준비를 늘 하고 있는 녀석이다. 

FTP 클라이언트는 많은 방법으로 FTP서버에 접속할 수 있다 그 상세한 방법은 아래에서 살펴보자.


2. FTP 사용방법은? 

FTP를 사용하는 방법은 여러가지가 있다. 즉 자신이 알고 있는 방법으로 사용하면 된다. 그 어느 것을 사용하더라도 거의 문제가 없다. 

(1) IE ( 인터넷익스플로러) 를 사용하는 방법 

IE 의 주소창의 주소들을 보면 http://~~ 라고 표시될 것이다.  여기서 http 대신에 ftp 로 바꿔서 쓰면 ftp 로 서버에 접속이 가능하게 된다.

(2) FTP 전용 클라이언트를 사용하는 방법 

FTP 클라이언트 소프트웨어를 PC에 설치해서 서버에 접속하는 방법이 있다.  흔히들 사용하는 프로그램으로는 알FTP 라든가 아니면 Filezilla 같은 프로그램을 설치해서 원하는 서버에 접속해서 파일을 주고 받을 ( 업 / 다운 로드) 수가 있다. 

FTP 클라이언트 프로그램들은 많이 있으니 기호에 맞게 설치해서 사용하면 무리가 없을 것이다. 

(3) command 창을 이용하는 방법 

윈도우에서는 아직 남아잇는 까만창 ( cmd = command ) 을 이용해서 CLI ( command line interface ) 방식으로 FTP 서버로 접속할 수 있다. 
바로 위의 (1) 과 (2) 의 방법은 GUI ( Graphic User Interface ) 방식으로 마우스의 사용이 절대적으로 필요한 반면에,  이 방법은 마치 리눅스나 유닉스처럼 명령어 키보드 만으로 FTP 사용이 가능하고,  FTP 의 명령어들을 알고 있어야 한다.  

처음사용자는 어렵겠지만 나중에 익숙해지면 오히려 이 방식이 더 파워풀하고 강력할 것이다. 


3. FTP의 장점은? 
순수하게 FTP 로 전송하는 프로토콜만 사용하면 오히려 웹속에 숨어있는 링크를 클릭해서 FTP 로 오게 만들어지고, 그것을 클릭하고 나서 기다리고 전달되는 것보다는 오히려 FTP클라이언트 프로그램을 통해서 파일을 옴기는 것이 훨씬 더 속도가 빠르고 효율적이 될 수도 있다는 것을 알아야 한다. 
( 물론 IE 속에 FTP 를 사용할 수 있도록 하는 프로그램이 숨겨져 있다는 것에서는 같지만  FTP전용프로그램보다는 속도가 떨어질 것이다. ) 

4. 그럼 SFTP 란 ? 
SFTP 란 Secure FTP 즉 보안이 강화된 FTP 라고 보면 되겠다. SSH ( Secure Shell ) 을 통해서 파일을 전송하는 프로토콜이다. 리눅스를 설치하게 되면 SSH 는 기본적으로 설치가 되고 보통 SSH 는 터미널로 리눅스에 원격으로 접속하는 프로토콜인데 SSH 를 통해서 FTP 를 구현한 것이다.

파일질라 같은 FTP클라이언트는 SFTP 까지 지원을 한다. 

5.그럼 TFTP 란 ?
TFTP 란 Trivial FTP 를 뜻하고 FTP 나 SFTP 와 다르게 UDP 를 사용한다. UDP 는 전송 도중에 데이터가 유실될 가능성이 높고,  사용자에게 디렉토리를 보여주지 않을 때 주로 사용한다. 

아무래도 장비들의 펌웨어 업그레이드 같은 때에 이런 TFTP 가 예전에 자주 사용되었다. 


사용법은 어떤 방법을 사용해도 무관하다. 사용자가 편하게 사용하는 방법을 통해서 사용하면 될 것이다. 
하지만 서버관리자라면 터미널 상에서 FTP 를 사용하는 것이 더 익숙하고 편하게 느껴질 것이다. 

SSH 상에서 FTP 를 접속하게 되면 커서의 모양이 꺽쇠모양 ( > ) 으로 바뀌게 되고 FTP 상태인 것이 표시된다.
여기서 FTP 명령어들을 확인하려면 help 만 치면 FTP 에서 사용가능한 명령어 들이 나오게 된다. 


중요한 명령어는 일단 리눅스에 올라가 잇는 FTP 로 접속했을 때 현재 접속한 디렉토리의 파일들을 보고자 한다면
ls -l 이란 명령어를 통해서 확인하고

bin  또는 ascii 라는 명령어를 통해서 바이너리방식으로 전송할 것인지 아스키방식으로 전송할 것인지 결정

hash 란 명령어를 통해서 파일 전송시 진행정도를 ########  표시를 나타낼 지의 여부 ( 토글 )

모든 작업을 끝내고 FTP 를 종료시 bye 명령어를 통해서 FTP 서버와 연결을 끊음.

prompt 명령어로 파일 전송시 확인 ( y / n ) 여부 물어보도록 할 것인지 말 것인지 ( 토글 )

mget 명령어로 여러개의 파일을 하나의 명령어로 다운로드

mput 명령어로 여러개의 파일을 하나의 명령어로 업로드

이런 정도만 안다면 충분히 FTP 를 사용함에 있어 부족함은 없을 것이다. ^^