2010-08-23 3 views
0

cp 진행을 모니터하기 위해 다음 bash 스크립트를 찾았습니다.유닉스 strace 명령

#!/bin/sh 
cp_p() 
{ 
    strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \ 
     | awk '{ 
     count += $NF 
      if (count % 10 == 0) { 
       percent = count/total_size * 100 
       printf "%3d%% [", percent 
       for (i=0;i<=percent;i++) 
        printf "=" 
       printf ">" 
       for (i=percent;i<100;i++) 
        printf " " 
       printf "]\r" 
      } 
     } 
     END { print "" }' total_size=$(stat -c '%s' "${1}") count=0 
} 

strace 명령에 "-ewrite"옵션을 이해하지 못합니다. 내가 찾은 가장 가까운 것은

-e 쓰기 = 세트가 지정된 세트에 나와있는 설명 을 파일에 기록 된 모든 데이터의 전체 16 진수 및 ASCII 덤프를 수행입니다 strace를위한 매뉴얼 페이지입니다. 예제의 경우 파일 설명자 3과 5의 모든 출력 활동을 보려면 -e 쓰기 = 3,5를 사용하십시오. 이것은 의 trace (write) 옵션에 의해 제어되는 인 write (2) 시스템 호출의 정상 추적과는 별도로 입니다.

그러나 필자는 -ewrite 옵션이 무엇을하는지 이해하지 못합니다.

+0

당신이 @ http://chris-lamb.co.uk/2008/01/24/can-you-get-cp- 여기에서 코드를 받았어 progress-bar-like-wget /을 사용하고 보안 복사 ** scp **를 사용하여 대체 기술을 시도 했습니까? BTW 당신이 스크립트를 가져온 곳에서 스크립트의 소스를 지정 했어야합니다 ... – t0mm13b

+0

세부 사항 :'strace'는 주로 리눅스이지만 다른 플랫폼에서도 사용할 수 있습니다. Solaris는 'truss'또는 Dtrace 시스템을 사용합니다. HP-UX 및 AIX의 동등 물이 무엇인지 결코 기억할 수 없습니다. –

+0

@ tommieb75 네, 거기에서 대본을 받았습니다. – Albinoswordfish

답변

4

- 쓰기는 "쓰기"시스템 호출 만 추적된다는 것을 의미합니다.

-e expr 추적 할 이벤트 또는 추적 방법을 수정하는 한정 표현식입니다. 표현의 형식은 다음과 같습니다

     [qualifier=][!]value1[,value2]... 

      where qualifier is one of trace, abbrev, verbose, 
      raw, signal, read, or write and value is a quali- 
      fier-dependent symbol or number. The default qual- 
      ifier is trace. Using an exclamation mark negates 
      the set of values. For example, -eopen means lit- 
      erally -e trace=open which in turn means trace only 
      the open system call. By contrast, -etrace=!open 
      means to trace every system call except open. In 
      addition, the special values all and none have the 
      obvious meanings. 

      Note that some shells use the exclamation point for 
      history expansion even inside quoted arguments. If 
      so, you must escape the exclamation point with a 
      backslash.