El Linux patch
Il comando consente di trasferire le modifiche da un set di file a un altro set di file in modo rapido e sicuro. Impara come usare patch
il modo semplice.
I comandi patch e diff
Immagina di avere un file di testo sul tuo computer. Ricevi una versione modificata di quel file di testo da qualcun altro. Come trasferire rapidamente tutte le modifiche dal file modificato al file originale?? ecco dove patch
e diff
Vieni a giocare. patch
e diff
trovato su Linux e altri sistemi operativi simili a Unix, come macOS.
il diff
comando esaminare due diverse versioni di un file ed elenca le differenze tra loro. Le differenze possono essere memorizzate in un file chiamato file di patch.
il patch
Il comando può leggere un file di patch e utilizzare il contenuto come un insieme di istruzioni. Seguendo queste istruzioni, le modifiche al file modificato sono replicato nell'originale procedimento.
Ora immagina che questa procedura avvenga su un'intera directory di file di testo. Tutto in una volta. Questo è il potere di patch
.
A volte non ti inviano file modificati. Tutto ciò che ti viene inviato è il file di patch. Perché inviare dozzine di file quando puoi inviare un file o pubblicare un file per un facile download??
Cosa fai con il file di patch per correggere veramente i tuoi file?? Oltre ad essere quasi uno scioglilingua, è anche una bella domanda. Ti guideremo in questo post.
il patch
Il comando è più spesso utilizzato da persone che lavorano con file di codice sorgente del software., ma funziona ugualmente bene con qualsiasi set di file di testo, qualunque sia il tuo obiettivo, codice sorgente o no.
IMPARENTATO: Come confrontare due file di testo nel terminale Linux
Il nostro scenario di esempio
In questa fase, siamo in una directory chiamata lavoro che contiene altre due directory. Uno si chiama lavoro, e l'altro si chiama più recente. La directory di lavoro contiene un insieme di file di codice sorgente. L'ultima directory contiene la versione più recente di quei file di codice sorgente, alcuni dei quali sono stati modificati.
Per essere sicuro, la directory di lavoro è una copia della versione corrente dei file di testo. Non è l'unica copia di loro.
Trova le differenze tra due versioni di un file
il diff
comando trova differenze tra due file. La sua azione predefinita è elencare le righe modificate nella finestra del terminale.
Viene chiamato un file slang.c
. Confronteremo la versione della directory di lavoro con quella della directory più recente.
il -u
l'opzione (unificato) dado diff
per elencare ulteriormente alcune delle righe di testo non modificate prima e dopo ciascuna delle sezioni modificate. Queste linee sono chiamate linee di contesto. Aiutano il patch
individuare con precisione dove deve essere apportata una modifica nel file originale.
Forniamo i nomi dei file in modo che diff
sapere quali file confrontare. Il file originale è elencato per primo, dopo il file modificato. Questo è il comando che diamo a diff
:
diff -u working/slang.c latest/slang.c
diff
produce un elenco di output che mostra le differenze tra i file. Se i file fossero identici, nessun risultato sarebbe incluso nell'elenco. Vedendo questo tipo di output da diff
conferma che ci sono differenze tra le due versioni del file e che il file originale necessita di una patch.
Crea un file di patch
Per catturare queste differenze in un file di patch, usa il seguente comando. È lo stesso comando del precedente, con la partenza di diff
reindirizzato a un file chiamato slang.patch.
diff -u working/slang.c latest/slang.c > slang.patch
Il nome del file di patch è arbitrario. Puoi chiamarlo come vuoi. Darle una extensión “.patch” es una buena idea; nonostante questo, chiarisci che tipo di file è.
Produrre patch
agire sul file di patch e modificare il file di lavoro / slang.c, usa il seguente comando. il -u
opzione (unificato) consente patch
sappi che il file di patch contiene righe di contesto unificate. In altre parole, usiamo l'opzione -u con diff, quindi usiamo il -u
opzione con patch
.
parche -u working.slang.c -i slang.patch
Se tutto va bene, c'è solo una linea di partenza che te lo dice patch
sta patchando il file.
Fai un backup del file originale
Possiamo istruire patch
per eseguire un backup dei file con patch prima che vengano modificati tramite il -b
opzione (backup). il -i
L'opzione (iscrizione) dice alla patch il nome del file di patch da usare:
patch -u -b working.slang.c -i slang.patch
Il file è patchato come prima, nessuna differenza visibile nell'output. Nonostante questo, se guardi la cartella di lavoro, vedrai che il file chiamato slang.c.orig è stato creato. La data e l'ora del file mostrano che slang.c.orig è il file originale e slang.c è un nuovo file creato da patch
.
Utilizzo di diff con le directory
Possiamo usare diff
per creare un file di patch contenente tutte le differenze tra i file in due directory. Quindi possiamo usare quel file di patch con patch
in modo che queste differenze vengano applicate ai file nella cartella di lavoro con un singolo comando.
Le alternative che useremo con diff
sono i -u
(contesto unificato) che abbiamo usato in precedenza, il -r
(ricorsivo) opzione da fare diff
cerca in qualsiasi sottodirectory e il -N
(nuovo file) opzione.
il -N
opzione dice diff
come gestire i file nella directory più recente che non si trovano nella directory di lavoro. Forza diff
inserire le istruzioni nel file di patch in modo chepatch
crea file che sono presenti nell'ultima directory ma mancano dalla directory di lavoro.
Puoi raggruppare le alternative per utilizzare un singolo script (-
).
Si prega di notare che forniamo solo i nomi delle directory, non stiamo dicendo diff
per guardare file specifici:
diff -ruN working/ latest/ > slang.patch
slang.patch” larghezza=”646″ altezza=”77″ caricare=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(questo);” unerrore=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(questo);”>
Echando un vistazo dentro del archivo de parche
Diamo una rapida occhiata al file di patch. noi useremo less
per vedere il suo contenuto.
La parte superiore del file mostra le differenze tra le due versioni di slang.c.
Scorrendo il file della patch, vediamo che in seguito descrive le modifiche in un altro file chiamato structs.h. Ciò verifica che il file di patch contenga sicuramente le differenze tra le diverse versioni dei vari file.
Guarda prima di saltare
Patchare una grande raccolta di file può essere un po' sconcertante, quindi useremo il --dry-run
opzione per verificare che tutto sia a posto prima di eseguire il passaggio e impegnarsi ad apportare le modifiche.
il --dry-run
opzione dice patch
fare tutto, a parte modificare i file. patch
eseguirà tutti i controlli pre-volo su file e, se trovi qualche problema, informerà. Comunque, nessun file viene modificato.
Se non vengono segnalati problemi, possiamo ripetere il comando senza --dry-run
opzione e patchare i nostri file con sicurezza.
il -d
(directory) opzione dire patch
in quale directory lavorare.
Si prega di notare che siamo no usando il -i
(iscrizione) possibilità di contare patch
quale file di patch contiene le istruzioni per diff
. Anziché, stiamo reindirizzando il file di patch a patch
insieme a <
.
patch --dry-run -ruN -d funzionante < slang.patch
Dall'intera directory, diff
Ho trovato due file da patchare. Le istruzioni relative alle modifiche per questi due file sono state verificate da patch
e non sono stati segnalati problemi.
I controlli pre-volo vanno bene; siamo pronti a decollare.
Patch di una directory
Per applicare veramente le patch ai file usiamo il comando sopra senza il --dry-run
opzione.
patch -ruN -d funzionante < slang.patch
Questa volta, cada línea de salida no comienza con “comprobación”, cada línea comienza con “parcheo”.
E non vengono segnalati problemi. Possiamo compilare il nostro codice sorgente e avremo l'ultima versione del software.
Risolvi le tue divergenze
Questo è, con molto, il modo più semplice e sicuro per usare patch
. Copia i file di destinazione in una cartella e applica la patch a quella cartella. Copiali di nuovo quando sei soddisfatto che la procedura di patch sia stata completata senza errori.
impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);