SQL server(window)日志在linux 下查看
服务器拷贝下来的日志比较大,window 无法直接查看
# 查看文件大小
ll -h
-rw-r--r-- 1 root root 364M 9月 3 11:22 ERRORLOG
# 查看文件类型
file ERRORLOG
ERRORLOG: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators
使用 file
命令查看了一个名为 ERRORLOG
的文件,输出是:
ERRORLOG: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators
这说明这个文件是一个 UTF-16 LE(小端)编码的 Unicode 文本文件,常见于 Windows 系统生成的日志(如 SQL Server 的错误日志、IIS 日志等)。
❗ 问题:为什么 cat
或 less
显示乱码?
因为 Linux 默认工具(如 cat
, less
)通常假设文本是 UTF-8 编码,而你的文件是 UTF-16,所以直接打开会显示乱码或类似:
M Sep ...
✅ 正确查看方式
你需要将 UTF-16 转换为 UTF-8 或使用支持 Unicode 的工具来查看。
✅ 方法 1:使用 iconv
转换编码(推荐)
iconv -f UTF-16LE -t UTF-8 ERRORLOG | less -R
🔍 参数说明:
-f UTF-16LE
:输入编码是 UTF-16 Little Endian-t UTF-8
:输出转换为 UTF-8| less -R
:通过less
查看,支持颜色和控制字符
💡 如果你知道文件很大,也可以分页查看:
iconv -f UTF-16LE -t UTF-8 ERRORLOG | tail -n 100 | less
✅ 方法 2:使用 strings
快速提取可读文本
strings -e l ERRORLOG | less
🔍 参数说明:
-e l
:指定使用 16-bit little-endian 编码(即 UTF-16LE)- 这会提取所有可打印字符串,适合快速查看日志内容
✅ 优点:速度快,适合大文件
❌ 缺点:会丢失格式(如换行可能不完整)
✅ 方法 3:使用 more
或 less
(部分支持,不推荐)
某些版本的 less
支持 Unicode,但需要设置环境变量:
# 设置语言环境为 UTF-8
export LC_ALL=C.UTF-8
less ERRORLOG
但效果不稳定,仍可能乱码,建议优先用 iconv
。
✅ 方法 4:保存为 UTF-8 文件供后续分析
iconv -f UTF-16LE -t UTF-8 ERRORLOG -o ERRORLOG.utf8
ll -h
-rw-r--r-- 1 root root 364M 9月 3 11:22 ERRORLOG
-rw-r--r-- 1 root root 197M 9月 3 13:24 ERRORLOG.utf8
然后就可以用任何工具查看:
less ERRORLOG.utf8
grep "Error" ERRORLOG.utf8
✅ 方法 5:如果是 SQL Server 错误日志(常见场景)
Windows SQL Server 的 ERRORLOG
文件就是这种格式。你可以:
- 用上述
iconv
方法转换。 - 或直接在 Windows 上用记事本、Notepad++ 打开最方便。
- 或使用 PowerShell 转换:
Get-Content ERRORLOG | Out-File -Encoding UTF8 ERRORLOG_utf8.txt
🧰 补充:如何确认文件编码?
file --mime-encoding ERRORLOG
输出可能是:
ERRORLOG: utf-16le
这可以确认编码类型。
✅ 总结:推荐操作流程
# 1. 先确认编码
file --mime-encoding ERRORLOG
# 2. 转换并查看(推荐)
iconv -f UTF-16LE -t UTF-8 ERRORLOG | less -R
# 3. 或提取可读字符串
strings -e l ERRORLOG | grep -i error | less