Header Ads

Como aplicar um patch a um arquivo (e criar patches) no Linux

O comando Linux patch permite transferir as alterações de um conjunto de arquivos para outro conjunto de arquivos com rapidez e segurança. Aprenda a usar o patch da maneira mais simples.

Os comandos patch e diff

Imagine que você tenha um arquivo de texto no seu computador. Você recebe uma versão modificada desse arquivo de texto de outra pessoa. Como você transfere rapidamente todas as alterações do arquivo modificado para o arquivo original? É aí que patch e diff entram em jogo. patch e diff são encontrados no Linux e em outros sistemas operacionais semelhantes a Unix, como o macOS.

O comando diff examina duas versões diferentes de um arquivo e lista as diferenças entre elas. As diferenças podem ser armazenadas em um arquivo chamado patch file.

O comando patch pode ler um arquivo de patch e usar o conteúdo como um conjunto de instruções. Seguindo essas instruções, as alterações no arquivo modificado são replicadas no arquivo original.

Agora imagine esse processo acontecendo em um diretório inteiro de arquivos de texto. Tudo de uma vez. Esse é o poder do patch.

Às vezes, você não recebe os arquivos modificados. Tudo o que você recebe é o arquivo de patch. Por que enviar dezenas de arquivos quando você pode enviar um arquivo ou postar um arquivo para facilitar o download?

O que você faz com o arquivo de patch para realmente corrigir seus arquivos? Além de ser quase um trava-língua, essa também é uma boa pergunta. Nós o orientaremos neste artigo.

O comando patch é mais usado por pessoas que trabalham com arquivos de código-fonte de software, mas funciona igualmente bem com qualquer conjunto de arquivos de texto, qualquer que seja sua finalidade. código ou não.

RELACIONADO: Como Comparar Dois Arquivos de Texto no Terminal Linux

Nosso Exemplo de Cenário

Neste cenário, estamos em um diretório chamado trabalho que contém dois outros diretórios. Um é chamado de trabalho e o outro é chamado de mais recente. O diretório de trabalho contém um conjunto de arquivos de código-fonte. O diretório mais recente contém a versão mais recente desses arquivos de código-fonte, alguns dos quais foram modificados.

Por segurança, o diretório de trabalho é uma cópia da versão atual dos arquivos de texto. Não é a única cópia deles.

Encontrando as diferenças entre duas versões de um arquivo

O comando diff localiza as diferenças entre dois arquivos. Sua ação padrão é listar as linhas modificadas na janela do terminal.

Um arquivo é chamado de slang.c. Vamos comparar a versão no diretório de trabalho com a do diretório mais recente.

A opção -u (unificada) diz ao diff para também listar algumas das linhas de texto não modificadas de antes e depois de cada uma. das seções alteradas. Essas linhas são chamadas de linhas de contexto. Eles ajudam o comando patch a localizar precisamente onde uma alteração deve ser feita no arquivo original.

Fornecemos os nomes dos arquivos para que o diff saiba quais arquivos comparar. O arquivo original é listado primeiro, depois o arquivo modificado. Este é o comando que emitimos para diff:

 diff -u trabalhando / slang.c latest / slang.c 

diff produz um lista de saída mostrando as diferenças entre os arquivos. Se os arquivos fossem idênticos, não haveria saída listada. Ver esse tipo de saída do diff confirma que existem diferenças entre as duas versões de arquivo e que o arquivo original precisa de correção.

Fazendo um arquivo de correção

Para capturar essas diferenças em um arquivo de patch, use o seguinte comando. É o mesmo comando acima, com a saída do diff redirecionada para um arquivo chamado slang.patch.

 diff -u trabalhando / slang.c latest / slang.c > slang.patch 

O nome do arquivo de patch é arbitrário. Você pode chamar o que quiser. Dar uma extensão ".patch" é uma boa ideia; no entanto, como ele deixa claro que tipo de arquivo é.

Para fazer o patch agir sobre o arquivo de patch e modificar o arquivo working / slang.c, use o seguinte comando. A opção -u (unificada) permite que o patch saiba que o arquivo de patch contém linhas de contexto unificadas. Em outras palavras, usamos a opção -u com diff, então usamos a opção -u com patch.

patch -u working.slang.c -i slang.patch

Se tudo correr bem, há uma única linha de saída informando que o patch está corrigindo o arquivo.

Fazendo um backup do arquivo original

instruir patch para fazer uma cópia de backup dos arquivos corrigidos antes de serem alterados usando a opção -b (backup). A opção -i (input) diz ao patch o nome do arquivo de patch a ser usado:

 patch -u -b working.slang.c -i slang.patch 

IMAGEM_5

O arquivo está com o patch como antes, sem diferença visível na saída . No entanto, se você olhar para a pasta de trabalho, verá que o arquivo chamado slang.c.orig foi criado. Os carimbos de data e hora dos arquivos mostram que o slang.c.orig é o arquivo original e o slang.c é um novo arquivo criado pelo patch.

Usando o diff Com os Diretórios

Podemos usar o diff para criar um arquivo de patch que contenha todas as diferenças entre os arquivos em dois diretórios. Podemos então usar esse arquivo de correção com patch para ter essas diferenças aplicadas aos arquivos na pasta de trabalho com um único comando.

As opções que vamos usar com diff são -u (contexto unificado ) opção que usamos anteriormente, a opção -r (recursiva) para fazer o diff olhar em qualquer subdiretório e a opção -N (novo arquivo).

A opção -N informa ao diff como tratar arquivos no diretório mais recente que não está no diretório de trabalho. Ele força o diff a colocar instruções no arquivo de correção para que o patch crie arquivos que estão presentes no diretório mais recente, mas ausentes do diretório de trabalho.

Você pode agrupar as opções para que usem um único hífen (-

Note que estamos apenas fornecendo os nomes de diretório, não estamos dizendo ao diff para ver arquivos específicos:

 diff -ruN funcionando / mais recente / & gt ; slang.patch 

Espreitando dentro do arquivo de patch

Vamos dar uma rápida olhada no arquivo de patch. Usaremos menos para ver seu conteúdo.

A parte superior do arquivo mostra as diferenças entre as duas versões do slang.c.

Rolando mais abaixo através do arquivo de patch, vemos que ele descreve as mudanças em outro arquivo chamado structs.h. Isso verifica se o arquivo de patch definitivamente contém as diferenças entre diferentes versões de vários arquivos.

Antes de você pular

Corrigir uma grande coleção de arquivos pode ser um pouco desconcertante, então vamos usar a opção --dry-run para verificar se tudo está bem antes de tomarmos a iniciativa e nos comprometermos a fazer as mudanças.

O --dry-run opção diz ao patch para fazer tudo além de realmente modificar os arquivos. O patch executará todas as verificações pré-vôo nos arquivos e, se encontrar algum problema, os informará. De qualquer maneira, nenhum arquivo é modificado.

Se nenhum problema for relatado, podemos repetir o comando sem a opção --dry-run e corrigir nossos arquivos com confiança.

O -d (directory) opção informa ao patch em qual diretório trabalhar.

Note que não estamos usando a opção -i (input) para dizer ao patch qual arquivo de patch contém as instruções do diff. Em vez disso, estamos redirecionando o arquivo de patch para patch com <.

 patch --dry-run -ruN -d funcionando < slang.patch 

Fora do diretório inteiro, o diff encontrou dois arquivos para corrigir. As instruções relativas às modificações para esses dois arquivos foram verificadas por patch, e nenhum problema foi relatado.

Verificações prévias estão OK; estamos prontos para decolar.

Corrigindo um diretório

Para aplicar os patches aos arquivos, usamos o comando anterior sem a opção --dry-run.

 patch -ruN -d funcionando < slang.patch 

Desta vez, cada linha de saída não começa com "verificação", cada linha começa com "patch".

E não problemas são relatados. Podemos compilar nosso código-fonte e teremos a versão mais recente do software.

Configure suas diferenças

Esta é de longe a maneira mais fácil e segura de usar o patch. Copie seus arquivos de destino para uma pasta e corrija essa pasta. Copie-os de volta quando estiver satisfeito porque o processo de correção foi concluído sem erros.

LEIA PRÓXIMO & rsaquo; O modo escuro não é melhor para você, mas nós amamos de qualquer maneira & rsaquo; Como parar o Windows 10 a partir do esvaziamento automático da sua lixeira & rsaquo; Como o iOS 13 salvará a bateria do seu iPhone (ao não carregá-la totalmente) & rsaquo; iPadOS fará quase seu iPad um computador real & rsaquo; A Apple está matando o iTunes, mas não no Windows

Via: How to Geek

Nenhum comentário