Capítulo 10. Gestão de dados

Índice

10.1. Partilhar, copiar e arquivar
10.1.1. Ferramentas de arquivo e compressão
10.1.2. Ferramentas de cópia de sincronização
10.1.3. Idiomas para o arquivo
10.1.4. Idiomas para a cópia
10.1.5. Idiomas para a seleção de ficheiros
10.1.6. Meio de arquivo
10.1.7. Aparelho de armazenamento amovível
10.1.8. Escolha de sistema de ficheiros para partilhar dados
10.1.9. Partilhar dados via a rede
10.2. Salvaguarda (backup) e recuperação
10.2.1. Suites de utilitários de backup
10.2.2. Personal backup
10.3. Infraestrutura da segurança de dados
10.3.1. Gestão de chaves para GnuPG
10.3.2. Usa GnuPG em ficheiros
10.3.3. Usar GnuPG com o Mutt
10.3.4. Usar GnuPG com o Vim
10.3.5. O valor de controlo MD5
10.4. Ferramentas de fusão de código fonte
10.4.1. Extrair as diferenças para ficheiros fonte
10.4.2. Fundir atualizações para ficheiros de fonte
10.4.3. Interactive merge
10.5. Git
10.5.1. Configuração do cliente Git
10.5.2. Basic Git commands
10.5.3. Git tips
10.5.4. Referências do Git
10.5.5. Other version control systems

São descritas ferramentas e dicas para gerir dados binários e de texto no sistema Debian.

[Atenção] Atenção

O acesso de escrita descoordenado a aparelhos acedidos activamente e a ficheiros a partir de múltiplos processos não deve ser feito para evitar a condição de competição. Devem ser usados mecanismos de bloqueio de ficheiro que usem o flock(1) para o evitar.

A segurança dos dados e a partilha controlada dele têm vários aspectos.

  • A criação de um arquivo de dados

  • O acesso a armazenamento remoto

  • A duplicação

  • O acompanhar do histórico de modificação

  • A facilitação da partilha de dados

  • A prevenção de acessos não autorizados a ficheiros

  • A detecção de modificação não autorizada de ficheiros

Estas podem ser realizadas a usar a combinação de algumas ferramentas.

  • Ferramentas de arquivo e compressão

  • Ferramentas de cópia de sincronização

  • Sistemas de ficheiros de rede

  • Media de armazenamento amovível

  • A shell segura

  • O sistema de autenticação

  • Ferramentas de sistema de controle de versão

  • Ferramentas de hash e encriptação criptográfica

Aqui está um sumário das ferramentas de arquivo e compressão disponíveis no sistema Debian.

Tabela 10.1. Lista de ferramentas de arquivo e compressão

pacote popcon tamanho extensão comando comentário
tar V:914, I:999 3152 .tar tar(1) o arquivador standard (de facto standard)
cpio V:489, I:998 1144 .cpio cpio(1) arquivador estilo Unix System V, usar com o find(1)
binutils V:164, I:673 97 .ar ar(1) arquivador para a criação de bibliotecas estáticas
fastjar V:2, I:25 183 .jar fastjar(1) arquivador para Java (estilo zip)
pax V:12, I:24 170 .pax pax(1) novo arquivador standard do POSIX, um compromisso entre tar e cpio
gzip V:891, I:999 242 .gz gzip(1), zcat(1), … LZ77 utilitário de compressão do GNU (o standard de facto)
bzip2 V:147, I:973 122 .bz2 bzip2(1), bzcat(1), … Compressão de organização de blocos de Burrows-Wheeler utilitário com um rácio de compressão mais alto que o gzip(1) (mais lento que o gzip com sintaxe semelhante)
lzma V:2, I:27 149 .lzma lzma(1) LZMA compression utility with higher compression ratio than gzip(1) (deprecated)
xz-utils V:453, I:980 612 .xz xz(1), xzdec(1), … XZ utilitário de compressão com rácio de compressão mais alto que o bzip2(1) (mais lento que o gzip mas mais rápido que o bzip2; substituto para o utilitário de compressão LZMA)
zstd V:4, I:24 1902 .zstd zstd(1), zstdcat(1), … Zstandard fast lossless compression utility
p7zip V:79, I:454 987 .7z 7zr(1), p7zip(1) 7-Zip arquivador de arquivos com alta taxa de compressão (compressão LZMA)
p7zip-full V:102, I:469 4664 .7z 7z(1), 7za(1) 7-Zip arquivador de ficheiros com rácio de compressão alto (LZMA compressão e outros)
lzop V:10, I:85 164 .lzo lzop(1) LZO utilitário de compressão com mais alta compressão e mais rápida descompressão que o gzip(1) (rácio de compressão mais baixo que o gzip com sintaxe semelhante)
zip V:49, I:427 623 .zip zip(1) InfoZIP: ferramenta de compressão e arquivo do DOS
unzip V:132, I:792 385 .zip unzip(1) InfoZIP: ferramenta de descompressão e de de-arquivar do DOS

[Atenção] Atenção

Não defina a variável "$TAPE" a menos que saiba com o que esperar. Altera o comportamento do tar(1).

Aqui estão algumas maneiras de copiar o conteúdo inteiro do diretório "./source" a usar diferentes ferramentas.

  • Cópia local: diretório "./source" → diretório "/dest"

  • Cópia remota: diretório "./source" em máquina local → diretório "/dest" na máquina "utilizador@máquina.domínio"

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

Pode alternativamente usar a sintaxe de "uma barra à direita no diretório fonte".

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

Alternativamente, pelo seguinte.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

cp(1) de GNU e scp(1) de openSSH:

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

Pode substituir "." por "foo" para todos os exemplos que contenham "." para copiar ficheiros do diretório "./source/foo" ao diretório "/dest/foo".

Pode substituir "." pelo caminho absoluto "/caminho/para/fonte/foo" para todos os exemplos que contenham "." para abandonar "cd ./source;". Estes copiam ficheiros para localizações diferentes a depender das ferramentas utilizadas conforme a seguir.

  • "/dest/foo": rsync(8), cp(1) do GNU e scp(1)

  • "/dest/path/to/source/foo": GNU tar(1) e cpio(1)

[Dica] Dica

rsync(8) e cp(1) do GNU têm a opção "-u" para saltar ficheiros que são mais recentes no receptor.

O find(1) é usado para selecionar ficheiros para o arquivo e copiar comandos (veja Secção 10.1.3, “Idiomas para o arquivo” e Secção 10.1.4, “Idiomas para a cópia”) ou para xargs(1) (veja Secção 9.4.9, “Repetir um ciclo de comandos sobre ficheiros”). Isto pode ser melhorado ao usar os seus argumentos de comando.

A sintaxe básica de find(1) pode ser sumariada no seguinte.

  • Os seus argumentos condicionais são avaliados da esquerda à direita.

  • Esta avaliação pára assim que o resultado dele é determinado.

  • O "OU lógico" (especificado por "-o" entre condicionais) tem precedência mais baixa que o "E lógico" (especificado por "-a" ou nada entre condicionais).

  • O "NÃO lógico" (especificado por "!" antes duma condicional) tem precedência mas alta que o "E lógico".

  • "-prune" retorna sempre o VERDADEIRO lógico e, se for um diretório, a busca de ficheiro é parada para além deste ponto.

  • "-name" corresponde à base do nome de ficheiro com glob de shell (veja Secção 1.5.6, “Glob da shell”) mas também corresponde ao "." inicial dele com meta-caracteres como o "*" e o "?". (Nova funcionalidade do POSIX)

  • "-regex" corresponde ao caminho completo com estilo emacs BRE (veja Secção 1.6.2, “Expressões regulares”) como predefinição.

  • "-size" corresponde ao ficheiro baseado no tamanho do ficheiro (valor precedido de "+" para maior, precedido de "-" para menor)

  • "-newer" corresponde ao ficheiro mais recente que aquele especificado no argumento dele.

  • "-print0" retorna sempre o TRUE lógico e escreve o nome de ficheiro completo (terminado em nulo) na saída standard.

O find(1) é usado geralmente com um estilo idiomático como a seguir.

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

Isto significa fazer as seguintes acções.

  1. Procurar todos os ficheiros que começam por "/caminho/para"

  2. Limitar globalmente a busca para dentro do sistema de ficheiros inicial e usa ERE (ao inves veja Secção 1.6.2, “Expressões regulares”)

  3. Excluir da busca os ficheiros que correspondem à expressão regular ".*\.cpio" ou ".*~" ao parar o processamento

  4. Excluir da busca os diretórios que correspondem à expressão regular ".*/\.git" ao parar o processamento

  5. Exclui da busca os ficheiros maiores que 99 Mb (unidades de 1048576 bytes) ao parar o processamento

  6. Escrever os nomes de ficheiros que satisfazem as condições de busca em cima e são mais recentes que "/caminho/para/timestamp"

Por favor note a utilização idiomática de "-prune -o" para excluir ficheiros no exemplo em cima.

[Nota] Nota

Para um sistema não-Debian tipo Unix, algumas opções podem não ser suportadas pelo find(1). Em tal caso, por favor considere ajustar os métodos de correspondência e substitua "-print0" por "-print". Poderá ter que ajustar também os comandos relacionados.

Quando escolher o meio de armazenamento de dados de computador para arquivar dados importantes, deverá ter cuidado com as suas limitações. Para os pequenos backups de dados pessoais uso CD-Rs e DVD-Rs de uma boa marca e guardo-os num ambiente fresco, à sombra, seco e limpo. (O meio de cassete de fita magnética parece ser popular para uso profissional.)

[Nota] Nota

A segurança de resistência ao fogo destina-se a documentos de papel. A maioria dos meios de armazenamento de dados de computador têm menos tolerância à temperatura que o papel. Geralmente Confio em múltiplas cópias de segurança encriptadas em múltiplas localizações seguras.

A duração de vida optimista de meios de arquivo vista na net (a maioria é informação do fabricante).

  • + de 100 anos : Papel livre de ácidos com tinta

  • 100 anos : Armazenamento óptico (CD/DVD, CD/DVD-R)

  • 30 anos : Armazenamento magnético (fita, disquete)

  • 20 anos : Armazenamento óptico de mudança de fase (CD-RW)

Estes não contam com falhas mecânicas devido a manuseamento e etc.

Ciclos de escrita optimistas dos meios de arquivo vistos na net (a maioria é informação do fabricante).

  • + de 250,000 ciclos : Disco rígido

  • + de 10,000 ciclos : Memória Flash

  • 1,000 ciclos : CD/DVD-RW

  • 1 ciclo : CD/DVD-R, papel

[Cuidado] Cuidado

As figuras de vida de armazenamento e ciclos de escrita mostradas aqui não devem ser usadas para decisões em qualquer armazenamento de dados crítico. Por favor consulte a informação específica do produto disponibilizada pelo fabricante.

[Dica] Dica

Como os CD/DVD-R e o papel têm apenas 1 ciclo de escrita, eles previnem perdas de dados acidentais ao sobrescrever. Isto é uma vantagem!

[Dica] Dica

Se precisa de um backup rápido e frequente de grandes quantidades de dados, um disco rígido numa máquina remota ligada por uma ligação de rede rápida, pode ser a única opção realista.

Aparelhos de armazenamento amovível podem ser qualquer um dos seguintes.

Podem ser ligados por qualquer um dos seguintes:

Os ambientes de trabalho modernos tais como o GNOME e KDE podem montar automaticamente estes aparelhos amovíveis sem uma entrada correspondente no "/etc/fstab".

  • O pacote udisks disponibiliza um daemon e utilitários associados para (des)montar esses aparelhos.

  • D-bus cria eventos para iniciar processos automáticos.

  • PolicyKit disponibiliza os privilégios necessários.

[Dica] Dica

Os aparelhos auto-montados podem ter a opção de montagem "uhelper=" que é utilizada por umount(8).

[Dica] Dica

A auto-montagem em ambientes de trabalho modernos apenas acontece quando esses aparelhos amovíveis não estão listados em "/etc/fstab".

O ponto de montagem num ambiente de trabalho moderno é escolhido como "/media/disk_label", o qual pode ser personalizado conforme o seguinte:

  • mlabel(1) para o sistema de ficheiros FAT

  • genisoimage(1) com a opção "-V" para o sistema de ficheiros ISO9660

  • tune2fs(1) com a opção "-L" para sistemas de ficheiros ext2/ext3/ext4

[Dica] Dica

A escolha de codificação pode necessitar de ser disponibilizada como opção de montagem (veja Secção 8.1.3, “Codificação de nomes de ficheiros”).

[Dica] Dica

A utilização do menu da GUI para desmontar um sistema de ficheiros pode remover o nó de aparelho dele gerado dinamicamente tal como "/dev/sdc". Se desejar manter o nó de aparelho dele, desmonte-o com o comando umount(8) na linha de comandos da shell.

Quando partilha dados com outros sistemas via aparelhos de armazenamento amovível, deve formatá-lo num sistema de ficheiros comum que seja suportado pelos dois sistemas. Aqui está uma lista de escolhas de sistemas de ficheiros.


[Dica] Dica

Veja Secção 9.9.1, “Encriptação de discos amovíveis com dm-crypt/LUKS” para partilha de dados em várias plataformas a usar encriptação ao nível do aparelho.

O sistema de ficheiros FAT é suportado pela maioria dos sistemas operativos modernos e é bastante útil para objetivos de trocas de dados via aparelhos tipo disco rígido.

Quando formatar aparelhos tipo disco rígido amovíveis para partilha de dados em multi-plataformas com o sistema de ficheiros FAT, as seguintes deverão ser escolhas seguras.

Quando se usa sistemas de ficheiros FAT ou ISO9660 para partilhar dados, as considerações de segurança deverão ser as seguintes.

  • Arquivar ficheiros para um ficheiro de arquivo primeiro a utilizar o tar(1), ou cpio(1) para reter o nome longo do ficheiro, a ligação simbólica, as permissões originais de ficheiro Unix e a informação do dono.

  • Dividir o ficheiro de arquivo em fatias com menos de 2 GiB com o comando split(1) para o proteger contra limites de tamanho de ficheiro.

  • Encriptar o ficheiro de arquivo para segurar o conteúdo dele contra acesso não autorizado.

[Nota] Nota

Para o sistema de ficheiros FAT pelo seu desenho, o tamanho máximo de ficheiro é (2^32 - 1) bytes = (4GiB - 1 byte). Para algumas aplicações do antigo SO de 32 bits, o tamanho máximo de ficheiro é mais pequeno (2^31 - 1) bytes = (2GiB - 1 byte). O Debian não sofre do segundo problema.

[Nota] Nota

A própria Microsoft não recomenda o uso de FAT para discos ou partições maiores que 200 MB. A Microsoft destaca as suas deficiências como a ser a utilização ineficiente do espaço do disco na "Visão geral dos sistemas de ficheiros FAT, HPFS e NTFS" dele. Claro que devemos normalmente usar o sistema de ficheiros ext4 para Linux.

[Dica] Dica

Para mais sistemas de ficheiros e acesso a sistemas de ficheiros, por favor leia "HOWTO dos Sistemas de Ficheiros".

Todos sabemos que os computadores avariam ou que erros humanos causam danos no sistema e nos dados. As operações de salvaguarda e recuperação são a parte essencial sucesso do administrador de sistemas. Todos os modos de falha possíveis irão atingi-lo um dia.

[Dica] Dica

Mantenha o seu sistema de backup simples e faça backups periódicos. Ter cópias de segurança dos dados é mais importante do que quão bom é tecnicamente o seu método de backup.

Existem 3 factores chave que determinam a política atual de salvaguarda e recuperação.

  1. Saber o que salvaguardar e recuperar.

    • Ficheiros de dados criados directamente por si: dados em "~/"

    • Ficheiros de dados criados por aplicações usadas por si: dados em "/var/" (excepto "/var/cache/", "/var/run/" e "/var/tmp/")

    • Ficheiros de configuração do sistema: dados em "/etc/"

    • Softwares locais: dados em "/usr/local/" ou "/opt/"

    • Informação da instalação do sistema: um memo em texto simples em passos chave (partição, ...)

    • Conjunto de dados de prova: confirmado com antecedência por operações de recuperação experimentais

  2. Saber como salvaguardar e recuperar.

    • Armazenamento de dados seguro: protecção contra reescrita e falha do sistema

    • Salvaguarda frequente: salvaguarda agendada

    • Backup redundante: usar mirror de dados

    • Processo à prova de tolos: backup fácil de comando único

  3. Avaliar os riscos e custos envolvidos.

    • O valor dos dados quando perdidos

    • Recursos necessários para o backup: humano, hardware, software,…

    • Modo de falha e a possibilidade dele

[Nota] Nota

Não faça salvaguarda aos conteúdos dos pseudo-sistemas de ficheiros encontrados em /proc, /sys, /tmp e /run (veja Secção 1.2.12, “procfs e sysfs” e Secção 1.2.13, “tmpfs”). A menos que saiba exatamente o que está a fazer, eles são enormes quantidades de dados desnecessários.

Para o armazenamento seguro de dados, os dados devem estar pelo menos em partições de disco diferentes de preferência em discos e máquinas diferentes para sobreviverem à corrupção do sistema de ficheiros. Os dados importantes ficam melhor armazenados em medias onde só se escreve uma vez, como os CD/DVD-R para prevenir serem sobrescritos por acidente. (veja Secção 9.8, “Os dados binários” para como escrever na media de armazenamento a partir da linha de comandos shell. O ambiente gráfico de trabalho GNOME dá-lhe acesso fácil via menu: "Acessórios→Criador de CD/DVD".)

[Nota] Nota

Pode desejar parar alguns daemons de aplicação como o MTA (veja Secção 6.2.4, “Agente de transporte de mail (MTA)”) enquanto faz cópias de segurança (backups) dos dados.

[Nota] Nota

Deve ter cuidados extra com o backup e restauro de ficheiros de dados relacionados com identidade como os "/etc/ssh/ssh_host_dsa_key", "/etc/ssh/ssh_host_rsa_key", "~/.gnupg/*", "~/.ssh/*", "/etc/passwd", "/etc/shadow", "/etc/fetchmailrc", "popularity-contest.conf", "/etc/ppp/pap-secrets" e "/etc/exim4/passwd.client". Alguns destes dados não podem ser regenerados ao inserir a mesma cadeia de entrada ao sistema.

[Nota] Nota

Se executa uma tarefa cron como um processo de utilizador, tem de restaurar os ficheiros no diretório "/var/spool/cron/crontabs" e reiniciar o cron(8). Veja Secção 9.4.14, “Agendar tarefas regularmente” para cron(8) e crontab(1).

Aqui está uma lista selcionada de suites de utilitários de backup notáveis disponíveis no sistema Debian.

Tabela 10.5. Lista de suites utilitárias de salvaguarda

pacote popcon tamanho descrição
dump V:1, I:6 352 4.4 BSD dump(8) e restore(8) para sistemas de ficheiros ext2/ext3/ext4
xfsdump V:0, I:9 854 dump e restore com xfsdump(8) e xfsrestore(8) para sistema de ficheiros XFS em GNU/Linux e IRIX
backupninja V:3, I:4 367 sistema de meta-backup leve e extensível
bacula-common V:10, I:14 2158 Bacula: salvaguarda, recuperação e verificação em rede - ficheiros de suporte comum
bacula-client I:3 183 Bacula: salvaguarda, recuperação e verificação em rede - meta-pacote cliente
bacula-console V:1, I:4 107 Bacula: salvaguarda, recuperação e verificação em rede - consola de texto
bacula-server I:1 183 Bacula: salvaguarda, recuperação e verificação em rede - meta-pacote servidor
amanda-common V:1, I:2 10030 Amanda: Advanced Maryland Automatic Network Disk Archiver (Bibliotecas)
amanda-client V:1, I:2 1088 Amanda: Advanced Maryland Automatic Network Disk Archiver (Cliente)
amanda-server V:0, I:0 1075 Amanda: Advanced Maryland Automatic Network Disk Archiver (Servidor)
backup-manager V:1, I:1 571 ferramenta de salvaguarda de linha de comandos
backup2l V:0, I:1 114 ferramenta de baixa manutenção para salvaguarda/restauro para medias montáveis (baseado em disco)
backuppc V:3, I:3 3183 BackupPC é um sistema de grau empresarial de alta performance para fazer salvaguardas a PCs (baseado em disco)
duplicity V:9, I:19 1834 salvaguarda incremental (remoto)
flexbackup V:0, I:0 243 salvaguarda incremental (remoto)
rdiff-backup V:6, I:14 733 salvaguarda incremental (remoto)
restic V:1, I:4 22540 salvaguarda incremental (remoto)
slbackup V:0, I:0 151 salvaguarda incremental (remoto)

As ferramentas de salvaguarda têm os seus objetivos especializados.

  • Mondo Rescue é um sistema de backup para facilitar o restauro de um sistema completo rapidamente a partir de CD/DVD, etc de backup, sem se passar por todo o processo normal de instalação do sistema.

  • Bacula, Amanda e BackupPC são suites utilitárias de salvaguarda cheias de funcionalidades que se destinam a salvaguardas regulares em rede.

  • Regular backups of user data can be realized by a simple script (Secção 10.2.2, “Personal backup”).

Ferramentas básicas descritas em Secção 10.1.1, “Ferramentas de arquivo e compressão” e Secção 10.1.2, “Ferramentas de cópia de sincronização” podem ser usadas facilitar o backup do sistema via scripts personalizados. Tal script pode ser melhorado com o seguinte.

  • O pacote restic permite salvaguardas incrementais (remotas).

  • O pacote rdiff-backup permite salvaguardas incrementais (remotas).

  • O pacote dump ajuda a arquivar e restaurar o sistema de ficheiros completo de modo incremental e eficiente.

[Dica] Dica

Veja os ficheiros em "/usr/share/doc/dump/" e "está o dump mesmo obsoleto?" para aprender acerca do pacote dump.

A infraestrutura de segurança dos dados é disponibilizada pela combinação de uma ferramenta de encriptação de dados, ferramenta de resumo de mensagens e ferramenta de assinaturas.


See Secção 9.9, “Dicas de encriptação de dados” on dm-crypt and ecryptfs which implement automatic data encryption infrastructure via Linux kernel modules.

Aqui estão comandos do GNU Privacy Guard para gestão de chaves básica.


Aqui está o significado do código de confiança.


O seguinte envia a minha chave "1DD8D791" para o popular servidor de chaves "hkp://keys.gnupg.net".

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791

Um bom servidor de chaves predefinido configurado em "~/.gnupg/gpg.conf" (ou na antiga localização "~/.gnupg/options") contém o seguinte.

keyserver hkp://keys.gnupg.net

O seguinte obtém chaves desconhecidas do servidor de chaves.

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
  cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

Existiu um bug no OpenPGP Public Key Server (versão anterior a 0.9.6) que corrompeu as chaves com mais de 2 sub-chaves. O novo pacote gnupg (>1.2.1-2) consegue lidar com estas chaves corrompidas. Veja gpg(1) sob a opção "--repair-pks-subkey-bug".

Aqui estão exemplos para usar comandos do GNU Privacy Guard em ficheiros.


O md5sum(1) disponibiliza um utilitário para fazer um ficheiro de sumário a usar o método em rfc1321 e verificar cada ficheiro com ele.

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
[Nota] Nota

O cálculo do sumário MD5 é menos intensivo para a CPU que o da assinatura criptográfica do GNU Privacy Guard (GnuPG). Normalmente, apenas o ficheiro de digestão do nível de topo é assinado criptograficamente para assegurar a integridade dos dados.

Existem muitas ferramentas de fusão para código fonte. Os seguinte comandos chamaram a minha atenção.

Tabela 10.10. Lista de ferramentas de fusão de código fonte

pacote popcon tamanho comando descrição
patch V:123, I:721 248 patch(1) aplica ficheiro diff a um original
vim V:102, I:404 3286 vimdiff(1) compara dois ficheiros lado a lado no vim
imediff V:0, I:0 170 imediff(1) ferramenta de fusão de 2 ou 3 vias interactiva de écran completo
meld V:14, I:38 3065 meld(1) compara e funde ficheiros (GTK)
wiggle V:0, I:0 174 wiggle(1) aplica patches rejeitadas
diffutils V:883, I:993 1598 diff(1) compara ficheiros linha a linha
diffutils V:883, I:993 1598 diff3(1) compara e junta três ficheiros linha a linha
quilt V:3, I:32 788 quilt(1) gere séries de patches
wdiff V:8, I:69 644 wdiff(1) mostra diferenças de palavras entre ficheiros de texto
diffstat V:14, I:146 81 diffstat(1) produz um histograma de alterações feitas pelo diff
patchutils V:16, I:143 232 combinediff(1) cria uma patch cumulativa de duas patches incrementais
patchutils V:16, I:143 232 dehtmldiff(1) extrai um diff de uma página HTML
patchutils V:16, I:143 232 filterdiff(1) extrai ou executa diffs de um ficheiro diff
patchutils V:16, I:143 232 fixcvsdiff(1) corrige ficheiros diff criados pelo CVS que o patch(1) interpreta mal
patchutils V:16, I:143 232 flipdiff(1) troca a ordem de duas patches
patchutils V:16, I:143 232 grepdiff(1) mostra que ficheiros são modificados por uma patch que corresponde a um regex
patchutils V:16, I:143 232 interdiff(1) mostra as diferenças entre dois ficheiros diff unificados
patchutils V:16, I:143 232 lsdiff(1) mostra quais ficheiros são modificados por uma patch
patchutils V:16, I:143 232 recountdiff(1) recalcula contagens e offsets em diffs de contexto unificado
patchutils V:16, I:143 232 rediff(1) corrige os offsets e as contagens de um diff editado manualmente
patchutils V:16, I:143 232 splitdiff(1) separa patches incrementais
patchutils V:16, I:143 232 unwrapdiff(1) desembaralha patches cujas linhas foram alteradas para arrumação de palavras
dirdiff V:0, I:2 166 dirdiff(1) mostra diferenças e funde alterações entre árvores de diretórios
docdiff V:0, I:0 555 docdiff(1) compara dois ficheiros palavra a palavra / caractere a caractere
makepatch V:0, I:0 102 makepatch(1) gera ficheiros de patch extensos
makepatch V:0, I:0 102 applypatch(1) aplica ficheiros de patch extensos

Git is the tool of choice these days for the version control system (VCS) since Git can do everything for both local and remote source code management.

O Debian disponibiliza serviços Git livres via Serviço Debian Salsa.. A sua documentação encontra-se em https://wiki.debian.org/Salsa .

Here are some Git related packages.


Git operation involves several data.

  • The working tree which holds user facing files and you make changes to them.

    • The changes to be recorded must be explicitly selected and staged to the index. This is git add and git rm commands

  • The index which holds staged files.

    • Staged files will be committed to the local repository upon the subsequent request. This is git commit command.

  • The local repository which holds committed files.

    • Git records the linked history of the committed data and organizes them as branches in the repository.

    • The local repository can send data to the remote repository by git push command.

    • The local repository can receive data from the remote repository by git fetch and git pull commands.

      • The git pull command performs git merge or git rebase command after git fetch command.

      • Here, git merge combines two separate branches of history at the end to a point. (This is default of git pull without customization and may be good for upstream people who publish branch to many people.)

      • Here, git rebase creates one single branch of sequential history of the remote branch one followed by the local branch one. (This is pull.rebase true customization case and may be good for rest of us.

  • The remote repository which holds committed files.

    • The communication to the remote repository uses secure communication protocols such as SSH or HTTPS.

The working tree is files outside of the .git/ directory. Files inside of the .git/ directory hold the index, the local repository data, and some git configuration text files.

Here is an overview of main Git commands.


Here are some Git tips.

Tabela 10.13. Git tips

Git command line função
gitk --all see complete Git history and operate on them such as resetting HEAD to another commit, cheery-picking patches, creating tags and branches ...
git stash get the clean working tree without loosing data
git remote -v check settings for remote
git branch -vv check settings for branch
git status show working tree status
git config -l list git settings
git reset --hard HEAD; git clean -x -d -f revert all working tree changes and clean them up completely
git rm --cached filename revert staged index changed by git add filename
git reflog get reference log (useful for recovering commits from the removed branch)
git branch new_branch_name HEAD@{6} create a new branch from reflog information
git remote add new_remote URL add a new_remote remote repository pointed by URL
git remote rename origin upstream rename the remote repository name from origin to upstream
git branch -u upstream/branch_name set the remote tracking to the remote repository upstream and its branch name branch_name.
git remote set-url origin https://foo/bar.git change URL of origin
git remote set-url --push upstream DISABLED disable push to upstream (Edit .git/config to re-enable)
git checkout -b topic_branch ; git push -u topic_branch origin make a new topic_branch and push it to origin
git branch -m oldname newname rename local branch name
git push -d origin branch_to_be_removed remove remote branch (new method)
git push origin :branch_to_be_removed remove remote branch (old method)
git checkout --orphan unconnected create a new unconnected branch
git rebase -i origin/main reorder/drop/squish commits from origin/main to clean branch history
git reset HEAD^; git commit --amend squash last 2 commits into one
git checkout topic_branch ; git merge --squash topic_branch squash entire topic_branch into a commit
git ime split the last commit into a series of file-by-file smaller commits etc. (imediff package required)
git repack -a -d; git prune repack the local repository into single pack (this may limit chance of lost data recovery from erased branch etc.)

[Atenção] Atenção

Não use a string de etiqueta (tag) com espaços nela, mesmo que algumas ferramentas como o gitk(1) o permitam. Pode estrangular outros comandos do git.

[Cuidado] Cuidado

If a local branch which has been pushed to remote repository is rebased or squashed, pushing this branch has risks and requires --force option. This is usually not an acceptable for main branch but may be acceptable for a topic branch before merging to main branch.

[Cuidado] Cuidado

Invocar um sub-comando git directamente como "git-xyz" a partir da linha de comandos foi descontinuado desde o inicio de 2006.

[Dica] Dica

If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command.

Veja o seguinte.



[4] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly.