728x90

■ 파일시스템에 대하여
1) 유닉스는 모든 것이 파일로 구성되어 있다고 해도 과언이 아닙니다. 심지어 프로세스,메모리 등의 장치도
/dev/proc1 등의 파일로 보입니다.
2) 파일시스템은 디스크를 분할하여 사용하는 단위입니다. 마치 DOS나 윈도에서 c:, d:를 나누어 놓고 사용하듯이
논리적으로 디스크를 분할해 놓은 것으로 봐도 될 듯 합니다.
3) /home라는 파일시스템이 있더라도 그 하위에 /home/data 라는이름으로 파일시스템을 마운트할 수 있습니다.
그리고 각각은  서로 독립적입니다.
4) 내가 어떤파일을 /home/acecms/somefile.dat 만들었는데 이파일의 크기가 무쟈게 크답니다. 그래서 /home라는
파일시스템을 꽉 채웠다면 어떻게 될까요? 그 상위인 /(루트)를 쓸까요? 아님 /tmp (템프)를 쓸까요?
■ 파일시스템의 마운트상태와 사용량 알아보기 df
1) 파일시스템이 생성만 되고 마운트되지 않으면 사용할 수 없습니다. 마운트와 사용량을 보는 명령어는 df 입니다.
$ df -k 이렇게 하면 현재 마운트된 파일시스템과 그 사용량을 알 수 있습니다. (-k는 kilobyte로 보자는 옵션)
(결과)
파일시스템           K바이트    사용    가용   용량    설치지점
/dev/dsk/c0t0d0s0    4129940 3403813  684828    84%    /
swap                 2719896       0 2719896     0%    /tmp
/dev/dsk/c0t0d0s4    4129940  355938 3732703     9%    /home
/dev/dsk/c0t1d0s0    5162118 2616614 2493883    52%    /oracle/app/oracle
■ 디렉토리별 사용량 알아보기 du (disk usage)
1) 하위 디렉토리의 사용량까지 합산하여 볼 수 있는 명령어 입니다.
$ du -ks 는 현재디렉토리 이하의 모든 파일의 크기를 합산하여 k단위로 나타내 줍니다. (결과는 한줄)
$ du -ks * 이렇게 하면 현재디렉토리와 그 이하의 합산읍 보여 줍니다. (결과갯수는 ls -l 과 동일, 값은 다름)
2) 이것은 마치 윈도에서 디렉토리별 속성을 보면 사용량을 보여주듯 아주 유용하게 사용 할 수 있습니다
■ 사용예
1) 첫번째 ■ 의 4)번에 대한 해답은 파일시스템 풀로 파일을 생성하던 작업이 죽어버릴 겁니다. 즉, 결코 다른
파일시스템에 쓰지 않습니다. 파일시스템 풀은 작업자에게 아주 곤란을 발생시킵니다. 그래서 시스템관리자나
사용자는 수시로 파일시스템의 상태를 체크해야만 합니다.
2) 어느날 보니 특정 파일시스템이 100% 풀상태입니다. 어떻게 할까요? (여기서는 /home 이라고 하자구요)
$ df -k 해서 상태를 확인하고 full인 디렉토리로 옮겨간후
$ cd /home 거기서  $ du -ks * 이렇게 치면
3162    acecms
351511  acekhs
7       acemmh
3       acepch
1       aceyjk
1181    dev
위와같이 나타납니다. 이 중에서 가장 많이 쓰고있는 디렉토리 acekhs를 찾고 거기서 또 $ du -ks *
이렇게 해서 추적해 나가면서 필요없는 파일을 지워주면 됩니다.
(주의 : 파일명이 .(dot)으로 시작하는 파일은 추적하지 않는다)

728x90

'*nix' 카테고리의 다른 글

Korn Shell Commands  (0) 2011.10.23
dummy file 생성방법  (0) 2011.03.11
[linux] 메모리 상태 체크 (free)  (0) 2011.03.11
[AIX] errpt 시 보여지는 hdisk에러 문의  (0) 2011.03.11
[AIX] errpt 시스템 에러로그 - dump  (0) 2011.03.11
728x90

 TotalUsedFreeSharedBuffersCached
Memory2,056,9721,948,088108,8840211,0761,589,068
-/+ buffers/cache 147,9441,909,028   
Swap1,052,2164,0121,048,204   


Free+Buffers+Cached : 1,909,028

Used + Free : 2,056,972


위는 리눅스에서 free 명령어로 본 메모리 사용현황입니다. 사용자 입장에서 현재 사용가능한 메모리 는 Free(108,884) 가 아닌 Free+Buffers+Cached ( 1,909,028) 입니다. 그럼 실제로 사용하고 있는 메모리는 두번째 항목의 Used 값인 147,944 입니다.


여기서 Memory 행의 Used Used 는 리눅스 OS 입장에서 사용하고 있는 메모리 값입니다.  이와 같이 사용자에게 혼선을 주게 되는 이유가 Buffers+Cached 에 있는데요. 리눅스 OS는 메모리의 효율적인 운영을 위하여 전체 메모리에서 미리 Buffers+Cached 값을 자동으로 할당해 놓습니다. Application에서 메모리가 필요하게 될 경우에 Cached 에 할당한 메모리를 자동으로 반환하여 줍니다.


경우는 총 메모리 2G가 중에서 약 144M를 사용하고 있고, 리눅스 OS가 1,8G의 버퍼 캐쉬를 할당하여 사용하고 있는 중이군요.



http://sangmo.tistory.com/50

http://tunelinux.pe.kr/tune/tunning-pse/pse-01.html


728x90
728x90

errpt 에 주기적으로 permanent - h/w 가 발생하면 교체해야 합니다. 

아래 내용으로 봐서는... 
bad block error 가 늘어나면 나중에는 디스크가 서서히 깨짐니다... 

체크사항) 
1. hdisk2 mirror 가 되있는지 확인. 
mirror 가 되있다면 hdisk2 을 포함한 volume group 을 확인한후 
# lsvg -p vg_name => hdisk2 가 missing or active 인지 확인 
2. # lspv hdisk2 => stale partitions 이 있는지 확인 
# lslv -p hdisk2 => stale 확인 





▤정은미님이 작성하신 내용입니다. 


errpt 시아래와 같은 메세지가 뜹니다. 
처음발생해서 지금까지 발생한 에러 입니다. 
h/w 적인 permanent 한 에러로 disk 교체를 권고하던데요. 
꼭 교체해야만 하는건지.. 
이에 대한 좀더 상세한 자료는 없을지요.. 


1F0B7B49 0319225706 P S SYSPROC 소프트웨어 프로그램의 비정상적인 종료 
80D3764C 0318233806 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0318233806 P H LVDD LVM에 의해 I/O 오류 발견 
21F54B38 0318233806 P H hdisk2 디스크 작동 오류 
80D3764C 0318232906 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0318232906 P H LVDD LVM에 의해 I/O 오류 발견 
21F54B38 0318232906 P H hdisk2 디스크 작동 오류 
80D3764C 0318205306 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0318205306 P H LVDD LVM에 의해 I/O 오류 발견 
21F54B38 0318205306 P H hdisk2 디스크 작동 오류 
80D3764C 0318195306 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0318195306 P H LVDD LVM에 의해 I/O 오류 발견 
1581762B 0318195306 T H hdisk2 디스크 작동 오류 
1F0B7B49 0318090206 P S SYSPROC 소프트웨어 프로그램의 비정상적인 종료 
1F0B7B49 0317101506 P S SYSPROC 소프트웨어 프로그램의 비정상적인 종료 
80D3764C 0215130506 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0215130506 P H LVDD LVM에 의해 I/O 오류 발견 
1581762B 0215130506 T H hdisk2 디스크 작동 오류 
80D3764C 0215130406 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0215130406 P H LVDD LVM에 의해 I/O 오류 발견 
1581762B 0215130406 T H hdisk2 디스크 작동 오류 
80D3764C 0215130306 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0215130306 P H LVDD LVM에 의해 I/O 오류 발견 
1581762B 0215130306 T H hdisk2 디스크 작동 오류 
80D3764C 0215130106 U H LVDD PV는 새로운 불량 블록을 재배치하지 않음 
613E5F38 0215130106 P H LVDD LVM에 의해 I/O 오류 발견 
21F54B38 0215130106 P H hdisk2 디스크 작동 오류


728x90
728x90

1. Error Report 확인

SERVER:>errpt
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
E87EF1BE   0228150008 P O dumpcheck      The largest dump device is too small.
덤프디바이스 크기가 작음을 알수 있다.

2. Error Report 세부 내용 확인하기
SERVER:>errpt -aj E87EF1BE | more
---------------------------------------------------------------------------
LABEL:          DMPCHK_TOOSMALL
IDENTIFIER:     E87EF1BE

Date/Time:       Thu Feb 28 15:00:00 KORST 2008
Sequence Number: 908
Machine Id:      000D0D30D600
Node Id:         SERVER
Class:           O
Type:            PEND
Resource Name:   dumpcheck      

Description
The largest dump device is too small.

Probable Causes
Neither dump device is large enough to accommodate a system dump at this time.

        Recommended Actions
        Increase the size of one or both dump devices.

Detail Data
Largest dump device
lg_dumplv                                                                                                                       
Largest dump device size in kb
     2097152                            : 현재 덤프 LV Size
Current estimated dump size in kb
     2419712                            : 덤프 발생시 예상 SIZE
---------------------------------------------------------------------------

덤프 발생시 예상 크기가 현재 정의된 덤프LV 크기보다 크므로 시스템에서 에러레포트를 뿌려준다.
(AIX 4.3.3 에서는 주기적으로 확인하여 LV를 확장시켜주어야 한다.)

 

3. 지정되어 있는 덤프 장치 확인하기
SERVER:>sysdumpdev -l 
primary              /dev/lg_dumplv
secondary            /dev/sysdumpnull
copy directory       /var/adm/ras
forced copy flag     TRUE
always allow dump    TRUE
dump compression     OFF

 

4. 덤프 데이터의 크기 확인하기
SERVER:>sysdumpdev -e
0453-041 Estimated dump size in bytes: 2477785088


5. 현재 덤프장치의 크기 확인하기
SERVER:>lsvg -l rootvg
rootvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
hd5                 boot       1     2     2    closed/syncd  N/A
hd6                 paging     32    64    2    open/syncd    N/A
hd8                 jfs2log    1     2     2    open/syncd    N/A
hd4                 jfs2       16    32    2    open/syncd    /
hd2                 jfs2       16    32    2    open/syncd    /usr
hd9var              jfs2       8     16    2    open/syncd    /var
hd3                 jfs2       20    40    2    open/syncd    /tmp
hd1                 jfs2       8     16    2    open/syncd    /home
hd10opt             jfs2       8     16    2    open/syncd    /opt
lg_dumplv           sysdump    8     8     1    open/syncd    N/A        <---- 덤프장치

 

SERVER:/>lsvg rootvg
VOLUME GROUP:       rootvg                   VG IDENTIFIER:  000d0d840000d60000000112030c1de1
VG STATE:           active                   PP SIZE:        256 megabyte(s)  <--- Size 확인
VG PERMISSION:      read/write               TOTAL PPs:      1092 (279552 megabytes)
MAX LVs:            256                      FREE PPs:       861 (220416 megabytes)
LVs:                10                       USED PPs:       231 (59136 megabytes)
OPEN LVs:           9                        QUORUM:         1
TOTAL PVs:          2                        VG DESCRIPTORS: 3
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         2                        AUTO on:        no
MAX PPs per VG:     32512                                     
MAX PPs per PV:     1016                     MAX PVs:        32
LTG size (Dynamic): 256 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable


rootvg의 세부 정보를 가지고 계산을 해보면 덤프장치의 PPs 개수가 8개이고 PP Size가 256MB 이므로
8 * 256MB = 2G = 2 * 1024 * 1024 = 2097152 Kb (위 2항목의 에러레포트에 보면 나오는 수치^^)

계산은 bc를 사용하면 편리 ~
SERVER:/> bc
256 * 8
2048
quit
SERVER:/> 

6. 덤프 데이터의 크기로 필요한 PP 계산하기
2항목에서 예상 덤프데이터 크기 2419712KB를 알고 있으므로
2419712/1024/256 = 9 (Size를 MB로 변환 후 PP size 256으로 나누어 줌)
예상 덤프데이터를 받아내기 위해서는 9개 이상의 PP 가 필요함을 알 수 있다.
현재는 8개이고 최소 9개 이상의 PP가 필요하므로 LV에 1개 이상의 PP 만을 증가시켜 주면 된다.

 

7. 덤프장치 크기 변경하기

SERVER:/>smitty lv
   -->  Set Characteristic of a Logical Volume             
   -->  Increase the Size of a Logical Volume
   --> * LOGICAL VOLUME name                                [lg_dumplv]
   --> * Number of ADDITIONAL logical partitions            [3] <-- 1개 이상의 PP를 입력해준다.

 

8. 변경된 정보 확인하기
SERVER:>lsvg -l rootvg
rootvg:
LV NAME             TYPE       LPs   PPs   PVs  LV STATE      MOUNT POINT
hd5                 boot       1     2     2    closed/syncd  N/A
hd6                 paging     32    64    2    open/syncd    N/A
hd8                 jfs2log    1     2     2    open/syncd    N/A
hd4                 jfs2       16    32    2    open/syncd    /
hd2                 jfs2       16    32    2    open/syncd    /usr
hd9var              jfs2       8     16    2    open/syncd    /var
hd3                 jfs2       20    40    2    open/syncd    /tmp
hd1                 jfs2       8     16    2    open/syncd    /home
hd10opt             jfs2       8     16    2    open/syncd    /opt
lg_dumplv           sysdump    11    11    1    open/syncd    N/A   <---- 8개에서 3개 늘어난 11임을 확인할수 있다.


http://blog.naver.com/PostView.nhn?blogId=darkturtle&logNo=50028139549&redirect=Dlog&widgetTypeCall=true

728x90
728x90

svmon 명령은 메모리의 현재 상태에 관한 정보를 보여줍니다.

표시된 정보는 메모리의 실제 스냅샵을 구성하지 않는데,

그 이유는 svmon 명령이 인터럽트가 가능한 사용자 레벨에서 수행되기 때문입니다.

 

세그먼트는 페이지 세트로, 메모리 소비를 보고하기 위해 사용되는 기본 오브젝트입니다.

그러므로, svmon에 의해 보고되는 통계는 페이지 수 측면에서 표시됩니다.

 

1 페이지는 가상 메모리의 4K 블록이고, 1 프레임은 실제 메모리의 4K 블록입니다.

달리 명시하지 않으면, 모든 통계는 4096 바이트 메모리 페이지 단위입니다.

메모리 소비는 inuse, free, pin, virtual 및 paging space 계수기를 사용하여 보고됩니다.
 
 - inuse 계수기 : 사용된 프레임 수

 - free : 모든 메모리 풀에서 사용 가능한 프레임 수

 - pin : 고정된 프레임 수, 즉 스왑될 수 없는 프레임 수

 - virtual : 시스템 가상공간에 할당된 페이지 수

 - paging space : 페이징 공간에서 예약되거나 사용된 페이지 수

 

한 세그먼트를 여러 개의 프로세스에서 사용할 수 있습니다.

그러한 세그먼트에 속한 각 페이지는 해당 세그먼트를 사용하는 각 프로세스에 대해서

inuse, pin, virtual 또는 pgspace 필드에서 설명됩니다.

 

그러므로, 활성화된 모든 프로세스에 걸친 inuse, pin, virtual 및 pgspace 필드의 합계가

메모리나 페이징 공간의 총 페이지 수를 초과할 수도 있습니다.

 

VMM은 통계 목적으로만 virtual 페이지 계수기를 관리합니다.

즉, 항상 최신 데이터가 아니며 값도 해당되는 inuse 계수기보다 작을 수 있습니다.

 

세그먼트는 다음의 5가지 유형 중 하나에 속합니다.

 

persistent  - 파일 및 디렉토리 조작에 사용되는 세그먼트

working    - 프로세스 및 공유 메모리 세그먼트의 데이터 영역을 구현하기 위해 사용되는 세그먼트

client   - NFS와 CD-ROM 파일시스템과 같은 일부 가상 파일 시스템을 구현하기 위해 사용

mapping  - 메모리에서 파일 맵핑을 구현하기 위해 사용되는 세그먼트

real memory mapping  - 가상 주소 공간으로부터 10 공간에 액세스하기 위해 사용되는 세그먼트

 

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

시스템 전체 메모리 사용량 통계 확인

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

# svmon -G

                     size      inuse       free        pin    virtual
memory         32760      22182      10578       6035      25932
pg space       65536       8061

                 work       pers       clnt      lpage
pin             6035          0          0          0
in use        17057       5125        0          0

 

간단히 설명하면, 전체 메모리 사이즈는 32760*4096byte/1024/1024 = 127MB.

Free Memory는 10578*4096/1024/1024 = 41MB

 

4096byte를 곱한 이유는 svmon에서 나오는 결과는 전부 페이지단위(1page=4K)이므로....

 

(설명)

memory - 다음을 포함해 실제 메모리의 사용을 설명하는 통계를 지정.

 - size  실제 메모리 프레임의 수(실제 메모리 크기) 
 - inuse   페이지를 포함되는 프레임의 수
 - free  모든 메모리 풀 중 사용 가능 프레임의 수
 - pin  고정된 페이지를 포함하는 프레임의 수
 - virtual  시스템 가상 영역내에 할당된 페이지 수
 
in use - 다음을 포함해 사용중 인 실제 메모리의 서브세트에 대한 통계

 - work  작업 세그먼트 페이지를 포함하는 프레임 수
 - pers  영구 세그먼트 페이지를 포함하는 프레임 수
 - clnt   클라이언트 세그먼트 페이지를 포함하는 프레임 수

 

pin - 다음을 포함해 고정된 페이지가 있는 실제 메모리의 서브세트에 대한 통계 열거.

 - work  작업 세그먼트 페이지를 포함하는 프레임 수
 - pers   영구 세그먼트 페이지를 포함하는 프레임 수
 - clnt   클라이언트 세그먼트 페이지를 포함하는 프레임 수

 

pg space - 페이지공간의 사용을 설명하는 통계를 나타냅니다

 - size 페이징 공간의 크기
 - inuse 사용 중인 페이징 공간 페이지 수

 

-----------------------------
유저별 메모리 사용량 통계 확인
-----------------------------


 # svmon -U root -d   ; root 사용자가 사용하는 메모리 내역
===============================================================================
User                                 Inuse      Pin     Pgsp  Virtual  LPageCap
root                                  10556     2000     5555    16182         Y

-------------------------------------------------------------------------------
     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd LPage
    3922 dtgreet              5045     1823     1705     7781      N     N     N
    7020 rpc.mountd        5032     1826     1595     7629      N     Y     N
    8514 hostmibd           5010     1823     1586     7281      N     N     N
    4518 X                      4981     1825     1938     7838      N     N     N
       1 init                     4979     1823     1579     7576      N     N     N
   13420 getty                4963     1823     1586     7245      N     N     N
    7482 portmap           4877     1823     1614     7513      N     N     N
   13158 getty               4858     1823     1674     7239      N     N     N
    2524 telnetd             4741     1823     1574     7292      N     N     N
    3600 telnetd             4741     1823     1574     7292      N     N     N
   15494 i4lmd              4729     1823     1586     7238      N     N     N
   15752 i4lmd              4722     1823     1586     7221      N     N     N
    7998 snmpd            4717     1823     1616     7339      N     N     N
   12412 i4lmd              4712     1823     1583     7213      N     N     N
   16512 i4lmd              4710     1823     1597     7234      N     N     N
   14972 i4llmd             4705     1823     1627     7217      N     N     N
   14466 i4llmd             4680     1826     1686     7284      N     Y     N
   17386 -ksh               4671     1823     1574     7214      N     N     N
   18012 -ksh               4670     1823     1574     7214      N     N     N
    8256 dpid2               4647     1823     1576     7254      N     N     N
    4756 svmon             4631     1823     1574     7211      N     N     N
    7740 inetd                4628     1823     1574     7225      N     N     N
    9834 cron                 4626     1823     1594     7227      N     N     N
    5166 errdemon          4624     1823     1661     7250      N     N     N
   16256 IBM.AuditRMd   4599     1830     2010     7675      N     Y     N
    5704 prngd               4598     1823     1574     7193      N     N     N
   15998 IBM.ERrmd      4592     1830     2114     7785      N     Y     N
   14212 rmcd               4586     1826     2112     7733      N     Y     N
    7226 syslogd           4573     1823     1608     7205      N     N     N
    5422 srcmstr            4572     1823     1656     7229      N     N     N
    2704 dtlogin <:0>      4567     1823     1602     7202      N     N     N
  15232 IBM.CSMAgentR 4563     1832     2125     7775      N     Y     N
   14712 ctcasd              4562     1830     1968     7566      N     Y     N
    9550 biod                  4555     1823     1574     7160      N     N     N
   13938 diagd                4546     1823     1627     7188      N     N     N
    6268 nfsd                  4542     1823     1597     7175      N     N     N
   11356 qdaemon          4537     1823     1608     7173      N     N     N
   10586 rpc.lockd          4527     1823     1635     7199      N     N     N
    3412 syncd               4525     1823     1603     7159      N     N     N
    4246 dtlogin              4520     1823     1601     7152      N     N     N
   10846 uprintfd            4517     1823     1580     7131      N     N     N
   11618 writesrv           4516     1823     1638     7191      N     N     N
   11094 rpc.lockd         2907     1832     1561     4326      N     Y     N
   10066 nfsd                2906     1832     1561     4326      N     Y     N
    1548 gil                   2898     1827     1563     4320      N     Y     N
    9030 kbiod               2888     1824     1559     4306      N     Y     N
    6726 j2pg                2887     1828     1572     4318      N     Y     N
    1032 xmgc              2884     1823     1559     4302      N     N     N
    1290 netm               2884     1823     1559     4302      N     N     N
    8774 rtcmd              2884     1823     1559     4302      N     N     N
     774 reaper             2884     1823     1561     4302      N     N     N
    3102 lvmbb              2882     1823     1561     4302      N     N     N
     516 wait                 2882     1823     1559     4300      N     N     N
    1806 wlmsched        2882     1823     1561     4302      N     N     N
       0 swapper             4           2         0         4         N     N     N

...............................................................................
SYSTEM segments         Inuse      Pin     Pgsp  Virtual
                                      3008     1888     1631     4487

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual
       0         0 work kernel seg                     -      2880   1821 1559  4298 
     8c5         - work                                    -     23     9     1     23 
    16aa         - work                                   -     22     9    1    23 
    2792         - work                                   -     11     9   18    29 
    1a0f         - work                                    -     11     7   12    23 
    2191         - work                                   -     11     7   12    23 
    3f3e         - work                                   -     11     7   15    22 
    1eae         - work                                  -     10     3    0    10 
    3619         - work                                   -      9     3    3    10 
    2752         - work                                   -      7     3    8    11 
     e26         - work                                   -      5     5    1     6 
    1a2d         - work                                   -      4     4    1     5 
    3c9f         - work                                    -      4     1    0     4

...............................................................................
EXCLUSIVE segments     Inuse      Pin     Pgsp  Virtual
                                      5915      112     3909     8875

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual
     aa4         2 work process private              -    396     2   15   410 
    182c         2 work process private              -    374     2    4   377 
    19cc         2 work process private              -    327     2  119   446 
    365b         - pers /dev/hd2:12338               -    312     0    -     - 
    3b9d         2 work process private              -    296     2  345   640 
    2473         2 work process private              -    275     2   38   313 
    ..........
    ..........(중략)

    3f9e         - pers /dev/hd9var:308              -      0     0    -     - 
    1e8e         1 pers code,/dev/hd2:10638          -      0     0    -     - 
     d67         - pers /dev/hd9var:2127             -      0     0    -     - 
    27b3         - work shmat/mmap                   -      0     0    2     2 
    2151         - pers /dev/hd9var:2115             -      0     0    -     - 
    2012         3 mmap mapped to sid 1408           -      0     0    -     - 
    1d4f         - pers /dev/hd9var:120              -      0     0    -     -

...............................................................................
SHARED segments          Inuse      Pin     Pgsp  Virtual
                                      1633        0       15     2820

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual
    2a15         d work shared library text          -   1633     0   15  2820

 

-----------------------------------
특정 명령어의 메모리 사용량 통계 확인
-----------------------------------

 # svmon -C inetd    ; inetd 데몬에 의해 사용되어지는 메모리 통계

===============================================================================
Command                         Inuse      Pin     Pgsp  Virtual
inetd                                  4628     1823     1574     7225

...............................................................................
SYSTEM segments           Inuse      Pin     Pgsp  Virtual
                                       2880     1821     1559     4298

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual
       0         0 work kernel seg                      -       2880   1821 1559   4298

...............................................................................
EXCLUSIVE segments                   Inuse      Pin     Pgsp  Virtual
                                                    115         2         0       107

    Vsid      Esid Type Description              LPage  Inuse  Pin Pgsp Virtual
    2a74         2 work process private              -      62       2      0      62 
    367a         f work shared library data          -      45       0      0      45 
    3a7c         1 pers code,/dev/hd2:10656       -       7       0      -       - 
    162e         - pers /dev/hd2:68574               -       1       0      -       -

...............................................................................
SHARED segments                      Inuse      Pin     Pgsp  Virtual
                                      1633        0       15     2820

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual
    2a15         d work shared library text          -      1633      0    15     2820


-------------------------------
프로세스 메모리 사용량 통계 확인
-------------------------------


svmon -P   ; 시스템 프로세스별 메모리 통계 확인

-------------------------------------------------------------------------------
     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd LPage
    3922 dtgreet           5045     1823     1705     7781      N     N     N

    Vsid      Esid Type Description              LPage  Inuse   Pin Pgsp Virtual
       0         0 work kernel seg                   -   2880  1821 1559  4298 
    2a15         d work shared library text          -   1633     0   15  2820 
    19cc         2 work process private              -    327     2  119   446 
    3e5d         f work shared library data          -    173     0   11   188 
    27d3         - work shmat/mmap                   -     29     0    1    29 
    2b14         1 pers code,/dev/hd2:116793         -      3     0    -     - 
    3198         - pers /dev/hd9var:2182             -      0     0    -     - 
    106a         - pers /dev/hd2:145819              -      0     0    -     - 
    186e         - pers /dev/hd2:68956               -      0     0    -     - 
    1f8f         - pers /dev/hd9var:2125             -      0     0    -     - 
......
......
......
-------------------------------------------------------------------------------
     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd LPage
       0 swapper              4        2        0        4      N     N     N

    Vsid      Esid Type   Description              LPage  Inuse   Pin Pgsp Virtual
    2412         2   work   process private              -      4     2    0     4

 

프로세스 개별확인은 # svmon -P (pid)


---------------
세그먼트 테이블
---------------
세그먼트 유형    세그먼트 사용법                             설     명
----------------------------------------------------------------------------------------
persistent        로그파일                                        로그
persistent        파일 및 디렉토리                             장치 이름: i-노드 번호
persistent       대형 파일                                        대형 파일 장치 이름: i-노드 번호
mapping         파일 맵핑                                        sid 소스 sid에 맵핑됨
working         프로세스 및 공유 메모리 세그먼트의     VSID및 ESID를 기초로 세그먼트의
                    데이타영역                                       역할에 따라 다름
client             NFS 및 CD-ROM 파일                       상 동
rmapping        IO 영역 맵핑                                     상 동


http://blog.naver.com/win2107/100010783120

728x90
728x90

커널 파라미터 설정

각각의 OS별로 검사해야 할 커널 파라미터는 다르지만 대부분 (1) 프로세스별 메모리 할당 한계값(memory allocation limit) (2) 쓰레드 관련 파라미터 (3) 공유 메모리 세그먼트 최대 크기 (4) 세마포어 관련 파라미터들의 수정이 이루어져야 한다.

메모리 할당 한계값

각 프로세스가 할당(allocation)할 수 있는 메모리 공간에 관련된 파라미터(hp의 경우 maxdsiz_64bit, dec의 경우 per-proc-address-space)의 경우 알티베이스가 운용될 수 있는 충분한 공간이 제공되어야 한다. 그렇지 않을 경우 운용 중에 실제 물리적 메모리가 충분함에도 불구하고 insufficient memory error가 발생하게 된다.

공유 메모리 세그먼트 최대 크기

일반적으로 알티베이스는 메모리 상의 공유 메모리(shared memory)에 데이터베이스를 저장하기 때문에 공유 메모리 세그먼트(공유 메모리 세그먼트)와 관련된 커널 파라미터가 적절히 수정되어야 한다. 알티베이스가 사용하는 공유 메모리 세그먼트의 크기는 알티베이스 설정에 따라서 달라진다. 영향을 미치는 파라미터는 STARTUP_SHM_CHUNK_SIZE, PERS_PAGE_CHUNK_COUNT 이 두 가지인데 앞의 파라미터 STARTUP_SHM_CHUNK_SIZE는 알티베이스 구동시 공유 메모리 세그먼트의 크기를 결정하는 파라미터로서 만약 이 파라미터보다 데이터베이스의 크기가 클 경우에는 이 파라미터를 기준으로 해서 공유 메모리 세그먼트가 분할되어져서 만들어진다. 알티베이스 운용 중에 데이터 저장 공간이 부족하여 새롭게 메모리 할당이 생겨서 공유 메모리 세그먼트가 추가되어질 경우에는 PERS_PAGE_CHUNK_COUNT 파라미터의 크기 만큼씩 공유 메모리 세그먼트가 분할되어져서 만들어진다. 결국 알티베이스 운영 중에 아무런 문제가 발생하지 않으려면 시스템에서 제공하는 공유 메모리 세그먼트의 최대 크기를 위의 파라미터에 의해서 만들어지는 공유 메모리 세그먼트보다 크게 만들어야 알티베이스 구동 시나 새로운 공유 메모리 세그먼트 할당시 문제가 발생하지 않는다. 만약 커널 파라미터가 충분히 크지 않을 경우 알티베이스 구동 시나 운용 시 shmget() system call에서 에러가 발생하게 된다.

세마포어 파라미터

세마포어 파라미터의 경우에는 클라이언트 프로그램과 알티베이스가 IPC 통신을 하기 위해서 변경이 필요하며 그 값들은 동시에 IPC 연결을 하는 세션 수와 연관이 있다.

  • HP-UX(11.00, 11i )

    HP에서는 커널 파라미터 수정을 위해서 sam이라는 유틸리티가 존재한다. 아래의 방법으로 커널 파라미터를 수정하면 되는데 반드시 시스템을 리부팅하여야 하는 점을 명심해야 한다.

    루트 계정에서 sam을 수행한 후 kernel configuration => configurable 파라미터 화면에서 아래의 커널 파라미터를 수정한다. 그리고 나서 menu 화면의 action에서 process new kernel로 반드시 커널을 재구성(rebuild)한 후 시스템을 리부팅한다.

  • Sun Solaris

    Sun Solaris의 경우 커널 파라미터를 수정하려면 /etc/system 파일을 편집한 후 시스템을 리부팅하여야 한다. 아래 priority_paging은 Sun 시스템의 파일시스템 캐시(filesystem cache)에 관련된 파라미터로서 direct I/O를 사용하지 않고 파일시스템 캐시를 이용할 경우 메모리 사용량이 높게 나오는 문제 때문에 반드시 설정되어야 한다.

  • IBM AIX

    AIX의 경우에는 공유 메모리와 세마포어 관련해서 특별히 맞추어 줄 필요는 없고 단지 사용자별 한계값(User Resource Limit, ulimit 명령어로 확인)의 값들을 바꾸어 주어야 한다. 각 사용자별 한계값을 바꾸기 전에 시스템 한계값(system level resource limit)을 우선 바꾸어야 하는데 이것은 /etc/security/limits 의 편집만으로 가능하다. 이 화일에서 default:부분의 data, rss, dsize를 각각 -1 ( unlimited)로 맞추면 된다. 그렇게 한 후 아래의 작업을 하여서 알티베이스 사용자의 사용자별 한계값을 바꿀 수 있다.

  • Digital UNIX (OSF1) (V4.0)

    Dec OS의 경우 V4.0과 V5.1에서 사용되는 파라미터의 이름은 다르지만 비슷하기 때문에 유추해서 판단하면 된다. 그리고 hp와 마찬가지로 프로세스와 IPC에 관련된 많은 파라미터들이 수정되어야 한다. Dec 파라미터는 크게 세 부분, PROC(Process ) , IPC, VM(Virtual memory )으로 나누어져 있으며 아래의 명령어로 각각의 파트에 속한 파라미터 이름과 현재 설정된 값을 확인할 수 있다.

        /sbin/sysconfig -q proc : Process resource limitation의 값 
        /sbin/sysconfig -q IPC  : IPC 파라미터의 값 
        /sbin/sysconfig -q vm  : Virtual memory 파라미터값 
        uerf -r 300 |grep -i mem : 현재 시스템의 실제 메모리 크기
                  

    Proc subsystem 관련 파라미터들은 대개 프로세스의 memory address limit에 관련된 값이므로 알티베이스와 밀접한 관계가 있다. 즉 max-per-proc-data-size의 값 이상으로 프로세스 데이터(process data) 영역을 할당받을 수 없다. 그러므로 해당 값들은 되도록 크게 설정해야 문제가 없다. (per-proc-data-size, max-per-proc-data-size, max-per-proc-address-space, per-proc-address-space)

    IPC subsystem의 경우 당연히 shm-max(최대 공유 메모리 세그먼트의 크기)는 데이터베이스 크기 및 알티베이스 프로퍼티 값과 연관지어서 크게 설정해야 하고 세마포어와 관련된 파라미터 값들도 IPC 통신을 사용할 것이라면 크게 설정해야 한다.

    VM subsystem에서 주의할 파라미터는 vm-vpagemax (contiguous virtual memory address max) 값이다. 이 값이 작을 경우 데이터베이스 생성시 insufficient memory error가 발생할 수 있으니 유의하기 바란다. (OSF1 V5.1에서는 위의 파라미터가 없어진 것 같다. )

    /etc/sysconfigtab 파일에 아래의 내용이 포함되지 않았다면 아래의 내용을 파일에 추가한 후 시스템을 리부팅하여야 한다.

    * V5.0이상에서는 아래의 파라미터 이름이 조금씩 다르지만 해당 파라미터들의 값을 똑같이 설정하면 된다.

  • Linux (RedHat 계열)

    /etc/rc.d/rc.local의 마지막 부분을 아래와 같이 편집한 후 재부팅 하면 된다.

     
        echo 2147483648 > /proc/sys/kernel/shmmax
        echo 512 32000 512 512 > /proc/sys/kernel/sem
    	      

    또는

        위의 명령어를 재부팅할 때마다 쉘에서 수행하면 된다.
    	      

    * IPC 사용에 대한 주의사항

    Linux Kernel 2.5 이하 version에서는 thread program에서 SEM_UNDO를 사용하는 semaphore operation에 문제점이 보고되어 있다.

    이러한 문제점은 알티베이스에서 다음과 같은 현상으로 나타난다.

    Client의 빈번한 연결 및 해제가 다른 cilent의 동작에 영향을 미쳐 정상동작하는 client의 접속이 끊어지는 현상이 발생할 수 있다.

728x90
728x90

다음은 nmon 툴이 실행되는 플랫폼이다.

  • AIX® 4.1.5, 4.2.0 , 4.3.2, 4.3.3 (nmon Version 9a: 본 버전은 기능적으로 안정화 되었고, 추가 개발 계획은 없다.)
  • AIX 5.1, 5.2, 5.3 (nmon Version 10: 본 버전은 SMT와 공유 CPU 마이크로 파티션을 갖춘 AIX 5.3과 POWER5™ 프로세서 기반 머신을 지원한다.)
  • Linux® SUSE SLES 9, Red Hat EL 3 and 4, Debian on pSeries® p5, OpenPower™
  • Linux SUSE, Red Hat, x86 기반 최신 배포판들 (32-bit 모드의 Intel과 AMD)
  • zSeries® 또는 메인프레임 기반 Linux SUSE와 Red Hat

nmon 툴은 6 개월 마다 업데이트 되거나, 새로운 OS가 릴리스 될 때 업데이트 된다. 이메일 리스트에 등록하여 업데이트를 받아보려면 Nigel Griffiths에게 문의하라.

nmon 아웃풋 파일을 로딩하고 수 십 개의 그래프를 자동으로 생성하는 nmon 애널라이저와 함께 사용하라. (참고자료)

머리말

nmon 툴은 AIX와 리눅스 성능 전문가들이 다음과 같은 성능 데이터의 모니터링과 분석에 사용할 수 있도록 고안된 툴이다.

  • CPU 사용
  • 메모리 사용
  • 커널 통계와 실행 큐 정보
  • 디스크 I/O 비율, 트랜스퍼, 읽기/쓰기 비율
  • 파일 시스템의 여유 공간
  • 디스크 어댑터
  • 네트워크 I/O 비율, 트랜스퍼, 읽기/쓰기 비율
  • 페이징 공간과 페이징 비율
  • CPU와 AIX 스팩
  • 탑 프로세서
  • IBM HTTP 웹 캐시(cache)
  • 사용자 정의 디스크 그룹
  • 머신 상세와 리소스
  • 비동기식 I/O -- AIX 전용
  • 워크로드 매니저(WLM) -- AIX 전용
  • IBM TotalStorage® Enterprise Storage Server® (ESS) 디스크 -- AIX 전용
  • 네트워크 파일 시스템(NFS)
  • Dynamic LPAR (DLPAR) 변경 -- AIX 또는 리눅스용 pSeries p5와 OpenPower 전용

nmon 아웃풋에서 그래프를 만들어내고, 웹 사이트에 디스플레이 될 수 있는 .gif 파일을 생성하는 새로운 툴이 포함된다.

자세한 내용은 README 파일을 참조하라.

툴의 효용성

nmon 툴은 모든 중요한 성능 튜닝 정보를 하나의 스크린에 나타내고 이를 동적으로 업데이트 한다. 이 툴은 모든 Dumb Screen, 텔넷 세션, Dial-up Line에서 작동한다. 게다가, 많은 CPU 사이클을 소비하지 않으며, 일반적으로 2% 미만이다. 새로운 머신에서는 CPU 사용도는 1% 미만이다.

데이터가 스크린에 디스플레이 되고 2초 마다 한 번씩 업데이트 된다. 하지만, 이 시간 간격을 더 길거나 짧게 쉽게 변경할 수 있다. 창을 늘리고 X Windows, VNC, PuTTY 등에 데이터를 디스플레이 하면, nmon 툴은 많은 양의 정보를 한 공간에 출력할 수 있다.

nmon 툴은 향후 분석을 위해 같은 데이터를 텍스트 파일로 캡쳐하고 그래프로 만들 수 있다.

툴 설치하기

본 툴은 독립형 바이너리 파일로서(AIX나 리눅스 버전 마다 다른 파일임), 설치에 5초 정도 소요되며, 타이핑이 빠르다면 더욱 빠르게 할 수 있다. 설치는 간단하다.

  • nmonXXX.tar.Z 파일을 머신에 복사한다. FTP를 사용하고 있다면 바이너리 모드를 사용하라. 
    주: XXX는 버전을 나타낸다.
  • uncompress nmonXX.tar.Z를 실행하여 파일 압축을 푼다.
  • tar xvf nmonXX.tar를 실행하여 파일을 추출한다.
  • README 파일을 읽는다.
  • nmon 툴을 시작하려면 nmon을 타이핑 한다.
  • 루트(root) 사용자라면 ./nmon으로 타이핑 해야 한다.

AIX 4 전용 nmon 9 사용에 대한 추가 노트

  1. 여러분이 루트 사용자이거나, 또는 (루트로서) 다음 명령어를 타이핑 하여 일반 사용자가 /dev/kmem 파일을 읽을 수 있도록 해야 한다.
    chmod ugo+r /dev/kmem

  2. 디스크 통계가 필요하다면 (루트로서) 다음을 실행한다.
    chdev -l sys0 -a iostat=true 

툴을 대화식으로 실행하는 방법

툴을 대화식으로 실행하려면, 파일의 앞부분을 읽어보라. 그런 다음, 툴을 시작하고 one-key 명령어를 사용하여 원하는 데이터를 본다. 예를 들어, CPUMemoryDisk 통계를 보려면 nmon을 시작하고 다음을 타이핑 한다.

cmd

대화식으로 실행하면서 도움말 정보 얻는 방법

h 키를 누른다.

추가 도움말 정보

추가 도움말 정보가 필요하다면 다음과 같이 한다.

  • nmon -? 명령어는 간략한 상세를 보여준다.
  • nmon -h 명령어는 전체적인 상세 내용을 보여준다.
  • README 파일을 읽는다.

향후 분석과 그래프를 위해 데이터를 파일로 캡쳐하는 방법

-f 플래그와 함께 nmon을 실행한다. nmon -h를 사용하여 상세를 볼 수 있다. 예를 들어, 30초 마다 데이터 스냅샷을 찍으면서 한 시간 동안 nmon을 실행하려면,

nmon -f -s 30 -c 120
nmon -fT -s 30 -c 120

두 번째 행은 탑 프로세스들도 캡쳐한다. 이 두 가지 모두 다음과 같은 현재 디렉토리에 아웃풋 파일을 만든다.

<hostname>_date_time.nmon

이 파일은 comma-separated values (CVS) 포맷으로 되어있으며, 스프레드시트로 직접 반입될 수 있다. Lotus® 1-2-3를 사용하고 있다면, 이 파일은 정렬되어야 한다. (Excel 버전의 nmon 애널라이저의 경우는 이렇게 할 필요가 없다.) AIX에서는 다음과 같은 예를 따른다.

sort -A mymachine_311201_1030.nmon > xxx.csv

시간을 절약할 수 있는 방법:

  • nmon 데이터 캡쳐 파일을 스프레드시트로 로딩하려면, CVS 데이터 파일(.csv)용 스프레드시트 문서를 확인한다. 많은 스프레드시트는 이를 수행하는 반입 함수를 로딩 또는 제공하는 파일들 중 하나로서 이 데이터를 허용한다. 많은 스프레드시트들은 고정된 수의 칼럼과 행을 갖고 있다. 이러한 문제를 해결하려면 최대 300 스냅샷을 수집할 것을 권한다.
  • 데이터를 파일로 캡쳐할 때, nmon은 쉘에서 연결을 해제하여, 여러분이 로그아웃을 하더라도 계속 실행되는지를 확인한다. 다시 말해서, 백그라운드에서 여전히 실행되더라도 nmon이 충돌하는 것처럼 보일 수 있다는 의미이다. 프로세스가 여전히 실행되는지를 확인하려면, 다음을 타이핑 한다.
    ps ?ef | grep nmon

  • 특정 OS에서 어떤 버전의 nmon이 실행되는지를 알고 싶다면 README 파일을 읽어보라.
  • AIX 5용 nmon Version 10은 더 이상 /dev/kmem을 사용하지 않고, 오직 공용 API만 사용한다. 따라서, /dev/kmem에 대한 권한을 변경할 필요가 없고 32-비트와 64-비트 버전의 nmon을 가질 필요가 없다.
  • AIX 5.1, 5.2, 5.3의 경우, nmon 10을 사용하라.
  • AIX의 경우, ML03에 대해서 AIX 5.1에 lslpp -Lcq bos.?p 코어 덤프를 리포트 하지 말라. WLM 통계는 AIX 5.2 ML5로 업그레이드 된 후에 소실된다. AIX 버그이기 때문이다. 이러한 문제는 nmon Version 10을 사용하여 해결한다.
  • Microsoft® Windows® Telnet을 사용하지 말고 80 x 25 캐릭터 보다 큰 윈도우를 사용하라. 많은 개발자들은 VNC와 PuTTY를 사용하여 Windows 머신에서 nmon을 디스플레이 한다.

AIX Version 10의 새로운 nmon 기능들

새로운 기능설명
Starting up올바른 nmon 버전을 시작하는 "nmon"이라고 하는 작은 쉘 스크립트가 있다. 이 스크립트와 nmon 바이너리를 $PATH에 놓고 nmon을 타이핑 한다. 이 버전은 32-비트 모드에서만 컴파일 된다. 32-비트와 64-비트 하드웨어에서 실행된다. 설치와 실행이 더욱 쉬워졌다.
N = NFSNFS는 nmon 10의 새로운 기능이다.
p = Partitions공유 CPU 파티션 정보에 관한 것이다. p5/AIX5.3을 위한 기능이다.
C = CPU32-PLUS CPU에서 최대 128 logical CPU를 갖춘 머신용이다.
c = CPUPOWER5기반 AIX 5.3을 사용하고 있고 공유 CPU 환경일 경우, 물리적 CPU 사용량에 대한 상세를 보여준다.
S = SubclassWLM 하위 클래스에 대한 것이다.
a = Disk adapters디스크 어댑터에 대한 상세를 제공한다.
r = ResourcesCPU 속도를 MHz로 나타낸다.
k = Kernel새로운 필드를 제공한다.
L = Large pages큰 페이지 통계를 제공한다.
D = Disk디스크, 디스크 유형 크기, 여유 공간, 볼륨 그룹, 어댑터에 관한 정보를 제공한다.
n = Network네트워크 어댑터 상세, MTU, 에러에 대한 정보를 제공한다.
m = Memory메모리가 어디로 가는지, 시스템(커널)과 프로세스, 활성 가상 메모리에 대한 상세를 제공한다.
-B박스를 제거하는 시작 옵션이다.

AIX 5에 대한 nmon 10의 아웃풋 샘플

그림 1은 샘플 스크린 아웃풋이다. AIX 5에 대한 오프닝 스크린을 보여주고 있고, 유용한 정보들이 많이 들어있다.


그림 1. AIX 5에 대한 nmon 10의 샘플 아웃풋 

Screen shot of AIX 5 opening screen

그림 2는 CPU(SMT 가 실행되는 4 CPU POWER5 머신), 메모리 사용, 커널 통계, 디스크 통계에 대한 상세를 나타낸다. 주: 논리적 파티션(LPAR)은 할당량의 6배를 사용하고 있다.


그림 2. 상세 CPU

Screen shot of CPU details

그림 3은 네트워크, NFS 통계, 저널 파일시스템 사용에 대한 상세를 보여준다.


그림 3. 상세 네트워크

Screen shot of network details

POWER5 공유 프로세서 마이크로 파티션 통계에 대한 상세는 그림 4에 나타나있다.


그림 4. 상세 LPAR 

Screen shot LPAR details

그림 5는 리눅스 버전의 nmon 상세를 설명하고 있다. CPU (SMT 가 실행되는 2 CPU POWER5), LPAR 통계, 메모리 사용, 네트워크 통계, 파일 시스템 사용, 디스크 통계를 보여주고 있다. 주: LPAR의 물리적 CPU는 SUSE SLES9 Service Pack 1과 Red Hat EL 4 Update 1에서만 사용할 수 있다.


그림 5. 리눅스 버전의 nmon

Screen shot of Linux OS details of the machine

그림 6은 머신의 OS 상세, 디스크 통계(상세 모드), 탑 프로세스를 보여준다.


그림 6. 리눅스 버전의 nmon 

Screen shot of Linux OS details of the machine


툴 다운로드 방법

툴의 다운로드 옵션은 다음과 같다.



참조 사이트 : 
http://www.ibm.com/developerworks/aix/library/au-analyze_aix/

728x90

'*nix' 카테고리의 다른 글

[AIX] svmon 명령어를 이용한 메모리 사용량 점검  (0) 2010.07.27
*NIX 별 커널 파라미터 설정  (0) 2010.07.07
man에서 한글 깨짐  (0) 2010.06.14
Unix 프로세스 Job Control  (0) 2010.06.14
sed 사용법  (0) 2010.06.01
728x90

/etc/man.config 파일 수정



PAGER      /usr/bin/less -iRs

-> PAGER       /usr/bin/less -isr

728x90

'*nix' 카테고리의 다른 글

*NIX 별 커널 파라미터 설정  (0) 2010.07.07
nmon 성능: AIX와 리눅스 성능 분석을 위한 무료 툴  (0) 2010.07.07
Unix 프로세스 Job Control  (0) 2010.06.14
sed 사용법  (0) 2010.06.01
vi 특정문자열 삭제  (0) 2010.06.01
728x90

Job과 프로세스
  Job 제어는 많은 shell(Bash, Tcsh 포함)에서 제공되어지며, 다수의 명령어나 job을 
동시에 제어할 수 있게 해준다. 이것을 더 설명하기 전에 프로세스에 대한 설명이 필
요하다.
  프로그램을 실행할 때는  언제나 운영되는 프로그램의  단순한 이름으로 시작한다. 
'ps' 라는 명령어는 현재의 운영되는 프로세스의  목록을 출력해 준다. 예제를 아래와 
같이 보인다. 
         /home/larry# ps
            PID   TT   STAT    TIME    COMMAND
             24    3     S     0:03    (bash)
            161    3     R     0:00    ps
         /home/larry#
  첫 번째 칼럼의 PID 목록은 프로세스 ID이며, 이것은 모든  운영되는 프로세스에게 
주어지는 단위 숫자이다. 마지막 칼럼의 COMMAND는 운영되는 명령어의 이름이다. 
여기에, 우리는 Larry가  운영하고 있는  프로세서만을 볼 수  있으며, 현재  Larry의 
shell인 'bash'와 'ps' 명령만이 있다. - 실제로 시스템에  운영되는 많은 프로세스들이 
있으며, 이것은 'ps -aux'로 볼 수 있다. - 여기서 볼 수 있는 것처럼, 'bash'는 'ps' 명
령어와 동시에 운영됨을 알 수 있다. Larry가 명령어를 입력하면 'bash'가 'ps'를 실행
한 것이다.  'ps' 이후는  운영이 끝나고(프로세스   목록의 출력이 끝나고)  제어권이 
'bash'에게 되돌아오며, 프롬프트가 출력된후 다시 명령어 대기상태가 된다.
  운영되는 프로세스는 shell에서 "job"이라고 한다. 프로세스와 job은 상호 변경될 수 
있다. 어쨌든, 프로세스는 몇 개의 독립적인 "job"들 사이를 전환할 수 있으며, shell의 
job 제어가 또한, "job"이라고 일컬어진다.
  대부분의 경우 사용자가 shell에게 마지막 입력한 명령어가 단일 job으로 운영된다. 
job 제어를 사용하면, 여러 개의  job을 한번에 할 수  있으며, 필요할 때마다 전환할 
수 있다. 예를 들어, 문서 파일을 편집하고 있으며, 어떤 다른 일들을 하기 위해 편집
을 보류해야 할 경우가 있다고 하자. job 제어를 사용하면, 에디터를 임시적으로 잠시 
보류하고, shell 프롬프트로 돌아와서 다른 작업을 할 수 있다. 작업이 끝나면, 에디터
를 종료하지만 않았다면 어디에서든지 다시 에디터로 되돌아올 수 있다. 이것은 단순
히 한 예에 불과하지만, 실제로 매우 유용하다. 
포그라운드와 백그라운드
  job은 포그라운드에서와 백그라운드에서 할 수 있다. 포그라운드에서의  job은 한번
에 한 job만 할 수 있으며, 키보드로부터 입력을  받고, 화면으로 출력을 보내는 상호
작용이 이루어지진다. (물론 입력과 출력을 리디렉트 시킬 수 있다.)  다른 말로 하면, 
백그라운드에서의 job은 터미널로부터 입력을 받지  못한다. 따라서, 상호작용이 별로 
필요하지 않는 작업에 일반적으로 사용된다.
  프로그램 컴파일이나 압축같은 작업은 시간이  소요되며 또한, 처리되는 동안 어떠
한 다른 입력을 필요로 하지 않는다. 이런 종류의 작업들을 백그라운드로 실행시키면, 
다른 프로그램을 운영할 수 있는 여유를 갖게 된다. 또한,  하나이상의 작업을 백그라
운드로 운영할 수 있으며, 포그라운드에서의 처리 속도와의 차이는 거의 나지 않는다.
  job은 또한 보류될 수 있다. 보류된 job은 현재 운용되는 job은 아니고, 잠시 멈추는 
것이다. job을 보류한 후에 포그라운드에서든지 백그라운드에서든지 그  job을 필요에 
따라 계속하게 할 수 있다. 보류된 job은 어떠한 방법으로도 그 상태가 변하지 않으며 
강제로 종료시키지 않을 때까지 계속 유지된다.
  보류된 job은 인터럽팅된 job과는  같지 않다. 운영되는 프로세스를  인터럽트 시킬 
때( 인터럽트 키는 stty 명령으로 설정할 수 있으며, 디폴트는  [ctrl-C]이다.) 는 프로
세스를 제거하는(kill) 것이다. job이 제거되면, 그 job을 다시 할 수 없고, 명령을 다시 
실행하여야 한다. 어떤 프로그램은 인터럽트를 [ctrl-C]로 즉시 job을 중지하지 못하게 
한다. 이것은 프로그램이 실행하기 이전의 깨끗한 상태로 유지하기 위하여 단순히 인
터럽트를 중지되는 것을 허용하지 않는 것이다. 
백그라운드 시키기와 Job 제거
  간단한 예제로 시작해 보자. 명령어 'yes'는 끊임없이 y를 출력하는  명령이다. 이것
은 어떤 명령어가 계속적인 질문으로 답을 요구하는 경우, 그것이 보통 yes라는 답이 
된다면, 파이프를 사용하여 y를 계속 보내 답을  하는 것으로  유용하게 사용되어 질 
수 있다.
        /home/larry# yes
          y
          y
          y
  y가 계속 끊임없이 출력된다. 인터럽트 키, 보통 [ctrl-C] 같은 것으로서 프로세스를 
제거할 수 있다. 이런 y의 출력들이 귀찮다면, yes의 표준 출력을 /dev/null 로 리디렉
트 시켜 보자. /dev/null 은 데이터의 "black hole" 로 작용한다. 어떠한 데이터도 이곳
으로 보내면 나타나지 않는다. 이것은 질문을  계속 물어 보는 성가신 프로그램을 조
용하게 만드는 아주 효과적인 방법이다.   
         /home/larry# yes > /dev/null
  아무것도 출력되지 않으며, shell 프롬프트로 되돌아오지도 않는다. 이것은 yes가 여
전히 운영되고 있으며, 계속 /dev/null 로  'y'를 출력하고 있는 것이다. 따라서, job을 
제거하기 위해서 인터럽트 키를 눌러야 한다.
  가정을 해보자. 우리는 yes의 명령이 계속되기를 바라나, 다른 작업을 하기  위해서 
shell 프롬프트로 되돌아오기를 원한다. 그러면, 우리는 백그라운드로 yes를 실행해 놓
을 수 있다. 이것은 그것이  계속 운영되고 있는 있는  것이지만 상호 작용할 필요는 
없는 것이다. 
  백그라운드로 프로세스를 놓는 방법은 명령어의 끝에 "&"를 추가하는 것이다.
         /home/larry# yes > /dev/null &
         [1]  164
         /home/larry#
  위에서 볼 수 있는 것처럼, shell 프롬프트가 되돌아 왔다. 그런데, "[1] 164"는 무엇
일까? 그리고, 'yes'의 명령이 정말로 실행되고 있는 것일까?
  "[1]"은 yes 프로세스의 job 번호를 표시하고 있다. shell은 모든 운영되는 job을 job 
번호로 지정한다. yes는 현재 운영되고 있는 오직 하나의 job이기 때문에 job  번호 1
인 것이다. "164"는 프로세스 ID 또는 PID 라는 것이며, 이것은  시스템이 job에게 주
는 프로세스 번호이다. 이러한 번호들은 모두 job을 가르키는데 사용된다.
  백그라운드로 yes 프로세스가 계속적으로 /dev/null에 'y'들을 보낼  수 있다. 이 프
로세스의 상태를 검사하기 위해서는 셀 명령인 'jobs' 을 사용하면 된다.   
         /home/larry# jobs
         [1]+   Running                      yes  >/dev/null   &
         /home/larry#
  운영중인 것을 확인할 수 있다. 또한 'ps'명령어를 사용하여 위에서 검사한 것과 같
은 job의 상태를 알 수 있다. 
  job를 정지시키기 위해서는 'kill' 명령어를 사용해야 한다.  이 명령어는 job 번호나 
프로세스 ID 번호를 인자로서 사용한다. 이것은 job 번호는 1이며, 명령어를 사용하기 
위해서는 아래와 같이 입력한다.
         /home/larry# kill %1
  위와 같이 하면 job은 제거될 것이다. job이나 job 번호를  표시하려 할 때는  퍼센
트 문자의 위치에 번호를 넣으면 된다.
  지금 우리는 job을 제거하였고, 'jobs'을 사용하고 그것을 다시 검사하고 있다. 
        /home/larry# jobs
        [1]+   Terminated                   yes  >/dev/null
        /home/larry#
  job은 확실히 제거되었고, 'jobs' 명령어를  다시 사용한다면, 아무것도 출력되지 않
을 것이다.
  또한 프로세스 ID(PID) 번호를 사용하여 job을 제거할  수 있다. PID는 job이 시작
할 때 job ID와 함께 출력되는 것이다.  우리의 예제에서, 프로세서 ID는 164이다. 따
라서,
        /home/larry# kill 164
  은, 아래와 동일한 기능을 수행한다,
        /home/larry# kill %1
  프로세스 ID에 의한 job을 언급할 때는 "%"를 사용할 필요가 없다.
Job의 보류와 계속하기
  백그라운드 안으로 job을 넣는 또 다른 방법이 있다. job을 보통으로 실행(포그라운
드로) 시킬 수 있으며, job을  멈출 수도 있고, 백그라운드로 재실행  시킬 수도 있다.  
이것을 아래에 설명한다.
  먼저, 포그라운드로 yes를 실행한다.
        /home/larry# yes > /dev/null
  yes가 포그라운드로 실행이 되었기 때문에, shell 프롬프트로 바로 돌아올 수 없다.
  지금, '[ctrl-C]'로서 job을 인터럽팅하는 대신에, job을 보류해 보자. job을 제거하
지않고, 보류시킨다는 것은 재실행하기 전까지 잠시 멈춘다는 것을 의미한다. 이렇게 하
기 위해서는 보류 키를 눌러야 하며, 일반적으로 '[ctrl-Z]'이다.
        /home/larry# yes > /dev/null
        [ctrl-Z]
        [1]+   Stopped                      yes  >/dev/null
        /home/larry#
  보류된 job은 단순히 실행이 멈춘 것이다. CPU 나 메모리는 job을 위해 전혀  사용
되지 않는다. 여기서 아무것도 변하지 않은  보류되기 이전 job 상태로 재실행 할  수 
있다.
  이 job을 포그라운드로 재실행하기 위해서는 명령어 'fg'(forground)를 사용한다.
        /home/larry# fg
        yes >/dev/null
  shell은 포그라운드로 바꾸었던 명령어의 이름을 다시 출력한다. 다시 job을 멈추게 
하려면 '[ctrl-Z]'를 사용한다. 이번엔 명령어 'bg'를 사용하여 job을 백그라운드로 놓아 
보자. 이것은 처음에 명령어를 입력할때 끝에 "&"를 사용하여 실행했었던 것과 같다.
        /home/larry# bg
        [1]+ yes >/dev/null &
        /home/larry#
  위와 같이 하면 프롬프트가 되돌아온다. job은 yes가 실행이 되었음을 보고한다. 먼
저 번에 사용하였던 명령어 'kill'을 사용하여 job을 제거할 수 있다.
  어떻게 job을 멈출 수  있을까? [ctrl-Z]을 사용하면  job이 백그라운드로 실행되기 
때문에 작업을 할 수 없다. 이 답은 'fg'를 사용하여 포그라운드로  job을 놓아야만 하
며, 그래야 멈출 수 있다. 멈춰진 job이나 백그라운드의 job을 'fg'를  사용하여 전환할 
수 있다.
  백그라운드에서의 job과 멈춰진 job은 커다란 차이가 있다. 보류된 job은 CPU 시간
이나 메모리를 전혀 사용하지 않으며,  따라서 아무 일도 하지  않는다. 백그라운드로 
운영되고 있는 job은 메모리를 사용하며, 또한 다른 작업을 하고 있을 동안에도  완벽
하게 이 작업을 수행한다. 어쨌든, 백그라운드에서의 job은 터미널에서 문자를 출력하
고자 하며, 어떤 다른 작업을 하고  있다면,  귀찮게 할 것이다. 예를 들어, 아래의 명
령같이 입력한다면,
        /home/larry# yes &
  /dev/null 로 표준 출력을  리디렉팅하지 않는다면, y의 문자열들은  화면에 어떠한 
인터럽트도 받지 않고 출력될 것이다. '[ctrl-C]'는 백그라운드의 job  에게 인터럽트를 
걸 수 없다. 끊임없는 'y'들을 멈추기 위해서는 'kill' 명령어를 사용해야 한다.  아마
도, 입력하는 것을 보는 것은 불가능할 것이다.
  또 중요한 것은, 명령어 'fg'나 'bg'를 인자없이 입력하면 최근에 멈추어진 job을  포
그라운드나 백그라운드 시킨다. 만일  지금 복수개의 job을  동시에 운영하고 있다면, 
특정 job은 주어진 job ID를 'fg'나 'bg'의  인자로서 사용하여 포그라운드나 백그라운
드로 전환 시킬 수 있다.
        /home/larry# fg %2
  job 번호 2를 포그라운드로 전환 시킨다.
        /home/larry# bg %3
  job 번호 3을 백그라운드로 전환 시킨다.
  프로세스 ID를 'fg'나 'bg' 명령에서는 사용할 수 없다. 
  'fg', 'bg' 명령 없이 job 번호만을 사용할 수 있다. 따라서 아래의 두 명령은 동일하
다.
        /home/larry# %2
        /home/larry# fg %2
  job제어를 사용하는 것은 shell의  기능을 이용한다는 것을  기억해야 한다. 명령어 
'fg', 'bg', 'jobs'는 shell의 명령어들이다. 만일 어떤 이유에서 shell이 job 제어를  
제공하지 않는다면, 이러한 명령어들이 유용한지 알아낼 수 없다.
  덧붙이면, job 제어의 형태는 Bash나 Tcsh에서 약간 다르다. 사실, 모든 shell이 job 
제어를 제공하지 않으나, 리눅스의 대부분의 shell에서는 job 제어를 제공한다.

728x90

'*nix' 카테고리의 다른 글

nmon 성능: AIX와 리눅스 성능 분석을 위한 무료 툴  (0) 2010.07.07
man에서 한글 깨짐  (0) 2010.06.14
sed 사용법  (0) 2010.06.01
vi 특정문자열 삭제  (0) 2010.06.01
로그파일 가공하기  (0) 2010.05.17
728x90

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 !' 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/         * --> 어떠한 수
  ----------------------------------------------------------------------------------------

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

출처 : Tong - 굿보이군님의 Linux통

옵션
d - 라인을 지우기 
p - 라인을 출력
r - 파일을 읽음
s - 다른 문자를 읽음

sed -n '/west/p' data.file - grep과 같은 라인 출력
sed -n '3,5p' /opt/data.file - 3에서 5번줄까지 출력
sed -n '/Chris/,$p' data.file - data.file 안에 Chris부터 끝까지 출력
sed 's/3/X/' data.file - data.file 안에 3을 X로 변환(라인당 하나만 변환)
sed 's/3/X/g' data.file - data.file 안에 3을 모두 X로 변환
sed -n '/(tab)[0-9]$/p' data.file - 파일안에 tab이후에 0-9가 들어가고 줄끝문자가 이어지는 라인만 출력
sed -n '/(tab)[0-9]$/& HITE/p' data.file - 파일안에 조건에 맞는 라인에 끝에 HITE라는 문자 추가(여기서의 $는 ~부터 끝까지가 아닌 줄끝 문자의 의미를 가진다)
sed '/west/d' data.file - 파일안에 west를 빼고 출력
sed '/May/,/TJ/d' data.file - 파일안에 May부터 TJ까지 빼고 출력
sed '/west/r /opt/mess' data.file - 파일안에 west가 들어가는 라인에 mess란 파일 데이터를 읽어드려 추가

cat > 1.sed
1,4d - 1,4를 지움
s/north/North/ - north를 찾아 North로 변경
s/^east/East/ - east로 시작하는 라인을 찾아 East로 변경
sed -f 1.sed data.file - 파일안에 라인을 1.sed에 따라 연속처리
-n 옵션에 대해 - -n 옵션이 들어가면 라인출력인 p가 붙어야 화면에 출력한다. 반대로 -n이 없을 경우 p가 붙지 않아도 출력하며 p가 있을 경우 두번 출력해 주는 형식이 된다.


http://blog.naver.com/siyang6/30021355074

728x90

'*nix' 카테고리의 다른 글

man에서 한글 깨짐  (0) 2010.06.14
Unix 프로세스 Job Control  (0) 2010.06.14
vi 특정문자열 삭제  (0) 2010.06.01
로그파일 가공하기  (0) 2010.05.17
awk 사용법  (0) 2010.05.17

+ Recent posts