|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) {1 U- {+ ~1 j7 |4 V* x2 C
Linux patch命令用于修补文件。
, a$ ~# x2 @8 Y% l& x, {# u5 ~
+ |! R' E1 e0 d* w) w9 C, xpatch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
7 ^5 v9 W" J/ M- `- t7 \
3 G, q( p) y# [
6 A, G! f" ^& I. N5 @: q9 Y0 A+ T7 \% ^9 h; l8 n" w
语法
' @8 V3 e2 U' V/ l2 o' V0 ~
& |7 G# o' u& l4 c% rpatch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>][-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p <剥离层级>][-r <拒绝文件>][-V <备份方式>][-Y <备份字首字符串>][-z <备份字尾字符串>][--backup-if -mismatch][--binary][--help][--nobackup-if-mismatch][--verbose][原始文件 <修补文件>] 或 path [-p <剥离层级>] < [修补文件]% @, `9 O5 w* M: I+ \' z% |
' R* S( v, z8 L% z
: c1 P% B' g# D# w! D
) ~6 d& K2 j' P参数:" N2 Y+ N) N7 \7 |7 l( B& p( H' O
6 b* }/ [; K8 a6 V: ? p5 r
-b或--backup 备份每一个原始文件。
4 D x) [; x' x-B<备份字首字符串>或--prefix=<备份字首字符串> 设置文件备份时,附加在文件名称前面的字首字符串,该字符串可以是路径名称。
- D' _ K5 v3 z2 w1 u# _5 N-c或--context 把修补数据解译成关联性的差异。
& }) `# c% B% R6 r" ^3 n% Q( w# ^$ C) C7 c-d<工作目录>或--directory=<工作目录> 设置工作目录。9 m' ]6 g/ n! r5 @3 b/ w
-D<标示符号>或--ifdef=<标示符号> 用指定的符号把改变的地方标示出来。
' @8 _% n( j" {3 M1 r* n8 }8 e-e或--ed 把修补数据解译成ed指令可用的叙述文件。
. V3 k! N1 T- c6 n-E或--remove-empty-files 若修补过后输出的文件其内容是一片空白,则移除该文件。
! Z; I; z; _8 v% e! Y' J-f或--force 此参数的效果和指定"-t"参数类似,但会假设修补数据的版本为新 版本。
1 l% g! P5 b$ Z, w* K8 ]2 C-F<监别列数>或--fuzz<监别列数> 设置监别列数的最大值。9 C7 n5 n; h* E n% l
-g<控制数值>或--get=<控制数值> 设置以RSC或SCCS控制修补作业。
1 h: }% j9 I4 l/ M6 i2 y4 g9 u-i<修补文件>或--input=<修补文件> 读取指定的修补文件。
# h1 S1 a* B* i* C7 m-l或--ignore-whitespace 忽略修补数据与输入数据的跳格,空格字符。
5 u! f/ i# W/ D+ B2 E7 V( l1 n% P-n或--normal 把修补数据解译成一般性的差异。2 w$ l3 I2 `5 f7 s) k. X4 r
-N或--forward 忽略修补的数据较原始文件的版本更旧,或该版本的修补数据已使 用过。
4 @9 W2 K1 x; b0 Y# _+ j0 H-o<输出文件>或--output=<输出文件> 设置输出文件的名称,修补过的文件会以该名称存放。+ T( F" \& D# E: i2 T" w7 _
-p<剥离层级>或--strip=<剥离层级> 设置欲剥离几层路径名称。' V7 i0 T% B* s4 E5 E
-f<拒绝文件>或--reject-file=<拒绝文件> 设置保存拒绝修补相关信息的文件名称,预设的文件名称为.rej。
1 x( V1 D$ K) e2 F-R或--reverse 假设修补数据是由新旧文件交换位置而产生。
* t& J4 L7 s0 |* c8 p-s或--quiet或--silent 不显示指令执行过程,除非发生错误。5 o- p# ?& {" o3 V5 ^; W
-t或--batch 自动略过错误,不询问任何问题。% H5 O0 y' D: S" ]5 a
-T或--set-time 此参数的效果和指定"-Z"参数类似,但以本地时间为主。8 f$ _* n- Q' j) p5 T
-u或--unified 把修补数据解译成一致化的差异。1 Q* \0 G7 O+ G
-v或--version 显示版本信息。/ T, l: Y! d/ n g4 l
-V<备份方式>或--version-control=<备份方式> 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-z"参数变更,当使用"-V"参数指定不同备份方式时,也会产生不同字尾的备份字符串。8 y( B6 k, M! C$ I
-Y<备份字首字符串>或--basename-prefix=--<备份字首字符串> 设置文件备份时,附加在文件基本名称开头的字首字符串。 L: O- V4 c3 q" H# R) S& @
-z<备份字尾字符串>或--suffix=<备份字尾字符串> 此参数的效果和指定"-B"参数类似,差别在于修补作业使用的路径与文件名若为src/linux/fs/super.c,加上"backup/"字符串后,文件super.c会备份于/src/linux/fs/backup目录里。+ X8 h" s3 F7 A5 s
-Z或--set-utc 把修补过的文件更改,存取时间设为UTC。
- m' V) d f3 b8 m--backup-if-mismatch 在修补数据不完全吻合,且没有刻意指定要备份文件时,才备份文件。
0 o! d3 t4 N: y P& F4 Y$ P5 t--binary 以二进制模式读写数据,而不通过标准输出设备。
& I8 z6 b1 E: c) s* x% U/ G4 @--help 在线帮助。! v+ t( h" V$ j( H8 [+ f
--nobackup-if-mismatch 在修补数据不完全吻合,且没有刻意指定要备份文件时,不要备份文件。
* F$ H# r% b6 I3 l0 L5 n--verbose 详细显示指令的执行过程。4 J2 H. C: H6 h$ C: j: x5 t- r
9 P3 L7 P8 ~/ T" M! \* G2 K
/ a2 N" K/ [' G$ Y$ v
5 L5 z o0 Q/ e/ l, D6 Q# m6 D实例, y. [& c0 s- l9 q9 q
( l) {& l9 s! `& I0 E( C0 }
* `( E0 ^2 a' h- `! {/ y
使用patch指令将文件"testfile1"升级,其升级补丁文件为"testfile.patch",输入如下命令:
& J6 u+ A" d9 E
r0 M+ K# o P: N" B, ]' H! A$ patch -p0 testfile1 testfile.patch #使用补丁程序升级文件 " g( d; D( f7 ~. d
5 h2 L! O/ w7 {& |6 L$ f% }
' U% U. _% X2 E使用该命令前,可以先使用指令"cat"查看"testfile1"的内容。在需要修改升级的文件与原文件之间使用指令"diff"比较可以生成补丁文件。具体操作如下所示:
- t4 k) N! m* M# [" y2 w \
' ]+ O+ i& W0 T5 o+ {$ y$ cat testfile1 #查看testfile1的内容
4 L1 D* ~" n3 C6 ]. Z' S" W) iHello,This is the firstfile!
3 y1 S$ O( H% Y, ]- D$ cat testfile2 #查看testfile2的内容
# J) O3 s; k7 q+ ^Hello,Thisisthesecondfile! 9 e2 [) [1 L6 G4 p& \2 U
$ diff testfile1 testfile2 #比较两个文件
. Y5 {, h# J' g* n( \& _% a8 ?1c1 2 y @5 `6 U" y
<Hello,Thisisthefirstfile!
% j+ H" u% Z, [, N- g S5 Z* `---
0 e1 {: d# Z) g>Hello,Thisisthesecondfile! & ?# n( U+ M8 s, I# E" e$ s5 H! k
#将比较结果保存到tetsfile.patch文件 K S$ j) o& |4 S. T6 _
$ diff testfile1 testfile2>testfile.patch ( A$ `( s8 b% F* ]3 S
$ cat testfile.patch #查看补丁包的内容 : N( k# W% E4 G% F6 I. V) X' \
1c1 L( u& f! D* b- \( [2 A
<Hello,Thisisthefirstfile!
# Z9 L& D4 d+ P9 A---
# o8 m+ y6 X% H4 v>Hello,Thisisthesecondfile!
7 w2 Z* T; l0 O) U#使用补丁包升级testfile1文件 # \' ]3 [( j, T$ a1 ~
$ patch -p0 testfile1 testfile.patch
3 x; y" a# I, c7 Fpatching file testfile1 " E2 i+ u; s1 I9 v
$cat testfile1 #再次查看testfile1的内容
( j/ j( F- m6 z8 m& K3 x7 [#testfile1文件被修改为与testfile2一样的内容 ! h0 z, I6 N1 x$ w' N
Hello,This is the secondfile! % x! w7 ~" J: h8 x, v8 l5 V
$ ~8 I4 q6 u4 P% P$ r9 F+ s
( ?7 V1 i8 P$ f! m8 u7 p5 p6 b
注意:上述命令代码中,"$ diff testfile1 testfile2>testfile. patch"所使用的操作符">"表示将该操作符左边的文件数据写入到右边所指向的文件中。在这里,即是指将两个文件比较后的结果写入到文件"testfile.patch"中。
3 B( @4 R) |$ U) m$ _0 \7 @* \! n6 X% ]) o
|
|