Команда Linux dos2unix
dos2unix — это утилита для преобразования текстовых файлов из формата DOS/Windows в формат Unix/Linux. Она в основном решает проблемы, вызванные различиями в символах новой строки между разными операционными системами.
Основные функции:
- Преобразует текстовые файлы из формата DOS/Windows (окончания строк CRLF) в формат Unix/Linux (окончания строк LF)
- Обрабатывает проблемы с кодировкой файлов (необязательно)
- Пакетное преобразование нескольких файлов
Зачем нужен dos2unix
Различия в символах новой строки
Разные операционные системы используют разные символы новой строки:
- Windows/DOS: использует возврат каретки + перевод строки (CRLF, т.е.
rn) - Unix/Linux: использует только перевод строки (LF, т.е.
n) - Mac OS (старые версии): использует возврат каретки (CR, т.е.
r)
Симптомы проблемы
Когда текстовые файлы, созданные в Windows, открываются в системе Linux:
- Могут появляться
^Mсимволы (видны в vi) - Файлы скриптов могут выполняться неправильно
- Некоторые инструменты (такие как grep, awk) могут обрабатывать текст неправильно
Установка dos2unix
В большинстве дистрибутивов Linux dos2unix не устанавливается по умолчанию; его нужно установить вручную:
Ubuntu/Debian
Пример
sudo apt-get install dos2unix
CentOS/RHEL
sudo yum install dos2unix
Проверка установки
dos2unix --version
Базовый синтаксис
dos2unix [选项] 文件...
Распространённые параметры
| Опция | Описание |
|---|---|
-k |
Сохранить временную метку файла без изменений |
-f |
Принудительное преобразование, игнорировать проверку двоичных файлов |
-q |
Тихий режим, не выводить предупреждающие сообщения |
-o |
Перезаписать исходный файл (поведение по умолчанию) |
-n |
Режим нового файла, сохранить исходный файл, вывести в новый файл |
-c |
Преобразование кодировки (должно использоваться с-eопция) |
-e |
Указать целевую кодировку (например,-e utf8) |
-b |
Создать резервный файл (добавить.bakсуффикс) |
Примеры использования
1. Базовое преобразование
dos2unix file.txt
Это напрямую изменит файл file.txt
2. Сохранить исходный файл
dos2unix -n file.txt newfile.txt
Исходный файл остаётся без изменений; результат преобразования сохраняется в newfile.txt
3. Пакетное преобразование
dos2unix *.txt
Преобразовать все файлы .txt в текущем каталоге
4. Рекурсивно преобразовать каталоги
find . -type f -name "*.sh" -exec dos2unix {} ;
Преобразовать все файлы .sh в текущем каталоге и его подкаталогах
5. Сохранить временные метки
dos2unix -k script.py
Преобразовать script.py, но сохранить время его изменения
Практические сценарии применения
1. Исправление скриптов, перенесённых из Windows
Пример
dos2unix backup_script.sh
# Добавить право на выполнение
chmod +x backup_script.sh
# Выполнить скрипт
./backup_script.sh
2. Обработка конфигурационных файлов, совместно используемых командой разработчиков
Пример
find /etc/myapp/conf.d/ -type f -exec dos2unix {} ;
3. Подготовка файлов для загрузки на сервер Linux
dos2unix -b *.php # 转换并创建备份
Меры предосторожности
- Двоичные файлы: Не используйте dos2unix для двоичных файлов (таких как изображения, PDF-файлы); это повредит файл
- Контроль версий: В системах контроля версий, таких как Git, лучше единообразно настроить обработку символов новой строки
- Проблемы с кодировкой: Если файл содержит символы, не входящие в ASCII, возможно, вам потребуется использовать
-cи-eопция для обработки кодировки - Резервное копирование: рекомендуется использовать
-bопция для создания резервной копии перед конвертацией важных файлов
Альтернативные решения
Если dos2unix не установлен в системе, можно использовать следующие альтернативные методы:
1. Использование команды tr
tr -d 'r' unixfile.txt
2. Использование команды sed
sed -i 's/r$//' winfile.txt
3. Использование vim
Пример
:wq
Итог
dos2unix — практичный инструмент для решения проблем с форматом текстовых файлов на разных платформах, особенно подходит для:
- Системные администраторы, обслуживающие серверы
- Разработчики, сотрудничающие на разных платформах
- Обработка скриптов и конфигурационных файлов, перенесённых с Windows на Linux
Освоение команды dos2unix позволяет эффективно избежать различных проблем, вызванных различиями в символах перевода строки, и повысить эффективность работы.
Другие расширения
Энциклопедия команд Linux