Linux / Comando shred: sobrescrever arquivos e entender os limites
O comando GNU shred sobrescreve dados de arquivos e, com -u, também remove os nomes indicados. Ele depende de gravações nos mesmos locais físicos: SSDs (unidades de estado sólido), snapshots (instantâneos do estado dos dados), cópias de segurança e certas configurações de sistemas de arquivos podem manter os dados anteriores. Portanto, terminar sem erro não comprova a eliminação de todas as cópias.
Os exemplos usam Bash e GNU Coreutils em uma pasta temporária criada por você. Confira shred --version, shred --help e man shred no sistema de destino. Execute a preparação abaixo no mesmo terminal e pare se alguma etapa falhar; não troque os arquivos de demonstração por discos ou dados importantes.
O que é o comando shred?
Uma exclusão comum com rm remove um nome; o espaço só pode ser reaproveitado depois que não houver outros links físicos nem processos mantendo o arquivo aberto. shred tenta sobrescrever o conteúdo antes de uma eventual remoção. Essa tentativa só tem o efeito pretendido quando o armazenamento realmente substitui os dados antigos no lugar. O manual GNU de shred explica essa hipótese e suas exceções.
Sintaxe básica
shred [opções]... arquivo...
opções e arquivo são marcadores, não texto para copiar literalmente. Use aspas em caminhos com espaços e -- antes dos nomes no GNU, especialmente quando começarem com hífen. Não use shred - > arquivo para sobrescrever o conteúdo existente: o redirecionamento do shell trunca o arquivo antes de iniciar o comando.
Uso básico do shred
Sobrescrever um arquivo
Por padrão, o GNU faz três passagens de sobrescrita e mantém o nome do arquivo. A preparação cria arquivos pequenos e independentes, uma cópia para comparação e um arquivo de controle. mktemp precisa conseguir criar a pasta; a cadeia de && interrompe a preparação em caso de erro. Os arquivos restantes ficam disponíveis para inspeção, sem exclusão recursiva ao final.
shred_start=$PWD
shred_demo=$(mktemp -d "${TMPDIR:-/tmp}/shred-demo.XXXXXX") &&
cd -- "$shred_demo" &&
printf 'segredo de teste\n' > secret.txt &&
cp -- secret.txt saved-copy.txt &&
printf 'remover este nome\n' > remove-demo.txt &&
printf 'progresso de teste\n' > progress-demo.bin &&
printf 'consulta de teste\n' > disposable-demo.txt &&
printf 'duas passagens\n' > confidential.bin &&
printf 'controle intacto\n' > sentinel.txt &&
shred -- secret.txt &&
test -f secret.txt &&
printf '%s\n' 'O arquivo permanece após a sobrescrita.'
A mensagem O arquivo permanece após a sobrescrita. é esperada se a operação e a consulta funcionarem. O tamanho aparente pode crescer porque o comportamento padrão arredonda arquivos regulares para blocos completos; -x evita esse arredondamento. O conteúdo anterior de secret.txt não pode ser restaurado pelo próprio comando, e saved-copy.txt continua sendo uma cópia independente.
Sobrescrever e remover o nome do arquivo
Continue no mesmo terminal. -u tenta desalocar e remover o nome depois da sobrescrita bem-sucedida. O exemplo usa remove-demo.txt, separado do arquivo anterior. Falhas podem deixar um arquivo parcialmente modificado; leia o diagnóstico antes de continuar.
cd -- "$shred_demo" &&
test -f remove-demo.txt && test ! -L remove-demo.txt &&
shred -u -- remove-demo.txt
Exibir progresso
-v mostra o andamento na saída de erro padrão. O arquivo pequeno progress-demo.bin já foi preparado; -n 3 explicita as três passagens. Os textos e a frequência das mensagens variam com versão, idioma e tamanho do arquivo, e uma execução curta pode mostrar apenas as etapas finais.
cd -- "$shred_demo" &&
test -f progress-demo.bin && test ! -L progress-demo.bin &&
shred -v -n 3 -- progress-demo.bin
Distinguir a remoção do nome da sanitização
O código abaixo consulta o resultado somente se shred terminar com sucesso. As verificações confirmam que não existe um objeto acessível nem um link simbólico nesse nome. Sanitização é um processo destinado a impedir o acesso aos dados dentro de um nível de esforço definido; uma consulta ao nome não examina todas as células, cópias ou camadas do armazenamento.
cd -- "$shred_demo" &&
test -f disposable-demo.txt && test ! -L disposable-demo.txt &&
shred -u -- disposable-demo.txt &&
test ! -e disposable-demo.txt && test ! -L disposable-demo.txt &&
printf '%s\n' 'Nome de teste removido.'
A mensagem Nome de teste removido. confirma apenas a ausência desse nome no momento da consulta. Uma saída diferente de zero indica falha em alguma etapa da cadeia. Compare também saved-copy.txt e sentinel.txt: seus conteúdos devem continuar intactos. Eles demonstram por que remover um arquivo não elimina cópias independentes nem substitui um procedimento de descarte adequado.
Principais opções
| Opção | Efeito e limite |
|---|---|
-n N |
Definir N passagens em vez do padrão de três; -z acrescenta outra passagem. |
-u |
Tentar desalocar e remover os nomes indicados após sobrescrever. |
-z |
Acrescentar uma passagem final de zeros, além das passagens de -n. |
-v |
Mostrar detalhes das operações na saída de erro padrão. |
-s TAMANHO |
Sobrescrever o prefixo com o tamanho pedido; use -x para evitar arredondamento. Um limite menor pode deixar o restante intacto. |
-x |
Não arredondar o tamanho aparente para blocos completos. Não elimina os limites do armazenamento. |
-f |
Alterar permissões se necessário para permitir escrita; não concede privilégios nem contorna um sistema de arquivos somente leitura. |
--random-source=ARQUIVO |
Ler da origem indicada os bytes aleatórios usados na sobrescrita e na ordem das passagens. Não garante uma sanitização melhor. |
-s TAMANHO pode deixar dados além do prefixo e pode estender um arquivo menor; não representa automaticamente uma limpeza completa. Por exemplo, -x -s 4 limita a escrita aos quatro primeiros bytes. Mesmo uma leitura posterior contendo zeros só verifica a visão lógica atual. O manual GNU desaconselha usar apenas -n 0 -z como estratégia de descarte, pois controladores podem otimizar gravações de zeros. Confira o suporte às opções fora do GNU.
Exemplos práticos
Definir a quantidade de passagens
Neste exemplo, -n 1 -z significa uma passagem de dados pseudoaleatórios mais uma passagem final de zeros: duas passagens no total. -u remove o nome ao final. Aumentar a contagem custa tempo e não resolve remapeamento de blocos, snapshots ou backups; escolha a técnica pela tecnologia e pelo risco de recuperação, não apenas pelo número de passagens.
cd -- "$shred_demo" &&
test -f confidential.bin && test ! -L confidential.bin &&
shred -v -n 1 -z -u -- confidential.bin
Consultar a identidade e as montagens de um dispositivo
Os comandos abaixo apenas consultam o estado no Linux; não sobrescrevem, desmontam nem sanitizam nada. lsblk e findmnt fazem parte do util-linux. Confira modelo, número de série, tamanho, partições, mapeamentos e todas as montagens antes de planejar qualquer operação em um dispositivo. MOUNTPOINTS pode mostrar várias montagens; uma saída vazia nessa coluna, isoladamente, não prova que o dispositivo está livre de uso. Verifique as colunas disponíveis na versão instalada.
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
findmnt
O manual de lsblk do util-linux descreve as relações entre dispositivos e montagens. O manual de findmnt explica a consulta aos sistemas de arquivos. Não use uma operação de sobrescrita sobre um sistema de arquivos em uso; descarte e desmontagem exigem um plano específico para o equipamento.
Avaliar o apagamento criptográfico
O apagamento criptográfico pode ser apropriado quando os dados sensíveis foram armazenados sob criptografia adequada desde o início e as chaves necessárias para recuperá-los podem ser efetivamente eliminadas. Cópias de chaves, credenciais e backups também precisam ser consideradas. A NIST SP 800-88 Revisão 2, seção 3.2 detalha essas condições. A técnica não apaga retroativamente dados que já haviam sido gravados sem criptografia.
Se houver um mapeamento dm-crypt ativo, substitua NOME_DO_MAPEAMENTO pelo nome real para consultar seu estado com cryptsetup. Segundo o manual de cryptsetup status, esta é uma consulta ao mapeamento: não destrói chaves e não valida a sanitização do dispositivo.
cryptsetup status NOME_DO_MAPEAMENTO
Comparar shred e outros métodos
| Comando ou método | Função principal | Aplicação e condição |
|---|---|---|
rm |
Remover nomes de arquivos | Exclusão comum; não sobrescreve intencionalmente todos os dados |
shred |
Sobrescrever os dados lógicos indicados | Uso limitado a armazenamento e configuração compatíveis |
| Apagamento seguro do dispositivo | Executar uma técnica suportada pelo dispositivo | Descarte de SSD ou NVMe conforme documentação e verificação do fabricante |
| Destruição física | Destruir fisicamente o meio | Método e resultado precisam atender ao risco e ao tipo de mídia; danificar a carcaça não basta |
Os métodos não são intercambiáveis. Para descarte, escolha uma técnica aplicável ao equipamento e confira o resultado do procedimento; não interprete qualquer comando de firmware ou dano físico como garantia universal. A decisão também precisa considerar cópias fora do dispositivo.
Cuidados importantes
Gravações em SSD podem atingir diferentes células físicas
SSDs podem redirecionar gravações por nivelamento de desgaste e substituição de blocos. Reescrever um endereço lógico pode deixar a célula antiga fora do alcance de uma escrita comum. Repetir shred em um arquivo ou acrescentar zeros não força a eliminação de todas essas áreas.
Outras cópias do sistema de arquivos podem permanecer
Copy-on-write grava versões novas em outros locais; snapshots preservam estados anteriores. Journaling de dados, redundância em arranjos de discos RAID, sincronização, caches e backups também podem reter cópias. A configuração importa: o manual GNU distingue o modo data=journal do ext3/ext4 dos modos data=ordered e data=writeback. Não conclua que todo journaling é igual nem que o nome do sistema de arquivos, sozinho, garante o resultado.
Links físicos compartilham os mesmos dados: sobrescrever por um nome também altera o conteúdo visto pelos demais links, mas -u remove apenas os nomes fornecidos. Não confunda esse caso com uma cópia independente. Confira o destino real e evite links simbólicos inesperados; mantenha a área de prática sob seu controle, sem alterações simultâneas de outros processos.
Um erro no caminho do dispositivo é destrutivo
Sobrescrever um dispositivo de bloco pode destruir o sistema de arquivos inteiro. Uma falha ou interrupção não desfaz gravações já realizadas, e shred não oferece restauração. Os exemplos deste guia só alteram arquivos pequenos da pasta temporária. Ao terminar, retorne com cd -- "$shred_start" e mantenha os arquivos restantes para inspeção, se necessário.
Perguntas frequentes
O shred -u garante que a recuperação seja impossível?
Não. O sucesso do comando e a ausência do nome não demonstram a eliminação de células remapeadas, snapshots, backups ou outras cópias. É necessário avaliar o armazenamento e o procedimento de sanitização.
Devo usar shred em arquivos individuais de um SSD?
Não trate essa operação como garantia de descarte seguro. O remapeamento de gravações torna a sobrescrita de arquivos individuais pouco confiável para esse objetivo. Avalie criptografia desde o início e uma técnica de sanitização suportada e verificada para o dispositivo.
O -z torna a exclusão mais segura?
-z acrescenta uma passagem final de zeros, além das indicadas por -n. Isso não alcança cópias em outros locais nem comprova sanitização; uma sequência de zeros visível em uma leitura não demonstra a eliminação física de todos os dados anteriores.
A exclusão comum deve usar rm ou shred?
Use rm para a exclusão comum de nomes de arquivos. Considere shred somente quando sua hipótese de sobrescrita no mesmo local for adequada à tecnologia, à configuração e ao risco de recuperação; ele não substitui um plano de descarte.




