Progress - Linux显示文件操作的进度

  • 原创
  • Madman
  • /
  • 2018-05-14 09:55
  • /
  • 0
  • 346 次阅读

Progress - Linux显示文件操作的进度-min.png

Synopsis: progress是一个轻量级的、只支持Linux和OSX系统的用C语言开发的小工具,当系统中像cp、mv、dd、tar、gzip等命令需要长时间运行时,progress可以显示这些命令的执行进度,实时显示它们操作文件的百分比,同时还会显示拷贝速度、预计完成时间等信息

1. 安装

progress - Coreutils Progress Viewer

1. 依赖ncurses库
# yum -y install ncurses-devel

2. 源码编译安装
# git clone https://github.com/Xfennec/progress  # 如果提示没有git请先安装它
# cd progress
# make && make install

目前支持显示进度的Linux命令:

# progress --help
progress - Coreutils Viewer
---------------------
Shows progress on file manipulations (cp, mv, dd, ...)

Monitored commands (default):
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat b
zcat lzcat split gpg 
Usage: progress [-qdwmM] [-W secs] [-c command] [-p pid]
  -q --quiet                   hides all messages
  -d --debug                   shows all warning/error messages
  -w --wait                    estimate I/O throughput and ETA (slower display)
  -W --wait-delay secs         wait 'secs' seconds for I/O estimation (implies -w, default=1.0)
  -m --monitor                 loop while monitored processes are still running
  -M --monitor-continuously    like monitor but never stop (similar to watch progress)
  -a --additional-command cmd  add additional command to default command list
  -c --command cmd             monitor only this command name (ex: firefox)
  -p --pid id                  monitor only this process ID (ex: `pidof firefox`)
  -i --ignore-file file        do not report process if using file
  -o --open-mode {r|w}         report only files opened for read or write
  -v --version                 show program version and exit
  -h --help                    display this help and exit


Multiple options allowed for: -a -c -p -i. Use PROGRESS_ARGS for permanent arguments.

2. 工作原理

progress非常轻巧,几乎可以与任何命令兼容。它首先根据要监控的命令,找到它的进程号,然后扫描/proc/<监控命令的进程号>/fd//proc/<监控命令的进程号>/fdinfo/目录,查看此命令打开了哪些文件,并报告最大文件的拷贝进度

3. 使用

3.1 监控所有当前和即将要执行的命令的进度

1. 在当前会话执行
# watch progress -q

2. 新建会话,执行拷贝命令
# mkdir /media/CentOS
# mount /dev/cdrom /media/CentOS
# cp -a /media/CentOS /tmp

一旦执行cp命令后,原来的会话中progress就开始显示拷贝的进度了:

Every 2.0s: progress -q                          Thu May 10 14:40:37 2018

[ 1766] cp /media/CentOS/Packages/kde-l10n-German-4.10.5-2.el7.noarch.rpm
        12.4% (4.5 MiB / 36.3 MiB)

也可以输入watch -n 1 progree -q,每隔1秒显示进度

3.2 监控所有当前执行的命令的进度

1. 在当前会话执行拷贝命令
# mount /dev/cdrom /media/CentOS
# cp -a /media/CentOS /tmp

2. 新建会话,再执行拷贝命令
# cp -a /media/CentOS /tmp/CentOS02

2. 新建会话,查看拷贝进度
[root@CentOS ~]# progress -w
[ 1988] cp /media/CentOS/Packages/kde-l10n-Dutch-4.10.5-2.el7.noarch.rpm
    8.4% (1.3 MiB / 15.6 MiB)

[ 1992] cp /media/CentOS/LiveOS/squashfs.img
    24.4% (77.5 MiB / 317.3 MiB) 18.6 MiB/s remaining 0:00:12

[root@CentOS ~]# 

输出信息中1988和1992代表两个会话中分别执行的拷贝命令的进程号,此时cp拷贝的其实是一个非常大的目录,每次用progress -w只会显示当前正在拷贝的其中一个文件,打印输出后就返回到shell命令行,不会持续监控cp命令的拷贝进度

3.3 只监控指定命令的进度

1. 监控火狐浏览器中文件的下载速度
# watch progress -wc firefox

2. 监控Apache的性能
# progress -c httpd

3.4 监控重复命令的执行进度

在3.2中不能持续监控cp命令的拷贝进度,-m选项可以在要监控的命令尚未结束时,循环输出命令的进度;-p选项指定要监控的命令的进程号,在shell中$!表示上一命令的进程号,那么可以在命令行中先输入cp命令,然后用&连接progress命令即可:

# cp -a /media/CentOS /tmp & progress -mp $!

4. 总结

如果你已经在运行像cp类似的命令了,由于文件太大,想看看目前的拷贝进度,可以新建一个会话,输入watch -n 1 progree -q即可,或者progress -wm

如果你还没运行拷贝命令,可以在拷贝命令的末尾添加& progress -mp $!,会在当前会话持续监控拷贝的进度

未经允许不得转载: LIFE & SHARE - 王颜公子 » Progress - Linux显示文件操作的进度

分享

作者

作者头像

Madman

如果博文内容有误或其它任何问题,欢迎留言评论,我会尽快回复; 或者通过QQ、微信等联系我

0 条评论

暂时还没有评论.

发表评论前请先登录