patch命令用于為特定軟件包打補丁,該命令使用diff命令對源文件進行操作。
創(chuàng)新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站建設、成都網站制作、澄邁網絡推廣、微信小程序開發(fā)、澄邁網絡營銷、澄邁企業(yè)策劃、澄邁品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯為所有大學生創(chuàng)業(yè)者提供澄邁建站搭建服務,24小時服務熱線:18982081108,官方網址:vcdvsql.cn
格式:patch [選項] [原始文件 [補丁文件]]
常用參數:
-r 是一個遞歸選項,設置了這個選項,diff會將兩個不同版本源代碼目錄中的所有對應文件全部都進行一次比較,包括子目錄文件。
-N 選項確保補丁文件將正確地處理已經創(chuàng)建或刪除文件的情況。
-u 選項以統(tǒng)一格式創(chuàng)建補丁文件,這種格式比缺省格式更緊湊些。
-p0 選項從當前目錄查找目的文件(夾)(直接使用補丁文件里面指定的路徑)
-p1 選項忽略掉第一層目錄,從當前目錄查找(去掉補丁文件指定路徑最左的第1個'/'及前面所有內容)。
-E 選項說明如果發(fā)現了空文件,那么就刪除它
-R 選項說明在補丁文件中的“新”文件和“舊”文件現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)
示例:
1、單個文件
首先將兩個文件的內容顯示如下:
$ cat test0
00000000
00000000
00000000
$ cat test1
00000000
11111111
00000000
*生成補丁:
$ diff -uN test0 test1 test1.patch
這樣將通過比較,生成test1的補丁文件。這里選項u表示使用同一格式輸出這樣產生的輸出便于閱讀易于修改,N表示把不存在的文件看做empty的.就算文件test0不存在,也會生成補丁。
*把test0通過打補丁變成test1文件:
$ patch -p0 test1.patch
或$patch test1.patch
這樣,test0的內容將和test1的內容一樣,但是文件名稱還是test0。關于patch的選項見后面多文件有說明。當前目錄下可以有test1.如果比較的時候test0是不存在的,那么這時候會生成一個test0文件。
*把打過補丁的test0還原:
$ patch -RE -p0test1.patch
或$patch -R test1.patch
這樣,test0的內容將還原為原來沒有打過補丁的狀態(tài)。當前目錄下可以有test1.這里的-E選項是要求patch在文件為空的時候刪除文件,這個選項是不必要的因為patch是根據時間戳來判斷一個文件是否存在。如果比較的時候test0是不存在的,這將會刪除test0文件。
**
2、多個文件的:
首先查看文件結構如下:
1)外層目錄列表:
$ ls -p
prj0/ prj1/
2)子目錄prj0列表:
$ ls -p prj0
prj0name test0
3)子目錄prj1列表:
$ ls -p prj1
prj1name test1
4)文件prj0/prj0name:
$ cat prj0/prj0name
--------
prj0/prj0name
--------
5)文件prj1/prj1name:
$ cat prj1/prj1name
---------
prj1/prj1name
---------
6)文件prj0/test0:
$ cat prj0/test0
0000000
0000000
0000000
0000000
0000000
0000000
0000000
7)文件prj1/test1:
$ cat prj1/test1
1111111
1111111
1111111
1111111
1111111
1111111
1111111
*創(chuàng)建補丁:
$ diff -uNr prj0 prj1 prj1.patch
這里項u表示使用同一格式輸出這樣產生的輸出便于閱讀易于修改,N表示把不存在的文件看做empty的,r表示遞歸地比較子目錄,比較的結果被標準重定向到文件prj1.patch中了。
運行之后,輸出的就是一個補丁,描述了兩個文件的不同,這個補丁就是把diff參數的第一個文件打補丁變成第二個文件的補丁文件。
實際過程依次比較兩個目錄下的同名文件,如果這里不加-N就會指明prj0name和test0只在prj0中存在,prj1name和test1只在prj1中存在,這就無法比較了,所以這里為了能夠比較,加上了-N選項。
為了便于理解,這里給出prj1.patch文件的內容:
$ cat prj1.patch
diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name 2009-08-24 10:44:19.000000000 +0800
+++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800
@@ -1,5 +0,0 @@
---------
-
-prj0/prj0name
-
---------
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800
+++ prj1/prj1name 2009-08-24 10:45:05.000000000 +0800
@@ -0,0 +1,5 @@
+---------
+
+prj1/prj1name
+
+---------
diff -uNr prj0/test0 prj1/test0
--- prj0/test0 2009-08-24 11:21:12.000000000 +0800
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800
@@ -1,7 +0,0 @@
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
diff -uNr prj0/test1 prj1/test1
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800
+++ prj1/test1 2009-08-24 11:21:33.000000000 +0800
@@ -0,0 +1,7 @@
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
*將prj0中的所有文件打補丁成為prj1中的所有文件:
步驟如下:
1)$ cp prj1.patch ./prj0
2)$ cd prj0
3)$ patch -p1 prj1.patch
這里,把補丁文件復制到了prj0下面,然后將該文件夾下面的文件"變成"prj1下的文件了.
$ ls -p
prj1name prj1.patch test1
關于patch命令的-p選項接數字n,意思是去掉補丁文件里指定路徑的前n個'/'前綴.
例如補丁文件中指定路徑是/u/howard/src/blurfl/blurfl.c,那么p0選項處理之后的路徑還是原來路徑不變,而p1選項處理之后的路徑是u/howard/src/blurfl/blurfl.c,同理p4處理之后的路徑是:blurfl/blurfl.c.
注意:如果在外層目錄運行這個命令,那么會在外層目錄創(chuàng)建兩個prj1name和test1文件。
*將打好補丁的prj0中的所有文件還原成為原來打補丁之前的文件:
$ patch -R -p1 prj1.patch
運行之后文件變成原來的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*將prj1中的所有文件反向打補丁成為prj0中的所有文件:
$ patch -R -p1 prj1.patch
運行之后prj1中的文件變成prj0的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*將prj1中反打補丁后的文件還原成原來的prj1中的文件:
$ patch -p1 prj1.patch
運行之后,prj1中的文件被還原了,如下:
$ ls -p
prj1name prj1.patch test1
*在外層目錄把prj0的內容打補丁成prj1的內容:
$ls -p
prj0/ prj1.patch
$patch -p0 prj1.patch
這樣prj0中的內容變成了prj1中的內容,但是prj0的目錄名仍舊是prj0,如下:
$ls -p prj0
prj1name test1
注意:當前文件夾下面不能prj1目錄,否則會出現一些警告提示。
*在外層目錄把prj0的內容反打補丁還原成原來prj0的內容:
$ patch -R -p0 prj1.patch
這樣原來的文件如下:
$ ls -p prj0
prj0name test0
**
linux系統(tǒng)當然有漏洞,linux的更新是很快的。一般幾個月半年就有一個小版本更新,不只是漏洞還有新功能。
一般叫系統(tǒng)更新,可以使用系統(tǒng)自帶的更新工具。或是用yum upgrade或apt-get 這些命令,看系統(tǒng)而定。當然就是全自動了。
當然可以手動,但要知道自己想更新什么以及下載所有包,很難找。
一般linux給某個特定軟件打補丁用patch命令。
linux系統(tǒng)打補丁常用的方式很多,如果是聯網的情況下,直接使用yum update命令即可。如果沒有聯網或者有特殊的情況也可以使用diff 和patch命令來打補丁。
方法:
1、生成補丁
補丁?件是使用diff命令?成的,?成補丁?件的命令使?格式如下:
diff -uNr oldfile newfile patch_file.patch
diff命令,它的功能就是逐??較兩個?件的不同,然后輸出?較的結果輸出到補丁文件。
參數解析:
-u:選項以統(tǒng)?格式創(chuàng)建補丁?件,這種格式?缺省格式更緊湊些
-N:選項確保補丁?件將正確地處理已經創(chuàng)建和刪除?件的情況
-r:遞歸選項,設置了這個選項,會將兩個不同版本源代碼?錄中的所有對應?件全部都進??次?較,包括??錄?件
oldfile:源?件(?錄),未進?修改的
newfile:以oldfile為基礎,根據需求對??的?件內容修改之后結果
patch_file.patch補丁文件?般以.patch為后綴。
注解:
補丁命令的功能就是逐個?較源?件(夾)和?標?件(夾)的所有?件,將差異信息記錄到patch_file.patch中。下面對補丁文件內容進行講解:
補丁頭部分:
1、--- test1.txt 表示源文件(被修改的文件)
2、+++ test2.txt 表示目的文件
塊部分(@@ @@ 表示一個塊的開始):
3、@@ -1,3 表示源文件從第1行開始,一共有3行有差異
4、@@ 1,3 表示目的文件從第1行開始,一共有3行有差異
正文:
5、-zzzzzxxccv 表示被修改的文件要刪除這一行
6、+bbbbbbbbgd表示被修改的文件要增加這一行
?
2、打補丁
打補丁是通過patch命令完成的。?般情況下,打補丁命令使?格式如下(這?只介紹了對源?件(夾)進?打補丁操作):
patch -pN xxx.patch
參數解析:
-pN:選項打補丁時要忽略掉第N層?錄。
舉個例子: 如果補丁文件包含路徑名稱 /curds/whey/src/blurfl/blurfl.c,那么:
-p 0 使用完整路徑名
-p 1 除去前導斜杠,留下 curds/whey/src/blurfl/blurfl.c。
-p 4 除去前導斜杠和前三個目錄,留下 blurfl/blurfl.c。
下面給大家舉個例子:
1、在/tmp目錄下創(chuàng)建test1.txt ,并查看文件內容
?
2、同樣在/tmp目錄下創(chuàng)建test2.txt,并查看文件內容
?
3、制作補丁,并檢查補丁內容
?
4、打補丁
?
5、檢查test1.txt打補丁是否成功,內容是否被修改
?
此時可以看到test1.txt 和test2.txt的內容已經一致,說明打補丁成功。
在 CentOS/RHEL7 系統(tǒng)上配置自動安全更新
在 CentOS/RHEL 7/6 系統(tǒng)上,你需要安裝下面的安裝包:
# yum update -y ; yum install yum-cron -y
安裝完成以后,打開/etc/yum/yum-cron.conf,然后找到下面這些行內容,你必須確保它們的值和下面展示的一樣
update_messages = yes
download_updates = yes
apply_updates = yes
第一行表明自動更新命令行應該像這樣:
# yum --security upgrade
而其它的行保證了能夠通知并自動下載、安裝安全升級。
為了使來自 root@localhost 的通知能夠通過郵件發(fā)送給同一賬戶(再次說明,你可以選擇其他賬戶,如果你想這樣的話),下面這些行也是必須的。 《Linux就該這么學》 一起學習linux
emit_via = email
email_from = root@localhost
email_to = root
在 CentOS/RHEL 6 上啟用自動安全更新
默認情況下, cron 任務被配置成了立即下載并安裝所有更新,但是我們可以通過在 /etc/sysconfig/yum-cron 配置文件中把下面兩個參數改為yes,從而改變這種行為。
# 不要安裝,只做檢查(有效值: yes|no)
CHECK_ONLY=yes
# 不要安裝,只做檢查和下載(有效值: yes|no)
# 要求 CHECK_ONLY=yes(先要檢查后才可以知道要下載什么)
DOWNLOAD_ONLY=yes
為了啟用關于安裝包更新的郵件通知,你需要把MAILTO 參數設置為一個有效的郵件地址。
# 默認情況下 MAILTO 是沒有設置的,crond 會將輸出發(fā)送郵件給自己
# (執(zhí)行 cron 的用戶,這里是 root)
# 例子: MAILTO=root
MAILTO=admin@tecmint點抗
最后,打開并啟用yum-cron 服務:
------------- On CentOS/RHEL 7 -------------
systemctl start yum-cron
systemctl enable yum-cron
------------- On CentOS/RHEL 6 -------------
# service yum-cron start
# chkconfig --level 35 yum-cron on
恭喜你,你已經成功的在 CentOS/RHEL 7/6 系統(tǒng)上設置了自動升級。
網頁名稱:linux安裝補丁命令 linux系統(tǒng)補丁安裝
URL分享:http://vcdvsql.cn/article30/ddsiepo.html
成都網站建設公司_創(chuàng)新互聯,為您提供小程序開發(fā)、搜索引擎優(yōu)化、定制開發(fā)、品牌網站建設、面包屑導航、標簽優(yōu)化
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯