참조 - http://blog.blueweb.co.kr/180

1. bash 스크립트

  1) shbang

    #!/bin/bash

    - 기호 #!은 매직 넘버라 불리며, 커널이 실행 프로그램으로 인식해야 하는지 여부를

      알려주기 위해서 사용한다

    - 항상 스크립트의 첫줄에 나와야한다

 

  2) 주석

    - 주석은 파운드기호(#)가 앞서 나오는 줄을 말한다

 

2. 사용자 입력 읽기 (read)

  1) 파일이나 터미널로부터 입력을 읽어 오기 위해서는 내장 명령 read를 사용한다

  2) read명령은 개행문자가 나타날 때까지 줄을 읽어들인다

  3) 입력받은 내용을 저장할 특별한 이름을 지정하지 않으면, read REPLY라는 특수내장 변수에

      값을 저장한다

  4) read 명령과 옵션

      - read answer       : 표준 입력에서 한줄을 읽어서 변수 answer에 저장한다.   

      - read first last   : 표준 입력에서 한줄을 읽어서, 그 중 첫 단어는 

                            변수 first에 저장하고 나머지는 last에 저장한다.           

      - read              : 입력을 REPLY에 저장한다.                              

      - read -a arrayname : 입력받은 단어 목록을 arrayname라는 배열에 저장한다.   

      - read -e           : 입력줄에서 명령줄 편집을 사용할 수 있다.              

      - read -p prompt    : prompt를 출력하고 입력을 기다린다.                    

      - read -r line      : 입력에 역슬래시를 쓸 수 있게 허용한다.               

 

3. 산술 연산

  1) 정수 타입

    - declare -i 명령을 사용하여 정수 타입 변수를 선언할 수 있다.

      만약 정수 타입 변수에 문자열을 지정하려고 시도하면 배시는 0을 지정한다.

 

    - 정수 타입 변수에 부동소수점 수를 지정하려고 하면 배시는 구문 오류를 출력한다.

 

  2) 다른 수 체계의 사용

     - variable=base#number-in-that-base 형식으로 10진수, 8진수, 16진수, 2진수를 표현 

       할 수 있다

    # declare -i x=017

    # echo $x

    15

      -> 정수타입 변수 x 0으로 시작하는 8진수를 입력한다

    # x=2#101

    # echo $x

    5

      -> 2# 2진수를 의미한다

    # x=8#17

    # echo $x

    15

      -> 8# 8진수를 의미한다

    # x=16#b

    # echo $x

    11

      -> 16# 16진수를 의미한다

 

  3) let

    - let 명령은 배시 쉘의 내장 명령으로 정수 연산과 수치 표현식의 테스트를 위해 사용한다.

     # i=5

     # let i=i+1 -> let 명령이 i 변수에 1을 더한다

     # echo $i

     6

 

    # i=5

    # (( i+=1 )) -> let 명령 대신에 (( )) 명령을 대신 사용할 수 있다 (배시 2.x 지원)

    # echo $i

    6

 

4. 위치 매개변수와 명령줄 매개변수

  1) 위치 매개변수

    - 스크립트 이름 다음에 공백 문자로 구분된 각 단어를 매개변수라 부른다.

    - 명령줄 매개변수는 스크립트 내에서 위치 매개변수로 참고할 수 있다.

      $1은 첫번째 매개변수를, $2는 두번째 매개변수를 의미한다.

    - $9 이후의 매개변수들은 중괄호를 이용하여 숫자부분을 ${10}처럼 묶어주어야 한다.

    - 위치 매개 변수의 종류

      -> $0           : 현재 쉘 스크립트의 이름                                

      -> $#           : 위치 매개변수의 총 개수를 평가                         

      -> $*           : 모든 위치 매개변수를 평가                              

      -> $@           : 큰 따옴표를 사용하였을 때를 제외하고는 $*과 동일한 의미

      -> "$*"         : "$1 $2 $3"으로 평가                                    

      -> "$@"         : "$1" "$2" "$3"으로 평가                                

      -> $1 ... ${10} : 사용 가능한 위치 매개변수   

 

    - $* $@의 차이

      #!/bin/bash

      set 'apple pie' pears peaches         #위치 매개 변수를 설정

                       #apple pie, pears, peaches 세개의 매개변수 존재

      for i in $*

      do

         echo $i

      done

      출력결과

      apple

      pie

      pears

      peaches

      -> $*가 확장되면서 apple pie를 감싸고 있는 따옴표가 사라지게 되어, apple pie는 각각 다른 단어로 분리. for문에서는 각 단어들을 변수 i에 차례로 대입한 후 출력

 

      for i in "$*"

      do

        echo $i

      done

      출력결과

      apple pie pears peaches

       $* 가 큰 따옴표 안에 들어있기 때문에 전체 매개변수를 하나의 문자열로 처리. 변수 i에 전체 문자열이 하나의 단어처럼 저장 된다. 이때 반복문은 한번만 수행

 

      for i in $@

      do

        echo $i

      done

     출력결과

      apple

      pie

      pears

      peaches

     -> 인용부호(큰따옴표)가 없기 때문에 $@ $*와 같은 의미로 사용

 

      for i in "$@"

      do

        echo $i

      done

     출력결과

      apple pie

      pears

      peaches

       $@ 가 큰 따옴표 안에 있으므로 각 위치 매개변수를 개개의 문자열로 처리한다

        “apple pie”, “pear”, “peaches”로 구성 된다.

 

  2) set 명령과 위치 매개변수

    - 위치 매개변수를 재설정하면 기존의 값들은 잃어버리게 된다

    - 모든 위치 매개변수의 설정을 해제하려면 set -- 명령을 사용한다.

    - $0은 언제나 스크립트 이름을 가리킨다

      $ cat test

      #!/bin/bash

      echo '$0' $0

      echo '$*' $*

      echo '$1' $1

      echo '$2' $2

      echo '$#' $#

      old=$*

      set aa bb cc

      echo '$0' $0

      echo '$*' $*

      echo '$1' $1

      echo '$2' $2

      echo '$#' $# 

      (출력결과)

      $ ./test a b c d

      $0 ./test

      $* a b c d

      $1 a

      $2 b

      $# 4

      $0 ./test

      $* aa bb cc

      $1 aa

      $2 bb

      $# 3

         $*는 모든 위치매개변수를 의미한다

 

      $ cat test1

      #!/bin/bash

      name=${1:?"requires an argument"}

      echo Hello $name

 

       $ ./test1

      ./test1: line 2: 1: requires an argument

 

       $ ./test1 aa

       Hello aa

 

        → 특수변수 변경자인 :? $1이 값을 가지고 있는지 검사한다.

            지정한 값이 없으면 스크립트를 종료하고 메시지를 출력한다.

 

 

'Development > ShellScript' 카테고리의 다른 글

Shift 명령어  (1) 2012.03.13
Bash를 이용한 쉘 스크립팅 완전 가이드  (0) 2012.03.12
bash 내부 명령어  (0) 2011.01.09
bash 쉘 스크립트 - 위치 매개변수, 조건문  (0) 2011.01.06
Posted by linuxism
,

Eclipse 사용시 알아두면 좋은 유용한 단축키 모음

Summary : 모든 툴이 그렇지만 툴을 제대로 사용하기 위해서는 해당 툴에서 제공하는 단축키들을 자유롭게 사용한다면 툴의 사용효과를 극대화할 수 있을 것이다. Eclipse 또한 무수히 많은 기능을 제공하고 있기 때문에 Eclipse를 제대로 사용하기 위해서는 Eclipse에서 제공하는 단축키를 알고 사용하는 유용할 것이다.

 

Eclipse 단축키 확인 및 변경

Eclipse의 모든 단축키는 Window >> Preferences >> Workbench >> Keys 메뉴에서 확인 및 변경이 가능하다. 그 동안 다른 툴에서 자신의 손에 익숙한 단축키들이 있다면 이 메뉴에서 단축키들을 변경하는 것이 가능하다.

Java Editor 단축키

Ctrl + Shift + M: 특정 클래스 Import 시키기
Ctrl + Shift + O: 자동으로 Import 시키기
Ctrl + Shift + F: 코드 자동 정리
Ctrl + Shift + G: 특정 메써드나 필드를 Reference하고 있는 곳을 찾는다.
Ctrl + 1: Quick Fix. 에러가 발생했을 경우 Quick Fix를 통해 쉽게 해결이 가능하다.
Ctrl + Shift + /: 블럭 주석 설정
Alt + Shift + UP: 커서를 기준으로 토큰단위 블럭지정
Alt + Shift + DOWN: 커서를 기준으로 토큰단위 블럭해제
CTRL + L: 특정 줄번호로 가기
Alt + Shift + J: 자동으로 주석 달기 (메소드나 멤버변수에 포커스 두고 실행)

Window 이동

F10: 메뉴창을 활성화
Ctrl + F8: 다음 Perspective로 이동
Ctrl + N: 새로운 파일 및 프로젝트 생성.
Ctrl + Shift + Down: Java Editor에서 다음 member로 이동.
Ctrl + F7: 다음 View로 이동.
Ctrl + Shift + F7: 이전 View로 이동.
Alt + <-: 이전 작업 화면
Alt + ->: 다음 작업 화면
F12: 컴파일 중 에러등으로 포커스가 다른데로 갔을 때 Editor 로 커서 이동
Ctrl + 1: 컴파일 에러가 발생한 곳에서 Ctrl + 1을 누를 경우 컴파일 에러에 대한 해결책을 제시

디버깅 단축키

CTRL + Shift + B: 현 커서의 위치에 브레이크 포인터 설정/해제
F11: 디버깅 시작
F8: 디버깅 계속
F6: 한줄씩 실행(Step Over)
F5: 한줄씩 실행하되 함수일 경우 그 함수 내부로 들어감(Step Into)
CTRL + R: 현재 라인까지 실행(Run to Line)

Refactoring 단축키

Shift + ALT + 알파벳: Refactoring을 위한 단축키 임.

RUN 단축키

Ctrl + F11: 이전에 실행되었던 Run파일 실행.


ctrl + 1

Posted by Anonymous at 9월 22, 2005 08:06 | Permalink

Ctrl + O : 모든 클래스, 프로퍼티 트리 보기, 선택가능

Posted by Anonymous at 1월 11, 2006 11:47 | Permalink

Ctrl + Shift + L : 단축키 보기 (한 번 더 누르면 키 설정메뉴로 들어감)

Posted by Anonymous at 3월 13, 2006 20:23 | Permalink

Ctrl + Shift + T : 클래스 찾기

 

 

 

 

이클립스 단축키 저장 파일

%workspace%\.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.ui.workbench.prefs

 

 

 

Edit
Content Assist : CTRL + SPACE
- 코드 작성을 도와준다. 자동완성을 지원함

Navigate
Open Type Hierarchy : F4
- 현재 클래스의 상속관계를 보여주는 창이 열린다.

Quick Hierarchy : CTRL + T
- 간단하게 현재 클래스의 상속 관계를 보여준다.

Quick Outline : CTRL + O
- 현재 클래스의 메서드, 맴버변수등을 보여준다.

Refactor
Refactor Quick Menu : ALT + SHIFT + T
- 리펙토링 메뉴 바로가기

Rename : ALT + SHIFT + R
- 변수명, 클래스명 등 이름 변경

Source
Add Block Comment : CTRL + SHIFT + /
- 선택된 영역에 대해 주석 처리

Remove Block Comment : CTRL + SHIFT + \
- 주석처리 된 영역 주석 해제

Add Javadoc Comment : ALT + SHIFT + J
- Javadoc타입의 주석 붙임

Format : CTRL + SHIFT + F
- 탬플릿에 지정된 대로 코드 포맷 변경

Indent Line : CTRL + I
- 제대로 된 위치의 들여쓰기

Organize Imports : CTRL + SHIFT + O
- 필요없는 import 제거

Source Quick Menu : ALT + SHIFT + S
- 빠른 소스메뉴

Toggle Comment : CTRL + /
- 한줄에 대한 주석 처리

Text Editing
Delete Line : CTRL + D
- 줄 삭제

Duplicate Lines : CTRL + ALT + UP or DOWN
- 줄 복사

Insert Line Above Current Line : CTRL + SHIFT + ENTER
- 현재 줄에 새로 추가

Insert Line Below Current Line : SHIFT + ENTER
- 다음 줄에 새로 추가

Next Word : CTRL + RIGHT
- 다음 문자로 이동

Previous Word : CTRL + LEFT
- 이전 문자로 이동

Window
Maximize Active View or Editor : CTRL + M
- 선택된 뷰 최대화

Switch to Editor : CTRL + SHIFT + E
- 열려있는 에디터간 이동

Posted by linuxism
,


1. 시스테의 기본로그파일에 대하여

시스템에 접속을 하거나 하고있는 정보를 기록하는 파일이 있습니다. 해커가 침입을 하고난 후에는 자신의 접속정보를 삭제하는 작업을 하게되는데 아래의 파일에서 자신의 접속로그를 삭제하게된다.

 

/var/run/utmp  또는 /var/adm/utmp

/var/log/wtmp 또는 /var/adm/wtmp

/var/log/lastlog 또는 /var/adm/lastlog

 

2. utmp 파일

먼저 utmp에 대해서 알아보겠습니다. 이 파일은 현재시스템에 접속해 있는 사용자의 정보를 가지고 있습니다. 시스템은 사용자가 remote로 접속을 하면 먼저 이 파일에 기록을 하고 로그아웃을 할 때에 기록해둔 정보를 삭제합니다.

그리고 이 파일의 구성요소를 결정하는 파일은 /usr/include/utmp.h 에 정의되어 있습니다.

struct utmp {
        char    ut_user[32];            /* User login name */
        char    ut_id[14];              /* /etc/inittab id- IDENT_LEN in init */
        char    ut_line[32];            /* device name (console, lnxx) */
        short   ut_type;                /* type of entry */
        pid_t   ut_pid;                 /* process id */
        struct exit_status {
            short       e_termination;  /* Process termination status */
            short       e_exit;         /* Process exit status */
        } ut_exit;                      /* The exit status of a process
                                         * marked as DEAD_PROCESS.
                                         */
        time_t  ut_time;                /* time entry was made */
        char    ut_host[64];       /* host name same as MAXHOSTNAMELEN*/
}; 

이 파일은 보통 바이너리형태로 되어 있기 때문에 strings라는 명령어를 사용하여 다음과 같이 내용을 볼 수 있습니다.

$ strings utmp | more

system boot
run-level 3
sysconfig
update
LOGIN
cons
console
sac -t 300
PM00
root
console
ttyp1
ttyp1
8:0.0
webadmin
ttyp4
ttyp4
168.126.62.90
webadmin
ttyp3
ttyp3

이 파일의 정보를 이용하는 명령어는 다음과 같습니다.

login(1), who(1), ac(8), init(8), last(8), lastcomm(8)

 

3. wtmp 파일

 다음으로 wtmp에 대해서 알아보자. 이 파일에는 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있습니다.  이파일은 삭제해주지 않으면 계속 누적이 되므로 정기적으로 백업을 받아 두든지 아니면 불필요한 정보를 삭제하든지 해야합니다.

이 파일에 기록되는 정보는 utmp.h에 있는 내용에 ut_time이추가되어 로그아웃시의 시간이 추가기록됩니다. 물론 이 파일의 정보를 보는 방법은 last라는 명령어로 볼 수있으며 wtmp와 관련된 명령어에는 다음과 같은 것들이 있습니다.

 

login(1), who(1), ac(8), init(8), last(8), lastcomm(8)

 

4. lastlog 파일

다음으로 lastlog에 대해서 알아보겠습니다. 이 파일에는 가장최근에 로긴한 정보를 저장하고 있습니다.

이 파일또한 last라는 명령어로 조회를 해 볼 수 있으며 기록되는 정보를 정의하는 파일은 /usr/include/lastlog.h에 다음과 같이 정의되어 있습니다.

struct lastlog {
        time_t  ll_time;
        char    ll_line[LL_LINELEN];
        char    ll_host[LL_HOSTLEN];            /* same as in utmp */
};

 

5. 로그파일과 로그기록삭제

자, 그럼 이쯤에서 이파일들의 보안에 대해서 언급해 보도록 하겠습니다. 만약 자기가 다른 시스템에 불법으로 침입했다면 이들 파일에 기록된 자신의 정보를 삭제하고자 할 것입니다. 그런데 이파일에서 일부정보를 삭제하려면 write 퍼미션이 있어야 합니다. 그래서 이들 파일의 퍼미션이 또 문제가 되는 것이며, 대부분의 시스템에는 이들 파일에 다음과 같은 퍼미션을 설정하고 있습니다.

 

[webserver:/var/adm 78 ] ls -l utmp

8 -rw-r--r--   1 root     adm         7332 12월 1일 19:40 utmp

[webserver:/var/adm 79 ] ls -l wtmp

84624 -rwxr-xr-x   1 root     system   86593728 12월 1일 19:40 wtmp*

[webserver:/var/adm 80 ] ls -l lastlog

160 -rw-r--r--   1 root     adm       153132 12월 1일 19:40 lastlog

 

위에서 보시는 바와 같이 utmp와 lastlog는 644로 되어 있기 때문에 root 외에는 파일을 조작할 수 없으며 wtmp에는 755로 설정되어 있기 때문에 당연히 root 외에는 조작이 불가능합니다. 주의할 것은 이들 파일의 펴미션이 혹시 변경되지 않았나를 정기적으로 확인해 봐야한다는 것입니다.

이들 파일속에서 침입한 자신의 로그기록을 삭제해주는 유틸리티가 있는데 zip2라는 프로그램입니다.

수작업으로 이들 파일의 접속정보를 삭제할 수도 있으나 우린 좀더 편리한 것을 사용할 수 있는 방법을 사용해보겠습니다.

위에서 언급한 zap2.c에 대해서 설명을 하려합니다. 이 파일을 컴파일하여 사용하도록 해야합니다.

 

#define WTMP_NAME "/var/adm/wtmp"

#define WTMP_NAME "/var/adm/utmp

#define WTMP_NAME "/var/adm/lastlog

 

이 파일의 처음에 나오는 부분을 해당시스템에 맞게 수정하여야합니다.

 

사용하는 방법은 간단합니다.. 다음과 같이....킥킥....

 

$./zap2 webmaster

 

6. 또다른 로그기록삭제 프로그램

cloak1.c, invisible, mme.c, sunwt.c, zip.c, lled.c, wted.c 등등...

[출처] utmp, wtmp|작성자 쏭알

'System > Linux' 카테고리의 다른 글

CentOS 에서 yum 수행시 repo 사이트 추가  (0) 2011.01.19
ssh 및 telnet 서비스 포트 변경  (2) 2011.01.12
vi(vim) 기본 사용법  (0) 2010.12.24
리눅스 명령어 - netstat  (0) 2010.12.24
configure 옵션  (0) 2010.12.22
Posted by linuxism
,