Cómo parchear Ubuntu
-------- ---------- --
NOMBRE
diff
- Encuentra las diferencias entre dos archivos
SNOYPSIS
diff
[opciones] de archivo a archivo
- ------- ---------- --
En pocas palabras, la función de diff es comparar las diferencias entre dos archivos y luego registrarlas. También se llama parche diff. . Formato de sintaxis: opción diff archivo de origen (carpeta) archivo de destino (carpeta) es aplicar un parche al archivo de origen (carpeta) para convertirlo en un archivo de destino (carpeta). El término también se denomina "actualización". Estas son las tres opciones más utilizadas:
-r es la opción recursiva. Con esta opción, diff compara todos los archivos en dos versiones diferentes del directorio de origen, incluidos los archivos del subdirectorio.
La opción -N garantiza que el archivo de parche maneje correctamente la creación o eliminación de archivos.
La opción -u crea archivos de parche en un formato unificado que es más compacto que el formato predeterminado.
2. parche
-------- ----------
NOMBRE
patch
-Aplica el archivo de diferencia al archivo original
SINOPSIS
patch
[opciones] [archivo original [archivo de parche]]< / p>
[opciones] [archivo original [archivo de parche]]
: aplica un archivo de diferencias a un archivo de parche. p> Pero
generalmente solo
parche
-pnum
---- ------- --- ----
En pocas palabras, un parche es un parche que usa diff para convertir un archivo (carpeta) de origen en un archivo (carpeta) de destino. Dicho esto, puede utilizar el archivo de origen (carpeta) --> el archivo de destino (carpeta) o el archivo de destino (carpeta) --> el archivo de origen (carpeta). Las siguientes son algunas de las opciones más utilizadas:
La opción -p0 se usa para encontrar el archivo (carpeta) de destino en el directorio actual
La opción -p1 se usa para ignore el directorio de primer nivel y comience desde el directorio actual. Comienza la búsqueda.
********************************************* *** *******************
El siguiente es un ejemplo:
--- old/modules/pcitable Mon
27 de septiembre 11:03:56 1999
+++ nuevo/módulos/pcitable martes
19 de diciembre 20:05:41 2000
Si se usa El parámetro -p0 significa buscar la carpeta llamada old en el directorio actual y buscar el archivo pcitable en el módulo debajo de ella para realizar la operación de parcheo.
Si usa el parámetro -p0, significa buscar la carpeta llamada old en el directorio actual y buscar el archivo pcitable en el módulo debajo de la carpeta para realizar la operación de parche.
Si se utiliza -p1, se ignora el primer directorio (es decir, se ignora el antiguo), se encuentra una carpeta llamada módulos en el directorio actual y se encuentra un archivo pcitable debajo de ella, siempre que el El directorio actual es
p>
es el directorio donde se encuentra el módulo. Por otro lado, el archivo de parche diferencial puede estar en cualquier lugar siempre que se especifique la ruta al archivo de parche diferencial. Por supuesto, puedes utilizar rutas relativas o absolutas. Pero normalmente uso rutas relativas.
********************************************* ***** *******************
La opción -E se utiliza para eliminar un archivo vacío cuando se encuentra
La opción -R se utiliza para eliminar archivos "nuevos" y archivos "nuevos" en archivos de parche.
Entorno: inicie sesión como usuario de armlinux en RedHat 9.0.
El árbol de directorios es el siguiente:
|--
cargador de arranque
|--
depuración
|--
imágenes
|--
núcleo
|--
programa
|--
archivos raíz
|--
software
|--
fuente
|--
sysapps
|--
tmp
`- -
herramientas
A continuación, cree una carpeta de parches para experimentar en la carpeta del programa y luego vaya a la carpeta de parches.
I. Operación de parche de archivo único
1. Crear archivos de prueba test0, test1
[armlinux@lqm
patch]$ cat >>prueba0< > 111111 > 111111 > 111111 > EOF [armlinux@lqm parche]$ más prueba0 111111 111111 111111 [armlinux@lqm parche]$ gato > ; >prueba1< 222222 111111 > 222222 > 111111 > EOF [armlinux@lqm p > parche]$ más prueba1 2222222 111111 2222222 111111 2 Utilice diff para crear el parche test1.patch [armlinux@lqm patch]$ diff -uN test0 test1 test1.patch Nota: Dado que se trata de un único archivo, la opción -r no es necesaria. El orden de las opciones no importa, es decir, puede ser -uN o -Nu. [armlinux@lqm parche]$ ls prueba0 prueba1 prueba1.patch [armlinux@lqm parche]$ más prueba1. *********************************** ******* ************************* Estructura del archivo de parche Encabezado del parche El encabezado del parche consta de dos líneas que comienzan con ----/+++, que se utilizan para indicar los archivos que se van a parchear. Las líneas que comienzan con --- representan archivos antiguos, las líneas que comienzan con +++ representan archivos nuevos. Inclusión de varios parches en un archivo de parche Un archivo de parche puede contener muchas secciones que comiencen con ----/+++, una para cada parche. Por lo tanto, un archivo de parche puede contener varios parches. Bloques Los bloques son áreas del parche que deben modificarse. Generalmente comienza y termina con partes que no necesitan ser modificadas. Sólo se utilizan para indicar dónde modificar. Generalmente comienzan con @@ y terminan con el comienzo de otro bloque o el encabezado de un nuevo parche. Sangría de bloque La sangría de bloque es una columna que indica si la línea se agregará o eliminará. La primera columna del bloque El signo "+" indica que esta fila se va a agregar. El signo "-" indica que esta línea debe eliminarse. Sin signo significa que esto es solo una referencia y no necesita ser modificado. ********************************************* ***** ******************* *** El comando diff registra la primera hora de creación de estos dos archivos en el archivo de parche. de la siguiente manera**** ---- test0 2006-08-18 09:12:01.000000000 +0800 +++ prueba1 2006-08-18 09:13:09.000000000 +0800 @@ -1,3 +1,4 p> @@ p> +222222 111111 -111111 +222222 111111 [armlinux @lqm patch]$ patch -p0 < test1.patch Archivo de parche test0 [armlinux@lqm parche]$ ls prueba0 prueba1 prueba1.patch [armlinux@lqm parche]$ cat test0 22222 111111 22222 111111 3. la versión anterior [ armlinux@lqm patch]$ patch -RE -p0 < test1.patch Archivo de parche prueba0 [armlinux@lqm parche]$ ls prueba0 prueba1 prueba1.patch [armlinux @lqm patch] $ cat test0 111111 111111 111111 2. Parchear varios archivos 1, Crear carpeta de prueba [armlinux@lqm patch] $ mkdir prj0 [armlinux@lqm parche]$ cp prueba0 prj0 [armlinux@lqm parche]$ ls prj0 prueba0 prueba1 prueba1.parche [armlinux@lqm p> parche]$ cd prj0/ [armlinux@lqm prj0]$ ls prueba0 p> [armlinux @lqm prj0]$ gato >& gt;prj0name< > ------ -- > prj0/prj0nombre > ------- - > EOF [armlinux@lqm prj0]$ ls prj0nombre prueba0 p> [armlinux @lqm prj0]$ cat prj0name -------- prj0/prj0name ---- ---- [armlinux@lqm >prj0]$ cd . [armlinux@lqm parche]$ mkdir prj1 [armlinux@lqm parche]$ cp prueba1 prj1 [armlinux@lqm parche]$ cd prj1 [armlinux@lqm prj1]$ gato p> >>prj1nombre< > --------- > prj1/prj1nombre > --------- > EOF [armlinux@lqm prj1]$ cat prj1nombre --------- prj1/prj1nombre --------- [armlinux@lqm prj1]$ cd . Crear parche [armlinux@lqm parche]$ diff -uNr prj0 prj1 > prj1.patch [armlinux@lqm parche]$ más prj1.patch diff -uNr prj0/prj0name prj1/prj0name --- prj0/prj0name 2006-08-18 09:25:11.000000000 +0800 +++ prj1/prj0nombre 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ --------- -prj0/prj0nombre --------- diff -uNr prj0/prj1nombre prj1/prj1nombre --- prj0/prj1nombre 1970-01-01 08:00:00.000000000 +0800 +++ prj1/prj1nombre 2006-08-18 09:26:36.000000000 +0800 @@ -0,0 +1,3 @@ +--------- +prj1/ prj1nombre +--------- diff -uNr prj0/test0 prj1/test0 --- prj0/test0 2006-08-18 09:23:53.000000000 + 0800 +++ prj1/test0 1970-01-01 08:00:00.000000000 +0800 @@ -1,3 +0,0 @@ -1111111 -1111111 -1111111.p>-1111111 diff -uNr prj0/test1 prj1/test1 --- prj0/ prueba1 1970 -01-01 08:00:00.000000000 +0800 +++ prj1/test1 2006-08-18 09:26:00.000000000 +0800 @@ -0,0 +1,4 @@ +222222 + 111111 +222222 +111111 [armlinux@lqm parche]$ ls prj0 prj1 prj1.patch prueba0 prueba1 prueba1.patch [armlinux@lqm parche]$ cp prj1./prj0 [armlinux@lqm parche]$ cd prj0 [armlinux@lqm prj0]$ parche -p1 < prj1.patch Archivo de parche prj0name Archivo de parche prj1name Archivo de parche test0 Archivo de parche prueba1 [armlinux@lqm prj0]$ ls prj1nombre prj1.patch prueba1 [armlinux@lqm p> prj0]$ parche -R -p1 < prj1.patch archivo de parche prj0name archivo de parche prj1name archivo de parche prueba0 archivo de parche prueba1 [armlinux@lqm prj0]$ ls prj0nombre prj1.patch prueba0 ------- ---------- ------- --- -- Resumen: Archivo único diff -uN de-archivo a-archivo >a-archivo .patch parche -p0 < to-file.patch parche -RE -p0 < to-file.patch