Командата Linux patch ви позволява да прехвърляте бързо и безопасно промените от един набор файлове в друг набор от файлове. Научете как да използвате кръпка по лесния начин.
Съдържание
Командите patch и diff
Представете си, че имате текстов файл на вашия компютър. Получавате променена версия на този текстов файл от някой друг. Как бързо да прехвърлите всички промени от модифицирания файл във вашия оригинален файл? Това е мястото, където patch и diff влизат в игра. patch и diff се намират в Linux и други подобни на Unix операционни системи, като macOS.
Командата diff проверява две различни версии на файл и изброява разликите между тях. Разликите могат да бъдат съхранени във файл, наречен пач файл.
Командата patch може да чете файл с корекция и да използва съдържанието като набор от инструкции. Следвайки тези инструкции, промените в модифицирания файл са репликиран в оригинал файл.
Сега си представете, че този процес се случва с цяла директория с текстови файлове. Всичко наведнъж. Това е силата на пластира.
Понякога не ви се изпращат променените файлове. Всичко, което получавате, е пач файла. Защо да изпращате десетки файлове, когато можете да изпратите един файл или да публикувате един файл за лесно изтегляне?
Какво правите с файла за корекция, за да коригирате вашите файлове? Освен че е почти говорене на езици, това е и добър въпрос. Ще ви преведем през това в тази статия.
Командата patch се използва най-често от хора, работещи с файлове с изходен код на софтуера, но работи еднакво добре с всеки набор от текстови файлове, независимо от предназначението им, изходен код или не.
Нашият примерен сценарий
В този сценарий се намираме в директория, наречена work, която съдържа две други директории. Единият се нарича работещ, а другият се нарича последен. Работната директория съдържа набор от файлове с изходен код. Най-новата директория съдържа най-новата версия на тези файлове с изходен код, някои от които са променени.
За да сме сигурни, работната директория е копие на текущата версия на текстовите файлове. Това не е единственото им копие.
Намиране на разликите между две версии на файл
Командата diff открива разликите между два файла. Неговото действие по подразбиране е да изброи променените редове в прозореца на терминала.
Един файл се нарича slang.c. Ще сравним версията в работната директория с тази в най-новата директория.
Опцията -u (унифицирана) казва на diff също да изброи някои от немодифицираните текстови редове преди и след всяка от променените секции. Тези линии се наричат контекстни линии. Те помагат на командата patch да намери точно къде трябва да се направи промяна в оригиналния файл.
Ние предоставяме имената на файловете, така че diff да знае кои файлове да сравни. Първо се посочва оригиналният файл, след това модифицираният файл. Това е командата, която издаваме за diff:
diff -u working/slang.c latest/slang.c
diff създава изходен списък, показващ разликите между файловете. Ако файловете бяха идентични, изобщо нямаше да има изход. Виждането на този тип изход от diff потвърждава, че има разлики между двете версии на файла и че оригиналният файл се нуждае от корекция.
Създаване на файл за корекция
За да уловите тези разлики във файл с корекция, използвайте следната команда. Това е същата команда като по-горе, като изходът от diff се пренасочва във файл, наречен slang.patch.
diff -u working/slang.c latest/slang.c > slang.patch
patch -u working.slang.c -i slang.patch
Ако всичко върви добре, има един-единствен изходен ред, който ви казва, че кръпката поправя файла.
Създаване на резервно копие на оригиналния файл
Можем да инструктираме patch да направи резервно копие на закърпените файлове, преди да бъдат променени, като използваме опцията -b (резервно копие). Опцията -i (вход) казва на корекцията името на файла за корекция, който да се използва:
patch -u -b working.slang.c -i slang.patch
Файлът е закърпен както преди, без видима разлика в изхода. Ако обаче погледнете в работната папка, ще видите, че е създаден файл, наречен slang.c.orig. Печатите за дата и час на файловете показват, че slang.c.orig е оригиналният файл, а slang.c е нов файл, създаден чрез корекция.
Използване на diff With Directories
Можем да използваме diff, за да създадем файл с корекция, който съдържа всички разлики между файловете в две директории. След това можем да използваме този файл с корекция с корекция, за да приложим тези разлики към файловете в работната папка с една команда.
Опциите, които ще използваме с diff, са опцията -u (унифициран контекст), която използвахме по-рано, опцията -r (рекурсивна), за да накараме diff да разглежда всякакви поддиректории и опцията -N (нов файл).
Опцията -N указва на diff как да обработва файлове в най-новата директория, които не са в работната директория. Той принуждава diff да постави инструкции във файла за корекция, така че patch да създава файлове, които присъстват в най-новата директория, но липсват в работната директория.
Можете да групирате опциите заедно, така че да използват едно тире (-).
Имайте предвид, че предоставяме само имената на директории, не казваме на diff да разглежда конкретни файлове:
diff -ruN working/ latest/ > slang.patch