Linux e Unix
Comparando arquivos no Linux / UNIX
Compara o conteúdo de dois arquivos e envia o resultado para a saída padrão.
Usa-se o comando cmp para arquivos que não são de texto para verificar se são
idênticos. Para comparar arquivos de texto, use o comando diff.
Se os arquivos forem idênticos, não será gerada nenhuma saída.
Caso haja diferenças, serão mostrados o número da linha e do byte da primeira
posição diferente entre eles.
Algumas opções do cmp:
-l Mostrar, para cada diferença, o número do byte em decimal e os bytes
diferentes em octal.
-s Retorna apenas um status de saída (exit code) sem gerar nenhuma saída. Os
valores de saída são: 0 para arquivos idênticos, 1 se os arquivos forem
diferentes ou 2 se o comando cmp não conseguir comparar os arquivos.
Esse flag é muito útil em scripts do shell.
Para ver o status de saída, execute a comparação com cmp -s e logo após execute
o comando echo $?
Exemplos:
1. Copie para seu home (/root) os arquivos which e zegrep (entre no /root
antes):
# cp /bin/which .
# cp /bin/zegrep .
2. Faça unma segunda cópia do which:
# cp which which2
3. Vamos comparar os arquivos:
# cmp which which2
# cmp which zegrep
4. Usando o -l:
# cmp -l which zegrep
5. Usando o -s:
# cmp -s which zegrep
# echo $?
----------------------------------------------------------------------------
Comando comm:
Usado para comparar arquivos de texto que estejam com os dados ordenados.
O resultado da comparação é gerado na saída padrão em três colunas, na ordem a
seguir:
- Linhas que existem apenas no primeiro arquivo
- Linhas que existem apenas no segundo arquivo
- Linhas que existem em ambos os arquivos.
O comando comm pode ser usado para incluir ou excluir linhas em comum nos
arquivos na exibição do resultado.
Podemos usar algumas flags:
-1 Para suprimir a exibição da primeira coluna
-2 Para suprimir a exibição da segunda coluna
-3 Para suprimir a exibição da terceira coluna
Vamos testar o comanco comm:
1. Crie um arquivo de texto denominado teste-comm:
# vi teste-comm
2. Digite o conteúdo a seguir no arquivo:
Arara
Bem-Te-Vi
Pardal
Sabiá
Tucano
Uirapuru
3. Faça uma cópia do arquivo:
# cp teste-comm teste-comm2
4. Vamos testar o comando:
# comm teste-comm teste-comm2
Só aparecerá a terceira coluna, pois o conteúdo dos arquivos é idêntico.
5. Altere o arquivo teste-comm adicionando a palavra Mutum antes de Pardal:
# vi teste-comm
6. Rode a comparação novamente:
# comm teste-comm teste-comm2
Aparecerá a palavra Mutum na primeira coluna, siginificando que essa linha spo
existe no arquivo teste-comm, e na terceira coluna aparecerão as linhas em
comum.
7. Altere o arquivo teste-comm2, adicionando a palavra Gaivota antes de Mutum.
Rode a comparação novamente e veja os resultados:
# comm teste-comm teste-comm2
8. Se estivermos interessados somente nas linhas que são idênticas em ambos os
arquivos, podemos suprimir a exibição das colunas 1 e 2:
# comm -12 teste-comm teste-comm2
9. E, finalmente, se quisermos ver somente as diferenças entre os arquivos,
excluimos a coluna 3 dos resultados:
# comm -3 teste-comm teste-comm2
------------------------------------------------------------------------------
Comando diff
Podemos comparar arquivos de texto com o comando diff (mas não arquivos
binários).
A saída do comando diff possui as seguintes informações:
- Linhas que são diferentes no primeiro arquivo
- Código de ação: "O que deve ser feito para que os arquivos se tornem
idênticos": a para adicionar linhas após, c para modificar linhas e d para
excluir linhas.
- Linhas que são diferentes no segundo arquivo.
Alguns flags úteis:
-b Considerar que mais de um espaço ou tabulações sejam consideradas como um
único caractere.
-i Comparar os arquivos ignorando maiúsculas e minúsculas.
-l Para gerar saída formatada, com um sumário no final.
-w Ignorar todos os caracteres de espaço e tabulação.
Exemplo:
1. Rodar o comando a seguir:
# diff teste-comm teste-comm2
Aparecerá o resultado a seguir:
3c3
< Mutum
---
> Gaivota
Significa que devemos modificar a linha 3 no primeiro arquivo pela linha 3 do
segundo para que se tornem idênticos. Ou seja, modificar Mutum para Gaivota.
2. Vamos introduzir mais modificações nos arquivos. Em teste-comm acrescente a
linha "João-de-Barro" antes de Mutum, e rode novamente o teste:
# diff teste-comm teste-comm2
Aparecerá o resultado a seguir:
3,4c3
< Mutum
---
> Gaivota
Siginifica: "modifique as linhas de 3 a 4 no arquivo1 para o valor da linha 3 do
arquivo2, assim eles ficarão idênticos".
3. Modifiquemos agora o arquivo teste-comm2. Acrescente a linha "Tico-tico"
antes do Tucano e rode o teste novamente:
# diff teste-comm teste-comm2
Aparecerá o resultado a seguir:
3,4c3
< João-de-Barrp
< Mutum
---
> Gaivota
6a6
> Tico-tico
Siginifica: "modifique as linhas de 3 a 4 no arquivo1 para o valor da linha 3 do
arquivo2, e adicione após a linha 6 do arquivo 1 o conteúdo da linha 6 do arquvo
2, assim eles ficarão idênticos".
Para entender melhor essa saída, limpe a tela e digite os comandos a seguir para
exibir o conteúdo dos dois arquivos e contar a linhas para compará-las:
# cat teste-comm
# cat teste-comm2
Veja que adicionando após a sexta linha de teste-comm (Sabiá) a palavra Tico-
tico, o arquivo ficará idêntico ao teste-comm2, cuja 6 linha é a palavra Tico-
tico também.
4. Podemos também usar o comando diff para comparar o conteúdo em dois
diretórios distintos. Para isso, crie os diretórios dir1 e dir2:
# mkdir dir1 dir2
# ls
5. Copie os arquivos teste-comm e teste-comm2 para ambos os diretórios:
# cp teste* ./dir1
# cp teste* ./dir2
# ls ./dir1
# ls ./dir2
6. Rode a comparação entre os diretórios com o diff:
# diff dir1 dir2
Nada aparecerá, pois ambos possuem o mesmo conteúdo.
Agora apague teste-comm2 do diretório dir2:
# rm ./dir2/teste-comm2
# ls ./dir2
E rode novamente a comparação:
# diff dir1 dir2
Aparecerá a mensagem: "Somente em dir1: teste-comm2", indicando que esse arquivo
só está presente no diretório dir1.
Com a opção -s podemos ver quais arquivos são idênticos também:
# diff -s dir1 dir2
--------------------------------------------------------------------------
Comando sdiff
Compara dois arquivos e mostra na saída uma tabela com informações sobre a
comparação:
- Se linhas forem idênticas, são mostradas em cada lado da tabela, separadas
apenas por espaços.
- Se uma linha existe apenas no arquivo1, um sinal < é mostrado no final da
linha da tabela.
- Se uma linha existe apenas no segundo arquivo, um sinal > é mostrado.
- Se duas linhas forem diferentes, uma barra de pipe | é mostrada entre elas
Algumas opções:
-s Não mostrar linhas idênticas
Testando:
1. Digite o comando a seguir:
# sdiff teste-comm teste-comm2
2. Usando flags:
Mostrar somente linhas diferentes:
# sdiff -s teste-comm teste-comm2
loading...
-
Acl - Access Control List - Ajustando Permissões Avançadas No Linux
ACL - Access Control List - Ajustando permissões avançadas no Linux As ACLs (Access Control Lists) nos fornecem um controle mais refinado sobre quais usuários podem acessar diretórios e arquivos específicos do que as permissões tradicionais do...
-
O Arquivo /etc/group - Gerenciando Grupos No Sistema Linux
Por Fábio dos Reis O arquivo /etc/group é um arquivo de sistema que define os grupos aos quais os usuários pertencem em sistemas UNIX, como o Linux e o BSD.Usamos os grupos para configurar permissões de acesso a arquivos e pastas aos usuários do...
-
Comando Fold - Gerar Múltiplas Linhas A Partir De Uma Linha única - Linux
O comando fold pode ser usado para gerar múltiplas linhas a partir de uma linha única, quebrando a linha em uma posição especificada e escrevendo na saída padrão. Por padrão, o comprimento da linha é de 80 bytes (80 caracteres). Um caractere...
-
Comando Tr - Substituir E Excluir Caracteres Em Arquivos - Linux
O comando tr é um comando básico no Linux/Unix, porém apesar disso não é muito conhecido ou utilizado com frequência.Sua função básica é substituir (traduzir) o conteúdo de uma string (texto) recebido via entrada padrão (STDIN) de um formato...
-
Gerenciamento De Grupos No Freebsd
Neste artigo vamos continuar falando a respeito do gerenciamento de usuários e grupos no FreeBSD, mais precisamente abordando o assunto Grupos.Gerenciamento de GruposO que é um grupo? Um grupo é uma lista de usuários que nos permite aplicar permissões...
Linux e Unix