Comando Linux `dos2unix`: Remover Caracteres Ocultos do Windows de Arquivos
Quando você transfere arquivos de texto entre sistemas Windows e Linux, caracteres de formatação invisíveis podem corromper silenciosamente seus scripts, arquivos de configuração e pipelines de dados. A causa raiz é uma diferença fundamental na forma como cada sistema operacional marca o fim de uma linha: o Windows usa uma sequência de retorno de carro + alimentação de linha (rn, também conhecido como CRLF), enquanto o Linux espera apenas uma alimentação de linha (n, ou LF). Esse caractere r extra — invisível na maioria dos editores — pode fazer com que scripts shell falhem com erros crípticos, quebrem parsers de configuração e produzam saídas inesperadas em ferramentas de processamento de texto como awk, sed e grep.
O utilitário dos2unix foi criado especificamente para resolver esse problema. Ele remove as terminações de linha CRLF no estilo Windows dos arquivos de texto e as substitui por terminações LF no estilo Unix, tornando seus arquivos totalmente compatíveis com as cadeias de ferramentas Linux. Este guia cobre tudo o que você precisa saber: o que o dos2unix faz internamente, como instalá-lo nas principais distribuições Linux, sua sintaxe e opções completas, e exemplos práticos do mundo real.
O Que É dos2unix e Por Que É Importante?
dos2unix é um utilitário leve de linha de comando de código aberto que converte arquivos de texto do formato DOS/Windows (terminações de linha CRLF) para o formato Unix/Linux (terminações de linha LF). Ele também pode realizar a conversão inversa (unix2dos), lidar com terminações de linha clássicas do Mac (somente CR) e processar operações de arquivo seguras para binários.
Por Que Caracteres r Ocultos Causam Problemas Reais
Considere um script Bash criado ou editado em uma máquina Windows. Quando você o executa no Linux, pode ver erros como:
bash: ./deploy.sh: /bin/bash^M: bad interpreter: No such file or directoryEsse ^M é a representação visual de r. O shell não consegue encontrar o interpretador porque a linha shebang contém um retorno de carro oculto. Da mesma forma, scripts Python, tarefas cron, arquivos .env e arquivos de configuração do Nginx ou Apache podem se comportar de forma imprevisível quando contêm terminações de linha do Windows.
Isso é especialmente crítico em ambientes de servidor. Se você gerencia um ambiente de Hospedagem VPS ou um Servidor Dedicado, implantar scripts mal configurados ou arquivos de configuração corrompidos pode derrubar serviços. Saber como detectar e corrigir problemas de terminação de linha é uma habilidade fundamental de administrador de sistemas.
Como Instalar dos2unix no Linux
A maioria das principais distribuições Linux inclui dos2unix em seus repositórios de pacotes padrão. Use o comando apropriado para sua distribuição:
Debian / Ubuntu
sudo apt-get update && sudo apt-get install dos2unixCentOS / RHEL / AlmaLinux / Rocky Linux
sudo yum install dos2unixFedora
sudo dnf install dos2unixArch Linux
sudo pacman -S dos2unixopenSUSE
sudo zypper install dos2unixApós a instalação, verifique se está disponível:
dos2unix --versionDetectando Terminações de Linha do Windows Antes de Converter
Antes de executar dos2unix, é uma boa prática confirmar que um arquivo realmente contém terminações de linha CRLF. Vários métodos funcionam bem:
Usando file:
file filename.txtA saída para um arquivo no formato Windows incluirá CRLF line terminators.
Usando cat -A:
cat -A filename.txtAs terminações de linha do Windows aparecem como ^M$ no final de cada linha. As terminações de linha Unix mostram apenas $.
Usando hexdump:
hexdump -C filename.txt | grep -i "0d 0a"A sequência de bytes 0d 0a é a representação hexadecimal de rn.
Sintaxe Completa do Comando dos2unix
dos2unix [options] [input_file] [output_file]Quando chamado apenas com um arquivo de entrada, dos2unix converte o arquivo no lugar, sobrescrevendo o original. Quando tanto um arquivo de entrada quanto um de saída são especificados, o original é preservado e o conteúdo convertido é gravado no novo arquivo.
Referência de Opções do dos2unix
| Opção | Forma Longa | Descrição |
|---|---|---|
-o | --oldfile | Converter arquivos no modo antigo (no lugar) — o comportamento padrão |
-n | --newfile | Converter para um novo arquivo, preservando o original |
-c | --convmode | Definir modo de conversão: unix, dos ou mac |
-k | --keep-timestamp | Preservar o carimbo de data/hora de modificação do arquivo original |
-q | --quiet | Suprimir todas as mensagens de saída e avisos |
-v | --verbose | Imprimir informações detalhadas de conversão |
-l | --newline | Adicionar um caractere de nova linha adicional |
-s | --safe | Ignorar arquivos binários automaticamente |
-f | --force | Forçar a conversão de arquivos binários |
-b | --keep-bom | Manter a Marca de Ordem de Byte (BOM) se presente |
-r | --remove-bom | Remover a Marca de Ordem de Byte (BOM) |
-V | --version | Exibir o número da versão e sair |
-h | --help | Exibir informações de ajuda |
Exemplos Práticos de Uso do dos2unix
1. Converter um Único Arquivo no Lugar
O caso de uso mais comum — converter um arquivo e sobrescrevê-lo com a versão formatada para Unix:
dos2unix filename.txtO arquivo é modificado diretamente. Nenhum backup é criado por padrão, portanto, certifique-se de ter uma cópia se necessário.
2. Converter um Arquivo e Salvar em um Novo Arquivo
Para preservar o arquivo original e gravar a saída convertida em um arquivo separado, use o sinalizador -n (modo de novo arquivo):
dos2unix -n filename.txt converted_filename.txtIsso lê filename.txt, converte-o e grava o resultado em converted_filename.txt. O original permanece intocado.
3. Converter Vários Arquivos de Uma Vez
Você pode passar vários nomes de arquivo em um único comando:
dos2unix file1.txt file2.txt file3.txtTodos os arquivos listados são convertidos no lugar. Isso é eficiente para operações em lote em um pequeno conjunto de arquivos conhecidos.
4. Converter Todos os Arquivos .txt em um Diretório
Use globbing do shell ou find para processar diretórios inteiros:
dos2unix *.txtOu recursivamente em subdiretórios:
find /path/to/directory -type f -name "*.txt" -exec dos2unix {} ;Isso é particularmente útil ao implantar arquivos de aplicações web ou conjuntos de configuração que foram empacotados em uma máquina Windows.
5. Converter Todos os Scripts Shell Recursivamente
Uma tarefa comum de administrador de sistemas — corrigir todos os scripts Bash em um diretório de projeto:
find /var/www/myapp -type f -name "*.sh" -exec dos2unix {} ;6. Preservar o Carimbo de Data/Hora do Arquivo Original
Por padrão, dos2unix atualiza o tempo de modificação do arquivo. Para manter o carimbo de data/hora original (útil em pipelines de implantação ou quando make depende de carimbos de data/hora):
dos2unix -k filename.txt7. Modo Silencioso — Suprimir Toda a Saída
Ideal para uso em scripts shell e automação onde você não quer que as mensagens de conversão poluam os logs:
dos2unix -q filename.txt8. Converter para Terminações de Linha do Mac (Somente CR)
Embora raramente necessário hoje em dia, você pode converter um arquivo para o formato clássico do Mac OS 9 (somente retorno de carro, r) usando o sinalizador de modo de conversão -c:
dos2unix -c mac filename.txt9. Converter de Unix de Volta para o Formato DOS
dos2unix é fornecido junto com unix2dos, que realiza a operação inversa — adicionando terminações CRLF para compatibilidade com Windows:
unix2dos filename.txt10. Remover a Marca de Ordem de Byte (BOM)
Arquivos salvos por aplicações Windows às vezes incluem um BOM UTF-8 no início, o que pode quebrar scripts e parsers no Linux. Remova-o com:
dos2unix -r filename.txtUsando dos2unix em Scripts Shell e Automação
dos2unix integra-se perfeitamente em scripts de implantação e pipelines CI/CD. Aqui está um exemplo de um script de pré-implantação que sanitiza todos os arquivos de configuração e script antes de entrarem em produção:
#!/bin/bash
# pre-deploy-sanitize.sh
# Converts all text files to Unix format before deployment
TARGET_DIR="/var/www/myapp"
echo "Sanitizing line endings in $TARGET_DIR..."
find "$TARGET_DIR" -type f ( -name "*.sh" -o -name "*.conf" -o -name "*.php" -o -name "*.py" ) | while read -r file; do
dos2unix -q -k "$file"
echo "Converted: $file"
done
echo "Done. All files converted to Unix format."Torne o script executável e execute-o como parte do seu fluxo de trabalho de implantação:
chmod +x pre-deploy-sanitize.sh
./pre-deploy-sanitize.shErros Comuns e Solução de Problemas
dos2unix: command not found
O utilitário não está instalado. Execute o comando de instalação apropriado para sua distribuição (consulte a seção de instalação acima).
dos2unix: Binary file ... is skipped
dos2unix detectou o que acredita ser um arquivo binário e o ignorou. Se você tem certeza de que o arquivo é texto, force a conversão com:
dos2unix -f filenameScript Ainda Falha Após a Conversão
Verifique se a conversão funcionou:
file filename.shAgora deve reportar ASCII text ou UTF-8 Unicode text sem mencionar CRLF. Se os problemas persistirem, verifique outros problemas de codificação usando hexdump.
Permissão Negada
Pode ser necessário ter privilégios elevados para modificar certos arquivos do sistema:
sudo dos2unix /etc/nginx/nginx.confdos2unix vs. Métodos Alternativos
Embora dos2unix seja a solução mais limpa, administradores Linux experientes às vezes usam outras ferramentas para conversões rápidas e pontuais:
Usando sed:
sed -i 's/r//' filename.txtUsando tr:
tr -d 'r' < input.txt > output.txtUsando awk:
awk '{ sub("r$", ""); print }' filename.txt > output.txtUsando vim:
:set ff=unix
:wqEssas alternativas funcionam, mas dos2unix foi criado especificamente para essa tarefa, lida com casos extremos (como remoção de BOM e detecção de arquivos binários) de forma mais elegante e é a ferramenta recomendada para uso em produção.
Relevância para Hospedagem Web e Gerenciamento de Servidores
Problemas de terminação de linha não são apenas um inconveniente para desenvolvedores — são uma preocupação operacional genuína em ambientes hospedados. Scripts PHP com terminações CRLF podem produzir espaços em branco inesperados em cabeçalhos HTTP, causando falhas de sessão e cookie. Aplicações Python WSGI podem lançar erros de sintaxe. Arquivos de configuração do Nginx e Apache com caracteres r ocultos podem impedir completamente a inicialização dos serviços.
Se você hospeda sites ou aplicações em um plano de Hospedagem Web Compartilhada ou gerencia seu próprio VPS com cPanel, incorporar dos2unix ao seu fluxo de trabalho de upload e implantação de arquivos é uma prática simples e de alto valor. Para equipes que executam implantações automatizadas em Servidores Dedicados, adicionar dos2unix ao seu pipeline CI/CD elimina toda uma classe de bugs específicos do ambiente antes que cheguem à produção.
Além disso, se sua infraestrutura inclui Hospedagem de E-mail com scripts personalizados para processamento ou filtragem de e-mails, garantir que esses scripts usem terminações de linha Unix corretas é essencial para uma operação confiável.
Resumo de Referência Rápida
| Tarefa | Comando |
|---|---|
| Converter arquivo no lugar | dos2unix filename.txt |
| Converter e salvar em novo arquivo | dos2unix -n input.txt output.txt |
| Converter vários arquivos | dos2unix file1.txt file2.txt file3.txt |
Converter todos os arquivos .sh recursivamente | find . -name "*.sh" -exec dos2unix {} ; |
| Preservar carimbo de data/hora original | dos2unix -k filename.txt |
| Modo silencioso (sem saída) | dos2unix -q filename.txt |
| Remover BOM | dos2unix -r filename.txt |
| Converter para formato Mac | dos2unix -c mac filename.txt |
| Inverso: Unix para DOS | unix2dos filename.txt |
| Verificar terminações de linha | file filename.txt ou cat -A filename.txt |
Conclusão
O comando dos2unix é um pequeno utilitário com um impacto desproporcional no desenvolvimento multiplataforma e na administração de servidores. Caracteres r ocultos são uma das causas mais comuns de bugs do tipo “funciona na minha máquina” quando arquivos se movem entre ambientes Windows e Linux — e dos2unix os elimina de forma limpa, segura e eficiente.
Ao dominar sua sintaxe e opções, você pode prevenir falhas de implantação, garantir a compatibilidade de scripts e manter a integridade dos arquivos de configuração em toda a sua infraestrutura. Seja você um desenvolvedor enviando código para um servidor Linux, um administrador de sistemas gerenciando uma frota de máquinas ou um proprietário de site fazendo upload de arquivos para um ambiente de hospedagem, tornar dos2unix parte do seu conjunto de ferramentas padrão é uma prática recomendada simples que traz benefícios toda vez que arquivos cruzam fronteiras entre sistemas operacionais.
