如何在Linux中將修補程序應用於文件(和創建修補程序)

PC在Linux桌面上顯示shell提示符Fatmawati Achmad Zaenuri / Shutterstock.com

Linux 補丁 命令允許您快速安全地將更改從一組文件傳輸到另一組文件。學習如何使用 補丁 簡單的方法。

補丁和差異命令

想象一下,您的計算機上有一個文本文件。您從其他人那裡收到該文本文件的修改版本。如何快速將修改後的文件中的所有更改傳輸到原始文件?那是在哪裡 補丁DIFF 參加進來。 補丁DIFF 可以在Linux和其他類Unix操作系統中找到,例如macOS。

DIFF 命令檢查文件的兩個不同版本並列出它們之間的差異。差異可以存儲在稱為補丁文件的文件中。

補丁 命令可以讀取補丁文件並將內容用作一組指令。通過遵循這些說明,修改後的文件中的更改將複製到原始文件中。

現在想象一下這個過程發生在整個文本文件目錄中。一氣呵成。這就是力量 補丁

有時您不會收到修改過的文件。你發送的只是補丁文件。為什麼在發送一個文件或發布一個文件以便於下載時,為什麼要發送幾十個文件呢?

如何使用補丁文件來實際修補文件?除了幾乎是一個繞口令,這也是一個很好的問題。我們將在本文中引導您完成它。

補丁 命令最常被使用軟件源代碼文件的人使用,但它適用於任何文本文件集,無論其目的,源代碼與否。

有關: 如何比較Linux終端中的兩個文本文件

我們的示例場景

在這種情況下,我們在一個名為work的目錄中,其中包含另外兩個目錄。一個稱為工作,另一個稱為最新。工作目錄包含一組源代碼文件。最新目錄包含這些源代碼文件的最新版本,其中一些已被修改。

為安全起見,工作目錄是當前版本文本文件的副本。它不是它們的唯一副本。

找到兩個版本的文件之間的差異

DIFF 命令查找兩個文件之間的差異。其默認操作是在終端窗口中列出修改的行。

調用一個文件 slang.c。我們將工作目錄中的版本與最新目錄中的版本進行比較。

-u (統一)選項告訴 DIFF 還列出了每個更改的部分之前和之後的一些未修改的文本行。這些行稱為上下文行。他們幫助了 補丁 命令準確定位必須在原始文件中進行更改的位置。

我們提供文件的名稱 DIFF 知道要比較哪些文件。首先列出原始文件,然後列出修改後的文件。這是我們發出的命令 DIFF

diff -u working / slang.c latest / slang.c

diff -u working / slang.s latest / slang.c在終端窗口中

DIFF 生成一個輸出列表,顯示文件之間的差異。如果文件相同,則根本不會列出任何輸出。看到這種類型的輸出 DIFF 確認兩個文件版本之間存在差異,並且原始文件需要修補。

在終端窗口中從diff輸出

製作補丁文件

要捕獲修補程序文件中的這些差異,請使用以下命令。它與上面的命令相同,輸出來自 DIFF 重定向到名為slang.patch的文件中。

diff -u working / slang.c latest / slang.c> slang.patch

diff -u working / slang.c latest / slang.c>終端窗口中的slang.patch

補丁文件的名稱是任意的。你可以隨便叫它。給它一個“.patch”擴展是一個好主意;但是,因為它確實清楚它是什麼類型的文件。

要做 補丁 對patch文件執行操作並修改working / slang.c文件,請使用以下命令。該 -u (統一)選項讓 補丁 知道補丁文件包含統一的上下文行。換句話說,我們使用-u選項和diff,所以我們使用了 -u 選項 補丁

patch -u working.slang.c -i slang.patch

在終端窗口中修補-u working.slang.c -i slang.patch

如果一切順利,只有一行輸出告訴你 補丁 正在修補文件。

備份原始文件

我們可以指導 補丁 在使用修改文件進行更改之前製作修補文件的備份副本 -b (備份)選項。該 -一世 (input)選項告訴patch要使用的補丁文件的名稱:

patch -u -b working.slang.c -i slang.patch

在終端窗口中修補-u working.slang.c -i slang.patch

該文件與以前一樣進行了修補,輸出中沒有明顯的差異。但是,如果查看工作文件夾,您將看到已創建名為slang.c.orig的文件。文件的日期和時間戳顯示slang.c.orig是原始文件,slang.c是由文件創建的新文件 補丁

終端窗口中的ls輸出

使用diff與目錄

我們可以用 DIFF 創建一個包含兩個目錄中文件之間所有差異的補丁文件。然後我們可以使用該補丁文件 補丁 使用單個命令將這些差異應用於工作文件夾中的文件。

我們將要使用的選項 DIFF 是的 -u 我們之前使用的(統一上下文)選項, -r (遞歸)選項 DIFF 查看任何子目錄和 -N (新文件)選項。

-N 選項告訴 DIFF 如何處理最新目錄中不在工作目錄中的文件。它強迫 DIFF 把指令放在補丁文件中補丁 創建最新目錄中但缺少工作目錄的文件。

您可以將選項組合在一起,以便它們使用單​​個連字符(-)。

請注意,我們只提供目錄名稱,我們沒有說明 DIFF 查看特定文件:

diff -ruN working / latest /> slang.patch

如何在Linux中將修補程序應用於文件(和創建修補程序) 1

在補丁文件中偷看

讓我們快速瀏覽補丁文件。我們會用的 看看它的內容。

在終端窗口中減少slang.patch

文件頂部顯示了兩個版本的slang.c之間的差異。

更少的slang.patch在終端窗口顯示ile的頂部

通過補丁文件向下滾動,我們看到它然後描述了另一個名為structs.h的文件中的更改。這將驗證補丁文件是否包含多個文件的不同版本之間的差異。

less slang.patch顯示終端窗口中文件的中間位置

三思而後行

修補大量文件可能有點令人不安,所以我們將使用 --dry運行 在我們採取行動並承諾進行更改之前檢查一切正常的選項。

--dry運行 選項告訴 補丁 除了實際修改文件之外,還要做所有事情。 補丁 將對文件執行所有的飛行前檢查,如果遇到任何問題,它會報告它們。無論哪種方式,都不會修改任何文件。

如果沒有報告任何問題,我們可以重複命令而不用 --dry運行 選項並自信地修補我們的文件。

-d (目錄)選項告訴 補丁 要處理哪個目錄。

請注意,我們沒有使用 -一世 (輸入)選項告訴 補丁 哪個補丁文件包含來自的說明 DIFF。相反,我們將補丁文件重定向到 補丁<

patch –dry-run -ruN -d working <slang.patch

<img class =“alignnone size-full wp-image-421261”src =“https://www.howtogeek.com/wp-content/uploads/2019/05/xpatch_14.png.pagespeed.gp+jp+jw+ pj + ws + js + rj + rp + rw + ri + cp + md.ic.EN3xXcFRY6.png“alt =”patch –dry-run -ruN -d working < slang.patch in a terminal window" width="646" height="122">

在整個目錄中, DIFF 發現要修補的兩個文件。有關這兩個文件的修改的說明已經過檢查 補丁 ,並沒有報道任何問題。

飛行前檢查沒問題;我們準備好起飛了。

修補目錄

要真正將補丁應用於文件,我們使用上一個命令而不使用 --dry運行 選項。

patch -ruN -d working <slang.patch

<img class =“alignnone size-full wp-image-421274”src =“https://www.howtogeek.com/wp-content/uploads/2019/05/xpatch_16.png.pagespeed.gp+jp+jw+ pj + ws + js + rj + rp + rw + ri + cp + md.ic.PrA8BQ3riq.png“alt =”patch -ruN -d working < slang.patch in a terminal window" width="646" height="122">

這一次,每行輸出都不以“檢查”開始,每行以“修補”開頭。

並沒有報道任何問題。我們可以編譯我們的源代碼,我們將使用最新版本的軟件。

解決你的差異

這是迄今為止最簡單,最安全的使用方式 補丁。將目標文件複製到文件夾並修補該文件夾。如果您對修補過程完成無錯誤感到高興,請將其複製回來。

body #primary .entry-content ul#nextuplist list-style-type:none; margin-left:0px; padding-left:0px;
body #primary .entry-content ul#nextuplist li a text-decoration:none; color:#1d55a9;

請閱讀下一步

  • >如何流UFC 238 Cejudo vs. Moraes Online
  • >如何在Windows 10上輸入Kaomoji(╯°□°)╯(┻━┻
  • >如何在線觀看2019年FIFA女足世界盃(無線)
  • >如何在Linux上使用timeout命令
  • >谷歌的Stadia即將崩潰對ISP數據上限
本文機器自動生成,不保證語句完整通順和表達準確,亦不對內容真實有效性負責,請讀者知悉。