Commande Linux `dos2unix` : Supprimer les caractères Windows cachés des fichiers
Lorsque vous transférez des fichiers texte entre des systèmes Windows et Linux, des caractères de formatage invisibles peuvent corrompre silencieusement vos scripts, fichiers de configuration et pipelines de données. La cause principale est une différence fondamentale dans la façon dont chaque système d’exploitation marque la fin d’une ligne : Windows utilise une séquence retour chariot + saut de ligne (rn, également connue sous le nom de CRLF), tandis que Linux n’attend qu’un saut de ligne (n, ou LF). Ce caractère r supplémentaire — invisible dans la plupart des éditeurs — peut provoquer l’échec des scripts shell avec des erreurs cryptiques, casser les analyseurs de configuration et produire des résultats inattendus dans les outils de traitement de texte comme awk, sed et grep.
L’utilitaire dos2unix a été conçu spécifiquement pour résoudre ce problème. Il supprime les fins de ligne CRLF de style Windows des fichiers texte et les remplace par des fins de ligne LF de style Unix, rendant vos fichiers entièrement compatibles avec les chaînes d’outils Linux. Ce guide couvre tout ce que vous devez savoir : ce que fait dos2unix en coulisses, comment l’installer sur les principales distributions Linux, sa syntaxe complète et ses options, ainsi que des exemples pratiques du monde réel.
Qu’est-ce que dos2unix et pourquoi est-ce important ?
dos2unix est un utilitaire léger en ligne de commande open source qui convertit les fichiers texte du format DOS/Windows (fins de ligne CRLF) au format Unix/Linux (fins de ligne LF). Il peut également effectuer la conversion inverse (unix2dos), gérer les fins de ligne Mac classiques (CR uniquement) et traiter des opérations de fichiers sécurisées pour les données binaires.
Pourquoi les caractères r cachés causent de vrais problèmes
Considérez un script Bash créé ou modifié sur une machine Windows. Lorsque vous l’exécutez sur Linux, vous pourriez voir des erreurs comme :
bash: ./deploy.sh: /bin/bash^M: bad interpreter: No such file or directoryCe ^M est la représentation visuelle de r. Le shell ne peut pas trouver l’interpréteur car la ligne shebang contient un retour chariot caché. De même, les scripts Python, les tâches cron, les fichiers .env, et les fichiers de configuration Nginx ou Apache peuvent tous se comporter de manière imprévisible lorsqu’ils contiennent des fins de ligne Windows.
C’est particulièrement critique dans les environnements serveur. Si vous gérez un environnement d’Hébergement VPS ou un Serveur Dédié, le déploiement de scripts mal configurés ou de fichiers de configuration corrompus peut mettre les services hors ligne. Savoir comment détecter et corriger les problèmes de fins de ligne est une compétence fondamentale pour un administrateur système.
Comment installer dos2unix sur Linux
La plupart des principales distributions Linux incluent dos2unix dans leurs dépôts de paquets par défaut. Utilisez la commande appropriée pour votre distribution :
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 dos2unixAprès l’installation, vérifiez qu’il est disponible :
dos2unix --versionDétecter les fins de ligne Windows avant la conversion
Avant d’exécuter dos2unix, il est recommandé de confirmer qu’un fichier contient effectivement des fins de ligne CRLF. Plusieurs méthodes fonctionnent bien :
Utilisation de file :
file filename.txtLa sortie pour un fichier au format Windows inclura CRLF line terminators.
Utilisation de cat -A :
cat -A filename.txtLes fins de ligne Windows apparaissent comme ^M$ à la fin de chaque ligne. Les fins de ligne Unix n’affichent que $.
Utilisation de hexdump :
hexdump -C filename.txt | grep -i "0d 0a"La séquence d’octets 0d 0a est la représentation hexadécimale de rn.
Syntaxe complète de la commande dos2unix
dos2unix [options] [input_file] [output_file]Lorsqu’il est appelé avec uniquement un fichier d’entrée, dos2unix convertit le fichier sur place, en écrasant l’original. Lorsqu’un fichier d’entrée et un fichier de sortie sont tous deux spécifiés, l’original est préservé et le contenu converti est écrit dans le nouveau fichier.
Référence des options de dos2unix
| Option | Forme longue | Description |
|---|---|---|
-o | --oldfile | Convertir les fichiers en mode ancien (sur place) — comportement par défaut |
-n | --newfile | Convertir vers un nouveau fichier en préservant l’original |
-c | --convmode | Définir le mode de conversion : unix, dos ou mac |
-k | --keep-timestamp | Conserver l’horodatage de modification du fichier original |
-q | --quiet | Supprimer tous les messages de sortie et avertissements |
-v | --verbose | Afficher des informations de conversion détaillées |
-l | --newline | Ajouter un caractère de nouvelle ligne supplémentaire |
-s | --safe | Ignorer automatiquement les fichiers binaires |
-f | --force | Forcer la conversion des fichiers binaires |
-b | --keep-bom | Conserver la marque d’ordre d’octet (BOM) si présente |
-r | --remove-bom | Supprimer la marque d’ordre d’octet (BOM) |
-V | --version | Afficher le numéro de version et quitter |
-h | --help | Afficher les informations d’aide |
Exemples pratiques d’utilisation de dos2unix
1. Convertir un seul fichier sur place
Le cas d’utilisation le plus courant — convertir un fichier et l’écraser avec la version formatée Unix :
dos2unix filename.txtLe fichier est modifié directement. Aucune sauvegarde n’est créée par défaut, alors assurez-vous d’en avoir une copie si nécessaire.
2. Convertir un fichier et enregistrer dans un nouveau fichier
Pour préserver le fichier original et écrire la sortie convertie dans un fichier séparé, utilisez l’indicateur -n (mode nouveau fichier) :
dos2unix -n filename.txt converted_filename.txtCela lit filename.txt, le convertit et écrit le résultat dans converted_filename.txt. L’original reste intact.
3. Convertir plusieurs fichiers à la fois
Vous pouvez passer plusieurs noms de fichiers dans une seule commande :
dos2unix file1.txt file2.txt file3.txtTous les fichiers listés sont convertis sur place. C’est efficace pour les opérations par lots sur un petit ensemble de fichiers connus.
4. Convertir tous les fichiers .txt dans un répertoire
Utilisez le globbing shell ou find pour traiter des répertoires entiers :
dos2unix *.txtOu de manière récursive dans les sous-répertoires :
find /path/to/directory -type f -name "*.txt" -exec dos2unix {} ;C’est particulièrement utile lors du déploiement de fichiers d’applications web ou d’ensembles de configuration qui ont été packagés sur une machine Windows.
5. Convertir tous les scripts shell de manière récursive
Une tâche courante pour un administrateur système — corriger tous les scripts Bash dans un répertoire de projet :
find /var/www/myapp -type f -name "*.sh" -exec dos2unix {} ;6. Préserver l’horodatage du fichier original
Par défaut, dos2unix met à jour l’horodatage de modification du fichier. Pour conserver l’horodatage original (utile dans les pipelines de déploiement ou lorsque make repose sur les horodatages) :
dos2unix -k filename.txt7. Mode silencieux — Supprimer toute la sortie
Idéal pour une utilisation dans des scripts shell et l’automatisation où vous ne souhaitez pas que les messages de conversion encombrent les journaux :
dos2unix -q filename.txt8. Convertir vers des fins de ligne Mac (CR uniquement)
Bien que rarement nécessaire aujourd’hui, vous pouvez convertir un fichier au format Mac OS 9 classique (retour chariot uniquement, r) en utilisant l’indicateur de mode de conversion -c :
dos2unix -c mac filename.txt9. Convertir de Unix vers le format DOS
dos2unix est livré avec unix2dos, qui effectue l’opération inverse — en ajoutant des fins CRLF pour la compatibilité Windows :
unix2dos filename.txt10. Supprimer la marque d’ordre d’octet (BOM)
Les fichiers enregistrés par des applications Windows incluent parfois un BOM UTF-8 au début, ce qui peut casser les scripts et les analyseurs sur Linux. Supprimez-le avec :
dos2unix -r filename.txtUtilisation de dos2unix dans les scripts shell et l’automatisation
dos2unix s’intègre proprement dans les scripts de déploiement et les pipelines CI/CD. Voici un exemple de script de pré-déploiement qui assainit tous les fichiers de configuration et de script avant leur mise en production :
#!/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."Rendez le script exécutable et exécutez-le dans le cadre de votre flux de déploiement :
chmod +x pre-deploy-sanitize.sh
./pre-deploy-sanitize.shErreurs courantes et dépannage
dos2unix: command not found
L’utilitaire n’est pas installé. Exécutez la commande d’installation appropriée pour votre distribution (voir la section d’installation ci-dessus).
dos2unix: Binary file ... is skipped
dos2unix a détecté ce qu’il considère être un fichier binaire et l’a ignoré. Si vous êtes certain que le fichier est du texte, forcez la conversion avec :
dos2unix -f filenameLe script échoue toujours après la conversion
Vérifiez que la conversion a fonctionné :
file filename.shIl devrait maintenant indiquer ASCII text ou UTF-8 Unicode text sans mentionner CRLF. Si les problèmes persistent, vérifiez les autres problèmes d’encodage en utilisant hexdump.
Permission refusée
Vous pourriez avoir besoin de privilèges élevés pour modifier certains fichiers système :
sudo dos2unix /etc/nginx/nginx.confdos2unix vs. méthodes alternatives
Bien que dos2unix soit la solution la plus propre, les administrateurs Linux expérimentés utilisent parfois d’autres outils pour des conversions ponctuelles rapides :
Utilisation de sed :
sed -i 's/r//' filename.txtUtilisation de tr :
tr -d 'r' < input.txt > output.txtUtilisation de awk :
awk '{ sub("r$", ""); print }' filename.txt > output.txtUtilisation de vim :
:set ff=unix
:wqCes alternatives fonctionnent, mais dos2unix est conçu spécifiquement pour cette tâche, gère les cas particuliers (comme la suppression du BOM et la détection des fichiers binaires) de manière plus élégante, et est l’outil recommandé pour une utilisation en production.
Pertinence pour l’hébergement web et la gestion de serveurs
Les problèmes de fins de ligne ne sont pas qu’un inconvénient pour les développeurs — ils constituent une véritable préoccupation opérationnelle dans les environnements hébergés. Les scripts PHP avec des fins CRLF peuvent produire des espaces blancs inattendus dans les en-têtes HTTP, provoquant des échecs de session et de cookie. Les applications Python WSGI peuvent générer des erreurs de syntaxe. Les fichiers de configuration Nginx et Apache avec des caractères r cachés peuvent empêcher les services de démarrer entièrement.
Si vous hébergez des sites web ou des applications sur un plan d’Hébergement Web Partagé ou gérez votre propre VPS avec cPanel, intégrer dos2unix dans votre flux de téléchargement et de déploiement de fichiers est une pratique simple à haute valeur ajoutée. Pour les équipes exécutant des déploiements automatisés sur des Serveurs Dédiés, l’ajout de dos2unix à votre pipeline CI/CD élimine toute une catégorie de bugs spécifiques à l’environnement avant qu’ils n’atteignent la production.
De plus, si votre infrastructure comprend un Hébergement Email avec des scripts personnalisés pour le traitement ou le filtrage des courriers, s’assurer que ces scripts utilisent des fins de ligne Unix correctes est essentiel pour un fonctionnement fiable.
Résumé de référence rapide
| Tâche | Commande |
|---|---|
| Convertir un fichier sur place | dos2unix filename.txt |
| Convertir et enregistrer dans un nouveau fichier | dos2unix -n input.txt output.txt |
| Convertir plusieurs fichiers | dos2unix file1.txt file2.txt file3.txt |
Convertir tous les fichiers .sh de manière récursive | find . -name "*.sh" -exec dos2unix {} ; |
| Préserver l’horodatage original | dos2unix -k filename.txt |
| Mode silencieux (sans sortie) | dos2unix -q filename.txt |
| Supprimer le BOM | dos2unix -r filename.txt |
| Convertir au format Mac | dos2unix -c mac filename.txt |
| Inverse : Unix vers DOS | unix2dos filename.txt |
| Vérifier les fins de ligne | file filename.txt ou cat -A filename.txt |
Conclusion
La commande dos2unix est un petit utilitaire avec un impact considérable dans le développement multiplateforme et l’administration de serveurs. Les caractères r cachés sont l’une des causes les plus courantes des bugs « ça marche sur ma machine » lorsque des fichiers passent entre des environnements Windows et Linux — et dos2unix les élimine proprement, en toute sécurité et efficacement.
En maîtrisant sa syntaxe et ses options, vous pouvez prévenir les échecs de déploiement, assurer la compatibilité des scripts et maintenir l’intégrité des fichiers de configuration dans toute votre infrastructure. Que vous soyez un développeur poussant du code vers un serveur Linux, un administrateur système gérant un parc de machines, ou un propriétaire de site téléchargeant des fichiers vers un environnement d’hébergement, faire de dos2unix une partie de votre boîte à outils standard est une bonne pratique simple qui porte ses fruits chaque fois que des fichiers franchissent les frontières entre systèmes d’exploitation.
