加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.022zz.com.cn/)- 图像处理、建站、语音技术、云计算、AI行业应用!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

Linux老手也常踩的5个Unix环境搭建坑

发布时间:2026-10-16 08:13:28 所属栏目:Unix 来源:DaWei
导读:  我越来越觉得“Linux老手也常踩的5个Unix环境搭建坑”这个说法是错的。  它根本不是坑——是筛子。去年六月,我在杭州滨江那个带蓝光灯带的机房里,盯着三台Dell R740的串口屏,把/usr/local/bin下十七个站用过的脚

  我越来越觉得“Linux老手也常踩的5个Unix环境搭建坑”这个说法是错的。


  它根本不是坑——是筛子。去年六月,我在杭州滨江那个带蓝光灯带的机房里,盯着三台Dell R740的串口屏,把/usr/local/bin下十七个站用过的脚本全重跑了一遍,就为了确认一件蠢事:/etc/shadow里某行末尾多敲了两个空格,结果sshd_config reload之后,所有密钥登录全挂了,连root都锁在外面四十七分钟。老张端着枸杞茶站我背后说:“你不是说PAM模块认空格比认密码还严?”我没接话,光听见空调外机在喊“嗡——”,震得工牌链子发响。


文章配图,仅供参考

  我原以为那是路径没写对、LD_LIBRARY_PATH漏加了、或者SELinux上下文没chcon——结果就卡在一行空格上。连strace都骗我,它输出里连fork都打满了,可就是不进pam_authenticate。最后是王工拿她那台2012年的ThinkPad X220,用screen -r接上去,手指悬在键盘上停了八秒,才按Backspace删掉那俩空格。系统一亮,她说了句:“这不叫坑,叫指纹。”


  真要列五个,第一个就该是/etc/passwd里的shell字段填了/bin/bash而不是/bin/bash(后者多了一个不可见的Unicode ZWSP,U+200B),这种东西连vim默认都不标红。第二个?别信man页里写的“默认PATH由sh读取”,你在cron里用绝对路径调/usr/bin/perl写了个日志轮转脚本,结果某天凌晨三点它自己删掉了整个/var/log目录——因为systemd-tmpfiles清临时文件时顺手rm -rf了你那个脚本硬编码的/tmp/perl_XXXXX路径前缀,而那个前缀和tmpfiles.d里某条规则撞了。这事我们没复现成功,只查到日志里一句“Operation not permitted”,但磁盘inode表确实被清空过两回。


  第三个是时区。不是TZ=Asia/Shanghai那种,是chrony.conf里server pool.ntp.org iburst后头,漏写了makestep 1.0 -1;然后有台服务器刚从断网仓库搬出来,硬件时钟差了四百二十秒,systemd-timesyncd压根不拉它,systemd-journald直接拒绝落盘任何时间戳早于当前的log——所以你grep “Failed to start”发现日志是空的,其实全堆在内存里等你重启,重启那一瞬刷出七千行ERROR。李伟蹲在地上拔网线,一边拔一边念叨:“又不是2016年了……”他指甲缝里还卡着上周换UPS电池时蹭的铜绿。


  第四个,ssh_config里StrictHostKeyChecking设成ask?算了吧。你本地.ssh/known_hosts存了三百一十二个主机密钥,其中五十四个是不同IP段映射的同一台测试机,某个周五晚上运维自动下发证书时批量改了一次IP,你第二天上午ssh过去,终端停在“Are you sure you want to continue connecting (yes/no)?”不动,因为yes/no判断逻辑卡在fgetc()等输入,而tmux session根本没传stdin过来——于是整条链路堵死,后面六个并发任务全卡住。这事没人报障,直到备份脚本超时失败,告警邮件里写着“connection timeout after 3600s”,可实际是人在tty里等按键。我试了三个月,直到换用ssh-keyscan预生成列表,才敢在CICD里放开StrictHostKeyChecking。


  第五个?不写了。那天我把/usr/share/zoneinfo/Asia/Shanghai软链接手动改指向了/usr/share/zoneinfo/Etc/UTC,想绕开夏令时跳变导致的NTP校准震荡,结果systemd-logind半夜把所有tty会话干掉了,说“Session timed out due to inactivity”,明明我正用vnc看top。后来查内核文档才瞥见一行小字:“If system timezone is set to Etc/UTC, login manager ignores idle timeouts unless IgnoreInactivity=yes”。我删了那行配置,重启logind,它又把我的SSH会话踢了。算了。这玩意跟人品有关。


  “主流说法”总爱把这种事叫“陷阱”,好像踩进去是脑子慢。其实全是优胜劣汰剩下的活口。就像去年底那批CentOS 7容器镜像,基础层打了补丁包,但init脚本里还留着service xxx start这种命令,而systemd版本早升级过了——可偏偏就没人动它,因为所有上线服务都绕开了那个init脚本,全走docker-entrypoint.sh。留着它,反而能快速识别哪些服务是新写的、哪些是十年前抄来的。这哪是坑?这是年轮。


  不过昨天下午,客户非要我们在AIX 7.3上搭一套和线上完全一致的监控代理链路。我说AIX没有systemd,他说“那你们改脚本”。我点了头。回家路上在地铁里打开手机,看了眼iTerm2里上次保存的会话记录:里面有一行我写的注释,“# 注意:AIX 7.3的ps不认-eo参数,要用-ef | awk '{print $2}'”,底下还跟着三个星号。那行字是去年十一月写的。我删了它,又输了一遍,这次没加星号。这事我也可能就运气好。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!