Назад | Перейти на главную страницу

Как найти искаженные - поврежденные - dos - файлы BOMByte в Linux

У меня несколько проблем с обслуживанием больших производственных серверов, на которых некоторые разработчики сбрасывают файлы из сред Windows, иногда с байтами спецификации (мы используем UTF8, и в этом нет необходимости), что вызывает множество проблем.

В других случаях, когда vim редактировал файлы прямо на сервере, я получал метки «без конца строки» и «[DOS]».

Недавно я обнаружил, как найти байт бомбы и как удалить его в пакетном скрипте. А как насчет незаконных байтов, плохих EOL? Безопасно ли использовать текстовые файлы DOS в среде Linux? Есть ли недостатки, если я использую для их преобразования с помощью команды dos2unix?

С уважением

«Плохой EOL» (no end of line сообщение) неплохо. Он просто уведомляет вас, что после последней строки нет EOL. Соглашение Unix заключается в использовании EOL в качестве символа конца строки, а большинство инструментов Windows считают его разделителем.

Помимо сообщения (и легкого раздражения, когда cating такой файл) ничего плохого в этом нет.


Окончания строк DOS / Windows (CR / LF) могут вызвать некоторые проблемы, особенно в сценариях: когда Linux читает #! строка, он будет использовать все до первого LF и будет учитывать CR часть имени файла интерпретатора.

Для исполняемых скриптов лучше всего использовать окончания строк Unix (:set ff=unix), иначе Linux попытается выполнить /usr/bin/perl<CR> когда у тебя было #!/usr/bin/perl вместе с окончаниями строк Windows.

Для других файлов это не имеет большого значения.


Подпись UTF-8 (EF BB BF) может вызвать еще больше проблем - отключите с помощью :set nobomb, массовое удаление с помощью sed -i 's/^\xef\xbb\xbf//'.


EOL: Символ или символы конца строки; либо LF, либо CR / LF, в зависимости от того, что подходит.

Ага, байты спецификации плохие. Языковой стандарт должен определять кодировку файла.

Другая вещь, как вы правильно отметили, - это окончания строк. Dos имеет тенденцию быть CRLF, а Linux - только LF.

dos2unix позаботится об этой проблеме за вас.