patch命令用於為特定軟體包打補丁,該命令使用diff命令對源文件進行操作。
格式:patch [選項] [原始文件 [補丁文件]]
常用參數:
-r 是一個遞歸選項,設置了這個選項,diff會將兩個不同版本源代碼目錄中的所有對應文件全部都進行一次比較,包括子目錄文件。
-N 選項確保補丁文件將正確地處理已經創建或刪除文件的情況。
-u 選項以統一格式創建補丁文件,這種格式比預設格式更緊湊些。
-p0 選項從當前目錄查找目的文件(夾)(直接使用補丁文件裡面指定的路徑)
-p1 選項忽略掉第一層目錄,從當前目錄查找(去掉補丁文件指定路徑最左的第1個'/'及前面所有內容)。
-E 選項說明如果發現了空文件,那麼就刪除它
-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 -p0<test1.patch
或$patch -R <test1.patch
這樣,test0的內容將還原為原來沒有打過補丁的狀態。當前目錄下可以有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
*創建補丁:
$ 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.
注意:如果在外層目錄運行這個命令,那麼會在外層目錄創建兩個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
**
B. 求助大蝦們,linux怎麼給mysql漏洞打補丁
找個MySQL軟體
然後由於手動安裝MYSQL,需要在系統中建立名為mysql的用戶和組,並制定musql用戶的宿主目錄是"/usr/local/mysql/data"
# groupadd -g 200 mysql
# useradd -u 200 -g mysql -d /usr/local/mysql/data -M mysql
然後將軟體包釋放到"/usr/local/「目錄中,為了方便管理,用ln命令建立該目錄的符號鏈接目錄為mysql。
# tar zxvf MySQL-server-5.1.53-1.glibc23.i386.tar.gz -C /usr/local/
#cd /usr/local/
# ln -s MySQL-server-5.1.53-1.glibc23.i386/ mysql
然後在"var/lib"建立名為mysql的子目錄,並設置目錄和MYSQL伺服器安裝目錄的屬主和屬組
# mkdir /var/lib/mysql
# chown -R mysql :mysql /var/lib/mysql
# chown -R root :mysql /usr/local/MySQL-server-5.1.53*
# chown -R mysql :mysql /usr/local/mysql/data/
然後進入到MySQL的伺服器程序的目錄,復制mysql的配置文件my.cnf到"/etc"目錄中,並執行mysql.install_db命令初始化MySQL伺服器中的資料庫。
# cd /usr/local/mysql
#cp support-files/my-medium.cnf /etc/my.cnf
如果mysql的RPM包在系統中已經安裝,"/etc"目錄會存在my.cnf文件,將提示覆蓋原有的my.cnf文件
cp:overweite '/etc/my.cnf'? y
# ./scripts/mysql_install_db
然後設置"/var/lib/mysql/"和"/usr/local/mysql/data/"兩個目錄中的所有文件屬於mysql用戶和用戶組,以保證訪問許可權。
# chown -R mysql :mysql /var/lib/mysql/
#chown -R mysql :mysql /usr/local/mysql/data/
然後使用safe_mysqld 命令啟動MYSQL伺服器運行,並制定MYSQL服務程序以系統用戶mysql的身份運行
# /usr/local/mysql/bin/safe_mysqld --user=mysql &
由於資料庫管理用戶root的初始密碼為空所以要設置
# /usr/local/mysql/bin/mysqladmin -u root password 『密碼'
最後指定登錄資料庫的用戶名
# /usr/local/mysql/bin/mysql -u root -p (-p是設置提示用戶輸入口令)。
不知道對你有沒有幫助 有空看看吧
C. linux下怎麼打補丁
請自行下載安裝SSH遠程軟體
通過SSH遠程登錄你的linux伺服器
linux操作系統怎麼樣打補丁?linux系統升級軟體
在linux下面;centos這類操作系統用yum來升級
而ubuntu這類系統用apt-get來升級
所以今天我們是在centos6.5上演示的
就要用帶yum命令
先看看yum命令幫助
linux操作系統怎麼樣打補丁?linux系統升級軟體
我們用yum update就可以升級軟體
yum update會吧你已經安裝在系統上的軟體都更新掉
linux操作系統怎麼樣打補丁?linux系統升級軟體
掃描完成之後問你是否更新
輸入y回車開始下載
linux操作系統怎麼樣打補丁?linux系統升級軟體
下載完成之後開始升級軟體
linux操作系統怎麼樣打補丁?linux系統升級軟體
升級完成
linux操作系統怎麼樣打補丁?linux系統升級軟體
升級完成之後我們用yum upgrade來驗證一次是否都升級好了
linux操作系統怎麼樣打補丁?linux系統升級軟體
也就是說
我們可以用yum update或者yum upgrade都來升級你的centos操作系統
D. Linux系統有漏洞嗎,若有,如何打補丁更新升級是自動的嗎,若否,命令是什麼
linux系統當然有漏洞,linux的更新是很快的。一般幾個月半年就有一個小版本更新,不只是漏洞還有新功能。
一般叫系統更新,可以使用系統自帶的更新工具。或是用yum upgrade或apt-get 這些命令,看系統而定。當然就是全自動了。
當然可以手動,但要知道自己想更新什麼以及下載所有包,很難找。
一般linux給某個特定軟體打補丁用patch命令。