|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
" P+ F0 k9 g: ]4 oLinux patch命令用于修补文件。8 @7 n; {7 t' b j
+ C2 k. w* R1 M6 [6 W( f
patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。$ N0 l S2 A% F8 Y, f
0 x! \+ _* `5 D6 n- ?7 Z
1 a; c0 w1 k4 }+ g1 [# Z7 _9 r1 X# y6 p5 v# B# D
语法
6 f' k# }0 s \3 j4 L' ~4 W2 W! N; y' \& A
patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>][-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p <剥离层级>][-r <拒绝文件>][-V <备份方式>][-Y <备份字首字符串>][-z <备份字尾字符串>][--backup-if -mismatch][--binary][--help][--nobackup-if-mismatch][--verbose][原始文件 <修补文件>] 或 path [-p <剥离层级>] < [修补文件]
! p0 ~7 O9 q3 ]9 N' a/ I8 n% H8 e! K# f3 ^
1 v0 |6 [. g. m2 M+ C& ?5 G2 W1 @. R1 J) u0 h# W; D
参数:
- Y; h& J S, Z0 }
! w( a4 x! n1 }) X; I$ _3 [8 V-b或--backup 备份每一个原始文件。
' {- c/ I3 r$ [/ Q0 d; Q. [4 U-B<备份字首字符串>或--prefix=<备份字首字符串> 设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称。
9 ~1 K5 Z, u/ R7 M4 n-c或--context 把修补数据解译成关联性的差异。
2 A9 J& r" X2 `-d<工作目录>或--directory=<工作目录> 设置工作目录。' g2 [1 Y# p2 [* y2 X. }) a# I
-D<标示符号>或--ifdef=<标示符号> 用指定的符号把改变的地方标示出来。
3 F; U( n% u" N: t3 ^; ~-e或--ed 把修补数据解译成ed指令可用的叙述文件。5 S3 M6 G( U+ b+ W
-E或--remove-empty-files 若修补过后输出的文件其内容是一片空白,则移除该文件。, z$ [$ k8 }6 V1 W
-f或--force 此参数的效果和指定"-t"参数类似,但会假设修补数据的版本为新 版本。
$ H9 Y+ [; p/ x! }7 n8 C-F<监别列数>或--fuzz<监别列数> 设置监别列数的最大值。5 o- k4 l/ n+ y* c) M5 I
-g<控制数值>或--get=<控制数值> 设置以RSC或SCCS控制修补作业。
0 s' ?+ O- J7 o& c/ z-i<修补文件>或--input=<修补文件> 读取指定的修补文件。; y8 ?& E, ]7 s8 z
-l或--ignore-whitespace 忽略修补数据与输入数据的跳格,空格字符。! _8 L- K& L- _# Q) O
-n或--normal 把修补数据解译成一般性的差异。
* b: i J- v3 } k, V0 v! b" ^-N或--forward 忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过。/ d4 G2 I# l9 N$ }8 d6 o5 x& |
-o<输出文件>或--output=<输出文件> 设置输出文件的名称,修补过的文件会以该名称存放。
) p5 {( }# j% t7 A-p<剥离层级>或--strip=<剥离层级> 设置欲剥离几层路径名称。7 T9 i* U( v& A( W9 ?
-f<拒绝文件>或--reject-file=<拒绝文件> 设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej。
4 [, J' F" y, S9 G9 F7 u r8 r- D-R或--reverse 假设修补数据是由新旧文件交换位置而产生。
$ M' Z& B" c% [* m-s或--quiet或--silent 不显示指令执行过程,除非发生错误。
1 G: O3 |& \$ ~4 Z+ ?8 n-t或--batch 自动略过错误,不询问任何问题。 c" d) I: e* t w/ x" ~0 q: c
-T或--set-time 此参数的效果和指定"-Z"参数类似,但以本地时间为主。$ q2 L' H2 m) K& P, w# r
-u或--unified 把修补数据解译成一致化的差异。
, g) N8 N: v, @/ t; U- s* a* I, v1 Z-v或--version 显示版本信息。! O/ s, C% T# d' u/ i# h# N2 ]( y
-V<备份方式>或--version-control=<备份方式> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-z"参数变更,当使用"-V"参数指定不同备份方式时,也会产生不同字尾的备份字符串。
8 u; L) U9 w4 H# ^' b1 ?2 W-Y<备份字首字符串>或--basename-prefix=--<备份字首字符串> 设置文件备份时,附加在文件基本名称开头的字首字符串。
4 V8 p$ z6 A7 ~' |- T1 ^-z<备份字尾字符串>或--suffix=<备份字尾字符串> 此参数的效果和指定"-B"参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c,加上"backup/"字符串后,文件super.c会备份于/src/linux/fs/backup目录里。, s% N6 Z- b- Y2 d2 R
-Z或--set-utc 把修补过的文件更改,存取时间设为UTC。
* T2 L/ N$ x8 ^; L--backup-if-mismatch 在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件。
2 a ]/ j- p: L4 K2 L--binary 以二进制模式读写数据,而不通过标准输出设备。
* _6 X3 w6 R) h5 \1 Q, r3 O1 y9 Q--help 在线帮助。! `9 D0 p! j! \* Y& T
--nobackup-if-mismatch 在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件。* s9 J- d4 q, D' q& i% Y
--verbose 详细显示指令的执行过程。
0 {# w _. h8 G+ h
' h1 U3 G* g. X. M7 B2 n3 p
* k4 N" }5 ^' {1 P) Q6 N& b8 i5 k
9 d# a6 y; n3 E+ J" e3 W, l7 f( _3 r实例
$ _ l! a6 @! e2 B1 i
% \% [& t4 M) z( X5 Z; u" h; F% \3 ~2 H- ^: q% N5 W# Q
使用patch指令将文件"testfile1"升级,其升级补丁文件为"testfile.patch",输入如下命令:# K. g/ w6 E+ k0 H5 x( g9 h4 ?; v
9 D- [- a, X* \5 q E: E0 ^
$ patch -p0 testfile1 testfile.patch #使用补丁程序升级文件 0 ~" u5 ]! }. N& b. I
2 b9 q4 w) }( H5 `% o# ]( o5 y. F$ z* I N6 p. p9 [6 _
使用该命令前,可以先使用指令"cat"查看"testfile1"的内容。在需要修改升级的文件与原文件之间使用指令"diff"比较可以生成补丁文件。具体操作如下所示:
0 Q, O, L$ q5 `2 Z: O2 E( X) T! a1 \) }& b) [$ e, i, p6 r
$ cat testfile1 #查看testfile1的内容 " Y" i3 T' K0 S0 L& j5 k/ x7 o
Hello,This is the firstfile! # c! x& m2 F) ~9 q1 n0 K8 E
$ cat testfile2 #查看testfile2的内容 * q; D; y# o$ `# y U
Hello,Thisisthesecondfile!
, a& v5 E' a0 i" x5 J2 V$ diff testfile1 testfile2 #比较两个文件 , ?, e6 a2 E8 k( I+ O6 L: W
1c1 ' A" ^) t+ k% ]( o1 V
<Hello,Thisisthefirstfile!
/ v% n% A- p, \4 { d7 V" i) T---
% Y+ \- V. l! s6 f>Hello,Thisisthesecondfile!
1 s/ f Q4 A0 x#将比较结果保存到tetsfile.patch文件 # w7 Z1 l4 L8 q6 D
$ diff testfile1 testfile2>testfile.patch
: v' k; Y$ W$ Z8 s" l$ cat testfile.patch #查看补丁包的内容 + V k3 `! L( B
1c1
- I4 Q$ S) E4 F' C# M# |4 p* A<Hello,Thisisthefirstfile! " A) q* ^% ?# Z5 g! ^+ y
---
3 C+ y: q/ V) ]) R0 P2 m+ Y' P>Hello,Thisisthesecondfile!
4 W% ?$ z! O- j8 R5 P& E, A#使用补丁包升级testfile1文件
) `( e3 v& T% b$ ]$ N$ patch -p0 testfile1 testfile.patch
6 G6 l# e n9 d0 M% V* o- r/ I% V& npatching file testfile1
( a" s* i2 K$ }; z* a! w$cat testfile1 #再次查看testfile1的内容
0 M4 r# G( N, A, ^: K, ~ ~& q7 Y#testfile1文件被修改为与testfile2一样的内容
! w- w4 K8 x" l7 BHello,This is the secondfile! + A5 m% C1 B6 C0 o* T
' o0 \* x' d# O& y# [$ L' r6 K# j
; w" r* J0 t: x& x% K; n注意:上述命令代码中,"$ diff testfile1 testfile2>testfile. patch"所使用的操作符">"表示将该操作符左边的文件数据写入到右边所指向的文件中。在这里,即是指将两个文件比较后的结果写入到文件"testfile.patch"中。0 k$ ~; y! V2 M* ]" D- j
: S2 E/ _0 D% h6 T. k& V
|
|