
1. Linux系统那些让人哭笑不得的坑作为一个Linux老用户我经常遇到一些让人哭笑不得的问题。比如上周在配置新服务器时明明按照文档一步步操作系统却突然报错Operation not permitted。查了3小时才发现是SELinux在作怪——这个安全模块默认会阻止某些操作而大多数教程根本不会提到这点。经验之谈遇到权限问题先检查SELinux状态用getenforce查看临时关闭用setenforce 0永久修改需要编辑/etc/selinux/config文件。2. 文件权限的玄学问题2.1 为什么777权限也不管用新手常犯的错误就是无脑chmod 777但有时即使给了最高权限操作依然失败。这种情况通常有几种可能文件系统挂载时加了noexec参数文件被chattr设置了不可变属性文件所在的父目录权限不足# 检查文件系统挂载选项 mount | grep 你的挂载点 # 检查文件特殊属性 lsattr 文件名 # 检查父目录权限 namei -l 文件路径2.2 用户组权限的坑Linux权限系统有个反直觉的设计新建文件默认会继承目录的组但需要目录设置setgid位。很多管理员不知道这点导致文件权限混乱。# 正确设置共享目录的方法 mkdir /shared chgrp developers /shared chmod gs /shared # 关键步骤 umask 002 # 让新建文件对同组可写3. 网络配置中的灵异事件3.1 为什么ping通但服务连不上这种情况我遇到过太多次了可能的原因包括防火墙规则iptables/nftablesSELinux网络策略服务绑定到了127.0.0.1路由策略规则ip rule排查步骤# 1. 检查监听端口 ss -tulnp | grep 端口号 # 2. 检查防火墙 iptables -L -n -v nft list ruleset # 3. 检查SELinux网络策略 sesearch -A -s 服务类型 -t 端口类型 -c tcp_socket3.2 DNS解析的神秘延迟Linux的DNS缓存机制是个大坑。systemd-resolved、nscd、应用自带缓存等多层缓存经常导致修改DNS后不立即生效。建议开发环境直接关闭所有DNS缓存systemctl stop systemd-resolved systemctl disable systemd-resolved pkill nscd4. 软件包管理的依赖地狱4.1 被遗忘的32位库在64位系统上编译32位程序时经常会遇到找不到库文件的情况。这是因为大多数发行版默认不安装32位开发库。解决方法# Ubuntu/Debian sudo dpkg --add-architecture i386 sudo apt install gcc-multilib # RHEL/CentOS sudo yum install glibc-devel.i6864.2 版本冲突的终极解法当遇到依赖A需要B1.0但依赖C需要B1.0这种死锁时可以尝试使用容器隔离环境手动编译安装到自定义路径使用虚拟环境Python的venv、Ruby的rbenv等# 手动编译安装示例 wget http://example.com/package.tar.gz tar zxvf package.tar.gz cd package ./configure --prefix/opt/mypackage make sudo make install export PATH/opt/mypackage/bin:$PATH5. 系统日志中的隐藏线索5.1 journalctl的高级用法systemd的日志系统功能强大但不好用。几个实用技巧# 查看特定服务的日志 journalctl -u 服务名 # 追踪最新日志 journalctl -f # 按时间筛选 journalctl --since 2023-01-01 --until 2023-01-02 # 显示内核消息 journalctl -k # 以JSON格式输出便于处理 journalctl -o json5.2 被忽略的dmesg很多硬件相关问题都能在dmesg中找到线索# 查看USB设备识别记录 dmesg | grep usb # 查看硬盘错误 dmesg | grep -i error # 实时监控内核消息 dmesg -w6. 性能调优中的反常识6.1 swapiness的误区很多人认为应该把vm.swappiness设为0来禁用swap其实这可能导致OOM。更合理的做法# 查看当前值 cat /proc/sys/vm/swappiness # 临时修改推荐值10-30 sudo sysctl vm.swappiness20 # 永久修改 echo vm.swappiness20 /etc/sysctl.conf6.2 文件系统mount选项默认的ext4挂载选项可能不适合你的场景# 数据库服务器推荐 /dev/sdb1 /data ext4 defaults,noatime,nodiratime,datawriteback,barrier0 0 1 # 高并发小文件 /dev/sdc1 /var ext4 defaults,noatime,nodiratime,commit60 0 27. 终端使用的冷知识7.1 你不知道的快捷键CtrlU删除光标前到行首CtrlK删除光标后到行尾CtrlW删除前一个单词CtrlY粘贴刚才删除的内容Ctrl_撤销上一个操作CtrlX CtrlE用$EDITOR编辑当前命令7.2 终端复用技巧# 在后台运行命令忽略SIGHUP nohup 命令 # 更好的方式使用screen/tmux tmux new -s 会话名 # 按CtrlB然后D分离会话 tmux attach -t 会话名8. 安全加固的隐藏选项8.1 限制用户资源# 编辑limits.conf vim /etc/security/limits.conf # 添加如下内容 username hard nproc 100 # 最大进程数 username hard fsize 50MB # 最大文件大小8.2 SSH加固技巧# 禁用密码登录 PasswordAuthentication no # 限制用户和IP AllowUsers user1192.168.1.* user2 DenyUsers baduser # 使用证书二次验证 AuthenticationMethods publickey,keyboard-interactive9. 硬件相关的怪现象9.1 笔记本亮度调节失效常见于双显卡笔记本解决方法# 先检查可用背光接口 ls /sys/class/backlight/ # 临时设置亮度 echo 500 /sys/class/backlight/intel_backlight/brightness # 永久方案创建/etc/X11/xorg.conf.d/20-intel.conf Section Device Identifier Intel Graphics Driver intel Option Backlight intel_backlight EndSection9.2 无线网卡功率管理问题# 禁用电源管理 iwconfig wlan0 power off # 永久生效创建/etc/NetworkManager/conf.d/wifi-powersave.conf [connection] wifi.powersave 2 # 2禁用10. 容器与虚拟化的坑10.1 Docker存储驱动选择# 查看当前驱动 docker info | grep Storage Driver # 修改为overlay2编辑/etc/docker/daemon.json { storage-driver: overlay2 }10.2 KVM性能优化# 检查CPU虚拟化支持 egrep -c (vmx|svm) /proc/cpuinfo # 创建优化过的虚拟机 virt-install \ --name vm1 \ --memory 4096 \ --vcpus 4 \ --cpu host-passthrough \ --disk size20 \ --network bridgebr0 \ --graphics none \ --console pty,target_typeserial