>  Q&A  >  본문

linux - 鸟哥书中关于tar模拟cp命令的疑问

例子如下,我搞不懂能用简单的 cp -r /etc /tmp干嘛还要用tar?tar -cvf - /etc | tar -xvf -和cp相比到底有什么特别之处?

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!

怪我咯怪我咯2764일 전360

모든 응답(4)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-17 12:03:52

    有一个常见的体验:大量散碎的传输很浪费时间。比如说:备份和恢复网站文件的时候,一般都不会直接上传下载,而是习惯性的打个包先…

    这个玩法也是一样。如果直接cp命令,那么其本质是读一个文件,然后写一个文件。而通过tar管道接力,就可以充分利用管道缓冲区的尺寸,那么本质上就是读一个缓冲区的大小,然后写一个缓冲区的大小。这样对于小文件就能够自然而然的实现一次读一批、一次写一批。

    tar能够这样做,也仰仗于tar包是一个便于顺序流入、顺序流出的格式。tar格式基本上是:[TAR文件头][文件实际内容][TAR文件头][文件实际内容] …… [TAR文件头][文件实际内容][TAR文件尾],所以后一级的tar就可以流入一点数据处理一点,而不必等待整个tar包都来了再解开。

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 12:03:52

    性能问题。
    cp命令会逐个读取文件,然后写入到新的位置。
    tar命令会尽可能多地读取文件内容,然后才成批写入新的位置。

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 12:03:52

    我觉得唯一的特别之处就是tar可以让被复制的文件在屏幕上显示出来,cp什么都不显示

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 12:03:52

    我觉得还有一个原因,就是用tar处理可以保留文件权限,如果是cp的话,最终结果文件是什么权限,就不好说了。

    회신하다
    0
  • 취소회신하다