欢迎来到 金小颖论坛!
所有类别-
Linux 内核参数优化实用指南 导语:Linux 内核参数优化不是“复制一份万能配置”就能解决的问题。更稳妥的做法是先理解参数作用,再结合业务负载、硬件资源和监控结果逐步调整。🔧 一、先搞清楚:内核参数优化到底改什么 Linux 常见的运行时内核参数主要通过 sysctl 管理,背后对应的是 /proc/sys/ 虚拟文件系统。官方文档说明,sysctl 可在系统运行时配置部分内核行为,参数按 kernel、net、vm、fs 等目录分类,分别影响全局内核、网络、内存和文件系统等子系统,参考 Linux Kernel sysctl 文档。 日常运维中,临时修改可以用 sysctl -w 参数=值,重启后失效;持久化配置通常放在 /etc/sysctl.d/*.conf 或 /etc/sysctl.conf 中,再通过 sysctl --system 或 sysctl -p 加载。sysctl 手册也明确说明,它可读取、写入 /proc/sys 下的参数,并支持从配置文件加载,参考 sysctl(8) 手册。 二、优化前的三条原则 🚦 先观测,后修改:不要看到“高并发推荐配置”就直接套用。建议先记录 CPU、内存、磁盘 I/O、网络连接数、失败连接、队列积压等指标。 小步调整:一次只改少量参数,保留变更时间、旧值、新值和回滚方式,方便定位问题。 按场景优化:Web 网关、数据库、缓存、容器宿主机的瓶颈不同,同一个参数在不同场景下可能效果完全不同。 三、内存相关参数:别让 swap 和脏页拖慢响应 vm.swappiness 用于影响内核使用 swap 的积极程度。Linux 内核文档将 vm 目录描述为虚拟内存子系统和脏数据回写相关参数的集合,其中包括 swappiness、dirty_ratio、dirty_background_ratio 等参数,参考 来源链接 官方文档。 对于延迟敏感的数据库、搜索服务、缓存服务,通常不希望频繁 swap;但如果内存紧张,完全避免 swap 也可能引发 OOM。实践中可以先查看当前值:sysctl vm.swappiness临时调整示例:sysctl -w vm.swappiness=10持久化示例:vm.swappiness = 10 vm.dirty_ratio 和 vm.dirty_background_ratio 影响脏页写回节奏。写入密集型服务如果脏页积累过多,可能在集中回写时出现 I/O 抖动;如果设置过低,又可能让写入过早受限。更稳妥的方式是结合磁盘类型、文件系统、业务写入峰值和 iostat 结果逐步压测。 四、网络相关参数:高并发服务重点关注队列和连接 网络参数主要集中在 /proc/sys/net/ipv4/ 和 /proc/sys/net/core/。Linux IP sysctl 文档列出了 ip_forward、ip_local_port_range、tcp 相关参数等内容,说明这些参数会影响 IPv4 转发、端口范围、TCP 行为等,参考 IP Sysctl 官方文档。 net.core.somaxconn 常用于提高监听 socket 的连接队列上限,但它并不是单独生效的“神奇开关”。应用自身的 listen backlog、反向代理配置、负载均衡、SYN 队列、进程处理能力都可能成为瓶颈。Web 服务出现连接排队、握手失败或高峰期 502 时,可以把它纳入排查范围。 net.ipv4.ip_local_port_range 影响本机发起连接时可使用的临时端口范围。对于代理、爬虫、网关、服务网格 Sidecar 等大量主动连接场景,如果端口耗尽,可能出现连接失败。调整前应同时关注 TIME_WAIT、连接复用、上游连接池和 NAT 设备限制。 五、文件系统参数:打开文件数不是只改一个地方 高并发服务经常遇到 “too many open files”。这时很多人会想到 fs.file-max,但完整排查还要看进程级 ulimit、systemd service 的 LimitNOFILE、应用运行用户限制,以及程序是否存在文件描述符泄漏。内核的 fs 分类属于 sysctl 文件系统相关调优项,参考 /proc/sys 分类说明。 建议先查看:sysctl fs.file-maxulimit -ncat /proc/进程ID/limits如果是 systemd 管理的服务,还要检查服务单元中的 LimitNOFILE。只提高系统全局上限,而不调整进程限制,通常无法解决应用侧报错。 六、安全相关参数:优化不能牺牲边界 🛡️ 有些内核参数既影响性能,也影响安全。例如 net.ipv4.ip_forward 控制 IPv4 转发,官方文档说明其默认值为禁用,启用后主机会在接口之间转发数据包,参考 IP 转发说明。普通服务器若不是路由器、VPN 网关或容器网络节点,不应随意开启。 另一个常见方向是限制不必要的内核信息暴露,例如 dmesg、perf、kptr 等相关参数。但这类配置可能影响排障工具和性能分析工具的可用性,建议在安全基线、审计要求和运维便利之间做平衡,并在测试环境验证。 七、推荐的落地流程 建立基线:记录当前 sysctl -a 输出、内核版本、发行版版本和业务指标。 定位瓶颈:确认问题是 CPU、内存、网络、磁盘还是应用层导致。 灰度变更:优先在测试环境或单台节点验证,观察至少一个业务周期。 写入配置:将稳定参数放入 /etc/sysctl.d/99-custom.conf,避免散落在脚本里。 保留回滚:记录默认值和恢复命令,必要时快速回退。 参考配置不是答案,监控数据才是答案。内核参数优化的目标不是“看起来很专业”,而是让系统在真实负载下更稳定、更可预测。 总结 Linux 内核参数优化的核心,是用 sysctl 对内存、网络、文件系统和安全相关行为进行可控调整。真正实用的优化不是照搬参数清单,而是围绕业务瓶颈建立观测、测试、灰度和回滚流程。建议把每一次调整都当作一次小型变更管理:明确目的、记录证据、验证效果。这样既能提升性能,也能避免因为盲目调优带来新的稳定性风险。🚀 社区文章 1
-
Linux 环境变量配置从入门到实用指南 导语:在 Linux 里,环境变量就像一张“运行时说明书”📌,告诉 Shell、脚本、编译工具和服务程序去哪里找命令、用什么语言环境、读取哪个配置目录。很多“命令找不到”“脚本在终端能跑,放到服务里就失败”的问题,背后都和环境变量有关。本文从入门概念讲到日常配置方法,帮助你把环境变量用得更稳、更清晰。 一、环境变量是什么? 环境变量本质上是一组“名称=值”的字符串,会传递给进程使用。Linux manual page 对 environ 的说明是:环境由字符串数组组成,常见形式为 name=value,子进程通常会继承父进程环境的副本,可参考 environ(7) 手册。 常见变量包括 PATH、HOME、USER、LANG、SHELL、PWD 等。例如 PATH 决定系统查找可执行命令的目录顺序;HOME 表示当前用户主目录;LANG 影响语言和字符编码;EDITOR 或 VISUAL 可指定默认编辑器。理解这些变量,有助于判断程序到底“看到”的运行环境是什么。 二、临时配置:只对当前终端生效 最简单的方式是在当前 Shell 中直接赋值。例如设置一个变量:MY_APP_HOME=/opt/myapp。此时它只是普通 Shell 变量,不一定会传给子进程。若希望脚本或命令能读取到它,需要使用 export:export MY_APP_HOME=/opt/myapp。 也可以只让某个命令临时使用变量,例如:LANG=C sort file.txt。Bourne 风格 Shell 支持用 NAME=value command 的形式让变量只在该命令执行范围内生效,这类用法在 Linux environ 文档 中也有说明。 三、永久配置:写到合适的启动文件 如果希望每次打开终端都自动生效,通常会把 export 语句写入用户级配置文件。使用 Bash 时,交互式非登录 Shell 会读取 ~/.bashrc;登录 Shell 会先读 /etc/profile,再按顺序寻找 ~/.bash_profile、~/.bash_login、~/.profile 中第一个可读文件,具体读取规则可见 GNU Bash Startup Files。 一个实用建议是:与交互式命令行体验相关的内容,例如别名、提示符、常用工具 PATH,放到 ~/.bashrc;只希望登录时初始化一次的变量,可以放到 ~/.profile 或 ~/.bash_profile。修改后可执行 source ~/.bashrc 让配置立即在当前终端生效,无需重新登录。 四、PATH 配置:最常见也最容易踩坑 PATH 是环境变量里的高频角色。假设你安装了一个工具到 /opt/bin,希望直接输入命令名即可运行,可以写:export PATH="/opt/bin:$PATH"。把新目录放在前面,系统会优先从 /opt/bin 查找命令;放在后面,则优先使用系统已有命令。 配置 PATH 时要注意三点:第一,保留原来的 $PATH,避免基础命令失效;第二,目录之间用英文冒号分隔;第三,不要随意把当前目录“.”放进 PATH 前部,否则可能带来误执行风险。对于团队服务器,建议把公共工具路径写入受控脚本或统一配置文件,减少个人配置差异。 五、系统级配置和用户级配置怎么选? 用户级配置只影响当前用户,适合开发工具、个人脚本、语言版本管理器等场景。系统级配置影响范围更大,例如 /etc/profile 或 /etc/profile.d/ 下的脚本,适合给所有登录用户提供统一环境。环境变量也可能通过 /etc/environment 结合 PAM 登录流程加载,不同发行版和登录方式会有差异,可参考 environ(7) 中关于初始环境的说明。 实践中建议遵循“影响范围越小越好”的原则:个人使用优先写用户目录;项目使用优先写项目启动脚本;服务使用优先写服务配置;只有确实需要全局一致时,才改系统级配置。这样排查问题时边界更清楚,也不容易误伤其他用户或服务。 六、systemd 服务中的环境变量 很多人会遇到这种情况:命令在终端里执行正常,做成 systemd 服务后却找不到 JAVA_HOME、PATH 或代理变量。原因是 systemd 管理的服务并不等同于你的登录 Shell,它不会自动读取 ~/.bashrc。给服务配置变量时,应在 unit 文件或 drop-in 配置中使用 Environment 或 EnvironmentFile,systemd 官方也列出了其组件会识别的一些环境变量,可参考 systemd Environment 文档。 推荐做法是使用 systemctl edit your.service 创建覆盖配置,在 [Service] 区域加入 Environment="APP_ENV=prod" 或 EnvironmentFile=/etc/yourapp/env,然后执行 systemctl daemon-reload 和 systemctl restart your.service。对于密码、令牌等敏感信息,不建议直接暴露在可读的 unit 文件中,应结合权限严格的配置文件或更合适的密钥管理方案。 七、排查环境变量问题的常用命令 🔍 查看当前环境:env 或 printenv。 查看某个变量:echo $PATH、printenv LANG。 确认命令位置:which python 或 command -v python。 临时验证配置:source ~/.bashrc 后再执行 printenv 变量名。 排查服务环境:systemctl show -p Environment your.service。 如果出现“变量明明配置了却不生效”,优先检查三个问题:当前 Shell 是否读取了对应文件;变量是否使用 export 导出;程序是否由另一个父进程启动。特别是 cron、systemd、容器、远程非交互命令等场景,它们的环境往往比你打开的终端更精简。 八、实用配置习惯 变量名使用大写字母和下划线,例如 APP_HOME、JAVA_HOME。 路径值添加引号,例如 export APP_HOME="/opt/my app",避免空格导致解析异常。 修改 PATH 时保留原值,例如 export PATH="$HOME/bin:$PATH"。 不要把密钥长期写在共享配置文件中。 为项目准备 env.example,说明需要哪些变量,但不要提交真实密钥。 环境变量不是越多越好。好的配置应该范围明确、来源清楚、能被快速检查,并且不会让其他程序产生意外行为。 总结 Linux 环境变量看似只是几行 export,实际上连接着 Shell、脚本、服务和用户登录流程。入门时先掌握临时变量、export、PATH 和常见启动文件;进阶时再区分用户级、系统级、systemd 服务级配置。只要坚持最小影响范围、清晰命名、及时验证和谨慎处理敏感信息,就能让 Linux 环境配置既灵活又可靠 🚀。 社区文章 1
-
Linux 常见故障排查思路与实用解决方法 导语:Linux 故障排查最怕“凭感觉操作”,更可靠的方式是先缩小范围,再用日志、资源、网络、磁盘和服务状态逐层验证。下面整理一套适合日常服务器、开发机和运维值班场景的排查思路,尽量做到可执行、可复用、少走弯路。🔧 一、先判断故障类型:别急着重启 遇到系统卡顿、服务异常、磁盘写满、无法登录或网络不通时,第一步不是立刻重启,而是确认“影响范围”和“最近变化”。可以先问自己三个问题:是单个服务异常,还是整台机器异常?是刚发布、刚改配置后出现,还是突然发生?是所有用户受影响,还是部分用户受影响?这样能避免把简单问题扩大化。 看现象:页面打不开、SSH 连不上、接口超时、磁盘报警、CPU 飙高等,先记录具体报错。 看范围:只影响某个端口、某个进程,还是整机负载异常。 看时间:结合变更记录、定时任务、发布日志,定位问题开始的时间点。 二、日志是第一现场:先看系统,再看服务 现代 Linux 发行版常使用 systemd,journalctl 可用于查看 systemd journal 中的日志,并支持按服务、时间、优先级等条件过滤,适合排查服务启动失败、崩溃和权限问题 journalctl 手册。常用命令包括:journalctl -xe 查看近期错误上下文,journalctl -u nginx.service -b 查看本次启动后某服务日志,journalctl --since "10 min ago" 聚焦最近十分钟。 如果怀疑是硬件、驱动、文件系统或内核层面问题,可以查看 dmesg。它展示内核环形缓冲区信息,常用于排查磁盘 I/O 错误、网卡驱动异常、OOM 相关线索和设备识别失败。建议配合 dmesg -T、dmesg | grep -i error、dmesg | grep -i oom 使用,重点关注 error、fail、timeout、reset、denied 等关键词。🧩 三、系统变慢:从负载、CPU、内存查起 系统“卡”不一定等于 CPU 满,也可能是磁盘 I/O 等待、内存不足或进程堆积。可以先用 uptime 查看 load average。/proc/loadavg 的前三个字段分别表示 1、5、15 分钟平均负载,含义与 uptime 等工具显示的负载一致 proc_loadavg 手册。如果负载持续高于 CPU 核心数,需要继续分析忙在哪里。 CPU 排查:top 或 htop 查看占用最高的进程,ps aux --sort=-%cpu | head 快速列出高 CPU 进程。 内存排查:free -h 查看可用内存和 swap,ps aux --sort=-%mem | head 找出大内存进程。 I/O 排查:iostat、iotop、vmstat 可辅助判断是否存在磁盘等待;若没有安装工具,可先看 top 中 wa 指标。 进程排查:pidstat、strace、lsof 适合进一步定位进程是否卡在文件、网络或系统调用上。 四、服务启动失败:按“状态、配置、端口、权限”排查 服务异常时,建议按固定顺序检查:systemctl status 服务名 查看状态;journalctl -u 服务名 -xe 查看失败原因;再检查配置文件语法、端口占用、文件权限和依赖服务。很多服务起不来,并不是程序坏了,而是配置拼写错误、证书路径错误、端口被占用或运行用户没有目录读写权限。 端口问题可以用 ss -lntp 查看监听情况,用 ss -antp 观察连接状态。如果端口被占用,先确认占用进程是不是旧实例,不要直接 kill -9。更稳妥的做法是先查看进程启动参数、父进程和日志,再决定是停止旧服务、修改端口,还是修复服务管理脚本。 五、磁盘空间异常:不只看容量,也要看 inode df 用于报告文件系统空间使用情况,df -h 可以用更易读的单位展示空间,df -i 则用于查看 inode 使用情况 GNU df 文档。有时磁盘显示还有空间,但服务仍然无法写入,原因可能是 inode 被大量小文件耗尽。 查整体:df -h 查看哪个挂载点满了,df -i 查看 inode 是否耗尽。 查目录:du -sh /* 2>/dev/null 从根目录开始定位大目录,再逐层深入。 查日志:优先检查 /var/log、应用日志目录、容器日志目录和临时文件目录。 安全清理:不要直接删除未知文件,先确认是否正在被进程占用,可用 lsof | grep deleted 查找已删除但仍占空间的文件。 六、网络不通:分层验证更高效 网络故障建议从本机到远端逐层验证。先用 ip addr 确认网卡和地址,再用 ip route 检查默认路由,用 ping 测连通性,用 curl -v 或 nc -vz 测端口,用 dig 或 nslookup 验证 DNS。若只有域名不通而 IP 可通,重点查 DNS;若 IP 也不通,继续查路由、防火墙、安全组或上游网络。 防火墙和访问控制也很常见。iptables、nftables、firewalld、云厂商安全组、容器网络策略都可能影响连接。排查时不要只看 Linux 本机规则,还要确认负载均衡、反向代理、网关和目标服务监听地址。例如服务只监听 127.0.0.1,外部自然无法访问。 七、实用排查习惯:让问题可复盘 一次好的排障,不只是把服务恢复,还要留下能复盘的线索:时间、现象、命令输出、根因、修复动作和预防措施。 建议执行高风险操作前先备份配置,例如 cp nginx.conf nginx.conf.bak.$(date +%F-%H%M)。修改服务配置后,优先使用测试命令验证语法,再 reload 或 restart。对生产环境而言,重启不是万能解法,它可能暂时掩盖问题,也可能清空关键现场信息。 总结 Linux 常见故障排查可以概括为一句话:先定范围,再看日志,接着查资源、服务、磁盘和网络,最后复盘根因。熟练掌握 journalctl、dmesg、top、free、df、du、ss、ip、curl 等基础工具,配合清晰的排查顺序,就能把“系统异常”拆解成一个个可验证的小问题。排障不追求命令炫技,关键是稳、准、可回滚。✅ 社区文章 1
-
从零开始搭建 Linux Docker 容器环境 如果你第一次接触容器,Docker 最适合作为入门起点:它能把应用、依赖和运行方式打包到相对一致的环境里,减少“我电脑上能跑”的问题。本文以常见 Linux 服务器为背景,带你从零搭建一个可用、可维护的 Docker 容器环境 🐳。 一、先准备系统环境 开始之前,建议使用一台干净的 Linux 主机或虚拟机,并确保你拥有 sudo 权限。Docker 官方文档建议在安装前确认发行版、系统架构以及是否存在旧版或冲突包;以 Ubuntu 为例,Docker Engine 支持多个主流架构,并推荐通过官方软件源安装 Docker Ubuntu 安装文档。 确认系统版本:cat /etc/os-release 确认 CPU 架构:uname -m 更新软件索引:sudo apt update 安装基础工具:sudo apt install -y ca-certificates curl 如果你的机器曾经安装过 docker.io、docker-compose、containerd 或 runc,建议先卸载冲突包。需要注意的是,卸载软件包通常不会自动删除 /var/lib/docker/ 下已有的镜像、容器、卷和网络数据,是否清理应根据实际情况决定 官方说明。 二、安装 Docker Engine 生产或长期使用环境中,更推荐使用 Docker 官方仓库,而不是直接安装发行版仓库里的旧包。下面以 Ubuntu/Debian 系常见方式为例,核心思路是:添加 GPG 密钥、配置 Docker 软件源、安装 Docker Engine 与常用插件。 创建密钥目录:sudo install -m 0755 -d /etc/apt/keyrings 下载 Docker GPG 密钥:sudo curl -fsSL 来源链接 -o /etc/apt/keyrings/docker.asc 设置读取权限:sudo chmod a+r /etc/apt/keyrings/docker.asc 添加官方软件源并更新索引后,安装 docker-ce、docker-ce-cli、containerd.io、docker-buildx-plugin 和 docker-compose-plugin。 安装完成后,可以用 sudo docker version 查看客户端与服务端版本,用 sudo docker run hello-world 做一次基本验证。hello-world 镜像会被拉取并短暂运行,如果能正常输出提示,说明 Docker Engine、镜像拉取和容器启动流程已经打通 Docker 安装后步骤。 三、理解几个核心概念 很多新手会把镜像和容器混为一谈。简单说,镜像像“应用模板”,容器像“运行中的实例”。同一个镜像可以启动多个容器,而容器停止后不等于镜像消失。仓库则是存放镜像的地方,例如 Docker Hub 或企业内部镜像仓库。 镜像 Image:包含应用运行所需的文件、依赖和启动配置。 容器 Container:由镜像创建出来的运行环境,可以启动、停止、删除。 卷 Volume:用于持久化数据,避免容器删除后数据丢失。 网络 Network:用于容器之间、容器与宿主机之间通信。 四、配置非 root 用户运行 默认情况下,普通用户通常需要通过 sudo 执行 docker 命令。Docker 官方提供了把用户加入 docker 用户组的方式,但也明确提醒:docker 组会带来接近 root 级别的权限,因此只应授予可信用户 Docker Linux post-install 文档。 创建用户组:sudo groupadd docker 加入当前用户:sudo usermod -aG docker $USER 重新登录,或执行:newgrp docker 验证命令:docker run hello-world 如果你之前用 sudo 运行过 Docker,可能遇到 ~/.docker/config.json 权限问题。可以按官方建议调整 ~/.docker 目录归属,或者删除该目录让 Docker 自动重新生成配置 权限处理说明。 五、运行第一个实际容器 验证环境后,可以尝试启动一个 Nginx 容器: sudo docker run -d --name web-demo -p 8080:80 nginx 这条命令的含义是:后台运行容器,容器名叫 web-demo,把宿主机 8080 端口映射到容器 80 端口,并使用 nginx 镜像。随后在浏览器访问 来源链接 curl 来源链接 Nginx 默认页面。 查看运行中容器:docker ps 查看所有容器:docker ps -a 查看日志:docker logs web-demo 停止容器:docker stop web-demo 删除容器:docker rm web-demo 删除镜像:docker rmi nginx 六、用 Compose 管理多容器应用 当项目包含 Web、数据库、缓存等多个服务时,逐条 docker run 会变得难维护。Docker Compose 插件可以用一个 compose.yaml 文件描述服务、端口、环境变量、卷和网络。官方安装包中通常包含 docker-compose-plugin,安装后可使用 docker compose version 检查 Docker Engine 安装说明。 举个思路:你可以把 Web 服务、MySQL 服务和 Redis 服务写进同一个 compose.yaml,然后使用 docker compose up -d 一键启动,使用 docker compose down 停止并清理相关容器网络。这样部署测试环境会更清晰,也方便团队共享配置。 七、常见问题与实用建议 端口无法访问:检查容器是否运行、端口映射是否正确、防火墙和云服务器安全组是否放行。 镜像下载慢:优先确认网络和 DNS,再考虑配置可信的镜像加速源。 数据突然没了:数据库、上传文件等重要数据不要只放容器内部,应使用 volume 或绑定宿主机目录。 权限过大:不要随意把所有用户加入 docker 组,服务器上应遵循最小权限原则。 磁盘占满:定期查看 docker system df,谨慎使用 docker system prune 清理无用资源。 小提示 💡:容器不是虚拟机,也不是安全边界的万能替代品。对外暴露端口、挂载宿主机目录、使用特权模式时,都应该额外谨慎。 八、总结 从零搭建 Linux Docker 容器环境,可以按“准备系统、安装 Engine、验证运行、配置用户、理解镜像容器、使用 Compose、做好安全和数据管理”的路线推进。只要掌握这些基础,你就能在本地测试、服务器部署和团队协作中更稳定地使用 Docker。后续进阶方向可以继续学习 Dockerfile 编写、私有镜像仓库、CI/CD 集成以及容器日志监控,让容器环境真正服务于日常开发与运维 🚀。 社区文章 1
-
Linux 网络配置与故障排查实用指南 导语:Linux 网络问题看似复杂,其实大多可以沿着“链路、地址、路由、DNS、端口、服务”这条线索逐层排查。本文整理一套适合服务器、虚拟机和日常运维场景的实用方法,尽量少讲概念,多给可落地的命令与判断思路 🛠️。 一、先确认网络由谁管理 在不同发行版中,网络可能由 NetworkManager、systemd-networkd、传统 ifcfg 脚本或云平台初始化工具管理。排障前先看管理者,避免手动改了配置却被后台服务覆盖。常见做法是执行 systemctl status NetworkManager、networkctl status 或查看 /etc/netplan/、/etc/sysconfig/network-scripts/ 等目录。NetworkManager 官方说明中,nmcli 可用于创建、显示、编辑、启用和停用网络连接,也能查看设备状态,适合无图形界面的服务器使用 [1]。 二、查看网卡状态与 IP 地址 第一步建议使用 ip link 看网卡是否存在、是否 UP;再用 ip addr 查看是否拿到 IPv4 或 IPv6 地址。ip 命令本身用于显示或操作路由、网络设备、接口和隧道,是现代 Linux 网络管理的核心工具之一 [2]。如果网卡是 DOWN,可尝试 ip link set eth0 up;如果地址缺失,则要继续判断是 DHCP 未获取、静态配置错误,还是网卡名称写错。 查看简洁状态:ip -br addr,适合快速扫描多块网卡。 查看链路统计:ip -s link,重点关注 RX/TX 错误、丢包和 dropped。 临时加地址:ip addr add 192.168.1.10/24 dev eth0,注意重启后通常不会保留。 三、配置静态地址与网关 如果使用 NetworkManager,可用 nmcli con show 找到连接名,再通过 nmcli con mod 连接名 ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.method manual 设置静态地址,最后执行 nmcli con up 连接名 生效。对于 Ubuntu 常见的 Netplan,通常编辑 YAML 文件后执行 netplan apply;对于使用 systemd-networkd 的环境,则常见配置位于 /etc/systemd/network/。实际操作前建议备份原文件,因为远程服务器一旦网关写错,SSH 可能立即中断 😅。 四、路由排查:能不能走出去 地址正常不代表能访问外网,下一步看路由。执行 ip route 检查是否存在 default 路由,例如 default via 192.168.1.1 dev eth0。如果没有默认路由,访问跨网段地址会失败;如果有多条默认路由,要注意 metric 优先级。ip route 专门用于管理内核路由表,可执行 show、add、del、change 等操作 [3]。 先 ping 网关:ping 192.168.1.1,失败多半是本地链路、地址段或交换网络问题。 再 ping 公网 IP:ping 1.1.1.1,成功说明路由大概率可用。 最后测域名:ping example.com,公网 IP 成功但域名失败,通常是 DNS 问题。 五、DNS 问题不要只看 /etc/resolv.conf 许多系统的 /etc/resolv.conf 不是手工维护文件,而是由 NetworkManager 或 systemd-resolved 动态生成。使用 systemd-resolved 的系统可以执行 resolvectl status 查看当前 DNS 服务器、搜索域和每个链路的解析配置;resolvectl 可用于解析域名、IPv4/IPv6 地址、DNS 记录,并检查或重新配置解析器 [4]。如果只修改 /etc/resolv.conf 后又被覆盖,应回到网络管理工具里配置 DNS。 测试解析:resolvectl query example.com。 查看 DNS 状态:resolvectl status。 临时指定 DNS:可用对应网络管理工具设置,避免直接硬改动态文件。 六、端口、监听与防火墙 当网络可达但业务不可用时,要把注意力放到端口和服务。先在服务器本机执行 ss -lntup,确认服务是否监听在正确的 IP 和端口上;监听在 127.0.0.1 只允许本机访问,监听在 0.0.0.0 或指定内网 IP 才可能被远端访问。随后检查 firewalld、iptables、nftables 或云安全组。很多“端口不通”并不是应用挂了,而是应用监听地址、防火墙规则、容器端口映射或云平台入站规则不一致。 七、抓包是最后的证据 当 ping、路由、DNS、端口都看起来正常,但问题仍然存在时,可以使用 tcpdump 抓包确认数据有没有到达。例如 tcpdump -i eth0 host 192.168.1.20 可观察指定主机通信,tcpdump -i eth0 port 443 可关注 HTTPS 流量。抓包时不要只看“有没有包”,还要看方向:请求到达但没有响应,重点查本机服务或防火墙;请求根本没到达,重点查上游路由、交换机、云安全组或客户端路径。 实用建议:远程改网络配置前,最好开一个持久会话,例如 tmux,并准备回滚命令;如果是云服务器,先确认控制台是否支持 VNC、串口或救援模式。 八、常见故障速查清单 网卡无地址:检查 DHCP 服务、静态配置、网卡名称和网络管理服务状态。 能 ping 网关但不能上网:检查默认路由、NAT、上游网关和运营商或云网络出口。 能 ping 公网 IP 但域名失败:检查 DNS 配置、resolvectl 状态和搜索域。 本机能访问服务,远端不能:检查监听地址、防火墙、安全组和容器端口映射。 偶发断连:关注网卡错误计数、交换机端口、MTU、驱动日志和系统负载。 总结 Linux 网络故障排查不要一上来就重启服务或改配置,而应按层次验证:先看网卡是否 UP,再看 IP,接着看路由和 DNS,最后检查端口、防火墙与抓包结果。命令可以很多,但核心思路只有一个:每一步都证明一个假设,逐步缩小范围。掌握 ip、nmcli、resolvectl、ss 和 tcpdump 这几类工具后,大多数 Linux 网络问题都能被快速定位并安全修复 ✅。 社区文章 1
-
Linux 与 Windows 双系统安装完整入门指南 想在一台电脑上同时保留 Windows 和 Linux?双系统是很多新手接触 Linux 的实用方案:Windows 继续负责办公、游戏和常用软件,Linux 则适合开发、学习命令行、服务器环境和系统折腾。🙂 但双系统不是“点下一步就完事”,它会涉及分区、启动项、UEFI、BitLocker 等内容,安装前准备越充分,翻车概率越低。 一、先弄清楚:双系统适合你吗? 双系统的核心思路很简单:同一台电脑安装两个操作系统,开机时通过启动菜单选择进入 Windows 或 Linux。它的优点是性能接近原生安装,适合需要真实硬件环境的场景;缺点是会修改磁盘结构,一旦误删分区,可能造成数据丢失。 如果你只是想体验 Linux 桌面,可以先尝试虚拟机或 Live USB;如果你要长期学习 Linux、做开发、跑容器、使用原生驱动或测试硬件兼容性,那么双系统更值得考虑。 二、安装前必须准备的东西 备份重要文件:至少备份桌面、文档、图片、项目代码和浏览器导出数据。 一个空 U 盘:建议 8GB 或以上,用来制作 Linux 安装盘。 Linux 镜像:新手可从 Ubuntu、Linux Mint、Fedora 等主流发行版开始。 足够磁盘空间:轻度体验建议预留 40GB 以上,日常使用建议 80GB 或更多。 Windows 恢复信息:如果启用了 BitLocker,请先保存恢复密钥。 重点提醒:不要在没有备份的情况下调整分区。双系统安装最常见的问题不是 Linux 难用,而是用户误选“清空整块磁盘”。 三、确认电脑使用 UEFI 启动 现代 Windows 电脑通常使用 UEFI 启动方式,尤其是 Windows 11 设备,微软官方系统要求中也提到 UEFI、安全启动能力和 TPM 2.0 等条件,可参考 来源链接 11 官方规格说明。安装双系统时,Windows 和 Linux 最好保持同一种启动模式,不要一个用 UEFI、一个用 Legacy,否则容易出现启动菜单混乱。 在 Windows 中可以按 Win + R,输入 msinfo32,查看“BIOS 模式”。如果显示 UEFI,制作 Linux 启动盘和安装时也应选择 UEFI 模式启动。 四、处理 BitLocker 和快速启动 很多新电脑默认开启设备加密或 BitLocker。Ubuntu 官方文档说明,如果 Windows 分区被 BitLocker 加密,安装器可能无法正确识别磁盘结构,无法安全地执行“与 Windows 共存安装”,详情可看 Ubuntu 关于 BitLocker 的说明。 比较稳妥的做法是:先在 Windows 中保存 BitLocker 恢复密钥,再根据自己的安全需求决定是否临时关闭 BitLocker,等 Linux 安装完成并确认两个系统都能启动后,再考虑重新启用。不同版本 Windows 对重新启用加密的支持可能不同,操作前建议查看系统设置和官方说明。 另外,建议关闭 Windows 的“快速启动”。快速启动会让 Windows 以类似休眠的方式保存部分系统状态,如果你在 Linux 中访问 Windows 的 NTFS 分区,可能遇到只读、挂载失败或文件状态异常的问题。 五、在 Windows 中腾出未分配空间 新手不建议在 Linux 安装器里直接缩小 Windows 分区。更稳的方式是在 Windows 自带“磁盘管理”中操作:右键开始菜单,打开磁盘管理,选择 Windows 主分区,点击“压缩卷”,输入要释放的空间。 压缩完成后,你会看到一块“未分配空间”。这块空间不要在 Windows 中格式化,也不要新建卷,留给 Linux 安装器使用即可。这样做的好处是 Windows 自己处理自己的分区,兼容性更好。 六、制作 Linux 启动 U 盘 下载 Linux ISO 后,可以使用 Rufus、balenaEtcher 或 Ventoy 制作启动盘。若你的 Windows 是 UEFI 模式,制作时建议选择 GPT 分区方案和 UEFI 启动方式。写入 U 盘会清空 U 盘原有数据,请提前保存。 制作完成后重启电脑,进入启动菜单。常见按键包括 F12、F11、Esc、F8,具体取决于品牌。启动项中如果同时出现普通 U 盘名称和“UEFI: U 盘名称”,优先选择带 UEFI 的那个。 七、安装 Linux:优先选择“与 Windows 共存” 进入 Linux 安装界面后,先选择试用模式确认 Wi-Fi、触控板、键盘、屏幕亮度是否正常。确认基本硬件可用后,再点击安装。 选择语言、键盘布局和网络。 选择正常安装或最小安装,新手建议正常安装。 到安装类型页面时,优先选择“与 Windows Boot Manager 共存”或类似选项。 确认 Linux 使用的是之前释放的未分配空间。 检查摘要页面,不要选择“擦除磁盘并安装”。 设置用户名、密码和时区,等待安装完成。 如果安装器没有显示“与 Windows 共存”,不要急着继续。可能原因包括 BitLocker 未处理、启动模式不一致、磁盘模式异常或分区结构复杂。此时建议退出安装器,回到 Windows 检查设置,而不是盲目手动分区。 八、第一次重启后检查启动菜单 安装完成后拔掉 U 盘并重启。正常情况下会出现 GRUB 或系统启动菜单,你可以选择进入 Linux 或 Windows。如果电脑直接进入 Windows,可以进入 BIOS/UEFI 设置,把 Ubuntu、Fedora、Linux Boot Manager 或类似启动项调到 Windows Boot Manager 前面。 如果 Linux 能进但 Windows 不显示,先不要重装系统。可以进入 Linux 后更新引导配置,不同发行版命令不同;Ubuntu 系常见做法是更新 GRUB。操作前建议先确认 Windows 分区仍然存在。 九、安装后的实用建议 更新系统:进入 Linux 后先更新软件源和系统补丁。 安装驱动:NVIDIA 显卡、部分 Wi-Fi 芯片可能需要额外驱动。 不要随便删除 EFI 分区:它通常保存启动文件,误删会导致系统无法启动。 共享文件建议用独立数据分区:频繁在两个系统间交换文件时,可以准备一个专用 NTFS 数据分区。 谨慎修改 BIOS 设置:尤其是 Secure Boot、存储模式、启动顺序和 TPM 相关选项。 十、常见问题快速排查 1. 开机没有 Linux 菜单怎么办? 先进入 BIOS/UEFI 查看启动顺序,把 Linux 启动项调到前面。如果仍然没有,可能需要用安装 U 盘进入 Live 环境修复引导。 2. Windows 提示 BitLocker 恢复怎么办? 输入之前保存的恢复密钥。双系统安装、启动项变化或固件设置变化都可能触发恢复验证,所以密钥一定要提前保存。 3. Linux 看不到 Windows 分区怎么办? 常见原因是 Windows 快速启动未关闭、分区处于休眠状态,或 BitLocker 仍在加密。先回 Windows 正常关机,并检查相关设置。 总结 Linux 与 Windows 双系统并不神秘,但它要求你按顺序做事:先备份,再确认 UEFI,处理 BitLocker 和快速启动,然后在 Windows 中释放未分配空间,最后用 Linux 安装器安装到空闲区域。✅ 对新手来说,最重要的原则只有两条:不要跳过备份,不要选择清空整盘。只要准备充分,双系统会是一种非常高效的学习和工作环境。 社区文章 1
-
Linux 服务器安全加固的实用思路与经验分享 导语:Linux 服务器安全加固不是“装几个安全工具”就结束的事,而是一套持续降低风险、减少暴露面、保留审计证据的日常工程。🔐 无论是个人 VPS、企业业务主机,还是云上容器节点,都建议先建立一套可复用、可回滚、可检查的基线。 一、先明确目标:不是绝对安全,而是可控 很多服务器出问题,并不是遇到了多么高级的攻击,而是 SSH 暴露、弱口令、端口过多、补丁滞后、日志缺失这类基础问题长期存在。我的经验是,加固前先问三个问题:这台机器提供什么服务?哪些人需要登录?哪些端口必须对外?只有把边界想清楚,后续配置才不会变成“越改越乱”。 可以参考 CIS Benchmarks 的思路,把系统加固拆成账户权限、网络服务、日志审计、文件权限、补丁管理等模块。CIS 官方将其定义为面向多类技术产品的安全配置建议,可作为基线参考,而不是照抄后直接上线 [1]。 二、SSH 是第一道门,先把入口收紧 🚪 大多数 Linux 服务器都依赖 SSH 远程管理,所以第一步应当优先加固 SSH。建议禁用 root 直接登录,改用普通账号登录后再通过 sudo 提权;能使用密钥登录的场景,尽量关闭密码认证;同时限制允许登录的用户或用户组,避免“系统里有账号就能试”。OpenSSH 的 sshd_config 手册说明,sshd 会读取 /etc/ssh/sshd_config 中的关键字配置,PermitRootLogin、PasswordAuthentication、AllowGroups 等都属于常见控制项 [2]。 经验提示:修改 SSH 配置前,不要关闭当前会话;先执行 sshd -t 检查语法,再重启 ssh 或 sshd 服务。有云厂商控制台、VNC 或串口访问时,再做高风险变更更稳妥。 三、端口管理:默认拒绝,只放必要服务 🔥 服务器开放的端口越多,被扫描和误配置利用的概率就越高。我的习惯是先用 ss -tulnp 或类似命令确认监听服务,再配置防火墙策略:入站默认拒绝,只允许业务端口、管理端口和监控端口;数据库、缓存、消息队列等内部组件,优先绑定内网地址或仅允许固定来源访问。 在 Ubuntu/Debian 上可以用 UFW,在 RHEL/CentOS/Rocky 系列上常见的是 firewalld,也可以直接使用 nftables。工具选择不是重点,重点是规则要能解释、能复盘、能自动化重建。Red Hat 的安全加固文档也强调通过系统化的流程和工具来减少本地及远程入侵、利用和恶意活动风险 [3]。 四、账户与权限:少即是安全 账户管理要坚持最小权限原则。不要多人共用 root,不要随手给普通用户 ALL 权限,不要保留离职人员、临时测试账号和长期不用的服务账号。建议定期检查 /etc/passwd 中可登录 shell 的账号,锁定不用的账号,并通过 sudoers 文件或 /etc/sudoers.d/ 为不同角色分配必要命令。 管理员登录使用个人账号,便于日志追踪。 服务运行使用专用低权限账号,不使用 root 直接跑业务。 sudo 配置用 visudo 校验,避免语法错误导致无法提权。 密钥定期盘点,删除未知来源和过期公钥。 五、补丁与服务:少装、常更、可回滚 🛠️ 安全更新是加固中最容易被忽视但收益很高的一环。Ubuntu Server 文档说明,unattended-upgrades 可自动应用安全更新,并通过 /etc/apt/apt.conf.d/20auto-upgrades 控制是否启用及执行频率 [4]。生产环境不一定要所有更新全自动,但至少应有固定巡检、测试和发布窗口,内核更新后还要确认是否需要重启。 同时,服务越少越好。没有用到的 FTP、Telnet、旧版 RPC、测试 Web 服务、默认示例程序,都应卸载或禁用。加固不是把所有安全组件都装上,而是让系统只运行它真正需要的东西。 六、日志、审计与告警:出事后要看得见 只做加固不做审计,就像装了门锁却没有门禁记录。建议保留 SSH 登录、sudo 提权、系统服务变更、关键配置文件修改等日志,并把重要日志转发到独立日志平台,避免攻击者拿到本机权限后清理痕迹。Red Hat 文档说明,Linux Audit 系统可根据预配置规则记录安全相关事件,例如认证机制使用、/etc/passwd 等可信数据库变化、审计配置修改等 [5]。 如果规模不大,也可以从简单方案开始:开启系统日志轮转,关注 auth.log 或 secure,配置 fail2ban 限制暴力尝试,再逐步接入集中化日志和告警。关键是不要等到故障发生后才发现“原来没有日志”。 七、加固要有清单,也要有回滚 真正可落地的安全加固,必须能重复执行。建议把每次修改记录成清单:改了哪个文件、为什么改、如何验证、如何回滚。上线前先备份配置文件,云主机可以做快照,虚拟机可以做检查点。对于多台服务器,尽量使用 Ansible、SaltStack 或镜像模板统一基线,避免每台机器靠手工记忆。 总结:把安全做成习惯,而不是临时运动 ✅ Linux 服务器安全加固的核心,不是追求一次性“满分”,而是持续减少暴露面、控制权限、及时更新、保留证据、定期复查。我的建议是先从 SSH、防火墙、账户、补丁、日志这五件事做起,再根据业务重要性引入 SELinux/AppArmor、文件完整性校验、漏洞扫描和合规基线。能长期坚持的安全措施,才是真正有效的安全措施。 社区文章 1
-
Linux 系统性能监控入门与实用技巧 导语:Linux 性能问题往往不是“机器太慢”这么简单,而是 CPU、内存、磁盘 I/O、网络、进程调度等多个因素共同作用的结果。对新手来说,掌握一套轻量、可复用的监控思路,比记住一堆命令更重要。🛠️ 一、先建立性能监控的基本思路 做 Linux 系统性能监控,建议先回答三个问题:现在是否异常、瓶颈在哪里、变化从什么时候开始。不要一上来就重启服务,也不要只盯着 CPU 使用率。一次有效排查通常要同时观察负载、CPU、内存、磁盘 I/O、网络连接和关键进程。 Linux 的很多监控工具并不是“越高级越好”。top、free、vmstat、iostat、ss、journalctl 这些基础命令,已经能覆盖大多数日常排查场景。例如 vmstat 可报告进程、内存、分页、块 I/O、陷入、磁盘和 CPU 活动,适合作为快速判断系统整体状态的入口 vmstat 手册。 二、CPU:不要只看使用率 很多人看到 CPU 使用率 90% 就紧张,但高使用率不一定代表故障。如果机器正在执行计算任务,高 CPU 可能是正常现象。更值得关注的是负载是否长期高于 CPU 核心数、运行队列是否积压、用户态和内核态耗时是否异常。 top 或 htop:观察 load average、%us、%sy、%id、%wa,以及哪个进程最耗 CPU。 uptime:快速查看 1 分钟、5 分钟、15 分钟平均负载,判断问题是突发还是持续。 mpstat -P ALL 1:查看每个 CPU 核心的使用情况,适合发现单核打满的问题。 如果 top 只能告诉你“哪个进程忙”,perf 可以进一步告诉你“哪些函数忙”。perf 是 Linux 的性能分析工具,覆盖硬件级计数器、软件计数器和 tracepoint 等场景 perf 手册。在需要分析热点函数时,可尝试 perf top;它会实时显示性能计数器画像 perf-top 手册。 三、内存:free 少不一定是坏事 Linux 会把空闲内存用于缓存,以提升文件读写效率,所以看到 free 很低不一定代表内存不足。排查时更应该关注 available、swap 使用情况、是否频繁换入换出,以及是否存在单个进程持续增长的内存占用。 free -h:优先看 available,而不是只看 free。 vmstat 1:关注 si、so 字段。如果 swap in 和 swap out 长期不为 0,说明系统可能正在承受内存压力。 ps aux --sort=-%mem:按内存占用排序,定位可疑进程。 实用技巧是:不要只截取某一秒的数据。内存问题常常是“慢慢涨上去”的,例如缓存未释放、连接未关闭、任务队列堆积等。建议连续观察几分钟,必要时配合应用日志确认是否存在请求量变化或异常任务。 四、磁盘 I/O:CPU 空闲也可能很卡 有些服务器 CPU 看起来很空闲,但应用响应依然很慢,这时要重点怀疑磁盘 I/O。典型表现包括进程处于 D 状态、top 中 wa 较高、数据库查询变慢、日志写入阻塞等。 iostat -x 1:查看设备级 I/O 指标,重点关注 await、r/s、w/s、%util 等。 iotop:查看哪个进程正在大量读写磁盘。 df -h 与 df -i:分别检查磁盘空间和 inode 是否耗尽。 磁盘排查要结合业务场景判断。例如日志量突增、备份任务、数据库慢查询、大文件压缩,都可能造成 I/O 抖动。不要只看磁盘剩余空间,inode 用尽同样会导致无法创建新文件。 五、网络:连接数和错误同样重要 网络问题不一定表现为“断网”。连接数过高、端口耗尽、DNS 慢、丢包、重传、监听服务异常,都会让应用看起来像“性能差”。排查网络时,应从本机监听、连接状态、路由和基础连通性逐步看起。 ss -tunlp:查看监听端口和对应进程。 ss -s:快速查看 TCP 连接概要。 ping、traceroute、mtr:用于判断链路延迟和路径问题。 sar -n DEV 1:观察网卡收发速率和包量变化。 如果是 Web 服务,还可以关注 TIME_WAIT、ESTAB 数量是否异常。连接数突然升高不一定是攻击,也可能是上游超时、连接池配置不合理、后端响应变慢导致请求堆积。 六、日志和时间线:让排查有证据 性能监控不能只看实时指标,还要回到时间线。一次故障排查建议记录:问题开始时间、影响范围、当时负载、关键进程、日志异常、最近变更。systemd 系统可使用 journalctl 查看服务和系统日志,例如 journalctl -u 服务名 --since "1 hour ago"。 一个很实用的习惯是,把“监控指标”和“变更记录”放在一起看。发布新版本、调整数据库参数、变更定时任务、扩容或迁移,都可能是性能变化的触发点。没有时间线,排查很容易陷入猜测。 七、入门级排查流程推荐 先看整体:uptime、top,判断负载、CPU、内存是否明显异常。 再看资源:free -h、vmstat 1、iostat -x 1、ss -s,分别确认内存、I/O、网络状态。 定位进程:用 ps、top、iotop 找到最可疑的进程。 结合日志:用 journalctl、应用日志、数据库日志还原问题发生前后的变化。 小步验证:一次只调整一个因素,避免多个改动混在一起无法判断效果。 经验提示:性能优化不是追求某个指标“越低越好”,而是让系统在业务高峰下仍然稳定、可预测、可恢复。📈 总结 Linux 系统性能监控的核心,是用正确的顺序缩小问题范围:先看整体,再看 CPU、内存、磁盘、网络,最后结合进程和日志定位原因。新手不必一开始就搭建复杂平台,先熟练掌握 top、free、vmstat、iostat、ss、journalctl、perf 等工具,就能解决大量日常问题。真正可靠的排查,来自连续观察、交叉验证和明确记录,而不是凭感觉判断。🚀 社区文章 1
金小颖论坛
欢迎来到我们的社区。
这里倡导自由表达、平等交流、友好互动、开放分享和有趣探索。无论你是想认真讨论、轻松聊天、分享经验,还是发现好玩的人和内容,都可以在这里找到属于自己的位置。
请尊重他人,理性发言,友善交流,一起建设一个更自由、更开放、更有趣的社区。
帖子数
1521
1521
评论数
1523
1523
用户数
51
51
在线
3
3
微信号
微信号
微信快人一步获取最新文章
扫一扫
不错过精彩文章

热门活动
热门标签
友情链接
XIUNOX基于 Xiuno BBS 4.0.4 原版打造的现代化重构版本 XIUNOX, 全面适配 PHP 8 + MySQL 8,采用 Bootstrap 5.3 与 HTMX 构建现代无刷新 UI, 安全与可扩展性大幅提升,原生支持多语言、RESTful API,让轻量论坛重获新生。
xiunox交流论坛—
Linux 人社区综合性技术论坛
不知名作家论坛不知名作家论坛,由众多爱好者共建的公益性交流论坛,可以发表自己的随笔,散文,短篇小说,随写。
侠客岛侠客岛是一个融合江湖豪情与技术热情的技术社区。一入江湖岁月催,代码人生共举杯。在这里,既能论剑编程之道,也可把酒江湖夜话。
酒入论坛分享资源,分享快乐
破走论坛分享资源,分享快乐
申请友情链接