CP 실행 진행 상황을 확인하는 방법은 무엇입니까?

CP 실행 진행 상황을 확인하는 방법은 무엇입니까?

cp 프로세스 실행 진행 상황을 확인할 수 있나요? 일부 프로세스는 다양한 KILL 신호에 응답하여 상태를 확인할 수 있습니다. -v 매개변수를 사용하여 cp를 실행할 수 있다는 것을 알고 있지만, 이를 잊어버리면 cp가 오랫동안 실행되며 어떤 파일이 복사되고 있는지 또는 얼마나 많은 파일이 복사되었는지 알고 싶습니다.

답변1

최신 버전의 Mac OS X에서는 CTRL+를 누르면 T진행 상황을 확인할 수 있습니다. ~에서OSX 10.6 cp(1) 매뉴얼 페이지:

 "If cp receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output file and the percentage complete will be
 written to the standard output."

BSD 스타일 시스템(OSX 포함)에서 CTRL+를 클릭하는 것은 TSIGINFO를 사용하여 현재 프로세스에 신호를 보내는 것과 같습니다.

이는 다음에 적용됩니다.일(1)게다가.

나는 Linux에 이러한 SIGINFO 메커니즘이 없다고 생각합니다.cp(1)에 대한 GNU 매뉴얼 페이지진행 상황을 보고하는 데 사용할 수 있는 신호에 대해 설명합니다.

답변2

예, 대상 파일과 로컬 파일에 대해 stat를 실행하고 파일 크기를 가져오면

stat -c "%s" /bin/ls

두 값을 비교하여 복제된 데이터의 백분율을 얻을 수 있습니다.

매우 기본적인 구현에서는 다음과 같습니다.

function cpstat()
{
  local pid="${1:-$(pgrep -xn cp)}" src dst
  [[ "$pid" ]] || return
  while [[ -f "/proc/$pid/fd/3" ]]; do
    read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
    (( src )) || break
    printf 'cp %d%%\r' $((dst*100/src))
    sleep 1
  done
  echo
}

답변3

많은 수의 파일을 복사할 때, du -s /path/to/destination또는 find /path/to/destination | wc -l얼마나 많은 작업이 이루어졌는지에 대한 아이디어를 제공하기 위해.

lsof -p1234프로세스 ID 1234로 어떤 파일이 복사되고 있는지 확인할 수 있습니다 cp. 많은 시스템에서 pgrep -x cp이름이 지정된 모든 실행 프로세스의 프로세스 ID가 보고됩니다 cp. 특정 디렉터리 내에서 파일이 복사되는 순서는 본질적으로 예측할 수 없기 때문에 이는 별로 유용하지 않을 수 있습니다(Linux의 대규모 디렉터리에서는 ls --sort=none이 방법을 통해 알 수 있습니다. 디렉터리 트리의 경우 시도해 보세요 find).

lsof -p1234cp또한 현재 파일에 대해 해당 열에서 읽고 쓴 바이트 수를 알려줍니다 OFFSET.

Linux에는 IO 사용 통계가 있습니다(다시 /proc/$pid/io프로세스의 PID를 사용함). 이 값은 프로세스가 읽은 총 바이트 수이자 프로세스가 쓴 바이트 수입니다. 여기에는 파일의 데이터뿐만 아니라 디렉터리의 메타데이터도 포함됩니다. 이 숫자를 (파일 데이터만 계산)하여 얻은 대략적인 숫자와 비교할 수 있습니다. 스토리지에서 읽거나 쓴 내용만 포함됩니다. 즉, 터미널 진단과 이미 캐시에 있거나 아직 버퍼에 있는 데이터는 제외됩니다.cp$pidfrcharwchardu /path/to/sourceread_byteswrite_bytes

답변4

(Linux에서) 제가 가장 좋아하는 방법 중 하나는 프로세스의 PID를 알아내고 cp( ps | grep cpPID 등을 사용하여) /proc/$PID/fd/합계를 보는 것입니다 /proc/$PID/fdinfo/.

$ cp -r y z
^Z
$ ls -l /proc/8614/fd
lrwx------ 1 jander jander 64 Aug  2 15:21 0 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:21 1 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:20 2 -> /dev/pts/4
lr-x------ 1 jander jander 64 Aug  2 15:21 3 -> /home/jander/y/foo.tgz
l-wx------ 1 jander jander 64 Aug  2 15:21 4 -> /home/jander/z/foo.tgz

그러면 프로세스에서 어떤 파일이 열려 있는지 표시됩니다. 프로세스가 파일의 어느 정도까지 진행되는지 확인하려면...

$ cat /proc/8614/fdinfo/3
pos:    105381888
flags:  0500000

인수는 pos읽기(또는 쓰기) 포인터의 위치(바이트)입니다.

관련 정보