pid로 프로세스를 종료하는 방법을 정리합니다. 사용하는 명령은 다음과 같습니다.

  • ps
  • grep
  • awk
  • kill

pid를 조회하여 프로세스 종료하는 명령은 다음과 같은 절차로 작성됩니다.

  1. 원하는 프로세스 목록만 가져오기 - ps, grep, pgrep(ps+grep)
  2. 프로세스 목록에서 pid만 가져오기 - awk
  3. kill 명령어로 한번에 프로세스 종료 - (backtick)

backtick은 다음 그림과 같은 위치의 문자를 의미합니다.


프로세스 목록 조회

ps 및 grep 명령을 대상 프로세스를 조회합니다.

 

ps -ef | grep hugo

501 6582 479 0 12:39AM ttys000 0:01.15 hugo server

501 6919 479 0 12:44AM ttys000 0:00.21 hugo server

501 7011 479 0 12:44AM ttys000 0:01.16 hugo server

501 7104 479 0 12:44AM ttys000 0:01.16 hugo server

501 7276 479 0 12:44AM ttys000 0:01.15 hugo server

501 7371 479 0 12:44AM ttys000 0:01.16 hugo server

501 7463 479 0 12:44AM ttys000 0:01.14 hugo server

501 7637 479 0 12:45AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn hugo

프로세스 목록에서 pid 출력

awk로 프로세의 정보를 출력합니다. 컬럼 지정은 작은 따움표로 설정합니다.

 

> ps -ef | grep hugo | awk '{print $1,$2,$3,$8}'

501 6582 479 hugo 501 6919 479 hugo

501 7011 479 hugo 501 7104 479 hugo

501 7276 479 hugo 501 7371 479 hugo

501 7463 479 hugo 501 7903 479 grep

>

 

두 번째 컬럼($2)으로 pid를 지정하여 출력합니다.

 

> ps -ef|grep hugo|awk '{print $2}'

6582

6919

7011

7104

7276

7371

7463

7952

>

프로세스 종료

쉡 스크립트에서 backtick(`) 사이의 명령은 실행되고 그 결과가 앞에 명령에 입력됨니다.

다음과 같이 pid는 kill 명령에 전달되어 종료됩니다.

 

>kill -9 `ps -ef | grep hugo|awk '{print $2}'`

kill: kill 8385 failed: no such process

[7] + 7463 killed hugo server

[6] + 7371 killed hugo server

[5] + 7276 killed hugo server

[4] + 7104 killed hugo server

[3] + 7011 killed hugo server

[2] + 6919 killed hugo server

[1] + 6582 killed hugo server

>

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

사용중인 리눅스 종류 및 버전 확인 방법


1 방법 1: /etc/*-release

명령어
grep . /etc/*-release
cat /etc/*-release | uniq
실행예시 (Ubuntu 14.04.3)
root@zetawiki:~# grep . /etc/*-release
/etc/lsb-release:DISTRIB_ID=Ubuntu
/etc/lsb-release:DISTRIB_RELEASE=14.04
/etc/lsb-release:DISTRIB_CODENAME=trusty
/etc/lsb-release:DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
/etc/os-release:NAME="Ubuntu"
/etc/os-release:VERSION="14.04.3 LTS, Trusty Tahr"
/etc/os-release:ID=ubuntu
/etc/os-release:ID_LIKE=debian
/etc/os-release:PRETTY_NAME="Ubuntu 14.04.3 LTS"
/etc/os-release:VERSION_ID="14.04"
/etc/os-release:HOME_URL="http://www.ubuntu.com/"
/etc/os-release:SUPPORT_URL="http://help.ubuntu.com/"
/etc/os-release:BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
실행예시 (CentOS 6.5)
[root@zetawiki ~]# grep . /etc/*-release
/etc/centos-release:CentOS release 6.5 (Final)
/etc/lsb-release:LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
/etc/redhat-release:CentOS release 6.5 (Final)
/etc/system-release:CentOS release 6.5 (Final)
실행예시 (Fedora 11 Leonidas)
[root@zetawiki ~]# cat /etc/*-release | uniq
Fedora release 11 (Leonidas)
실행예시 (Oracle Enterprise Linux Server 5.5)
[root@zetawiki ~]# cat /etc/*-release | uniq
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
실행예시 (SUSE Linux Enterprise Server 11)
zetawiki:~ # cat /etc/*-release | uniq
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 1
LSB_VERSION="core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64"




2 방법 2: /etc/issue*

명령어
grep . /etc/issue*
  • 배포판의 버전을 가장 쉽게 확인할 수 있는 방법이다.
  • 보안 등의 이유로 다른 내용으로 바뀌어 있는 경우도 있다.
실행예시 (Ubuntu 14.04.3)
root@zetawiki:~# grep . /etc/issue*
/etc/issue:Ubuntu 14.04.3 LTS \n \l
/etc/issue.net:Ubuntu 14.04.3 LTS
실행예시 (CentOS 6.5)
[root@zetawiki ~]# grep . /etc/issue*
/etc/issue:CentOS release 6.5 (Final)
/etc/issue:Kernel \r on an \m
/etc/issue.net:CentOS release 6.5 (Final)
/etc/issue.net:Kernel \r on an \m
실행예시 (Fedora 11)
[root@zetawiki ~]# cat /etc/issue
Fedora release 11 (Leonidas)
Kernel \r on an \m (\l)
실행예시 (Oracle Enterprise Linux 5.5)
[root@zetawiki ~]# cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Kernel \r on an \m
실행예시 (SUSE Linux Enterprise Server 11)
zetawiki:~ # cat /etc/issue

Welcome to SUSE Linux Enterprise Server 11 SP1  (x86_64) - Kernel \r (\l).

3 방법 3: rpm (레드햇계열)

rpm -qa *-release
실행예시 (CentOS 6.2)
[root@zetawiki ~]# rpm -qa *-release
centos-release-6-2.el6.centos.7.x86_64
실행예시 (Fedora 11 Leonidas)
[root@zetawiki ~]# rpm -qa *-release
fedora-release-11-1.noarch
실행예시 (Oracle Enterprise Linux Server 5.5)
[root@zetawiki ~]# rpm -qa *-release
enterprise-release-5-0.0.22
실행예시 (SUSE Linux Enterprise Server 11)
zetawiki:~ # rpm -qa *-release
sles-release-11.1-1.152
lsb-release-2.0-1.2.18



[제타위키내용 퍼왔습니다]

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

-- 하드디스크를 털다보니 예전에 공부할때 썻던게 보이네요..
-- 그냥 가져다 붙여놓은것인지.. 편집을한것인지.. 원작자는 모릅니다..ㅡㅜ
-- 어째튼 vi 때문에 고민하시는 분들께는 도움이될지도 모른다는생각에 공개합니다.
-- 글을올리고나니 쫌 깨지는부분이 있어서 txt 파일로도 첨부합니다.(훨씬깨끗.ㅡㅡ)



vi 에디터  

             1 Cursor 위치를 변경하는 명령들 

             2 vi 명령들 

             3 자세한 정보를 가져 오려면... 

              

  명령을 잘 활용하는 방법은 'man' 명령을 이용하는 것입니다. 

  UNIX 명령에 좀 익숙 하신분들은 'man' 명령을 활용 하십시오. 

  

1. 

                       vi Cursor Positioning  

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

    :1G (go                                                            : 

    :                      /\  ^b (back                                : 

    :                      ||                    /\   ^u (up           : 

    |----------------------||--------------------||--------------------| 

    |H (home                                                           | 

    |                               k                   O (open        | 

    |I            i (insert        /\    a (append     P (put        A | 

    |                              |                                   | 

    |O <--------- h <-------  you are here  -------> l -------------->$| 

    |                              |                                   | 

    |M (middle     (backspace      \/    (space bar    p(put           | 

    |                               j                   o (open        | 

    |             Y (yank                         /string              | 

    |                                             n repeat last search | 

    |L (last                                      . repeat last command| 

    |----------------------||--------------------||--------------------| 

    :                      ||                    \/   ^d (down         : 

    :                      \/  ^f (forward                             : 

    :\$G (go                                                           : 

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - " 

 

 

2. vi 명령들  

                  1 Cursor를 옮기는 여러가지 방법 

                  2 화면을 옮기는 여러가지 방법 

                  3 한 화면 안에서 cursor를 옮기는 방법 

                  4 한 line 안에서 cursor를 옮기는 방법 

                  5 검색  

                  6 vi를 빠져나가는 방법  

                  7 삽입 mode  

                  8 Yanking : (Copying 

                  9 Deleting  

                 10 Putting  

                 11 Interactive edit : (search and replace 

                 12 Global 명령 

                 13 Reading in files  

                 14 여러 화일의 edit 

                 15 Miscellancenous commands  

 

1 Cursor를 옮기는 여러가지 방법  

                                       k(- 

                                        /\  

                                        || 

                        h(bs    <-----       ----->   l(sp 

                                        || 

                                        \/ 

                                       j(+ 

        h,j,k 와 i 를 이용하영 간단히 키보를 누르면 cursor의 위치가 변  

        경됩니다. 

        (에 있는 키를 선택하여도 됩니다. 

         bs : BackSpace                       sp : SPace bar " 

 

2 화면을 옮기는 여러가지 방법  

                  ^f  -  (FORWARD 화면을 one page 앞으로 옮김 

                  ^b  -  (BACKWARD 화면을 one page 뒤으로 옮김 

                  ^d  -  (DOWN 화면을 반 page 앞으로 옮김 

                  ^u  -  (UP 화면을 반 page 뒤으로 옮김 

              ^  는 키보드의 ctrl 를 나타내는 것입니다." 

 

3 한 화면 안에서 cursor를 옮기는 방법  

             H  -  HOME, 한 화면의 top line으로 옮긴다. 

             M  -  MIDDLE, 한 화면의 중간으로 옮긴다. 

             L  -  LAST, 한 화면의 마지막  line으로옮긴다. 

             G  -  GOTO,  화일의 마지막  line으로 옮긴다. 

             nG -  GOTO nth line the file (or :n 

             ^G -  GIVES file status  

              ^  는 키보드의 를 나타내는 것입니다." 

 

4 한 line 안에서 cursor를 옮기는 방법  

                      w  -  WORD, 한단어 앞으로 

                      b  -  BACKWARD, 한단어  뒤로 

                      e  -  END, 현재 cursor가 위치한 맨 뒤로 

                      o  -  zero, line의 맨 앞으로 (or ^ 

                      $  -  end, line의 맨뒤로" 

  

5 검색  

        /pattern -  scan (/ 'pattern'이라는글자를 현재 cursor가 

                    위치한 곳의 다음 단어를 검색 

        ?pattern -  scan (? 'pattern'이라는 글자를 현재 cursor가 

                    위치한 곳의 앞 단어를 검색 

        n     -  앞쪽에서 입력했었던 문자 'pattern' 의 다음단어를 검색 

        N     -  앞쪽에서 입력했었던 문자 'pattern' 의 다음 앞 단어를  

                  검색" 

 

6 vi를 빠져나가는 방법  

           :q!  -  화일의 내용을 저장하지 않고 exit 

           :w   -  WRITE, vi를 빠져나가지 않으면서 내용을 저장 

           :wq  -  WRITE and QUIT, vi를 빠져나가면서  내용을 저장 

           ZZ   -  :wq의 명령과 같다." 

  

7 삽입 mode  

             i   -  INSERT, cursor 위치 부터 문자 삽입 

             I   -  INSERT, line의 맨 앞부터 문자 삽입 

             a   -  APPEND, cursor 다음 위치 부터 문자 삽입 

             A   -  APPEND, cursor 위치한 line의 끝부터 문자 삽입 

             o   -  OPEN line, 현재의 line 다음에 line 삽입 

             O   -  OPEN line, 현재의 line 앞에 line 삽입 

             r   -  REPLACE, 한 문자만을 대치 (does not require ESC 

             R   -  REPLACE, ESC 키가 입력될때 까지 대치  

             cw  -  CHANGE word, cursor가 위치한 곳의 단어 끝까지 대치 

                    (cnw - change n number of words 

             C   -  CHANGE, cursor가 위치한 곳에서 line 끝까지 대치 

             u   -  UNDOES, 마지막 명령의 취소 

             U   -  UNDOES, line전체를 원 상태로 복구 

Note :   INSERT mode 를 만든는 모든 문자(i, a, o,r, c, s <대문자 포 

         함>를 사용하는 경우 insert mode에서 입력 한 내용을  취소하고 

         자 하면, ESC 를 누르고 undo를 수행하는 u를 입력하면 된다. 

Note :  ESC (escape key 는 삽입(insert를 중지 시키고 명령어 mode로   

        돌아가는 키이다." 

 

8 Yanking : (Copying  

        Y  -  YANKS (copies line을 사용자가 보이지 않는 buffer에 저장 

        yy -  YANKS (copies line을 사용자가 보이지 않는 buffer에 저장 

        nY -  YANKS n , n line을 사용자가 보이지 않는 buffer에 저장" 

 

9 Deleting  

        x   -  deletes, 문자 하나를 삭제 (also 'd sp' 

        dw  - DELETES words, 문자 하나를 삭제  

        D   -  DELETES, cursor가 있는 곳에서 부터 line끝 까지 삭제  

        dd  -  DELETES lines, line하나를 삭제 하고 보이지 않는 buffer 

               에 저장 

        ndd -  DELETES n, n line을 삭제 하고 보이지 않는 buffer에 저장 

               (i.e., 10dd deletes 10 lines" 

 

10 Putting  

        p  -  PUTS, cursor가 위치한 다음 line에 보이지 않는 buffer의 

              내용을 삽입 

        P  -  PUTS, cursor가 위치한 앞 line에 보이지 않는 buffer의 

              내용을 삽입 

        xp -  cursor 가 위치한 문자와 다음 문자를 교환" 

 

11 Interactive edit : (search and replace  

        /pattern -  find, pattern이라는 문자를 검색 

        cw       -  change word, 단어를 대치 (cw. dw, r, s, etc. 

        n        -  find, 앞에서 검색했던 'pattern'이라는 문자를 검색 

                    하는 반복 명령 

        N        -  find, 앞에서 검색했던 'pattern'이라는 문자를 역순 

                    으로 검색 하는 반복 명령" 

 

12 Global 명령  

                 Global replacement  

                :1,\$s/string1/string2/g 

                1 line부터 끝까지 string1 를 string2 로 대치 

        e.g.,   :1,\$s/sun/SUN/ 

                      Global delete  

                :g/pattern/d 

                1 line부터 끝까지 pattern 을 제거 

        e.g.,   :g/###/d (to delete lines inserted by cc file.c | &  

                 error-v" 

 

13 Reading in files  

        :r  file2 - cursor가 위치한 다음 line에 file2를 삽입" 

 

14 여러 화일의 edit  

        :w      -  다른 화일을 읽기전에 현재의 화일을 저장 (file1 

        :e file2  -  두번째 file을 edit하기 위해 load (file2 

        :w      -  두번째 화일을 저장 (file2 

        :e #    - original file 을 수정하기 위해 load (file1 

        example:w              /* file1을 빠져 나가기전에 저장*/ 

                :e file2        /* file2 load   */ 

                        \"x4Y   /* buffer 'x'에 file2의 top 4 line을  

                                   저장 */ 

                :e #            /* file1 을 load (no changes */ 

                        \"xP    /* buffer 'x'에 저장 되어 있는 내용을  

                                   put */" 

 

15 Miscellancenous commands  

        :! cmd  -  editor안에서 shell command를 수행 하고자 할때 

        ~       -  (tilde or 'wavy', 대문자를 소문자로 소문자를 대문자 

                    로 교환 

        %       -  한 line안에서 (,,{,},[,]를 검색 

        mx      -  문자 x에 현재 위치를 표시 

        d'x     -  문자 x에 표시된 위치 부터 현재 cursor 위치 까지 삭 

                    제 

        ^V      -  allows for insertion of control characters (e.g.,  

                   ^L 

        ?string -  scan (/ backward for 'pattern' 

        :n,m w file -  n line에서 m line까지 내용을  file 이라는 이름   

                       으록 (e.g., 15,25 w file 

        J       -  JOINS, cusor가 있는 line과 다음 line을 join  

        :set ai -  editor 가 자동적으로 insert tabs을 삽입 

        :set list -  special characters 를 보여줌 

                     (i.e., non-printable characters 

        :set nows -  stop wraparound search 

        :set ts=n -  set tab stops to be other than the default (8 

        :set wm=n -  set wrap margin (automatic carriage return insert  

                     at n" 



블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

Linux iptabes 설정

 

 

초기 세팅시 iptable 명령어 이용보다는 

/etc/sysconfig/iptables 파일을 직접 편집하여 설정 하는게 편함

 

 

 

 

#Generated by iptables-save v1.4.7 on Mon Jun  9 16:13:55 2014

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT

-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j DROP

-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j DROP

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j DROP

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

COMMIT

# Completed on Mon Jun  9 16:13:55 2014

 

필요한 포트를 ACCEPT 하거나 DROP 함.

 

설정변경 후

 

/etc/init.d/iptables restart

 

명령을 이용하여 서비스 재시작하여 적용

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

shell Scaript 주요 비교구문

 

 

 

Linux 나 Unix 계열의 OS 에서 쉘 스크립트(shell script)를 생성할 경우 if 문이나 for문 , while 문등의 제어문에서

여러가지의 조건문을 사용할 필요가 있게 된다.

 

이때 참고할만한 몇가지 조건식을 나열함.

 

[문자열 비교]

 

$str1 = $str2  : 양쪽이 같으면 true

$str1 != $str2 : 양쪽이 다르면 true

-n $str : 문자열 길이가 0이 아니면 true

-z $str : 문자열 길이가 0 이면 true

$str1 = "a" -a $str2 = "a" : 양쪽 조건이 전부 true 이면 true (AND)

$str1 = "a" -o $str2 = "a" : 양쪽 조건중에 하나 이상 true 이면 true (OR)

 

[산술 비교]

 

$a -eq $b : 양쪽이 같으면 true

$a -ne $b : 양쪽이 다르면 true

$a -gt $b : $a 가 크다면 true

$a -ge $b : $a 가 크거나 같으면 true

$a -lt $b : $a 가 작으면 true

$a -le $b : $a 가 작거나 같으면 true

 

[파일 비교]

 

-e $file : 파일이 존재하면 true

-d $file : $file 이 디렉토리이면 true

-r $file : 파일에 대한 읽기 권한이 있으면 true

-w $file : 파일에 대한 쓰기 권한이 있으면 true

-x $file : 파일에 대한 실행 권한이 있으면 true

$file1 -nt $file2 : $file1 이 $file2 보다 최근 파일이면 true

$file1 -ot $file2 : $file2 가 $file1 보다 최근 파일이면 true

 

*** 조건식을 사용할때는 스페이스바 한칸씩 띄워야 함.

 

 

 

 

 

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

tar 명령의 활용 - 디렉토리 목록만 묶기

 

 

 

Linux 의 명령어 중 파일이나 디렉토리 구조를 묶어주는 tar 라는 명령어가 있습니다.

 

기본적인 문법은

 

 tar [OPTION...] [FILE]...

 

형태이며,  보통은 z 옵션과 함께하여 gzip + tar 로 압축을 합니다.

 

기본 명령은 아래와 같습니다.

 

tar cvzf test.tgz test

 

test 라는 폴더를 test.tgz 로 압축하여 묶는다는 뜻이죠.

 

오늘 알려드릴 팁은  이때,  test 밑의 하위 디렉토리 구조만 (파일은 빼고) 묶는 방법입니다.

 

tar cvzf test.tgz --exclude=*.* test

 

--exclude  라는 옵션을 이용한 건데요,  --exclude=파일명  이런식으로 옵션을 주게되면,

 

해당 파일은 제외되고 압축이 되어지는 것입니다.

 

이를 이용해서 *.* 이라고 넣어주면 확장자를 가지는 파일들은 모두 제외가 되어지기 때문에..

 

폴더만 압축이 되어지는 것입니다.

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,