Можно ли проверить ход выполнения процесса cp? Некоторые процессы реагируют на различные сигналы KILL, чтобы вы могли проверить их состояние. Я знаю, что могу запустить cp с параметром -v, но что, если забыли это сделать, cp работает очень долго, и я хочу знать, какой файл копируется, или сколько уже скопировано.
54
while sleep 1 ; do sync ; done
.Ответы:
Да, запустив stat для целевого файла и локального файла, и получите размер файла,
т.е.
stat -c "%s" /bin/ls
И вы получаете процент скопированных данных, сравнивая два значения, вот и все
В очень простой реализации это будет выглядеть так:
источник
В последних версиях Mac OS X вы можете просто нажать CTRL+, Tчтобы увидеть прогресс. Из справочной страницы OSX 10.6 для cp (1) :
Нажатие CTRL+ Tэквивалентно сигналу текущего процесса с помощью SIGINFO на машинах BSD-ish, включая OSX.
Это работает и для dd (1) .
Я не думаю, что в Linux есть такой механизм SIGINFO, и я не вижу в справочной странице GNU для cp (1) ничего о сигналах, которые можно использовать для сообщения о прогрессе.
источник
mv
жив. Спасибо!Когда вы копируете много файлов
du -s /path/to/destination
илиfind /path/to/destination | wc -l
даете представление о том, сколько уже сделано.Вы можете узнать, в какой файл копируется,
lsof -p1234
где 1234 - это идентификатор процессаcp
. Во многих системахpgrep -x cp
сообщает идентификаторы всех запущенных процессовcp
. Это может быть не очень полезно, так как порядок, в котором копируются файлы внутри данного каталога, по сути непредсказуем (в большом каталоге в Linuxls --sort=none
вам скажут; с деревом каталогов, попробуйтеfind
).lsof -p1234
также сообщает вам, сколько байтовcp
уже прочитано и записано для текущего файла вOFFSET
столбце.В Linux есть статистика использования IO
/proc/$pid/io
(опять же, используйте PIDcp
процесса для$pidf
).rchar
Значение представляет собой общее количество байт , что процесс чтения иwchar
это количество байт , что процесс записи. Это включает в себя не только данные в файлах, но и метаданные в каталогах. Вы можете сравнить эту цифру с приблизительной цифрой, полученной сdu /path/to/source
(которая учитывает только данные файла).read_bytes
иwrite_bytes
включать только то, что было прочитано или записано из хранилища, то есть исключает диагностику терминала и данные, уже находящиеся в кеше или все еще в буферах.источник
watch lsof -p1234
watch lsof -p`pgrep -x cp`
Относительно новый инструмент, который делает именно это - прогресс (ранее cv [coreutils viewer]).
Что это такое?
Как это работает?
источник
Один из моих любимых приемов для этого (под Linux) - узнать PID
cp
процесса (используяps | grep cp
или подобный), а затем посмотреть/proc/$PID/fd/
и/proc/$PID/fdinfo/
.Это покажет вам, какие файлы открыт у процесса. Если вы хотите увидеть, как далеко в файл идет процесс ...
pos
параметром является положение указателя чтения (или записи), в байтах.источник
Есть несколько вещей, которые вы можете сделать. Вы можете присоединиться
strace
к нему, чтобы посмотреть, что он делает (вывод может быть обильным!):или вы можете
lsof
сказать, какие файлы открыты в данный момент:Если вы используете большой рекурсив
cp
, вы можете использоватьpwdx
текущий рабочий каталог, который может дать вам некоторое представление о том, как он работает:источник
Несмотря на то, что OP особо упомянул способность видеть, как продвигается команда «cp», следует сказать, что другие утилиты лучше подходят для этой конкретной проблемы.
Например:
покажет процесс копирования файла / папки FROM в файл TO / FOLDER.
И rsync скажет вам, сколько он скопировал (и скорость передачи) по пути. Он работает для отдельных файлов или папок на одном компьютере или в сети.
источник
rsync
.Что вы можете сделать, это проверить файлы в месте назначения.
Если ваши команды cp похожи,
cp -a <my_source> <my_dest_folder>
я бы проверил, какие файлы уже скопированы<my_dest_folder>
и каждый размер файла, чтобы я мог видеть прогресс. Если<my_source>
это немного сложно (несколько уровней каталогов), то небольшой сценарий сможет проверить состояние. Хотя такой сценарий может потреблять немного ввода-вывода, который затем не будет использоватьсяcp
процессом.источник
Этот инструмент представляет собой команду утилиты Linux, которая ищет основные команды coreutils (cp, mv, dd, tar, gzip / gunzip, cat и т. Д.), Которые в настоящее время выполняются в вашей системе, и отображает процент скопированных данных:
https://github.com/Xfennec/cv
источник
Я хотел бы добавить
cpv
, небольшую обертку для того,pv
что я написал, которая имитирует использованиеcp
.Просто и полезно
Вы можете получить это здесь
источник
Вы также можете использовать pipeviewer .
источник
Используйте
pv -d
:( источник )
Узнайте PID вашего бега
cp
(pidof cp
), скажем, это 12345; тогда простоПримечания:
pv
от имени того же пользователя, который запускаетсяcp
(или от имени пользователя root).cp
в данный момент выполняется обработка небольших файлов, вы, вероятно, не увидите их все в выводе (маленький файл может закрыться слишком быстро,pv
чтобы его можно было поднять). Тем не менее, некоторые появятся, так что даже тогда вы сможете рассказать, чтоcp
делает.pv -d "$(pidof cp)"
может работать; но если работает более одногоcp
, это не сработает. Существует,pidof -s
который возвращает не более одного PID, но вы не можете быть уверены, что он будет принадлежать правильномуcp
процессу, если их много.источник
Вы можете отправить сигнал процессу:
Еще полезнее создать скрипт, который будет опрашивать, пока вы не нажмете Ctrl-C или процесс не завершится:
Работает на дд. Не работает для cp . Возможно, вам придется использовать другой сигнал. Однажды я попробовал SIGINFO, но, похоже, он больше не существует на платформе Intel.
источник