Linux运维命令不是背出来的,是踩坑踩出来的。
我试过`df`显示还有20G,结果`du`一查根目录只剩500M,服务全挂了。后来发现是某个日志文件被删了,但进程还占着句柄没释放。
命令用错一次,服务器就可能变砖。`rm -rf /`当然没人真这么干,但`rm -rf ./`少个空格、`find . -name "*.log" -delete`没加`-maxdepth 1`,删掉整个项目目录的事,我干过。不是手抖,是根本不知道那条命令到底在对什么下手。
现在看`man`,我也不翻SYNOPSIS了,直接拖到EXAMPLES。有次查`ss`,EXAMPLES里一行`ss -tuln state listening '( dport = :8080 )'`,比网上搜来的`netstat -an | grep 8080`准十倍。`netstat`早被标记为deprecated了,可很多教程还在教,学了等于白学。
`systemctl status nginx`必须加`--no-pager`,不然卡在中间翻不出来。`systemctl cat nginx`能看见真实配置在哪,比`cat /etc/systemd/system/nginx.service`管用——因为可能被`/etc/systemd/system/nginx.service.d/override.conf`盖掉了。不看`cat`,光`status`,等于只看了病历摘要,没看检查报告。
`iotop -oP`救过我两次。第一次是数据库慢得像卡住,`top`里MySQL只占3%CPU,`iotop -oP`一跑,发现`rsync`在后台偷偷同步几个TB的备份,IO跑满。第二次是Java应用CPU100%,`perf top`扫出来90%时间耗在`String.indexOf()`,不是硬件问题,是代码写法有坑。
`journalctl`不是`tail -f /var/log/messages`的替代品,它是升级版。`journalctl -u docker --since "2 hours ago" --priority 3`,直接过滤错误级日志,不用再`grep -i error`从几千行里翻。压缩日志也能直接查:`zgrep "Connection refused" /var/log/syslog.*.gz`,省得先`gunzip`再`grep`,浪费时间又占空间。
`pstack`和`/proc/
`bpftrace`我只敢在测试机跑。`bpftrace -e 'kprobe:tcp_sendmsg { @bytes = hist(arg2); }'`,跑完立刻`Ctrl+C`,不然输出刷屏。它不是玩具,是手术刀,切对了救命,切歪了系统直接假死。
第九重说的“红区”,我都尝过味儿。`chmod -R 777 /var/www`,图省事,结果上传的PHP文件带`shell_exec()`,黑客5分钟就进来了。后来改成`chown -R www-data:www-data /var/www`,目录`755`,文件`644`,脚本`755`,一分一厘拆开设。不是麻烦,是少一次重装系统的命。
`dd if=/dev/zero of=/dev/sda`这种命令,我现在连复制都手抖。真要清盘,`wipefs -a /dev/sda`先干掉所有文件系统签名,再`sgdisk --clear /dev/sda`清分区表,最后`hdparm --user-master u --security-set-pass p /dev/sda`上锁——流程写进脚本,谁执行都一样。
学命令不是为了多记住几个词。是知道`df`和`du`为啥不一样,知道`kill -15`和`kill -9`差在哪,知道`sysctl`改的参数重启就丢,得写进配置文件。这些不是知识点,是每天上线前,你心里那杆秤。
现在我写任何一条带`rm`、`dd`、`reboot`的命令,必然先加`echo`预演一遍。`rsync -av --dry-run`成了肌肉记忆,`apt install -s`比直接装还快。不是怕出错,是怕错得没痕迹。
用命令不是炫技,是让机器听懂人话。错一次,记三年。就这样。
本站是社保查询公益性网站链接,数据来自各地人力资源和社会保障局,具体内容以官网为准。
定期更新查询链接数据 苏ICP备17010502号-11