尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux服务器核心基础与运维实战:从原理到排查全解析

Linux服务器核心基础与运维实战:从原理到排查全解析 Linux 服务器这个东西网上的教程一搜一大把但大多要么是零散的命令堆砌要么是上来就甩内核源码看得人一头雾水。我带过不少新人也接手过各种奇奇怪怪的线上问题最深的感觉是基础知识扎实的人遇到故障不会慌因为他知道系统底层是怎么跑的反之只会背命令的人换个环境就抓瞎。这篇文章我想把关于 linux 服务器的核心基础和工作原理系统串一遍从“它是个什么东西”讲到“日常怎么维护”再讲到“出了问题怎么排查”最后附上我的初始化清单和踩坑心得。无论你是刚准备入行运维还是从开发转过来想了解服务器部署又或者是用云服务器搭过服务但没深究过原理的人这篇内容都能帮你把知识框架补完整。文中聊的不会绑定某个特定发行版。你用的是 CentOS、Ubuntu、Debian 还是 openEuler、统信 UOS核心思路都相通命令稍有差异我会特意点出来。1. Linux 服务器的定位与运行模型很多新人第一个困惑是Linux 服务器和普通电脑上的 Windows 到底差在哪这个问题如果只从“界面不同”去理解后面学什么都别扭。我更喜欢从两个角度切入文件模型和权限模型。1.1 “一切皆文件”到底怎么理解Linux 最基础的设计哲学就是“一切皆文件”。这句话听着像口号但确实整个系统都建立在这个抽象之上。普通文件是文件目录是文件硬盘、U 盘是设备文件甚至正在运行的进程、内核里的参数、硬件信息都被映射成了文件。举个例子。你想看 CPU 信息不用装任何软件直接执行cat /proc/cpuinfo想看内存信息cat /proc/meminfo这些 /proc 下面的内容本质上是内核暴露出来的虚拟文件。这里的“文件”不是一个躺在硬盘上的实体文件而是内核提供的一个“接口”你读它得到的是系统实时数据。这就是为什么 Linux 运维里很多操作最后都能归结为“读写文件”。配置文件是文本日志是文本硬件信息也是文本。你用 ls 查看设备时会看到 /dev/sda、/dev/nvme0n1 这样的设备文件。往这些文件里写数据就是在往磁盘写数据从里面读数据就是在读磁盘。图形界面里的“磁盘”和“U 盘”在命令行底层其实就是这些设备文件。明白了这一点你再看管道符|和重定向就会觉得很自然——既然进程和文件都是文件那么把一个程序的输出“喂”给另一个程序的输入本质就是文件流之间的搬运。理解“一切皆文件”还有一个好处排查问题的时候你会习惯先去 /proc、/sys、/dev 这些地方找线索而不是瞎猜。比如网卡丢包你可以看 /proc/net/dev内核报错可以看 /proc/kmsg。系统对你来说是“透明”的这就是 Linux 服务器适合做后端的原因之一。1.2 内核态与用户态命令背后发生了什么光知道“一切皆文件”还不够你还得明白权限边界在哪里。Linux 把运行状态分成内核态和用户态。内核态是最高权限可以直接操作 CPU、内存、磁盘、网卡这些硬件资源用户态是普通程序运行的地方没有权限直接碰硬件。那普通程序怎么访问磁盘必须通过系统调用syscall。比如你用 cp 拷贝文件cp 本身是用户态进程它没办法自己控制磁盘读写于是向内核发起一个 write 系统调用内核去操作硬件把结果返回给 cp。这个“用户态到内核态”的切换是操作系统稳定性的关键。用户程序出bug崩溃最多就是自己的进程挂了不会把整个系统搞死如果每个程序都能直接写内核一台机器上有一个程序乱来整个服务器就等着重启吧。系统调用对小白来说可能比较抽象我经常用一个比喻。内核就像酒店的前台用户程序是住客。住客想打扫房间、订餐、借吹风机都不能自己跑去仓库拿而是给前台打电话由前台安排。这个“打电话”就是系统调用。好处是统一管理安全可控也方便记账。shell 命令、编程语言里的文件操作函数兜兜转转最后都会变成系统调用。你还会经常听说“systemd”这个词。它其实是 Linux 系统里的 1 号进程是所有用户态进程的老祖宗。系统启动时内核起完身后会把控制权交给 systemd由它拉起各种服务比如 sshd、nginx、mysqld。这也是 Linux 服务器开机后“能看到一个登录界面”和“看不到任何窗口”都能正常运行的原理。服务器上没有显示器不代表它没工作它所有的“界面”都体现在网络端口、配置文件、进程列表和日志里。2. 基础操作与日常维护原理讲完就该上手了。Linux 服务器的日常维护本质上就是“看状态、改配置、起服务、查日志”。下面我把最常用、最关键的内容按场景整理出来。2.1 目录结构记忆法别背靠理解Linux 的目录结构有一堆约定但真正要重点记的就几个。根目录 / 是整个文件系统的大树根/etc 放配置文件比如网卡配置、DNS 配置、服务配置/var/log 放日志/home 是普通用户的家目录/root 是管理员的家目录/tmp 是临时文件/usr 类似 Windows 的 Program Files装的大部分软件都在这里。最容易搞混的是 /bin、/sbin、/usr/bin 这些。现在很多发行版把它们都软链接到了 /usr/bin你没必要死记。关键要知道 /sbin 或 /usr/sbin 里面的命令通常是管理员才能用的比如 iptables、fdisk。普通用户的 PATH 里默认不包含这些目录所以刚用 sudo 的时候会碰到明明安装了命令却提示找不到的情况先排查一下 PATH 是正经事。还有一个经常被忽略的目录是 /run。很多服务运行时生成的套接字文件、进程 ID 文件pid 文件都在这里。比如 nginx 的 pid 文件可能是 /run/nginx.pid如果你手动杀掉了 nginx 进程但 pid 文件还在启动时可能报错“Address already in use”或者“pid file exists”。这时候删掉 /run 下面对应的 pid 文件再启动即可。目录结构这块还涉及“挂载”的概念。Linux 里不像 Windows 那样用盘符而是把一块硬盘“挂”到某个目录上。比如 /dev/sdb1 这块分区你把它挂载到 /data 目录之后往 /data 里写文件就是写到这块盘里了。查看目前挂载情况用 df -h 或者 findmnt。理解挂载后面理解磁盘扩容和 LVM 会轻松一点。2.2 必须掌握的常用命令清单命令是工具不是目的。我推荐按“场景”记命令而不是按字母表背“大全”。以下这几个场景是日常使用频率最高的# 文件与目录操作 ls -lhtr # 按时间倒序/正序排注意 -r 可以反转 cd /var/log pwd # 切换目录并确认当前位置 cp -a src dst # 保留属性拷贝 mv old new # 移动或重命名 rm -rf /path # 删除目录慎用见下文踩坑 find /etc -name *.conf # 按名查找文件 grep -rn keyword /etc # 按内容递归查找# 查看系统状态 top 或 htop # 看进程、CPU、内存 ps -ef | grep nginx # 看某个进程是否存在 free -h # 看内存和 swap df -h # 看磁盘剩余空间 du -sh /var/log/* # 看某个目录占用多大 ss -lntp # 查看监听端口和对应进程 uptime # 看负载和运行时长 dmesg | tail # 看内核环形缓冲区最近的日志# 网络排查 ip addr # 查看网卡 IP ip route # 查看路由表 ping -c 4 8.8.8.8 # 测试三层连通性 telnet 10.0.0.1 22 # 测试端口连通性没有就装 telnet 或 nc curl -v http://127.0.0.1 # 测试本地 HTTP 服务 traceroute host # 查看路径经过的路由节点# 服务管理systemd 系列 systemctl status nginx # 查看服务状态 systemctl start|stop|restart nginx systemctl enable --now nginx # 设置开机自启并立刻启动 systemctl daemon-reload # 改了 unit 文件后重载 journalctl -u nginx -f # 跟踪服务日志上面这些命令基本可以应对 80% 的日常操作。我的建议是不要贪多先把这些用熟等遇到具体需求时再查对应工具。比如要排查磁盘 IO 再用 iostat要看网卡流量再用 nload这些属于“用到再学”型命令。2.3 用户与权限管理员的必修课Linux 是典型的多用户系统。服务器的每个服务、每个运维人员都应该用独立的账号而不是全拿 root 裸奔。新建用户的命令并不复杂useradd -m -s /bin/bash zhangsan # 创建用户并创建家目录指定 shell passwd zhangsan # 设置密码 usermod -aG wheel zhangsan # CentOS/RHEL 将用户加入 wheel 组 # Ubuntu 下是 usermod -aG sudo zhangsan为什么强调用独立用户因为权限模型一旦被破坏系统隔离就形同虚设。文件权限分三段属主u、属组g、其他o每段有读 r4、写 w2、执行 x1。比如 644 表示属主可读写、属组和其他人只读。755 表示属主可读写执行其他人可读可执行。改权限用 chmod改属主用 chown。新手最容易犯的错就是图省事执行chmod -R 777 /某个目录。这样做虽然临时解决了权限导致的报错但等于把目录完全敞开任何用户都能改动。如果这个目录里是网站代码那任何能登录服务器的用户都能改你的网页如果里面有敏感配置那就更危险。正规做法是明确这个目录归哪个用户管、哪个组管然后给最小必要权限。举个例子nginx 运行用户是 nginx网站代码目录让 nginx 用户可读就够了写操作只针对 upload 目录单独放开。还有两个特殊权限值得知道setuid4和 setgid2。最经典的例子是 /usr/bin/passwd。普通用户改密码时需要写 /etc/shadow 这个只有 root 才能写的文件。passwd 命令加了 setuid 位使得普通用户执行它时能临时以 root 身份运行。查看方法ls -l /usr/bin/passwd # -rwsr-xr-x 1 root root ...那个 s 就是 setuid 标志。这种权限非常敏感线上环境如果发现某些二进制文件被加了奇怪的 setuid 位通常意味着被入侵要重点排查。3. 网络与服务服务器对外提供能力的核心服务器和普通电脑最大的区别在于它要持续对外提供服务。网络配置、SSH 远程管理、时间同步、DNS 解析这些看似基础的东西恰恰是线上故障高发区。3.1 网络配置与连通性排查从本机到公网新装好的 Linux 服务器通常没有图形界面网络配置全靠改文件或命令行。不同发行版的配置文件路径不一样CentOS/RHEL 用 /etc/sysconfig/network-scripts/ifcfg-eth0当然新版本 NetworkManager 会用 /etc/NetworkManager/system-connections/Ubuntu 用 netplan 的 YAML 文件/etc/netplan/*.yaml。不管格式怎么变核心就是三件套IP 地址、子网掩码、网关。配完 IP 后先检查一下有没有生效ip addr show ping -c 3 网关IP如果有 IP 但网关不通多半是子网掩码选错了或者物理链路的问题。如果本机网关通、但外网不通接着用nslookup或dig看 DNS 能不能解析域名。如果解析不了查 /etc/resolv.confcat /etc/resolv.conf # nameserver 8.8.8.8这里提一个常见坑很多系统装好后 /etc/resolv.conf 是空文件或者被 systemd-resolved 接管直接编辑它重启后又被覆盖。解决办法要么是修改 NetworkManager 或 netplan 里的 DNS 配置要么是使用resolvectl命令来管理。按“从底向上”的排查思路通不通先 ping IP再 ping 域名再 telnet 端口。很多同事一上来就 curl 一个地址失败后就懵了。其实你只要分层测很快能定位到是网卡、路由、DNS 还是防火墙的问题。比如域名不通但 IP 通那就是 DNSIP 通但端口连不上那就要考虑服务器防火墙、云安全组、服务是否监听正确地址。3.2 SSH 远程管理与安全加固远程服务器的命脉没有显示器怎么管理服务器答案是 SSHSecure Shell。SSH 是 Linux 服务器远程管理的默认方式它用加密隧道保证传输安全。默认端口是 22默认登录方式是用密码。线上环境我强烈建议改成密钥登录并禁止 root 直接登录。流程很简单# 在本地生成密钥对如果没有 ssh-keygen -t ed25519 # 把公钥放到服务器上第一次需要密码 ssh-copy-id -i ~/.ssh/id_ed25519.pub userserver_ip然后编辑服务器的 /etc/ssh/sshd_configPermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes改完执行systemctl reload sshd。注意千万别写错配置把自己锁在门外建议先保持一个已登录的会话不要断开测试新会话能登录后再退出旧会话。数字签名、密钥对的工作原理可以用一个简单的类比私钥是你的钥匙公钥是锁芯。你把锁芯放到服务器上自己留着钥匙。登录时服务器验证你确实持有对应的钥匙但整个过程私钥不出本地。VSCode 连接 SSH 远程服务器、JetBrains 家 IDE 的 Remote Development 都是基于同样的 SSH 协议。配置好密钥后直接在 VSCode 的 Remote-SSH 插件里填userserver_ip就能连上。如果连不上先确认 sshd 是否运行、22 端口是否监听、云安全组是否放行。顺带提醒不要为了省事把 SSH 端口改成一个特别生僻的高位端口就算安全了安全的核心还是密钥认证和禁用密码登录。还有个容易困惑的场景浏览器访问时提示“此连接已被阻止因为它是公共页面发起的旨在连接到您本地网络上的设备或服务器”。这其实是浏览器出于安全策略阻止公网网页去访问你内网地址比如 http://192.168.1.1/xxx。这是浏览器为了防范 CSRF 攻击。如果你确实要访问本地设备的管理页面一般需要在该设备的域名/IP 上做白名单或者用本地调试工具。这和服务器本身没太大关系但经常有人问。3.3 时间同步与 DNS 解析两个容易“小问题大事故”的环节服务器时间不准最直接的后果是日志时间对不上排查问题时你连哪个事件在先都分不清。更严重的HTTPS 证书校验失败、分布式系统节点间数据不一致、定时任务乱触发都是时间不同步的锅。Linux 下主流的时间同步方案是 chrony老系统用 ntpd。# 安装 chronyDebian/Ubuntu apt install chrony -y # CentOS/RHEL yum install chrony -y systemctl enable --now chronyd chronyc sources -v # 查看同步源状态 timedatectl # 查看系统时间和时区 timedatectl set-timezone Asia/Shanghai # 设置时区同步源时间服务器地址可以用公共 NTP 池也可以自己搭建内网时间服务器给集群统一对时。内网时间服务器就是一台跑着 chronyd 的机器配置里允许网段访问其他机器把它的 IP 写进 chrony.conf 即可。这个对需要严格时间一致性的数据库集群特别重要。DNS 这边除了前面提到的 resolv.conf还有一个经典问题是刚改了网站解析但服务器上 curl 还是旧 IP。这是因为本地有 DNS 缓存。可以用nscd或systemd-resolved的缓存清理命令。注意如果服务器的 /etc/nsswitch.conf 里 hosts 那行把 files 放在 dns 前面那 /etc/hosts 文件里的条目会优先于 DNS 解析。这个文件常用于内网主机名映射改错了也会导致“莫名其妙的连不上”。4. 存储、内核与虚拟化服务器的底盘技术单台服务器再强资源也有限。存储怎么扩容、数据怎么冗余、多台服务器怎么协同这些是深入 Linux 服务器必须理解的问题。4.1 磁盘分区、文件系统与 LVM从裸盘到可用空间拿到一块新数据盘操作顺序是分区或直接整盘、创建文件系统、挂载。查看磁盘设备用lsblk或fdisk -l。如果你用 fdisk 给磁盘分了区比如 /dev/sdb1然后在上面格式化mkfs.xfs /dev/sdb1 # CentOS 默认 xfs mkfs.ext4 /dev/sdb1 # Ubuntu 传统上常用 ext4然后挂载到 /datamkdir /data mount /dev/sdb1 /data echo /dev/sdb1 /data xfs defaults 0 2 /etc/fstab不要忽略最后一步写进 fstab不然重启后就掉挂载。fstab 里每一列分别表示设备、挂载点、文件系统类型、挂载参数、dump 标志、fsck 顺序。这个文件写错可能会导致系统起不来所以改完最好用mount -a做一次预验证。LVM逻辑卷管理是解决分区扩容问题的原子化方案。它的核心是把多块物理硬盘Physical Volume, PV合并成一个卷组Volume Group, VG然后从 VG 里划出逻辑卷Logical Volume, LV。挂载、格式化都在 LV 上。好处是扩容不需要重新分区比如 VG 里还有剩余空间执行lvextend -l 100%FREE /dev/mapper/vg_data-lv_data xfs_growfs /data # xfs 在线扩容 # ext4 用 resize2fs /dev/mapper/vg_data-lv_data就完成在线扩容。这背后是内核的设备映射Device Mapper机制LVM 在逻辑层做了一层虚拟化。理解这个思路对后面看虚拟化技术会有帮助——都是“在底层磁盘和上层文件之间加一层抽象”。4.2 磁盘阵列RAID选型思路服务器磁盘阵列RAID不是 Linux 特有的概念但运维要会选型和维护。简单说RAID 就是把多块盘组合成一个逻辑盘实现冗余和性能提升。最常见的几种RAID 级别最少磁盘数冗余能力空间利用率典型场景RAID02无100%性能优先可容忍数据丢失RAID12镜像坏一块可用50%系统盘RAID53只允许坏一块(n-1)/n常规数据盘RAID104每组镜像每组各坏一块仍可用50%数据库高性能场景生产环境我最推荐 RAID10它兼顾了性能和冗余代价是空间利用率低。很多廉价主机商给的是 RAID5但 RAID5 在磁盘重建时遇到第二块盘故障的概率并不小数据库这类随机写入重的业务要慎重。软件 RAIDmdadm在 Linux 里也能做性能和兼容性足够用于测试环境生产环境的物理机建议用 RAID 卡做硬 RAID细节更多包括缓存策略、写策略配置。但这块要根据具体硬件来原理上记住“冗余不等于备份”就够了——误删除、勒索病毒、机房火灾RAID 都救不了你备份是另一套体系。4.3 服务器虚拟化一台变多台的底层逻辑服务器虚拟化技术的本质是用软件模拟出一台或多台“虚拟服务器”让它们共享底层物理资源。常见的实现有两类一类是基于 Hypervisor 的硬件虚拟化比如 KVMKernel-based Virtual Machine它直接利用 CPU 的虚拟化指令在 Linux 内核里运行虚拟机。另一类是容器虚拟化比如 Docker、Podman它共享宿主机内核隔离的是进程、文件系统和网络空间不仿真硬件。为什么需要虚拟化因为物理机的资源利用率往往很低。一台 32 核 64G 的机器只跑一个 Nginx大部分资源都闲置。虚拟化之后可以在这台机器上开 10 个虚拟机分别跑不同服务互相隔离互不影响。虚拟机内部看到的是完整的硬件自己的 CPU、内存、磁盘、网卡甚至自己的内核。容器则轻量很多启动只需毫秒级因为它不需要再启动一个操作系统直接用宿主机的操作系统来跑应用。选型时怎么判断如果业务需要兼容旧软件、需要不同内核版本、需要强隔离就选 KVM 这样的虚拟机如果都是自己的应用希望部署快、密度高、CI/CD 友好容器更合适。现在很多云服务器本身就是运行在 KVM 虚拟化之上的“云主机”这也解释了为什么你在云服务器里看到的驱动经常是 virtio。虚拟化之上再叠加负载均衡和集群管理就是云服务器、服务器集群的雏形。集群的底层思想也不复杂多台机器干同一个活前面加一层调度器比如 Nginx、LVS、SLB用户访问的是集群入口后端的某一台挂了流量自动切换到其他机器。5. 性能分析与故障排查实战运维的核心能力不是“会敲命令”而是“能快速定位问题”。下面我用最常见的三类故障演示排查思路。5.1 CPU、内存、I/O三大件的判断方法线上系统变慢第一反应是看top或htop。top 第一行的 load average 是 1 分钟、5 分钟、15 分钟的平均负载。这个值具体多高算高要看 CPU 核数。单核机器负载 2 就是明显过载16 核机器负载 2 说明很闲。你可以想象负载是“等待中任务运行中任务”的平均数超过核数就意味着有排队。内存用free -h看。注意 available 是真正可用的内存它包含了缓存和 buffer。别一看 used 高就以为内存不够。内存不够的典型信号是 swap 被大量使用因为 swap 是磁盘上的交换分区速度远低于内存。用top里按 P 排序看 CPU按 M 排序看内存。如果某个 Java 进程内存居高不下用 jmap、jstat 这些工具分析堆内/堆外内存。用vmstat可以看 CPU 的 us、sy、wa 等状态。wa 高说明 I/O 等得太久常见就是磁盘慢或者存储链路有问题。I/O 排查用iostat -x 1。关注 %util 和 await。%util 接近 100% 说明磁盘已经忙不过来。如果是云服务器还要看是不是云盘的性能上限被跑满了。定位到具体进程可以用iotop。这里有个经验数据库慢查询往往不是 SQL 本身的问题而是磁盘 I/O 达到瓶颈导致所有 SQL 都在排队。遇到这种情况先看 iostat再慢 SQL 优化。5.2 日志与服务排错从报错到定位服务和服务的“信息出口”一是端口二是日志。很多人看到服务起不来就慌其实按流程走很简单。以常见的统信 UOS 或 Ubuntu 上打印机服务CUPS报错“cups 服务器未运行”为例。先看服务状态systemctl status cups journalctl -u cups -n 50 --no-pagerjournalctl 是 systemd 的日志工具-u 指定服务单元-n 指定行数。如果 CUPS 服务起不来日志里通常会写端口被占用、权限不对、配置文件语法错误。看到日志报的具体行问题就解决一半了。通用排错流程我给新人的建议是四步systemctl status 服务确认运行状态。journalctl -u 服务 -f跟踪日志或者看 /var/log/ 下对应的日志文件。看监听端口ss -lntp | grep 端口确认服务是否真的在监听。如果端口没监听回到日志如果端口在监听但外部连不上查防火墙和安全组。内核层面的问题看dmesg -T比如内存相关的 OOM、磁盘 I/O error、网卡丢包都会在这里体现。系统整体日志在 /var/log/messages 或 /var/log/syslog。很多故障不是一蹴而就而是反复出现的小错误积累出来的养成定期看日志的习惯很重要。Linux 下的杀毒软件比如 ClamAV、阿里巴巴的云安全插件也都是通过监控文件、进程行为来发现异常本质上还是在读文件系统事件和系统日志。5.3 新手高频故障速查表我根据平时带人和网上提问的常见情况整理了一份“速查表”。表格里都是特别经典的问题如果你遇到先按这个方向查大概率能省不少时间现象大概率原因排查方向解压文件乱码文件名编码不是 UTF-8用unzip -O gbk或在unzip -O cp936后转换tar可用convmv批量转码端口启动失败Address already in use端口被旧进程占用ss -lntp磁盘满了但文件不见有已删除文件被进程占用lsof L1找出被删除但未释放的文件句柄SSH 连接慢DNS 反查或 GSSAPI 认证开启sshd_config 里关掉UseDNS no和GSSAPIAuthentication no外网访问不了本地服务云安全组/防火墙/服务监听地址不对确认ss -lntp显示0.0.0.0:端口再查安全组新建用户后 sudo 提示不在 sudoers 中用户没有加入特权组用 root 执行usermod -aG wheel 用户名Ubuntu 是 sudo 组服务器时间一变报警就来了NTP 未配置或时区错timedatectl、chronyc sources确认同步源系统启动进入紧急模式/etc/fstab 写错挂载用维护模式修正 fstab注释掉错误的行再重启这个表不是标准答案但它代表了一种“先定位再行动”的思路。很多人遇到问题第一反应是重启重启确实能解决一部分问题但如果不找到根因同一个坑大概率还会再踩。6. 从入门到生产我的初始化清单与经验最后这部分算是我自己长期实践出来的“私货”。很多教程教你怎么用命令但不会告诉你一台新服务器拿到手之后应该按什么顺序做基础设置。我提供一个初始化清单你可以根据公司规范调整。6.1 新服务器落地八件事第一更新软件源和系统包CentOS 系yum updateDebian/Ubuntu 系apt update apt upgrade。注意生产环境不要无脑升级内核和关键软件至少要在测试环境验证过。第二设置主机名和时区。方便日志归类也避免分布式环境里“我是谁”的混乱。hostnamectl set-hostname app-node01然后timedatectl set-timezone Asia/Shanghai。第三创建普通管理员账号配置 SSH 密钥登录并PermitRootLogin no。这一步前面讲过属于安全基线。第四配置防火墙。用 firewalld、ufw 或 iptables 都行核心是先放行 SSH再放行业务端口测试阶段可以先从最小规则开始。云服务器记得安全组和镜像防火墙两层都要看。第五关闭不需要的服务。新装的系统默认会开启一些非必需服务比如打印服务、蓝牙服务。用systemctl list-unit-files --typeservice检查把不需要的 disable 掉既能减少攻击面也省内存。第六配置 NTP 同步。特别是多台机器组成的集群时间不同步会出现很多诡异问题前面已经细说了。第七设置资源监控。最简单的做法是安装 netdata、node_exporter Prometheus或者至少用 cron 定时记录top和df快照。没有监控线上出问题就像闭着眼开车。第八做好备份策略。哪怕是最简单的 tar 打包 异地拷贝也比裸奔强。至少把 /etc 和关键数据目录做定时备份。如果业务允许备份多用“冷备热备”双保险。6.2 从事故里换来的几条经验第一别手快执行rm -rf带可疑路径。有人说运维最怕两件事rm 跑得快awk 用不对。我见过同事把rm -rf /var/log/nginx/*敲成rm -rf /var/log/nginx/ *多了一个空格直接删了整个 /var 下所有文件。这种教训一次都嫌多。建议高危命令写全路径并且用find先 ls 出来确认再删。第二别随意chmod -R 777。权限问题要查“运行用户是谁”“目录属主是谁”权限给到最小够用就行。很多安全漏洞就是这么被放大出来的。第三改配置之前先备份改完用语法检查。比如 nginx 改完nginx -tsshd 改完sshd -tsystemd 改完systemctl daemon-reload。这些检查都是秒级的但能让你避免因为一个符号错误把整个服务拉垮。第四处理线上问题要先看监控和日志不要猜。很多新手一上来就重启服务结果问题复现了才知道没抓现场。正确姿势是先保留现场抓日志、抓进程栈、抓网络状态再考虑操作。第五内核参数不要乱调。很多人看了一篇文章就改 vm.swappiness、net.core.somaxconn结果适得其反。生产环境内核参数的调整一定要在测试环境压测验证不然你调的可能是“负优化”。最后再分享一个我坚持了很多年的小习惯每次解决掉一个疑难故障我都会把排查过程、根因、解决步骤写进自己的知识库用 Markdown 按日期归档。这东西积累久了就是个人的“排障手册”。Linux 服务器基础的东西就那么多难的是把零碎的知识连接成一张网。希望这篇文章能帮你在自己的知识网里补上几根关键的线后面遇到问题时知道从哪里切入怎么一步步拆解。
返回列表