刚入行运维必看!Mac上LF/CRLF的“坑”,资深Java大佬早玩明白了

modric_ming 发布于 1 天前 11 次阅读


作为一个刚摸运维岗位1年的“职场小萌新”(前阵子还是应届毕业生),我曾因为一个不起眼的“换行符”,在生产环境栽了个大跟头——本地Java项目跑的飞起,一部署到Linux服务器就报奇奇怪怪的脚本执行错误,日志里全是“command not found”,排查了3小时才发现,罪魁祸首居然是 LF和CRLF 这俩“小妖精”。

更扎心的是,我去请教公司的资深Java大佬,他听完直接笑了:“小伙子,用Mac做开发运维,连换行符都搞不明白,还得再修炼修炼~” 后来才知道,资深Java开发者偏爱Mac,除了流畅不卡顿、终端好用,更重要的是Mac默认的换行符,刚好踩中了Java开发+Linux运维的“舒适区”。今天就把我踩过的坑、摸透的知识点,分享给和我一样的新手运维/准运维,帮大家少走弯路!

先搞懂:LF和CRLF到底是啥?别再傻傻分不清

先给新手科普个基础知识点,别觉得简单,我敢说80%的应届生第一次遇到都会懵。换行符,就是我们按“Enter”键时,电脑自动插入的“隐藏字符”,目的是告诉系统“这里要换一行了”。但不同系统,用的换行符不一样,这也是跨系统开发/运维最容易踩坑的点之一。

  • CRLF:Windows的“双保险”换行 —— 全称是Carriage Return(回车,\r)+ Line Feed(换行,\n),简单说就是“先把光标移到行首,再换到下一行”。Windows系统默认用的就是这个,比如你在Windows上用记事本写脚本、写Java配置文件,保存后里面的换行符全是CRLF。
  • LF:Unix/Linux/Mac的“极简”换行 —— 只有Line Feed(\n),直接“换到下一行”,不做光标回退操作。Unix、Linux服务器(我们运维天天打交道的)默认用LF,而Mac从OS X版本开始,也统一改成了LF(老版本的Mac OS用的是CR,现在基本见不到了)。

重点提醒:我们部署Java项目、执行Shell脚本,几乎都是在Linux服务器上操作,而Linux只认LF换行符!如果你的文件里是CRLF,Linux会把\r当成一个“无效字符”,从而导致脚本执行失败、配置文件解析错误——这就是我当初踩的坑!

为什么资深Java开发者都偏爱Mac?和LF有直接关系!

刚入行时我一直好奇,为啥公司的Java大佬们清一色用Mac,不用Windows?难道只是为了“装X”?后来自己用Mac做运维+辅助开发才明白,这其中藏着太多“省心细节”,而LF换行符就是核心原因之一。

对于Java开发者+运维来说,我们的日常流程基本是:本地开发/编写脚本 → 提交代码到Git → 部署到Linux服务器。这中间,换行符的“兼容性”直接决定了我们少踩多少坑。

先说说Windows的坑:如果你用Windows写Java代码、写Shell脚本,默认是CRLF换行。提交到Git时,如果没配置好,Git会自动把CRLF转换成LF(Git默认有自动转换功能),但有时候配置出问题,转换失败,代码部署到Linux后,就会出现我之前遇到的“脚本执行报错”。更麻烦的是,有些Java配置文件(比如application.yml)对换行符敏感,CRLF可能导致配置解析失败,排查起来特别费劲。

而Mac就完美避开了这个坑:Mac默认是LF换行,和Linux服务器“同频”。你在Mac上写脚本、改配置,保存后直接提交Git,不用额外配置转换,部署到Linux上就能直接运行,不用操心换行符的问题。资深Java大佬天天和代码、服务器打交道,自然会选择这种“少折腾”的工具——毕竟,能省下来的时间,用来摸鱼不香吗?

除此之外,Mac的终端比Windows的CMD、PowerShell好用太多,自带的Unix-like环境,和Linux服务器的操作逻辑几乎一致,运维时远程连接服务器、执行命令,手感特别丝滑。这也是为啥,很多运维新手入行后,都会被大佬安利“换个Mac,效率翻倍”。

新手必学:Mac上如何搞定LF/CRLF,避免踩坑?

作为刚用Mac半年的运维新手,我整理了3个最实用的操作,帮大家彻底搞定换行符的问题,不管是自己写脚本,还是处理别人传来的Windows文件,都能轻松应对。

1. 查看文件的换行符格式(新手必会)

很多时候,我们拿到一个文件(比如同事发的Shell脚本、GitHub上下载的Java项目),不知道它的换行符是LF还是CRLF,这时候可以用Mac自带的终端查看。

打开终端,进入文件所在目录,执行命令:

file 文件名

如果输出结果里有“line endings: CRLF”,说明是Windows格式;如果是“line endings: LF”,就是Unix/Mac格式。比如我查看一个Windows传来的脚本,输出就是:test.sh: ASCII text, with CRLF line terminators

2. 把CRLF转换成LF(最常用操作)

如果拿到的是Windows格式(CRLF)的文件,直接部署到Linux会报错,这时候需要转换成LF。有两种简单方法,新手任选其一即可。

方法一:用终端命令转换(推荐,快速高效)

# 单个文件转换:把test.sh的CRLF转换成LF
dos2unix test.sh

# 如果没有dos2unix命令,先安装:
brew install dos2unix

方法二:用VS Code转换(可视化,适合新手)

用VS Code打开文件,右下角会显示当前的换行符格式(比如“CRLF”),点击它,会弹出选项,选择“LF”,保存文件即可完成转换。这个方法适合批量处理多个文件,或者对命令行不熟悉的新手。

3. 配置Git,自动处理换行符(一劳永逸)

作为运维,我们经常会用Git提交代码、拉取项目,配置Git自动处理换行符,能避免很多麻烦。在Mac终端执行以下命令,配置Git自动将CRLF转换成LF:

# 全局配置:提交时转换为LF,拉取时不转换
git config --global core.autocrlf input

# 查看配置是否生效
git config --global --get core.autocrlf

这样一来,不管你拿到的是Windows格式还是Mac格式的文件,提交到Git时,都会自动转换成LF,部署到Linux服务器时就不会因为换行符出问题了。

最后:新手别慌,踩坑才是成长的必经之路

其实我刚遇到换行符问题时,特别焦虑,觉得自己连这么基础的东西都不懂,是不是不适合做运维。但后来大佬告诉我,他刚入行时,也因为LF/CRLF的问题,把生产环境的脚本搞崩过——资深开发者不是不踩坑,而是踩过一次后,就再也不会犯第二次。

对于我们这些应届毕业生、职场1-2年的运维新手来说,不用追求“一步到位”,也不用羡慕资深大佬的“游刃有余”。把每一次踩坑都当成学习的机会,把这些看似“不起眼”的基础知识点吃透,慢慢就能从“新手”变成“靠谱的运维”。

如果你也是刚入行的运维,或者正在准备转行做运维,不妨试试用Mac办公,慢慢熟悉LF/CRLF的用法,相信我,这会让你后续的工作省很多事。

最后,祝各位新手运维小伙伴,少踩坑、多摸鱼,早日成为像资深Java大佬一样的“技术大牛”~

此作者没有提供个人介绍。
最后更新于 2026-02-28