Linux pv копирование файлов

Обновлено: 07.07.2024

Однако команда dd, как известно, при копировании файла не отображает прогресс бар для пользователя, поэтому непонятно сколько процентов файлов уже скопировано.

В этой статье мы рассмотрим как посмотреть прогресс dd в linux, этот метод подходит не только для dd, но и для всех подобных ей утилит.

Прогресс команды Linux с помощью progress

Установка progress

Эта утилита не поставляется с системой по умолчанию. Но установить ее очень просто, программа есть в официальных репозиториях большинства дистрибутивов. Например, в Ubuntu:

В других дистрибутивах она может быть более старой версии и назваться cv. Также вы можете собрать программу из исходников. Единственная зависимость - библиотека ncurces. В Ubuntu 16.04 ее можно установить такой командой:

В прежних версиях Ubuntu:

В Fedora и CentOS:

Когда удовлетворите зависимости утилиты, выполните следующую команду для загрузки исходников с GitHub:

Затем распакуйте полученный архив:

Измените текущий каталог с помощью cd:

Запустите сборку и установку:

Программа готова к работе.

Смотрим прогресс команды с помощью progress

После завершения установки запустите progress следующей командой:

В результате получится что-то вроде:

process

Теперь давайте запустим копирование видео из папки на рабочий стол и посмотрим что произойдет:

Команда progress покажет прогресс копирования cp:

process1

Выполним progress еще раз:

process2

Как видите, утилита показывает информацию о прогрессе копирования файла, процент скопированных данных, количество скопированных данных и общий размер файла. Это очень полезно при копировании больших файлов, например, при копировании фильмов или образов дисков. То же самое будет если запустить dd, mv, tar, zip или другую подобную утилиту.

В утилиты есть много полезных опций. Опция -w заставляет программу показывать время, оставшееся до окончания операции:

process3

process4

process5

Вы можете отслеживать состояние процесса пока он запущен:

process6

Если вы хотите постоянно наблюдать за прогрессом всех команд используйте опцию -М:

Или ее эквивалент:

Очень популярный вот такой вариант:

Также можно посмотреть прогресс linux только нужной программы, например, прогресс загрузки файла в firefox:

Или проверить активность web-сервера:

Способ второй - создание туннеля

То, что мы рассмотрели выше - не единственный способ посмотреть прогресс команды linux. Еще есть утилита pv. Она намного проще и выполняет только одну задачу - считает все данные проходящие через нее. Может читать поток из файла или стандартного ввода.

Поэтому ее можно использовать чтобы посмотреть прогресс выполнения команды в Linux. Например, создадим такой туннель для dd:

Здесь мы выдаем содержимое нужного нам файла на стандартный вывод, передаем утилите pv, а затем она отдает его другой утилите, которая уже выполняет запись в файл. Для cp такое сделать не получиться, но мы можем поступить немного по-другому:

Готово, здесь мы тоже получим прогресс команды копирования.

Выводы

Чтобы использовать всю мощь Linux пользователям часто приходится работать в командной строке. Чаще всего мы смотрим содержимое, копируем файлы, распаковываем архивы. В этой инструкции мы рассмотрели утилиту process, которую можно использовать для просмотра прогресса dd и других системных команд.

Мне всегда было интересно посмотреть прогресс копирования cp для больших файлов. Честно говоря, я часто имею дело с большими файлами при просмотре фильмов на своем ноутбуке.

Один мой друг сказал по поводу pv следующее «Я админю семь лет, мне нужна была эта тулза десятки раз, а я даже не знал что она существует». В размышлениях над тем как заполучить инвайт на Харбе, я набрал в поиске pv. И ничего не нашел.

И так pv — это сокращенно от pipeviewer, то есть ни много не мало как просмотрщик пайпов. Про эффективность использования пайпов расказывать не буду, ни для кого это не секрет. Единственное, «но» в работе с ними — это то, что набрав команду и нажав Enter часто не хватает самой малости — знать сколько времени займет ее выполнение. Именно cкорость обработки данных и будет нам показывать pv.

С лирикой покончено, перейдем к примерам.

Установка pv в Debian довольно тривиальна.
% sudo aptitude install pv

Дальше вводная, допустим вы такой же как и я счасливый обладатель каких-нибудь полезных логов и в какой-то момент у вас дошли руки их заархивировать, например так
% cat rt94-171-06 | gzip > rt94-171-06.gz
Есть мысли, сколько времени займет эта операция?

Тоже самое при помощи pv
%pv rt94-171-06 | gzip > rt94-171-06.gz
128MB 0:00:15 [ 9.1MB/s] [=====>. ] 18% ETA 0:01:07
Наглядно видно, что через пайп за 15 секунд прошло 128Мб — это 18% от всего объема, операция займет еще минуту и 7 секунд.

Может показаться, что pv это такая замена для cat, но на самом деле ее возможности намного шире. Например, упаковываем весь каталог в сжатый архив
%tar -czf - . | pv > out.tgz
21.9MB 0:00:15 [1.47MB/s] [. <=>. ]
Уже неплохо, но хочеться большего, чтобы показывалось время окончания работы. Для этого всего лишь надо при помощи ключа -s передать pv размер каталога в байтах
%tar -czf - . | pv -s $(du -sb | grep -o '4*') > out.tgz
44.3MB 0:00:27 [1.73MB/s] [>. ] 0% ETA 13:36:22
У меня вся операция займет 13 с половиной часов. Хех, накопил =)

Можно так же составлять команды из несколько копий pv.
%tar -cf - . | pv -cN tar -s $(du -sb | grep -o '9*') | gzip | pv -cN gzip > out.tgz
tar: 97.1MB 0:00:08 [12.3MB/s] [>. ] 0% ETA 1:50:26
gzip: 13.1MB 0:00:08 [1.6MB/s] [. <=>. ]
Ключ -c нужен, чтобы несколько копий pv не выводили информацию друг поверх друга. Ключ -N дает имя шкале.

Ну и под конец забавный пример с одного англоязычного блога о Линуксе
%pv /dev/urandom > /dev/null
18MB 0:00:05 [ 3,6MB/s] [. <=>. ]


Установка pv в Debian/Ubuntu

Установка pv утилиты, очень простая, выполняем:

Установка pv в CentOS/Fedora/RedHat

Для начала, подключаем репозиторий EPEL:

Установка pv утилиты, очень простая, выполняем:

Установка pv в FreeBSD

Установка pv утилиты, очень простая, выполняем:

Установка pv в Mac OS X

Устанавливаем homebrew: Установка homebrew на Mac OS X после чего, выполняем:

Установка pv в OpenSolaris

Если Вы пользователь OpenSolaris:

Установка pv для других Unix/Linux

Если не имеется пакета для установки, то переходим на официальную страницу pv, загружаем архив и выполняем ряд действий:

Опции для утилиты pv

pv принимает множество опций и сейчас я предоставлю их.

Коммутаторы (Display Switches)

Модификаторы вывода

Модификаторы передачи данных

Общие опции

ФОРМАТИРОВАНИЕ

Использование утилиты pv в Unix/Linux

Например, можно использовать утилиту pv вместо cat, следующим образом:

Собственно, все наглядно выглядит. Не правда ли?

Давайте упакуем некоторую папку в архив:

Так же, можно составлять команды из несколько копий pv:

Можно выводить прогресс-бар в виде цифр (в столбик), например:

Такс, например, вам нужно ограничить скорость изменять скорость передачи данных через pv утилиту. Например, я использовал -L для ограничения скорости передачи данных до 4МБ/с:

Как я уже описывал разные опции, но опишу опции еще раз:

Можно поигратся и выполнить:

Чтобы узнать как быстро компьютер читает с /dev/zero, выполните:

Обнуление диска, можно выполнить следющим образом:

Чтобы проверить тест пропускной способности сети ssh, выполните:

И так, команда что выше, подключается к хосту через ssh и отображает скорость передачи в реальном времени, направляя все переданные данные в /dev/null.

Пример использования pv и dd утилиты:

Чтобы поиграться, выполните:

Используя инструмент pv и dialog, вы можете создать панель выполнения следующим образом:

Работа pv + mysql в Unix/Linux

Создать mysqldump можно так:

Влить созданный mysqldump можно так:

Более нагляднее, будет:

Чтобы сделать его еще приятнее, вы можете добавить progres NAME, например:

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Как следить за процессами в Linux с помощью команды PV и утилиты Progress

Как следить за процессами в Linux с помощью команды PV и утилиты Progress

Р ассмотрим сценарий, когда вы только начали копировать очень большой файл с флэш-накопителя на вашей системе Linux с помощью командной строки. Учитывая, что данный файл является тяжелым, вы знаете, процесс займет некоторое время, и поэтому вы начинаете делать другую работу.

Через некоторое время вы вернулись, только чтобы увидеть, что команда все еще работает. Вы сами решаете, дать продолжатся операции копирования еще некоторое время. Через некоторое время, когда вы посмотрите еще раз, вы наблюдаете, что ничего не изменилось, то есть процесс копирования не закончился, и команда не показало ошибку.

Было бы лучше, если бы мы могли видеть прогресс бар (или нечто подобное) в подобных ситуациях, так же, как мы делаем, когда мы пытаемся скопировать файл через GUI? Определенно, индикатор выполнения для операций командной строки будет очень полезен. Если вы искали такое решение, не смотрите дальше, в этой статье мы рассмотрим две утилиты командной строки, PV и Progress, которые сделают жизнь проще для вас в командной строке.

Обратите внимание, что все команды и инструкции, которые мы уже упоминали в данном руководстве, были протестированы на Ubuntu 14.04.

Команда PV в Linux

Согласно официальной документации, команда PV контролирует поток данных через pipe. Команда выводит следующую информацию о текущей операции: время , прошедшее, процент завершения (с прогресс бар), текущую скорость, пропускная способность общего объема передаваемых данных, и ETA.

Теперь, покажем использование команды PV на примере. Но до этого, убедитесь, что утилита присутствует в вашей системе. Если нет, то вы можете легко загрузить и установить ее на системах Debian (например, Ubuntu) с помощью следующей команды:

Теперь, перейдем к примеру. На следующем рисунке показана команда PV в действии, когда я копирую, изображений хранится внутри директории на моем флэш-накопителе на рабочем столе моей системы:

Команда PV в Linux

Как вы можете видеть, команда PV отображается индикатор выполнения, а также другую полезную информацию. Это поведение по умолчанию команды. Тем не менее, если вы хотите ограничить вывод, вы можете сделать это, используя переключения дисплеев. Например, следующая команда будет отображаться только индикатор прогресса, и ничего больше.

Это потому, что мы использовали -p переключатель дисплея, который говорит pv только включить индикатор выполнения. Для получения полного списка переключателей дисплея, смотрите команды man page.

И, наконец, команда PV также предлагает некоторые модификаторы передачи данных. Например, если вы хотите, вы можете ограничить передачу определенного количества байтов в секунду. Если взглянуть на скриншот ранее, скорость передачи данных составляет более 18MBps. Теперь предположим, что вы хотите ограничить до 5Mbps, для этого вам необходимо выполнить следующую команду:

Linux команда PV в действии

Команда Progress в Linux

Затем загрузите командный пакет Progress из репозитория GitHub с помощью следующей команды:

Войдите в каталог «Progress» и выполните следующие команды:

Вот и все. Команда Progress теперь будет установлена на вашем компьютере Linux. Следующий скриншот (взят из проекта на странице GitHub ) показывает команду в действии:

Linux команда Progress в действии

Как вы можете видеть, команда Progress дает вам информацию обо всех текущих операциях, которые включают команды Coreutils. Как и любой другой инструмент командной строки Linux, Progress также предлагает несколько вариантов командной строки. Ниже приведен список опций, которые могут быть полезными для вас:

Как следить за процессами в Linux с помощью команд PV и Progress

Вывод

В то время как инструмент Progress ограничивается командами Coreutils, PV может быть использован и в целом контролировать любую команду строки активности. Кроме того, PV легко загрузить и установить. Но прежде чем идти вперед и заключить, что PV лучше, чем Progress, имейте в виду, что в отличие от PV, с прогрессом вы не должны изменить команду, которую вы хотите контролировать. Итак, какой из этих двух лучше в целом зависит от ваших требований.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: