如何在Linux中復(fù)制文檔?

2021-02-26    分類: 網(wǎng)站建設(shè)

了解在 Linux 中多種復(fù)制文檔的方式以及各自的優(yōu)點(diǎn)。

在辦公室里復(fù)印文檔過(guò)去需要專門的員工與機(jī)器。如今,復(fù)制是電腦用戶無(wú)需多加思考的任務(wù)。在電腦里復(fù)制數(shù)據(jù)是如此微不足道的事,以致于你還沒(méi)有意識(shí)到復(fù)制就發(fā)生了,例如當(dāng)拖動(dòng)文檔到外部硬盤的時(shí)候。

數(shù)字實(shí)體復(fù)制起來(lái)十分簡(jiǎn)單已是一個(gè)不爭(zhēng)的事實(shí),以致于大部分現(xiàn)代電腦用戶從未考慮過(guò)其它的復(fù)制他們工作的方式。無(wú)論如何,在 Linux 中復(fù)制文檔仍有幾種不同的方式。每種方法取決于你的目的不同而都有其獨(dú)到之處。

以下是一系列在 Linux、BSD 及 Mac 上復(fù)制文件的方式。

在 GUI 中復(fù)制

如大多數(shù)操作系統(tǒng)一樣,如果你想的話,你可以完全用 GUI 來(lái)管理文件。

拖拽放下

最淺顯的復(fù)制文件的方式可能就是你以前在電腦中復(fù)制文件的方式:拖拽并放下。在大多數(shù) Linux 桌面上,從一個(gè)本地文件夾拖拽放下到另一個(gè)本地文件夾是移動(dòng)文件的默認(rèn)方式,你可以通過(guò)在拖拽文件開(kāi)始后按住 Ctrl 來(lái)改變這個(gè)行為。

你的鼠標(biāo)指針可能會(huì)有一個(gè)指示,例如一個(gè)加號(hào)以顯示你在復(fù)制模式。


復(fù)制一個(gè)文件

注意如果文件是放在遠(yuǎn)程系統(tǒng)上的,不管它是一個(gè) Web 服務(wù)器還是在你自己網(wǎng)絡(luò)里用文件共享協(xié)議訪問(wèn)的另一臺(tái)電腦,默認(rèn)動(dòng)作經(jīng)常是復(fù)制而不是移動(dòng)文件。

右擊

如果你覺(jué)得在你的桌面拖拽文檔不夠精準(zhǔn)或者有點(diǎn)笨拙,或者這么做會(huì)讓你的手離開(kāi)鍵盤太久,你可以經(jīng)常使用右鍵菜單來(lái)復(fù)制文件。這取決于你所用的文件管理器,但通常來(lái)說(shuō),右鍵彈出的關(guān)聯(lián)菜單會(huì)包括常見(jiàn)的操作。

關(guān)聯(lián)菜單的“復(fù)制”動(dòng)作將你的復(fù)制一個(gè)文件

從右鍵菜單復(fù)制文件

在這種情況下,你并沒(méi)有將文件的內(nèi)容復(fù)制到你的剪切版上。取而代之的是你復(fù)制了文件路徑。當(dāng)你粘貼時(shí),你的文件管理器會(huì)查看剪貼板上的路徑并執(zhí)行復(fù)制命令,將相應(yīng)路徑上的文件粘貼到你準(zhǔn)備復(fù)制到的路徑。

用命令行復(fù)制

雖然 GUI 通常是相對(duì)熟悉的復(fù)制文件方式,用終端復(fù)制卻更有效率。

cp

在終端上等同于在桌面上復(fù)制和粘貼文件的最顯而易見(jiàn)的方式就是 cp 命令。這個(gè)命令可以復(fù)制文件和目錄,也相對(duì)直接。它使用熟悉的來(lái)源和目的(必須以這樣的順序)句法,因此復(fù)制一個(gè)名為 example.txt 的文件到你的 Documents 目錄就像這樣:

  1. $ cp example.txt ~/Documents

就像當(dāng)你拖拽文件放在文件夾里一樣,這個(gè)動(dòng)作并不會(huì)將 Documents 替換為 example.txt。取而代之的是,cp 察覺(jué)到 Documents 是一個(gè)文件夾,就將 example.txt 的副本放進(jìn)去。

你同樣可以便捷有效地重命名你復(fù)制的文檔:

  1. $ cp example.txt ~/Documents/example_copy.txt

重要的是,它使得你可以在與原文件相同的目錄中生成一個(gè)副本:

  1. $ cp example.txt example.txt
  2. cp: 'example.txt' and 'example.txt' are the same file.
  3. $ cp example.txt example_copy.txt

要復(fù)制一個(gè)目錄,你必須使用 -r 選項(xiàng)(代表 --recursive,遞歸)。以這個(gè)選項(xiàng)對(duì)目錄 nodes 運(yùn)行 cp 命令,然后會(huì)作用到該目錄下的所有文件。沒(méi)有 -r 選項(xiàng),cp 不會(huì)將目錄當(dāng)成一個(gè)可復(fù)制的對(duì)象:

  1. $ cp notes/ notes-backup
  2. cp: -r not specified; omitting directory 'notes/'
  3. $ cp -r notes/ notes-backup

cat

cat 命令是最易被誤解的命令,但這只是因?yàn)樗憩F(xiàn)了 POSIX 系統(tǒng)的極致靈活性。在 cat 可以做到的所有事情中(包括其原意的連接文件的用途),它也能復(fù)制。例如說(shuō)使用 cat 你可以僅用一個(gè)命令就從一個(gè)文件創(chuàng)建兩個(gè)副本。你用 cp 無(wú)法做到這一點(diǎn)。

使用 cat 復(fù)制文檔要注意的是系統(tǒng)解釋該行為的方式。當(dāng)你使用 cp 復(fù)制文件時(shí),該文件的屬性跟著文件一起被復(fù)制,這意味著副本的權(quán)限和原件一樣。

  1. $ ls -l -G -g
  2. -rw-r--r--. 1 57368 Jul 25 23:57  foo.jpg
  3. $ cp foo.jpg bar.jpg
  4. -rw-r--r--. 1 57368 Jul 29 13:37  bar.jpg
  5. -rw-r--r--. 1 57368 Jul 25 23:57  foo.jpg

然而用 cat 將一個(gè)文件的內(nèi)容讀取至另一個(gè)文件是讓系統(tǒng)創(chuàng)建了一個(gè)新文件。這些新文件取決于你的默認(rèn) umask 設(shè)置。要了解 umask 更多的知識(shí),請(qǐng)閱讀 Alex Juarez 講述 umask 以及權(quán)限概覽的文章。

運(yùn)行 unmask 獲取當(dāng)前設(shè)置:

  1. $ umask
  2. 0002

這個(gè)設(shè)置代表在該處新創(chuàng)建的文檔被給予 664(rw-rw-r--)權(quán)限,因?yàn)樵?nbsp;unmask 設(shè)置的前幾位數(shù)字沒(méi)有遮掩任何權(quán)限(而且執(zhí)行位不是文件創(chuàng)建的默認(rèn)位),并且寫入權(quán)限被最終位所屏蔽。

當(dāng)你使用 cat 復(fù)制時(shí),實(shí)際上你并沒(méi)有真正復(fù)制文件。你使用 cat 讀取文件內(nèi)容并將輸出重定向到了一個(gè)新文件:

  1. $ cat foo.jpg > baz.jpg
  2. $ ls -l -G -g
  3. -rw-r--r--. 1 57368 Jul 29 13:37  bar.jpg
  4. -rw-rw-r--. 1 57368 Jul 29 13:42  baz.jpg
  5. -rw-r--r--. 1 57368 Jul 25 23:57  foo.jpg

如你所見(jiàn),cat 應(yīng)用系統(tǒng)默認(rèn)的 umask 設(shè)置創(chuàng)建了一個(gè)全新的文件。

最后,當(dāng)你只是想復(fù)制一個(gè)文件時(shí),這些手段無(wú)關(guān)緊要。但如果你想復(fù)制文件并保持默認(rèn)權(quán)限時(shí),你可以用一個(gè)命令 cat 完成一切。

rsync

有著著名的同步源和目的文件的能力,rsync 命令是一個(gè)復(fù)制文件的多才多藝的工具。最為簡(jiǎn)單的,rsync 可以類似于 cp 命令一樣使用。

  1. $ rsync example.txt example_copy.txt
  2. $ ls
  3. example.txt    example_copy.txt

這個(gè)命令真正的威力藏在其能夠不做不必要的復(fù)制的能力里。如果你使用 rsync 來(lái)將文件復(fù)制進(jìn)目錄里,且其已經(jīng)存在在該目錄里,那么 rsync 不會(huì)做復(fù)制操作。在本地這個(gè)差別不是很大,但如果你將海量數(shù)據(jù)復(fù)制到遠(yuǎn)程服務(wù)器,這個(gè)特性的意義就完全不一樣了。

甚至在本地中,真正不一樣的地方在于它可以分辨具有相同名字但擁有不同數(shù)據(jù)的文件。如果你曾發(fā)現(xiàn)你面對(duì)著同一個(gè)目錄的兩個(gè)相同副本時(shí),rsync 可以將它們同步至一個(gè)包含每一個(gè)最新修改的目錄。這種配置在尚未發(fā)現(xiàn)版本控制威力的業(yè)界十分常見(jiàn),同時(shí)也作為需要從一個(gè)可信來(lái)源復(fù)制的備份方案。

你可以通過(guò)創(chuàng)建兩個(gè)文件夾有意識(shí)地模擬這種情況,一個(gè)叫做 example 另一個(gè)叫做 example_dupe:

  1. $ mkdir example example_dupe

在第一個(gè)文件夾里創(chuàng)建文件:

  1. $ echo "one" > example/foo.txt

用 rsync 同步兩個(gè)目錄。這種做法最常見(jiàn)的選項(xiàng)是 -a(代表 “archive”,可以保證符號(hào)鏈接和其它特殊文件保留下來(lái))和 -v(代表 “verbose”,向你提供當(dāng)前命令的進(jìn)度反饋):

  1. $ rsync -av example/ example_dupe/

兩個(gè)目錄現(xiàn)在包含同樣的信息:

  1. $ cat example/foo.txt
  2. one
  3. $ cat example_dupe/foo.txt
  4. one

如果你當(dāng)作源分支的文件發(fā)生改變,目的文件也會(huì)隨之跟新:

  1. $ echo "two" >> example/foo.txt
  2. $ rsync -av example/  example_dupe/
  3. $ cat example_dupe/foo.txt
  4. one
  5. two

注意 rsync 命令是用來(lái)復(fù)制數(shù)據(jù)的,而不是充當(dāng)版本管理系統(tǒng)的。例如假設(shè)有一個(gè)目的文件比源文件多了改變,那個(gè)文件仍將被覆蓋,因?yàn)?nbsp;rsync 比較文件的分歧并假設(shè)目的文件總是應(yīng)該鏡像為源文件:

  1. $ echo "You will never see this note again" > example_dupe/foo.txt
  2. $ rsync -av example/  example_dupe/
  3. $ cat example_dupe/foo.txt
  4. one
  5. two

如果沒(méi)有改變,那么就不會(huì)有復(fù)制動(dòng)作發(fā)生。

rsync 命令有許多 cp 沒(méi)有的選項(xiàng),例如設(shè)置目標(biāo)權(quán)限、排除文件、刪除沒(méi)有在兩個(gè)目錄中出現(xiàn)的過(guò)時(shí)文件,以及更多??梢允褂?nbsp;rsync 作為 cp 的強(qiáng)力替代或者有效補(bǔ)充。

許多復(fù)制的方式

在 POSIX 系統(tǒng)中有許多能夠達(dá)成同樣目的的方式,因此開(kāi)源的靈活性名副其實(shí)。我忘了哪個(gè)復(fù)制數(shù)據(jù)的有效方式嗎?在評(píng)論區(qū)分享你的復(fù)制神技。

標(biāo)題名稱:如何在Linux中復(fù)制文檔?
新聞來(lái)源:http://www.muchs.cn/news8/103058.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、全網(wǎng)營(yíng)銷推廣、電子商務(wù)標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)