之前写过为iOSOpenDev增加指定设备端口功能 (English ver. is here),今天在看LPI的时候,书中提到了Linux的内核升级,其中就用了patch来给内核文件打补丁。
这样的方式比起我当时给出的“自己对应目录层级”覆盖文件好多了,于是就当是学习diff和patch的使用方法,做了一个iOSOpenDev的补丁,不过我是按照1.6-2版本的iOSOpenDev做的,其他版本的没有测试。
Usage: sudo gzip -cd iOSOpenDev.patch.gz | patch -p0
diff -uNr /opt/iOSOpenDev /opt/iOSOpenDev+Port > /opt/iOSOpenDev.patch
这个命令的参数里面,
u是“合并格式”,unified。既然说到了“合并格式”,那就是说diff的输出还有其他的格式。实际上,diff一共有三种格式,它们分别是:
- 正常格式
- 上下文格式
- 合并格式
先来说说正常格式吧,要使用输出正常格式,直接diff origin modification即可,比如:
origin文件,
n i c o n i c o n i
modification文件,(在第四行下面插入了字符'~')
n i c o ~ n i c o n i
那么此时diff的输出是这样子的:
4a5 > ~
4代表在origin里的行数,a代表addition,5代表在modification里的行数
>提示增加 后面跟着需要增加的内容
(那么同理,<即是提示删除;如果既有<又有>的话,在他们中间还有三个连字符/减号, ---)
那么总的来讲,正常格式为:(为了方便阅读,各部分用[]围住)
[Row in orinal][Action][Row in modification] [<] [Content] [---] [>] [Content]
其中Action可以是:
c, 内容改变 a, 增加 d, 删除
接下来是第二种,也就是上下文格式的diff。
伯克利在推出BSD时觉得还需要加入上下文,更易于了解具体的改动。
使用上下文格式,只需要diff -c origin modification
*** origin 2015-03-06 21:33:01.000000000 +0800 --- modification 2015-03-06 21:33:13.000000000 +0800 *************** *** 2,7 **** --- 2,8 ---- i c o + ~ n i c
前两行就是文件名和时间,之后的一行是15个*用于分割
*** 代表origin
--- 代表modification
[***|---] m,n [***|---]
代表[origin|modification]第m行开始,连续n行的变动
每一行前面有个标志位,+则是增加,-是删去,!是变动
最后就是混合格式了!
diff -u origin modification
--- orig 2015-03-06 21:33:01.000000000 +0800 +++ repl 2015-03-06 21:33:13.000000000 +0800 @@ -2,6 +2,7 @@ i c o +~ n i c
前两行依旧是文件信息,第三行是两个@@开始,两个@@结束,其实就是上下文格式中两次
[***|---] m,n [***|---]的“简写”形式,其余部分和上下文格式差不多。不过由于不用分别列出两个文件的上下文变动,所以更省空间。
准备考LPI了吗?!!!
对这些一无所知,哎,I'm too young to simple...