第二章:基石搭建——Linux系统与网络基础
说实话,很多运维新手一上来就急着学Docker、学K8s,结果连个SSH都配不明白,文件权限搞混了把服务搞挂。我见过太多这样的案例了。这一章,咱们就把地基打牢。你想想看,房子盖得再漂亮,地基不稳也是白搭。
2.1 SSH免密登录:运维的“第一把钥匙”
SSH免密登录,说白了就是让你不用每次输密码就能登录服务器。我个人的习惯是,所有管理的机器,第一件事就是配好免密登录。为什么?因为后面你要写脚本批量操作,总不能脚本里写明文密码吧?
2.1.1 原理很简单
客户端生成一对密钥:一个私钥(自己藏着),一个公钥(放到服务器上)。登录时,服务器用公钥验证你的私钥。嗯,这里要注意:私钥绝对不能泄露。
2.1.2 实操步骤
# 在客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 一路回车,默认保存在 ~/.ssh/id_rsa
# 把公钥拷贝到服务器
ssh-copy-id user@server_ip
# 测试一下
ssh user@server_ip
我的小技巧: 如果有多台服务器,可以用
ssh-agent 管理私钥,避免每次都要指定密钥文件。
我曾经踩过的坑: 有一次我忘了设置
~/.ssh 目录权限为 700,结果SSH死活连不上。记住:.ssh 目录权限必须是 700,authorized_keys 文件权限必须是 600。
2.2 文件权限:别让“权限”成了你的绊脚石
Linux的文件权限,其实就三组:所有者、所属组、其他人。每组三个权限:读(r=4)、写(w=2)、执行(x=1)。数字表示法就是把这些值加起来。
2.2.1 常用权限设置
| 权限 | 数字表示 | 说明 |
|---|---|---|
| rwx------ | 700 | 仅所有者可读写执行 |
| rwxr-xr-x | 755 | 所有者全权限,其他人只读执行 |
| rw-rw-r-- | 664 | 所有者和组可读写,其他人只读 |
# 修改权限
chmod 755 script.sh
# 修改所有者
chown user:group file.txt
# 递归修改目录
chmod -R 755 /path/to/dir
避坑指南: 我曾经把 /etc 目录的权限递归改成了 777,结果系统直接崩了。记住:系统目录和文件,千万别乱改权限!
2.3 进程管理:掌控你的“后台世界”
进程管理,说白了就是看谁在跑、占了多少资源、怎么干掉它。我每天上服务器第一件事就是 top 看一眼。
2.3.1 常用命令
# 查看进程
ps aux
ps -ef
# 动态监控
top
htop # 更友好的界面
# 查找进程
pgrep nginx
pidof nginx
# 杀死进程
kill -9 PID # 强制杀死
kill -15 PID # 优雅停止
# 后台运行
nohup command &
2.3.2 进程状态
你可能会问:为什么有时候进程杀不掉?那是因为进程可能处于“僵尸状态”(Z)。僵尸进程已经死了,但父进程没回收它。解决办法通常是杀掉父进程。
我的经验: 用
kill -9 要谨慎,它不给进程清理资源的机会。我一般先用 kill -15,不行再用 -9。
2.4 网络抓包:运维的“照妖镜”
网络出问题的时候,抓包是最直接的排查手段。说白了,就是看看数据包到底发没发出去、发给了谁、对方回了什么。
2.4.1 tcpdump 实战
# 抓取所有经过 eth0 的包
tcpdump -i eth0
# 抓取特定端口
tcpdump -i eth0 port 80
# 抓取并保存到文件
tcpdump -i eth0 -w capture.pcap
# 读取抓包文件
tcpdump -r capture.pcap
# 抓取特定主机的通信
tcpdump -i eth0 host 192.168.1.100
2.4.2 常用过滤表达式
| 表达式 | 说明 |
|---|---|
| tcp | 只抓TCP包 |
| udp | 只抓UDP包 |
| icmp | 只抓ICMP包(ping) |
| port 22 | 抓22端口的包 |
| src 10.0.0.1 | 源地址为10.0.0.1 |
| dst 10.0.0.2 | 目标地址为10.0.0.2 |
注意: 抓包需要 root 权限。另外,在生产环境抓包要小心,数据量大的时候会消耗大量磁盘和CPU。
2.5 本章知识体系
下面这张图,是我梳理的本章核心知识脉络。你可以把它当作一张“地图”,随时回来对照。
嗯,这一章的内容就这些。看起来知识点不少,但都是日常运维天天要用的。你把这些练熟了,后面学自动化、学容器编排,就会觉得顺风顺水。