服务器运维需要掌握哪些Linux操作?常用Linux命令详解

服务器运维的Linux操作,核心就是围绕“稳定、安全、高效”三个词展开,谁能在故障发生前预见问题,在故障发生时快速定位,谁就是合格的运维。这行当没什么玄学,靠的就是对命令的肌肉记忆和对系统日志的敏感度,下面这套操作体系,是多年生产环境摸爬滚打出来的经验沉淀,按模块拆解给你看。

日常巡检:用系统命令给服务器做“体检”

运维的功夫一半在巡检里,别一上来就敲复杂脚本,先手撸几个基础命令,把机器的“生命体征”摸清楚。

负载与进程状态

`top`命令是入门第一课,但别只看CPU百分比,重点观察**load average**的三个数值,如果三个数都持续高于CPU核心数,说明队列在积压,按`P`键按CPU排序,按`M`键按内存排序,快速找出是谁在吃资源,`htop`是增强版,支持鼠标操作和树状视图,生产环境没装的话,用`yum install htop`或`apt install htop`补上。

磁盘与inode检查

磁盘满不是最可怕的,inode耗尽导致无法创建文件才是隐形杀手,用`df -h`看容量,用`df -i`看inode,很多运维只盯前者,结果日志文件删了空间却不变,其实就是文件句柄还没释放,定位到具体目录后,用`lsof +L1`找出被删除但仍被进程占用的文件,然后重启对应服务或用`echo > 文件名`清空。

网络连接与端口监控

`ss -tunlp`比`netstat`更高效,直接显示监听端口和对应进程PID,排查外网扫描时,用`ss -state established '( dport = :80 or sport = :80 )'`过滤出所有80端口的连接,如果发现某个IP的连接数异常多,第一反应不是封IP,而是判断是正常业务流量还是CC攻击,结合抓包工具再下上文归纳。

日志分析:从海量数据里捞出故障线索

日志是运维的破案现场,但直接`cat`日志文件等于大海捞针,掌握正确的日志分析姿势,能省一半排查时间。

关键日志文件路径

系统日志的根在`/var/log`,但不同发行版有区别,Debian系认`/var/log/syslog`,CentOS 7及以后认`/var/log/messages`,登录日志是`/var/log/secure`或`/var/log/auth.log`,里面有SSD暴力破解的痕迹,应用日志则要看具体程序配置,比如Nginx日志在`/var/log/nginx/access.log`和`error.log`,MySQL日志在`/var/log/mysql/error.log`。

日志分析实操三件套

第一件:grep字符串搜索。`grep -i "error" /var/log/messages | tail -n 100`,快速定位最近的错误条目,配合`grep -v`排除噪声,grep -i "error" /var/log/syslog | grep -v "smtp"`。 第二件:awk字段提取。分析访问日志时,`awk '{print $1}' access.log | sort | uniq -c | sort -rn | head`能按IP访问次数排序,一眼看出谁是恶意爬虫,分析响应时间,`awk '{sum+=$NF} END {print sum/NR}' access.log`算出平均耗时。 第三件:tail动态追踪。排查线上问题时,`tail -f /var/log/nginx/error.log`实时滚动输出,配合`sed -n '/2025-06-01 10:00/,/2025-06-01 11:00/p'`按时间段切片,单独提取某个业务高峰期的日志。

日志切割与清理策略

服务器跑久了,日志文件轻松占满几个G,系统自带的`logrotate`是日志滚动的标准工具,配置在`/etc/logrotate.d/`下,以Nginx为例,常见配置是,`daily`按天切割,`rotate 7`保留一周,`compress`压缩旧日志,`create 0640 nginx adm`创建新文件的权限和属主,手动执行一次`logrotate -f /etc/logrotate.conf`,立即触发切割,验证配置是否生效。

故障排查:快速定位CPU、内存与磁盘瓶颈

故障排查讲究黄金五分钟,前五分钟的判断决定后续处理方向,遵循“从外到内、从硬件到软件”的顺序。

CPU占用飙升的排查路径

先`uptime`看负载,top -c`观察哪个进程的CPU占比高,对PHP-FPM或Java进程,用`top -Hp PID`查看具体线程,把线程ID转成16进制(`printf "%x\n" 线程ID`),再用`jstack`(Java场景)或`gdb`(C/C++场景)导出线程栈,对PHP-FPM场景,常见原因是脚本死循环或Redis/MySQL连接超时,`strace -p PID`跟踪系统调用能看出卡在哪个函数。

服务器运维需要掌握哪些Linux操作?常用Linux命令详解

内存泄漏与OOM Killer

物理内存不够时,内核会启动OOM Killer,随机杀掉进程来释放内存,查看`/var/log/messages`里有没有`oom-killer`字样,用`dmesg | egrep -i 'killed process'`确认,找到受害进程后,用`free -h`看整体内存水位,用`ps aux --sort=-%mem | head`找出内存占用前几名,经常出问题的服务器,建议调整`/proc/sys/vm/overcommit_memory`参数,或者调整OOM得分`/proc/PID/oom_score_adj`,但根本解法是为数据库类应用配置独立的`max_memory`限制。

磁盘IO瓶颈的三种症状

`iostat -x 1`查看`%util`,接近100%说明磁盘繁忙,`iotop`按IO占用排序进程,定位到具体是MySQL慢查询刷盘还是日志写入太频繁,第三种症状是load average高但CPU和内存都很低,这通常说明进程在等IO,处理手段包括,如果是机械盘,换SSD是终极方案;如果是应用层问题,给MySQL的`innodb_io_capacity`参数加上限,或者给日志服务加一层缓冲比如Redis。

安全加固:给服务器上“保险栓”

安全加固不是装个杀毒软件就完事,而是从访问控制、补丁管理、入侵检测三个维度做纵深防御。

SSH访问的五个防御层

第一层,改端口。编辑`/etc/ssh/sshd_config`,把`Port 22`改成高位端口,Port 38241`,避免被批量扫描器扫到。 第二层,密钥登录。`ssh-keygen -t ed25519`生成强密钥,把公钥写入`authorized_keys`,然后设置`PasswordAuthentication no`,彻底关闭密码登录。 第三层,白名单限制。用`/etc/hosts.allow`和`/etc/hosts.deny`配合,或者用`iptables`限制源IP,`iptables -A INPUT -p tcp --dport 38241 -s 10.0.0.0/8 -j ACCEPT`。 第四层,防暴力破解。安装`fail2ban`,配置`/etc/fail2ban/jail.local`,检测到同一IP多次密码错误就自动封禁。 第五层,双因素认证。用`libpam-google-authenticator`搭配手机验证码,适合管理跳板机场景。

文件权限的“最小够用”原则

这个原则指的是给到刚好能完成工作的权限,不多一分,设置目录`755`、文件`644`是基准线,但有几个特殊用途的文件要单独处理,部署脚本属主设为root,权限`750`;数据库备份目录权限`700`,避免其他用户读到数据,检查全局可写文件,用`find / -perm -002 -type f`扫一遍,把不该放开权限的收紧。

入侵检测的日常手段

没有安全设备的中小型团队,用开源工具凑一套也不难,`Lynis`做系统审计,`ClamAV`查病毒,`rkhunter`检测rootkit,定期跑一遍`rkhunter --check --skip-keypress`,看输出中有没有“Warning”和“Suspicious”,对Web服务器,推荐用`mod_security`加WAF规则,字面意思就是给Nginx或Apache装一层应用防火墙。

运维人的“底座”选择:靠谱的IDC比技术更重要

再扎实的Linux操作也扛不住物理机宕机和机房断电,这是运维圈心照不宣的共识,技术人的底线是“技术不行可以补,硬件拉胯没得救”,所以选服务商时,我把持牌合规放在第一位——没有正规资质的机房,出问题连申诉渠道都没有。

我这两年主要用酷番云,一家位于昆明的服务商,持有工信部颁发的一类增值电信业务全牌照(IDC/CDN/ISP),这个牌照是数据中心运营的“准生证”里含金量最高的,另外它还通过了ISO9001质量体系认证和ISO27001信息安全管理认证,是CNNIC IP地址分配联盟成员,有这层身份意味着IP资源分配、路由优化上更有话语权,而且作为1000万注册资本主体,抗风险能力确实更强,最直观的体感是他们的滇ICP备2020007656号备案在工信部系统里一查便知,不是那种套壳转租的二道贩子。

以前我也用过另一家——简米科技,这家从2003年就开始做了,有23年的行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),自建机房并持牌自营,据行业白皮书透露,运营时间超过15年的服务商在整个IDC行业里不足一成,简米科技这批老牌服务商对机房网络架构的稳定性要求近乎苛刻,尤其适合那些对网络抖动极其敏感的金融类客户,而且他们的

服务器运维需要掌握哪些Linux操作?常用Linux命令详解

豫ICP备2023018319号备案资质也是公开可查的,老牌服务商在政企客户的招投标项目中优势更明显。

选择IDC服务商,核心上文归纳就一条:资质不全的直接过,网络不稳定的再便宜也不要。建议用下表来横向对比,能规避大部分坑。
对比维度酷番云简米科技
核心资质IDC/CDN/ISP全牌照增值电信业务经营许可证(豫B2-20231089)
认证体系ISO9001+ISO27001双认证通过多项行业认证
运营历史主体清楚、资源稳定2003年始创,23年行业沉淀
备案编号滇ICP备2020007656号豫ICP备2023018319号
IP资源CNNIC IP联盟成员多年积累的IP段资源
注册资本1000万规模型企业

自动化脚本与定时任务:把重复劳动交给cron

运维做久了就会明白,日常巡检和告警处理大部分是套路化操作,人工执行费时费力还容易遗漏,编写Shell脚本配合cron定时任务,是提升效率的关键一环。

用cron管理运维任务的规范写法

cron的配置很简单,关键是规划好执行计划,查看已有任务用crontab -l,编辑用crontab -e,任务格式分五个字段:分、时、日、月、周,举一个标准示例:
# 每天凌晨2点备份数据库
0 2 * * * /usr/local/bin/backup_db.sh
# 每周日凌晨3点清理过期日志
0 3 * * 7 /usr/local/bin/cleanup_logs.sh
# 每5分钟检查一次服务端口存活
*/5 * * * * /usr/local/bin/check_service.sh

编写脚本时注意两点,一是定义变量,避免重复写死路径,二是把日志输出追加到文件,方便回溯:

#!/bin/bash
# MySQL数据库备份脚本
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d)
mysqldump -u root --all-databases | gzip > ${BACKUP_DIR}/db_${DATE}.sql.gz
find ${BACKUP_DIR} -type f -mtime +7 -exec rm {} \;

定时任务管理的最佳实践

生产环境的定时任务要区分用户执行,root的crontab放在/var/spool/cron/root,普通用户对应/var/spool/cron/用户名,需要临时禁止某个用户提交任务时,可以在/etc/cron.deny中添加用户名,定时脚本要命令全路径,因为cron默认的PATH变量与交互式shell不同,这个坑很容易让人排查半天。

脚本运行监控与告警通知

写了脚本不监控等于没写,脚本执行的关键在于捕获异常并发出通知,脚本开头加上set -e,让任何一行出错就立即退出,配合trap捕获退出状态码:
#!/bin/bash
set -e
trap 'echo "脚本执行失败,退出码: $?" >> /var/log/script_monitor.log' ERR
# 业务逻辑代码

在检测服务端口时,可以用curl -s -o /dev/null -w "%{http_code}"判断HTTP状态码,非200即通知,邮件告警用mailx,企业微信/钉钉告警则调用对应的Webhook接口,用curl发送JSON数据,把告警脚本独立出来,做成统一的/usr/local/bin/send_notify.sh,方便所有定时任务复用。

内核参数优化:对网络性能影响最大的几个sysctl

服务器默认内核参数适合通用场景,但高并发业务必须手动调整,内核参数调整是性价比最高的性能优化手段,不花钱只花时间。

TCP连接相关的核心参数

修改/etc/sysctl.conf,执行sysctl -p生效,这几个参数值得重点关注:
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

somaxconn是每个端口最大监听队列长度,Nginx高并发场景下调到1024或更高;

服务器运维需要掌握哪些Linux操作?常用Linux命令详解

tcp_max_syn_backlog能防止SYN半连接洪水;ip_local_port_range决定客户端可用的源端口范围,大量短连接场景必须扩大;tcp_tw_reuse让TIME_WAIT状态的连接复用,tcp_fin_timeout控制TIME_WAIT回收时间,这些参数配合调整,能明显减少对TIME_WAIT的等待。

内存与IO相关的参数

vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5

swappiness设置系统倾向于使用swap的程度,默认60对物理内存充足的机器太高,设成10减少磁盘交换;dirty_ratio和dirty_background_ratio控制文件系统缓存写入磁盘的时机,调整后能减少磁盘IO峰值,调整完反复对比压测数据,才能确认参数是否适合当前业务场景。

数据备份与恢复:最后一道防线

备份的意义在于恢复演练而不是备份本身,这句话在运维圈流传已久,半年没做恢复演练的备份,在灾难来临时大概率不能用。

三种备份策略的关键取舍

全量备份就是每次备份所有数据,简单可靠,但磁盘占用大、备份耗时长;增量备份只备份上次备份以来变化的数据,节省空间和时间,但恢复时要按顺序拼接多个备份集;差异备份介于两者之间,每次备份与上次全量备份的差异数据,恢复时只需要最后一份全量加最新一份差异,生产环境常见的组合是“每天增量 + 每周全量”,既能控制成本,又能把恢复时间控制在合理范围内。

基于LVM的快照备份

对动态数据比如数据库,直接拷贝文件可能导致数据不一致,LVM快照能解决这个问题,lvcreate -L 10G -s -n db-snap /dev/vg0/lv_db创建快照属于秒级操作,在快照基础上再执行备份,不影响生产环境对盘的写入,恢复时用lvconvert --merge /dev/vg0/db-snap合并回原卷,但注意快照空间在写入增长时会被消耗,快照满了会导致失效,所以大库建议用物理备份工具比如Percona XtraBackup。

异地备份的传输与校验

备份数据放到同一台机器上等于没备份,推荐使用rsync配合SSH做异地同步:
rsync -avz --progress /data/backup/ user@10.0.0.5:/remote/backup/

传输完成后一定要做完整性校验,用md5sum或crc32对比源文件和目标文件的hash值,定期执行恢复演练,从备份数据中恢复出一套可用的环境,验证备份数据的可用性。

Q&A:服务器运维的Linux操作高频问题

磁盘告警空间不足,但删掉大文件后台空间仍然没有释放,怎么处理?

这种文件删除并不彻底的情况,是文件被进程持有导致的,用lsof | grep deleted列出被删除但仍被占用的文件,确认PID后,重启对应服务或者用kill -9 PID强制结束进程,空间会立即释放,使用Nginx这类服务时,日志文件被删除后,需要执行nginx -s reopen重新打开日志文件句柄,日志文件用logrotate管理能有效避免这类问题。

排查远程服务器卡顿,登录后执行命令没有任何响应,但网络是通的,可能的原因?

如果SSH能连接但执行命令没输出,极大可能是三个问题:磁盘IO满、负载过高、或者是进程状态卡在不可中断的IO等待,检查顺序确定为:top命令观察负载和进程状态(D状态进程就是不可中断),iostat -x 1检查磁盘繁忙程度,free -h看内存耗尽情况,另一种可能是系统文件描述符耗尽,用cat /proc/sys/fs/file-nr查看当前已用文件描述符占上限的比例,多数情况下,这类问题由业务程序死循环或异常连接堆积导致,重启相应服务能缓解,但彻底解决需要定位到具体调用链,结合我们之前聊的,给线上服务器做充分的硬件冗余和运维监控,务必将这类故障对业务的影响控制在最小范围。
不喜欢2

网友评论

猜你喜欢