如何在 Linux 中查找格式错误、损坏、dos、BOMByte 文件

如何在 Linux 中查找格式错误、损坏、dos、BOMByte 文件

我在维护大型生产服务器时遇到了一些问题,其中一些开发人员从 Windows 环境中删除文件,有时会带有 BOM 字节(我们使用 UTF8,但不需要它),从而造成很多麻烦。

其他时候,当我直接在服务器上使用 vim 编辑文件时,我会得到“无行尾”和“[DOS]”标签。

我最近发现了如何查找 bom 字节,以及如何在批处理脚本中删除它。非法字节、坏 EOL 怎么办?在 Linux 环境中使用 DOS 文本文件安全吗?如果我使用 dos2unix cmd 转换它们,会有什么缺点吗?

问候

答案1

是的,BOM 字节很糟糕。区域设置应该确定文件的编码。

另一件事正如您正确指出的那样是行尾。Dos 倾向于使用 CRLF,而 Linux 仅使用 LF。

dos2unix 将为您解决这个问题。

答案2

“Bad EOL”(no end of line消息)并不坏。它只是通知您最后一行之后没有 EOL。Unix 惯例是使用 EOL 作为行终止符,而大多数 Windows 工具将其视为分隔符。

除了消息(以及cat阅读此类文件时略微的烦恼)之外,没有什么不好的。


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//'


停产:行尾字符或字符;LF 或 CR/LF(以适当者为准)。

相关内容