如何使用Linux Pipe查看命令进度

时间:2020-03-05 15:30:00  来源:igfitidea点击:

当我们处理某些流程时,有时我们需要可视化文件操作的进度。

一些命令具有一个参数来查看进度,但是对于没有命令的参数,我们需要使用另一种方法。
为了缓解此问题,我们可以使用管道查看器来指示我们启动的不同进程的进度。

什么是管道查看器

管道查看器(pv)是一个CLI工具,可让我们通过提供诸如已完成百分比,预计到达时间,传输的总数据,经过的时间等信息来监视通过管道的数据进度。
如果我们有某些进程,则可以插入管道查看器作为不同过程之间的正常管道,以可视方式指示进度。

在本文中,将介绍Rocco Musolino在他的Github页面上提出的Node.js中的Unix管道查看器实用程序。

它仅使用两个参数:

  • '-s,--size <大小>':假设要传输的数据总量为SIZE。我们可以提供以字节为单位的大小,也可以使用单位('b,kb,mb,gb,tb')。
  • '-N,--name <名称>':使用NAME前缀输出信息。

1)安装

可以通过node.js安装Rocco的Unix pv,如下所示:

# npm install -g pv
/usr/bin/pv -> /usr/lib/node_modules/pv/bin/pv.js
+ [email protected]
added 15 packages in 0.953s

管道查看器用法示例

在这一部分中,将介绍一些不同的示例,这些示例可以使用pv工具

a)显示dd复制进度

使用dd命令时,可以显示文件复制的进度

# dd if=ubuntu-gnome-17.04-desktop-amd64.iso | pv | dd of=dest/ubuntu17
 0.00% | 0 ETA | 1.36GB Transferred | 95.71MB/s2964416+0 records in
2964416+0 records out
1517780992 bytes (1.5 GB) copied, 14.7174 s, 103 MB/s
 100.00% | 0 ETA | 1.41GB Transferred | 96.5MB/s2964416+0 records in
2964416+0 records out
1517780992 bytes (1.5 GB) copied, 14.7301 s, 103 MB/s

b)cat 命令进度

例如,我们可以决定在显示消息日志文件的内容时显示cat命令的进度。

# cat /var/log/messages | pv
Oct 13 03:36:02 localhost journal: Runtime journal is using 6.1M (max allowed 49.4M, trying to leave 74.1M free of 488.4M available → current limit 49.4M).
Oct 13 03:36:02 localhost kernel: Linux version 4.9.36-x86_64-linode85 ([email protected]) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Thu May 6 15:31:23 UTC 2016
........
........
100.00% | 0 ETA | 114.83KB Transferred | 114.83KB/s

c)压缩时显示进度

在进行某些压缩操作期间,我们可能需要显示进度。
可能如下

# tar -cf - /var/log/| pv -N backlog | tar -C . -x
tar: Removing leading `/' from member names
backlog: 100.00% | 0 ETA | 660KB Transferred | 660KB/s

d)可视化实时ssh网络

我们可以通过ssh连接到主机并显示实时传输速度。
在本例中,我们将使用本地测试将所有传输的数据定向到“/dev/null”

# yes | pv | ssh paul@localhost "cat > /dev/null"
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:lqes2c9Obi9lCSepwdT8uovcsmhcboUAsylF69MENDE.
ECDSA key fingerprint is MD5:38:67:a1:25:96:7b:69:02:f6:b8:ff:5d:ce:03:fd:a0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
paul@localhost's password: 
 0.00% | 0 ETA | 800.84MB Transferred | 17.04MB/s

Rocco Musolino的Unix管道查看器不显示进度条中已完成的百分比,而是通过软件包安装的“常规”管道查看器。