728x90

개요
 JAVA Process HANG 발생 후 해당 Process의 kill 불가.

현상
 JAVA Process의 서비스 불가로 인한 HANG 발생 확인 후 process에 대해 kill등의 조치를 취하려 하였으나 불가하였음.

원인
 HP OS의 NFS(네트워크 공유 파일 시스템)솔루션인 ONCplus Software의 Bug 및 Virtual Memory System Call 결함으로 인해 발생 
 (NFS Call 완료 되지 않은 상태에서  Java 프로세스의 반복적인 I/O 요청으로 Hang 발생 및 프로세스 Kill 불가)

해결방안
 1차적으로 해당 현상 해소를 위해서는 서버 리부팅을 통해 해소
 근본적인 해결을 위해 HPUX의 패치 수행
  NFS Software(ONCplus) 최신 버전(11.31.19.1) 업데이트
  vm cumulative patch 적용

728x90
728x90

개요
 OCSP의 인증기관인 Signkorea의 장애 발생 후 OCSP의 오류 발생으로 인한 거래 처리 불가 상태

현상
 OCSP의 인증기관인 Signkorea의 장애 발생 (10분간)
 기관측 조치가 완료되었으나 OCSP의 오류 발생으로 인한 거래 처리 불가 상태

원인
 기관의 장애로 인해 때문에 queue에 서비스들이 기다리게 됨
 다음과 같은 OCSP데몬의 로그로 확인 가능
  "cannot resize thread pool. Resize of thread pool exceeds max pool size."
 기관측 조치가 완료되었으나 OCSP의 오류 발생
  데몬 구조상 먼저 들어온 서비스(timeout 된 유효하지 않은 서비스)를 처리해야 하려고 시도하였기 때문에 일정 시간 동안 유효한 서비스들에 대한 처리를 할 수 없었던 것으로 추정

해결방안
 데몬 재기동 후 정상 처리
  Queue에 쌓여 있는 유효 하지 않은 서비스들과 유효한 서비스 모두 버리고 새로 시작 하기 때문에 정상 동작

 Queue에 쌓이는 서비스의 시작 시간을 활용 하여 timeout 설정
  1. 서비스의 유효 시간을 설정(3초, 5초, 10초 등)
  2. Queue에 서비스를 쌓을 때 시작 시간 추가
  3. 서비스 처리전 시간을 체크하여 시작 시간과 비교
  4. 유효 시간에 맞을 경우 서비스 진행, 유효시간에 맞지 않을 경우 서비스 종료

 

728x90
728x90
개요
 Size가 큰 Session이 유입되면서, IO Exception이 발생 하였으며, Session서버로 부하를 주면서 Queue Full 발생 및 Lock획득 과정에서 Hang상태 후 장애유발

현상
 WAS의 컨테이너에서 Container getSession IO Exception 발생. 
 해당 Exception의 발생으로 컨테이너가 HANG상태로 변함.

원인
 jeus.net.msg.max 사이즈는 기본 5M 설정으로 이보다 더 큰 세션 생성시 getSession IO Exception 발생.
 Network OS level 에서의 Send Buffer가 정상적으로 read 되지 않았으며, 따라서 write queue가 점차적으로 증가 후, 10kb 되면서 Queue Block 발생함

해결방안
 system.jeus.session 로그를 활성화 시켜 로그 사이즈 측정 결과, 최대 8MB를 기록하였음.
 따라서 다음과 같이 설정 
  $JEUS_HOME/bin/jeus.properties의 JAVA_ARGS에 -Djeus.net.msg.max 사이즈 10MB 설정.
  ※티맥스연구소 권장에 따른, 사이트 세션객체 크기에 따라 조정하며, 10MB 이상은 비정상으로 Exception 처리가 적절함

 Send Buffer의 무한 Wait를 방지를 위해 다음과 같이 설정 (jext패치 작업이 같이 필요)
  $JEUS_HOME/bin/jeus.properties의 JAVA_ARGS에 -Djeus.net.nio.write.timeout 설정
  $JEUS_HOME/lib/jext 에 jext_v6008_i77157_a451003.jar 추가 필요.
728x90
728x90
개요
 WAS 서버의 Looping현상으로 인한 서비스 지연 발생

현상
 WAS 서버의 resolv.conf 설정 변경 후 해당 WAS서버에서 제공하는 일부 서비스 접속 불가 현상

원인
 resolv.conf 설정 시 nsswitch.conf  설정 파일이 없으면 DNS 우선 참조(hosts 파일 참조 하지 않음)
 ※ resolv.conf : DNS 서비스를 위한 설정 파일
   nsswitch.conf : 도메인 검색 순서를 설정하는 파일
   ex) hosts: files [NOTFOUND=continue] dns 
     →hosts 파일에 URL이 없으면 dns 서버에서 검색

 hosts 파일 내에 등록된 URL 호출 불가로 서비스 큐잉 발생
  →DNS 참조 후 공인IP로 호출하게 되어 내부IP 호출 서비스 불가
  →WAS서버는 DMZ 망이 아닌 내부망에 존재 하므로 공인IP로 서비스 호출 불가

해결방안
 resolv.conf 의 설정에 대한 무지로 인해 발생한 건으로 resolv.conf 원복하여 해결

 
728x90
728x90
개요
 WAS의 2중화 구성 환경에서 WAS1과 WAS2가 세션을 공유하지 못하는 현상이 발생

현상
 WAS의 2중화 구성 환경에서 이미지 업로드 하는 거래의 Flow를 진행 시 세션 공유가 되지 않음.
 이미지 업로드 거래 Flow
  1. 뷰어를 띄우는 부분 (WAS1 서버로 연결)
  2. 뷰어에서 ActiveX 에디터를 띄우는 부분 (WAS1 서버로 연결)
  3. ActiveX 에서 이미지 저장을 시작하는 부분 (WAS1 서버로 연결)
   3.1 StartUp (WAS2 서버로 연결)
   3.2 Update (WAS1 서버로 연결)
   3.3 Complete (WAS2 서버로 연결)
    ※ 위 3.1~3 부분은 세션상에서 받아온 userid를 파라매터로 처리
 3의 3.1 부터 세션 정보를 잃어버림.

원인
 이미지 업로드 거래를 처리하는 WAS(JEUS6)의 session-timeout 설정이 0으로 설정되었을 경우,
 JEUS6에서 세션서버를 사용 시 세션 정보를 자체적으로 삭제를 해버림.
 따라서 세션 공유가 불가능한 상황.

해결방안
 session-timeout 을 명시적으로 0이외의 시간으로 설정
 session-timeout은 web.xml에서 설정 가능

        <session-config>
            <session-timeout>180</session-timeout>
        </session-config>

 ※JEUS6의 session-timeout 적용 우선 순위
  1. web.xml
  2. $JEUS_CONFIG/servlet/webcommon.xml

 
728x90
728x90

java 관련 명령어

HP-UX java 버전 분별법
IA64N - 32bit
IA64W - 64bit 

jinfo
 개요
 JVM option(java command option)을 확인

  java command option
    -X는 표준이 아닌 설정으로 Macro한 측면에서 JVM제어 기능을 제공 (모든 JVM에서 지원한다는 보장이 없음)
   -XX는 표준이 아닌 설정으로 안정적이지 않은 옵션. (-X Option보다 세밀한 제어 기능을 제공하며, 성능 튜닝/버그 Workaround를 위해서 주로 사용됨)
    -XX:+<옵션>은 해당 옵션을 활성화 -XX:-<옵션>은 해당 옵션을 비활성화
    -XX:<옵션>=<숫자> 시 'm','M'은 메가바이트 'k','K'는 킬로바이트 'g','G'는 기가바이트를 표현

 UNIX/Linux/Windows JAVA 5 이상 제공.
 Heap, PermSize 등 옵션지정 없는 프로세스에 대해 default값 확인 가능.
 HP-UX에서는 -flag 필수, Linux에서는 -flag없이 pid만 포함하면 해당 프로세스 JVM 전체 정보 출력.

 ex) jinfo -flag [JVMflag] [pid]
     5555라는 pid의 PermSize를 출력하라
   

$ jinfo -flag PermSize 5555
-XX:PermSize=134217728


jstat
 개요
 JVM 측정을 위한 성능 통계를 표시한다.

 항목 설명
  Timestamp : JVM의 시작 시간 이후의 시간
  S0 : Survivor0의 사용률
  S1 : Survivor0의 사용률
  E : Eden 영역의 사용률
  O : Old 영역의 사용률
  P : Permanent 영역의 사용률
  YGC : Young generation의 GC 이벤트 수
  YGCT : Young generation의 가비지 컬렉션 시간
  FGC : Full GC 이벤트 수
  FGCT : Full의 가비지 컬렉션 시간
  GCT : 가비지 콜렉션 시간

  Options
 -class : 클래스로드의 동작에 대한 통계
 -compiler : 핫스팟 컴파일러의 동작의 통계를 표시
  -gc : 가비지 콜렉트된 힙 영역에 대한 통계
 -gccapacity : Generation과 해당 공간의 용량 통계
 -gcutil : 가비지 콜렉션 통계 요약

  OutputOptions
 -h [n] : 칼럼 머리글마다 n개의 출력 행 표시 
 -t : 출력되는 첫번째 칼럼에 타임스탬프 표시 (타임스탬프는 JVM의 시작 시간 이후의 시간이다.)

 ex) jstat -options -outputoptions [pid] [interval] [count]
     22820의 pid에 10초(10000ms)간격으로 100개의 샘플을 취득해 -gcutil 옵션에 따라 출력하라(단 5개 출력 마다 머리글 표시 첫 번째 칼럼엔 타임스탬프를 표시)

$ jstat -gcutil -h 5 -t 22820 10000 100
Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      1239777.3  32.23   0.00  98.88   1.54  13.76    430  100.417     0    0.000  100.417
      1239787.3  32.23   0.00  99.24   1.54  13.76    430  100.417     0    0.000  100.417
      1239797.3   0.00  36.26  19.20   1.54  13.76    431  100.490     0    0.000  100.490
      1239807.4   0.00  36.26  38.71   1.54  13.76    431  100.490     0    0.000  100.490
      1239817.4  29.82   0.00  15.43   1.54  13.76    432  100.722     0    0.000  100.722
Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      1239827.4  29.82   0.00  34.67   1.54  13.76    432  100.722     0    0.000  100.722
      1239837.4  29.82   0.00  35.03   1.54  13.76    432  100.722     0    0.000  100.722


 2행과 3행을 보면 Minor gc가 발생하여 Eden 영역이 감소하고 YGC와 YGCT가 증가함을 볼 수 있다.

jstack
 개요
 java Thread dump 생성해주는 명령어로 java stack 확인할 때 사용.
 ※Unix/Linux 는 Java 5 부터 Windows 는 Java 6 부터 지원
   Unix/Linux 에서는 kill -3 명령어로도 Thread dump 생성 가능

 ex) jstack -l [JVM pid]
     4740이라는 pid에 대한 Thread dump를 td_4740.txt 라는 파일로 생성하라

$ jstack -l 4740 > td_4740.txt


jmap
 개요
 java Heap dump 생성해주는 명령어로 java Heap을 확인할 때 사용.

 Options
 -histo : 클래스별 객체 수와 메모리 사용량 확인
 -dump : heap dump 생성

 ex) jmap [-Options] [JVM pid]
     4740이라는 pid에 대한 Heap dump를 hd_4740.bin 라는 파일로 생성하라

$ jmap -dump:format=b,file=hd_4740.bin 4740


     24760이라는 pid에 대한 클래스별 객체 수와 메모리 사용량을 확인하라

$ jmap -histo:live 24760 | more
 num     #instances         #bytes  class name
----------------------------------------------
   1:        327969       19974168  [C
   2:        112277       15139136  <constMethodKlass>
   3:        112277        9886040  <methodKlass>
   4:        330181        7924344  java.lang.String
   5:        176627        7783016  <symbolKlass>
   6:         10189        6167032  <constantPoolKlass>
   7:         97618        4685664  com.sun.tools.javac.zip.ZipFileIndexEntry
   8:         10189        4531304  <instanceKlassKlass>
   9:         46349        3980768  [Ljava.util.HashMap$Entry;
  10:          8970        3606368  <constantPoolCacheKlass>



 

728x90

'IT > OS (Unix Linux Windows)' 카테고리의 다른 글

[OCSP]기관 장애 발생 이후 기관 조치가 되었으나 ocsp 오류 발생  (0) 2018.11.12
[UNIX]DNS Looping  (0) 2018.11.08
[명령어]basename / dirname  (0) 2018.11.02
[명령어]ln  (0) 2018.10.30
[명령어]split  (0) 2018.10.30
728x90
개요
 WEBTOB를 기동하였으나, Port LISTEN이 되지 않음.
 WEBTOB의 IPCPerm 설정이 되지 않고, htl을 root로 설정하게 되어, 기동 시 htld의 퍼미션 거부로 인한 Port의 LISTEN이 되지 않음.

현상
 다음과 같은 로그가 발생하며 WEBTOB내 지정된 Port들이 LISTEN 하지 않음

[2018/11/04:05:47:49] HTH-12518 W HTH0072: Failed to connect to HTL. fail count=1, path=jeus/webserver/path/htld  errno=13(Permission denied)
[2018/11/04:05:47:51] HTH-12518 W HTH0072: Failed to connect to HTL. fail count=2, path=jeus/webserver/path/htld  errno=13(Permission denied)

 주의하여야 할 점은 이렇게 htld가 Permission denied를 당했음에도 불구하고, 프로세스를 검색하면 htl 프로세스가 보이며, 심지어 wsadmin에서 server 상태조회를 해보면 정상으로 보인다.!
 생각해보면.. 받아주는 포트가 막혀있는 상황일 뿐이지.. server는 멀쩡했을 것이다...
 아무튼 syslog를 자세히 들여다 보지 않는 이상 발견하기 굉장히 모호한 현상이다.

(wsadm) [2018/11/04:05:49:20]: si

------------------------------------------------------------------------------------------
 hth   svrname (svri)   status      reqs     count cqcnt    aqcnt qpcnt emcnt rscnt rbcnt
------------------------------------------------------------------------------------------
   0  html       (  0)   RDY           0         0     0        0     0     0     0     0
   0  fep        (  1)   RDY           0         0     0        0     0     0     0     0

원인
 왜 htld가 Permission denied를 당했는지 추적을 해보았다.

[jeus/webserver/path]ll
total 6
srwx------   1 jeus       tmax             0 Nov  5 10:00 hthd000
srwx------   1 root       tmax             0 Nov  5 10:00 htld
-rw-------   1 jeus       tmax          1536 Nov  5 10:00 webtob.pid
srwx------   1 jeus       tmax             0 Nov  5 10:00 wsmd

 그렇다면 htld는 왜 Permission이 저렇게 되어 있는 것인가?
 webtob 설정에서 정답을 찾을 수 있었다.
 $WEBTOB_HOME/config/http.m의 IPCPerm 이라는 설정을 보자

IPCPerm                                                                                     
● 종류: Numeric                                                                             
● 범위: 0600 ~ 0700                                                                         
● 기본값: 0700                                                                              
● WebtoB 내부 프로세스(WSM, HTL, HTH, HTMLS, CGIS 등) 및 관리 프로세스(wsadmin) 간의 내부 통신(IPC)에 사용하는 named-pipe의 접근권한을 설정한다.                                         
참고                                                                                         
UNIX/Linux 환경에서만 사용할 수 있다.                                                       

 그렇다. IPCPerm을 지정하지 않아, 기본값이 적용되었던 것이다.


해결방안
 $WEBTOB_HOME/config/http.m의 IPCPerm을 다음과 같이 설정하자.

*NODE
IPCPERM = 0777,

 ※참고사항
 WEBTOB에서 1024 이하의 Port를 사용하려면 System계정인 root의 권한이 필요하다.
 따라서 $WEBTOB_HOME/bin/htl의 권한에 setuid를 부여 해주어야 한다.
728x90
728x90

절대경로에서 파일 및 파일경로만 추출하기

 ex) basename [절대경로]
     절대경로에서 파일의 이름을 출력해라

$ basename /shome/i8/test/123
123


 ex) dirname [절대경로]
     절대경로에서 해당파일의 디렉토리 경로를 출력해라 

$ dirname /shome/i8/test/123
/shome/i8/test


728x90

'IT > OS (Unix Linux Windows)' 카테고리의 다른 글

[UNIX]DNS Looping  (0) 2018.11.08
[java 관련 명령어] jinfo / jstat / jstack / jmap  (0) 2018.11.06
[명령어]ln  (0) 2018.10.30
[명령어]split  (0) 2018.10.30
[명령어]find  (0) 2018.10.30
728x90

ln
 개요
 링크파일을 만드는 명령어
 심볼릭 링크와 하드 링크의 개념을 알고 사용해야 한다.

 심볼릭 링크
 윈도우즈의 '바로가기'라고 생각하면 된다.
 원본파일을 가리키고만 있으므로 원본파일과는 무관하다.
 즉 심볼릭 링크 파일을 지우더라도 원본파일은 지워지지 않는다.

 하드 링크
 원본파일과 다른 이름으로 존재하는 동일한 파일이며 원본파일과 동일한 내용의 다른 파일이라고 볼 수 있다.
 따라서 하드 링크 파일을 지우더라도 원본파일을 지워지지 않는다.
 하지만 원본파일의 내용이 바뀔경우에는 링크파일의 내용도 바뀌게 된다.

 Options
 -s : 심볼릭 링크 생성

 ex) ln [-option] [원본파일] [대상파일]
     "test"라는 파일에 대한 하드링크 파일 "abc"를 생성하라 

$ ln test abc


     "tmp"라는 디렉토리에 대한 심볼릭 링크 "/var/abc"를 생성하라

$ ln -s /tmp /var/abc

lrwxr-xr-x   1 i48   if              5 Oct 30 19:15 /var/abc -> /tmp
728x90

'IT > OS (Unix Linux Windows)' 카테고리의 다른 글

[java 관련 명령어] jinfo / jstat / jstack / jmap  (0) 2018.11.06
[명령어]basename / dirname  (0) 2018.11.02
[명령어]split  (0) 2018.10.30
[명령어]find  (0) 2018.10.30
[명령어]touch  (0) 2018.10.30
728x90

split
 개요
 큰 파일을 여러 작은 파일로 나눌때 사용.

 Options
 -a : 분할되는 파일뒤에 붙는 접두어의 길이
 -b : 분할되는 기준을 바이트로 분할 (라인 중간에 내용이 잘릴 수 있음)
  -C : 분할되는 기준을 바이트로 분할 (라인 기준 내용을 잘리지 않음)
 -d : 분할되는 파일뒤에 붙는 접두어가 영문이 아닌 숫자로 지정
 -l : 분할되는 기준을 라인수로 분할

 ex)split [-option] [값] [대상파일]
     50MB 단위로 test.txt 파일을 짤라라.

$ split -b 50m test.txt


     test라는 파일을 "test_"로 시작되는 파일로 짤라라.

$ split test test_
$ ll
total 4916
-rw-r--r--   1 in8   if        1254527 Oct 30 17:10 test
-rw-r--r--   1 in8   if          79782 Oct 30 17:10 test_aa
-rw-r--r--   1 in8   if          87920 Oct 30 17:10 test_ab
-rw-r--r--   1 in8   if          79254 Oct 30 17:10 test_ac
-rw-r--r--   1 in8   if          94671 Oct 30 17:10 test_ad
-rw-r--r--   1 in8   if          94174 Oct 30 17:10 test_ae
-rw-r--r--   1 in8   if          90584 Oct 30 17:10 test_af
-rw-r--r--   1 in8   if          82640 Oct 30 17:10 test_ag
-rw-r--r--   1 in8   if          89124 Oct 30 17:10 test_ah
-rw-r--r--   1 in8   if          76908 Oct 30 17:10 test_ai
-rw-r--r--   1 in8   if          77784 Oct 30 17:10 test_aj
-rw-r--r--   1 in8   if          83850 Oct 30 17:10 test_ak
-rw-r--r--   1 in8   if          81390 Oct 30 17:10 test_al
-rw-r--r--   1 in8   if          86587 Oct 30 17:10 test_am
-rw-r--r--   1 in8   if          89396 Oct 30 17:10 test_an
-rw-r--r--   1 in8   if          60463 Oct 30 17:10 test_ao


     test라는 파일을 "test_"로 시작되면서 접두어가 4글자가 들어가는 파일로 짤라라.

$ split -a 4 test test_
$ ll
total 4916
-rw-r--r--   1 i8   if        1254527 Oct 30 17:10 test
-rw-r--r--   1 i8   if          79782 Oct 30 17:11 test_aaaa
-rw-r--r--   1 i8   if          87920 Oct 30 17:11 test_aaab
-rw-r--r--   1 i8   if          79254 Oct 30 17:11 test_aaac
-rw-r--r--   1 i8   if          94671 Oct 30 17:11 test_aaad
-rw-r--r--   1 i8   if          94174 Oct 30 17:11 test_aaae
-rw-r--r--   1 i8   if          90584 Oct 30 17:11 test_aaaf
-rw-r--r--   1 i8   if          82640 Oct 30 17:11 test_aaag
-rw-r--r--   1 i8   if          89124 Oct 30 17:11 test_aaah
-rw-r--r--   1 i8   if          76908 Oct 30 17:11 test_aaai
-rw-r--r--   1 i8   if          77784 Oct 30 17:11 test_aaaj
-rw-r--r--   1 i8   if          83850 Oct 30 17:11 test_aaak
-rw-r--r--   1 i8   if          81390 Oct 30 17:11 test_aaal
-rw-r--r--   1 i8   if          86587 Oct 30 17:11 test_aaam
-rw-r--r--   1 i8   if          89396 Oct 30 17:11 test_aaan
-rw-r--r--   1 i8   if          60463 Oct 30 17:11 test_aaao


     test라는 파일을 50000byte 단위 및 "test_"로 시작되는 파일로 짤라라.

$ split -b 50000 test test_
$ ll
total 3276
-rw-r--r-- 1 i8 if 1622959 Oct 30 17:16 test
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_aa
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ab
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ac
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ad
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ae
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_af
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ag
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ah
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ai
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_aj
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ak
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_al
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_am
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_an
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ao
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ap
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_aq
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ar
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_as
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_at
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_au
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_av
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_aw
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ax
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ay
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_az
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_ba
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_bb
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_bc
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_bd
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_be
-rw-r--r-- 1 i8 if   50000 Oct 30 17:20 test_bf
-rw-r--r-- 1 i8 if   22959 Oct 30 17:20 test_bg

$ tail test_aa
 * [002] section: 0.000 sec, accumulation: 0.000 sec [<Leave> befEute]
 * [003] section: 0.000 sec, accumulation: 0.000 sec [<Enter> exe]
[Sertrol@142][2018-10-17 01:55:00] JOB BEGIN
Serviator load Start
----


아래의 -C 옵션과 비교 해보았을때 마지막 라인이 완전한 문장이 아닌 잘려나간 문장임을 확인 할 수 있음.

$ split -C 50000 test test_
$ ll
total 3276
-rw-r--r-- 1 in8 if 1622959 Oct 30 17:16 test
-rw-r--r-- 1 in8 if   49996 Oct 30 17:21 test_aa
-rw-r--r-- 1 in8 if   49986 Oct 30 17:21 test_ab
-rw-r--r-- 1 in8 if   49977 Oct 30 17:21 test_ac
-rw-r--r-- 1 in8 if   49980 Oct 30 17:21 test_ad
-rw-r--r-- 1 in8 if   49973 Oct 30 17:21 test_ae
-rw-r--r-- 1 in8 if   49978 Oct 30 17:21 test_af
-rw-r--r-- 1 in8 if   49993 Oct 30 17:21 test_ag
-rw-r--r-- 1 in8 if   49977 Oct 30 17:21 test_ah
-rw-r--r-- 1 in8 if   49990 Oct 30 17:21 test_ai
-rw-r--r-- 1 in8 if   49975 Oct 30 17:21 test_aj
-rw-r--r-- 1 in8 if   49939 Oct 30 17:21 test_ak
-rw-r--r-- 1 in8 if   49986 Oct 30 17:21 test_al
-rw-r--r-- 1 in8 if   49999 Oct 30 17:21 test_am
-rw-r--r-- 1 in8 if   49925 Oct 30 17:21 test_an
-rw-r--r-- 1 in8 if   49984 Oct 30 17:21 test_ao
-rw-r--r-- 1 in8 if   49982 Oct 30 17:21 test_ap
-rw-r--r-- 1 in8 if   49956 Oct 30 17:21 test_aq
-rw-r--r-- 1 in8 if   49985 Oct 30 17:21 test_ar
-rw-r--r-- 1 in8 if   49965 Oct 30 17:21 test_as
-rw-r--r-- 1 in8 if   49980 Oct 30 17:21 test_at
-rw-r--r-- 1 in8 if   49805 Oct 30 17:21 test_au
-rw-r--r-- 1 in8 if   49820 Oct 30 17:21 test_av
-rw-r--r-- 1 in8 if   49985 Oct 30 17:21 test_aw
-rw-r--r-- 1 in8 if   49957 Oct 30 17:21 test_ax
-rw-r--r-- 1 in8 if   49984 Oct 30 17:21 test_ay
-rw-r--r-- 1 in8 if   49965 Oct 30 17:21 test_az
-rw-r--r-- 1 in8 if   49985 Oct 30 17:21 test_ba
-rw-r--r-- 1 in8 if   49998 Oct 30 17:21 test_bb
-rw-r--r-- 1 in8 if   49902 Oct 30 17:21 test_bc
-rw-r--r-- 1 in8 if   49839 Oct 30 17:21 test_bd
-rw-r--r-- 1 in8 if   49949 Oct 30 17:21 test_be
-rw-r--r-- 1 in8 if   49951 Oct 30 17:21 test_bf
-rw-r--r-- 1 in8 if   24293 Oct 30 17:21 test_bg

$ tail test_aa
 * [002] section: 0.000 sec, accumulation: 0.000 sec [<Leave> befEute]
 * [003] section: 0.000 sec, accumulation: 0.000 sec [<Enter> exe]
[Sertrol@142][2018-10-17 01:55:00] JOB BEGIN
Serviator load Start


     test라는 파일을 접두어가 숫자로 들어가면서 test_"로 시작되는 파일로 짤라라.

$ split -d test test_     
$ ll
total 3220
-rw-r--r-- 1 in8 if 1622959 Oct 30 17:16 test
-rw-r--r-- 1 in8 if   49052 Oct 30 17:22 test_00
-rw-r--r-- 1 in8 if   49275 Oct 30 17:22 test_01
-rw-r--r-- 1 in8 if   49281 Oct 30 17:22 test_02
-rw-r--r-- 1 in8 if   49148 Oct 30 17:22 test_03
-rw-r--r-- 1 in8 if   49109 Oct 30 17:22 test_04
-rw-r--r-- 1 in8 if   63140 Oct 30 17:22 test_05
-rw-r--r-- 1 in8 if   56321 Oct 30 17:22 test_06
-rw-r--r-- 1 in8 if   69088 Oct 30 17:22 test_07
-rw-r--r-- 1 in8 if   66838 Oct 30 17:22 test_08
-rw-r--r-- 1 in8 if   69371 Oct 30 17:22 test_09
-rw-r--r-- 1 in8 if   68597 Oct 30 17:22 test_10
-rw-r--r-- 1 in8 if   72990 Oct 30 17:22 test_11
-rw-r--r-- 1 in8 if   68579 Oct 30 17:22 test_12
-rw-r--r-- 1 in8 if   75471 Oct 30 17:22 test_13
-rw-r--r-- 1 in8 if   75097 Oct 30 17:22 test_14
-rw-r--r-- 1 in8 if   78746 Oct 30 17:22 test_15
-rw-r--r-- 1 in8 if   72071 Oct 30 17:22 test_16
-rw-r--r-- 1 in8 if   75266 Oct 30 17:22 test_17
-rw-r--r-- 1 in8 if   70921 Oct 30 17:22 test_18
-rw-r--r-- 1 in8 if   72679 Oct 30 17:22 test_19
-rw-r--r-- 1 in8 if   66426 Oct 30 17:22 test_20
-rw-r--r-- 1 in8 if   66381 Oct 30 17:22 test_21
-rw-r--r-- 1 in8 if   59174 Oct 30 17:22 test_22
-rw-r--r-- 1 in8 if   58722 Oct 30 17:22 test_23
-rw-r--r-- 1 in8 if   49021 Oct 30 17:22 test_24
-rw-r--r-- 1 in8 if   22195 Oct 30 17:22 test_25


     test라는 파일을 10000라인을 기준 및 test_"로 시작되는 파일로 짤라라.

$ split -l 10000 test test_
$ ll
total 3220
-rw-r--r-- 1 in8 if 1622959 Oct 30 17:16 test
-rw-r--r-- 1 in8 if   49052 Oct 30 17:22 test_00
-rw-r--r-- 1 in8 if   49275 Oct 30 17:22 test_01
-rw-r--r-- 1 in8 if   49281 Oct 30 17:22 test_02
-rw-r--r-- 1 in8 if   49148 Oct 30 17:22 test_03
-rw-r--r-- 1 in8 if   49109 Oct 30 17:22 test_04
-rw-r--r-- 1 in8 if   63140 Oct 30 17:22 test_05
-rw-r--r-- 1 in8 if   56321 Oct 30 17:22 test_06
-rw-r--r-- 1 in8 if   69088 Oct 30 17:22 test_07
-rw-r--r-- 1 in8 if   66838 Oct 30 17:22 test_08
-rw-r--r-- 1 in8 if   69371 Oct 30 17:22 test_09
-rw-r--r-- 1 in8 if   68597 Oct 30 17:22 test_10
-rw-r--r-- 1 in8 if   72990 Oct 30 17:22 test_11
-rw-r--r-- 1 in8 if   68579 Oct 30 17:22 test_12
-rw-r--r-- 1 in8 if   75471 Oct 30 17:22 test_13
-rw-r--r-- 1 in8 if   75097 Oct 30 17:22 test_14
-rw-r--r-- 1 in8 if   78746 Oct 30 17:22 test_15
-rw-r--r-- 1 in8 if   72071 Oct 30 17:22 test_16
-rw-r--r-- 1 in8 if   75266 Oct 30 17:22 test_17
-rw-r--r-- 1 in8 if   70921 Oct 30 17:22 test_18
-rw-r--r-- 1 in8 if   72679 Oct 30 17:22 test_19
-rw-r--r-- 1 in8 if   66426 Oct 30 17:22 test_20
-rw-r--r-- 1 in8 if   66381 Oct 30 17:22 test_21
-rw-r--r-- 1 in8 if   59174 Oct 30 17:22 test_22
-rw-r--r-- 1 in8 if   58722 Oct 30 17:22 test_23
-rw-r--r-- 1 in8 if   49021 Oct 30 17:22 test_24
-rw-r--r-- 1 in8 if   22195 Oct 30 17:22 test_25

$ wc -l test*
  25448 test
  10000 test_aa
  10000 test_ab
   5448 test_ac
728x90

'IT > OS (Unix Linux Windows)' 카테고리의 다른 글

[명령어]basename / dirname  (0) 2018.11.02
[명령어]ln  (0) 2018.10.30
[명령어]find  (0) 2018.10.30
[명령어]touch  (0) 2018.10.30
[명령어]파일시스템 관련 df / du  (0) 2018.10.30

+ Recent posts