Как исправить окончания строк: dos2unix и unix2dos

Что такое окончания строк?
Окончание строки — специальный символ или последовательность, которая обозначает конец строки в текстовом файле. В терминологии:
- LF (line feed, \n) — перевод строки (используется в Unix/Linux).
- CR (carriage return, \r) — возврат каретки (исторически использовался на печатающих машинах).
- CRLF (\r\n) — сочетание CR и LF (используется в Windows).
Термин “новая строка” обычно соответствует LF; Windows по традиции использует CRLF. Большинство современных редакторов умеют обнаруживать формат, но при запуске скриптов или передаче файлов между системами это может вызывать ошибки.
Почему это важно
- Скрипты на Unix-подобных системах могут сообщать об ошибках из-за лишних символов CR.
- Конфигурационные файлы и логи могут выглядеть некорректно в другом окружении.
- Автоматизация и сборочные скрипты чувствительны к точному формату строк.
Важно: для двоичных файлов (изображений, исполняемых файлов и т.п.) преобразования окончаний строк недопустимы — это повредит файл.
Использование Dos2Unix и Unix2Dos
Утилиты dos2unix и unix2dos конвертируют окончания строк в текстовых файлах. Обычно они уже установлены в дистрибутивах, но при необходимости можно поставить их через менеджер пакетов (см. раздел “Шпаргалка по установке”).
Примеры базовых команд:
dos2unix fileЭта команда конвертирует файл с формата DOS (CRLF) в Unix (LF) на месте.
Чтобы сохранить исходный файл и записать результат в другой файл, используйте опцию -n:
dos2unix -n file1 file2Здесь file1 — исходный файл, file2 — результирующий. unix2dos работает аналогично, но конвертирует из LF в CRLF.
Примечание
- Команды изменяют только текстовые файлы. Если вы не уверены, проверьте тип файла (например, с помощью файла file).
- Некоторые реализации dos2unix поддерживают дополнительные опции для резервного копирования и выбора кодировок; читайте man-страницу на вашей системе.
Мини-методология: шаги перед конвертацией
- Сделайте резервную копию или используйте систему контроля версий.
- Определите тип файла: file filename или просмотр в hex-редакторе покажет \r символы.
- Примените dos2unix/unix2dos для нужных файлов или папок.
- Протестируйте скрипты и конфигурации в целевой среде.
Альтернативные подходы
- Редактор кода: большинство IDE и текстовых редакторов (VS Code, Sublime, Notepad++) позволяют выбрать формат окончаний строк и сохранить файл в нужном формате.
- Git: настройте core.autocrlf и .gitattributes, чтобы автоматически нормализовать окончания при коммитах и чек-аутах.
- core.autocrlf = true на Windows (конвертирует LF -> CRLF при checkout), core.autocrlf = input на Unix (сохраняет LF в репозитории).
- .gitattributes: добавьте
* text=auto eol=lfдля принуждения LF в репозитории.
- Скрипты: простые sed/awk/perl‑оды для массовой замены, но осторожно с кодировками и бинарными данными.
Когда это не работает или где подводные камни
- Файлы в UTF-16 или с BOM: dos2unix ожидает текст в однобайтовой кодировке; при UTF-16 сначала нужно перекодировать (например, с помощью iconv).
- Старые macOS (до Mac OS X) использовали только CR; поведение может отличаться.
- Бинарные файлы, архивы, исполняемые — не трогать.
- Если в файле смешаны форматы (части с LF, части с CRLF), конверсия может не исправить автоматические ожидания приложений — проверьте результат.
Шпаргалка: команды и установка
Установка (распространённые менеджеры пакетов):
# Debian/Ubuntu
sudo apt install dos2unix
# RHEL/CentOS/Fedora
sudo yum install dos2unix
# macOS (Homebrew)
brew install dos2unixБыстрая конверсия каталога:
find . -type f -name "*.txt" -exec dos2unix {} +Часто полезные команды Git:
# Установить автоконвертацию при коммитах
git config --global core.autocrlf input
# Принудительно нормализовать все файлы в репозитории
git add --renormalize .Ролевые чек-листы
Для разработчика:
- Сделать резервную копию/commit перед массовой операцией.
- Настроить editorconfig или .gitattributes для команды.
- Тестировать скрипты в CI и в целевой ОС.
Для системного администратора:
- Автоматизировать проверки формата в конвейере развертывания.
- Исключать двоичные файлы из конверсий.
- Документировать требования по кодировке и окончаниям строк.
Для технического писателя:
- Всегда сохранять исходные документы в LF для совместимости с Unix-процессами.
- Указывать формат в руководствах по локализации и сборке.
Краткий глоссарий
- LF — перевод строки (\n).
- CR — возврат каретки (\r).
- CRLF — Windows-окончание строки (\r\n).
- BOM — маркер порядка байтов в текстовых файлах (встречается в UTF-8/UTF-16).
Критерии приёмки
- Файлы в репозитории имеют ожидаемые окончания строк согласно .gitattributes.
- Скрипты запускаются без ошибок, связанных с лишними символами конца строки.
- Никакие двоичные файлы не были повреждены после массовых операций.
Краткое резюме
Dos2unix и unix2dos — простые и надёжные инструменты для приведения окончаний строк в соответствие с целевой ОС. Вместе с настройкой Git и редакторов они помогают избежать проблем при совместной работе между Windows и Linux.
Важно: перед массовыми изменениями всегда сохраняйте резервную копию и проверяйте кодировки файлов.