首頁  >  問答  >  主體

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 与管线命令啦!

怪我咯怪我咯2766 天前362

全部回覆(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
  • 取消回覆