运维小白逆袭:从 Linux 命令到 Docker 容器的零基础成长笔记
🤵♂️ 个人主页:布说再见
✍🏻作者简介:
🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏📂加关注+
目录
- 运维需要了解
- 你天天用的网络,底层原理居然这么酷?
-
- 1.请解释一下 Linux 和 Windows 系统的区别?
- 2. 如何查看系统的硬件资源使用情况?
- 3.网络基础 “TCP/IP 协议如何工作?
- 传输层(Transport Layer)
- Bash 日志监控脚本
-
-
- Python 定时文件清理脚本
- Ansible 系统巡检 Playbook
- PowerShell 服务监控脚本
-
- 如何管理和优化 Docker 容器?
-
-
- 镜像优化
- 资源限制
- 存储优化
- 网络优化
-
- 总结
运维需要了解
网络基础tcp/ip 、dns、http
运维工具 Docker
脚本能力Shell
监控工具Zabbix、prometheus
了解数据库基础mysql、redis
了解自动化工具,如Ansible、Puppet、Chef、SaltStack等。
你天天用的网络,底层原理居然这么酷?
1.请解释一下 Linux 和 Windows 系统的区别?
内核与架构差异 Linux 基于开源内核(如 Linux Kernel),支持模块化设计,允许用户自定义内核组件。Windows使用闭源的 NT 内核,强调统一性和商业兼容性。Linux 通常运行于更广泛的硬件架构(如 ARM、RISC-V),而 Windows主要支持 x86/64 架构。
2. 如何查看系统的硬件资源使用情况?
在Windows系统中,Ctrl+Shift+Esc
Linux用户
可通过终端命令top或htop查看CPU负载,或使用mpstat命令获取详细统计信息。
查看内存使用
通过free-h命令查看内存和交换分区(Swap)使用情况,-h参数会自动转换为易读单位(GB/MB)。
查看磁盘空间
df -h
使用系统监控工具
pip install glances
glances
3.网络基础 “TCP/IP 协议如何工作?
TCP/IP协议是互联网通信的基础,分为四层结构:应用层、传输层、网络层和链路层。传输控制协议(TCP)位于传输层,负责可靠的数据传输,确保数据包有序、无差错地到达目的地。TCP 通过连接建立、数据传输和连接终止三个阶段完成通信。
4.常见应用层协议有哪些?各自的作用是什么?
HTTP/HTTPS:超文本传输协议,用于 Web 页面传输(HTTPS 通过 TLS 加密)。
FTP:文件传输协议,用于文件上传下载(基于 TCP,分控制连接和数据连接)。
SMTP/POP3/IMAP:邮件传输协议(SMTP 发信,POP3/IMAP 收信)。
DNS:域名系统将域名解析为 IP 地址(www.baidu.com→IP)。
DHCP:动态主机配置协议,自动分配 IP 地址及网络参数。
了解4和5
5.HTTP 与 HTTPS 的区别是什么?HTTPS 如何保证安全?
区别:HTTPS 通过 TLS/SSL 加密数据,端口为 443(HTTP 为 80)。
安全原理:
客户端与服务器协商加密算法(如 RSA),生成会话密钥。
服务器通过 CA 证书验证身份,防止中间人攻击。
数据传输时用对称加密(如 AES)提高效率,用非对称加密保护会话密钥。
DNS 解析的过程是怎样的?
客户端先查本地 DNS 缓存,若没有则向本地域名服务器查询。
本地服务器依次向根域名服务器、顶级域名服务器(.com/.cn 等)、权威域名服务器递归查询,最终返回 IP 地址。
为什么 FTP 需要两个连接(控制连接和数据连接)?
控制连接(TCP 21):持续传输命令(如登录、文件操作)。
数据连接(TCP 20):传输实际文件数据(主动模式由服务器发起,被动模式由客户端发起)。
传输层(Transport Layer)
1.TCP 和 UDP 的区别是什么?各自的应用场景有哪些?
2.TCP 如何实现可靠传输?
确认机制:接收方返回 ACK 确认报文,发送方超时未收到则重传。
序列号(Sequence Number):标记数据顺序,确保接收方按序组装。
流量控制:通过滑动窗口(Window Size)告知发送方当前接收缓冲区大小,避免溢出。
拥塞控制:慢开始(Slow Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)、快恢复(Fast Recovery)。
3.TCP 三次握手的过程是怎样的?为什么需要三次?
过程:
客户端发送 SYN 包(seq=x),请求建立连接。
服务器回复 SYN+ACK 包(seq=y,ack=x+1)。
客户端回复 ACK 包(seq=x+1,ack=y+1),连接建立。
原因:防止失效的连接请求报文段被服务器接收,避免资源浪费(如客户端旧 SYN 延迟到达,服务器若仅两次握手会误判为新连接)。
4.TCP 四次挥手的过程是怎样的?为什么挥手需要四次?
过程:
客户端发送 FIN 包(seq=a),请求关闭连接。
服务器回复 ACK 包(ack=a+1),此时服务器仍可发送数据。
服务器发送 FIN 包(seq=b),请求关闭服务器到客户端的连接。
客户端回复 ACK 包(ack=b+1),等待 2MSL 后关闭连接。
原因:服务器收到 FIN 后,可能还有未发送完的数据,需先回复 ACK 确认,再发送 FIN 关闭连接,因此挥手需要四次。
5.什么是三次握手和四次挥手?,如果服务器无法连接到外网,如何排查?
三次握手是TCP协议建立连接的过程,确保双方具备发送和接收数据的能力。
客户端发送SYN报文:客户端向服务器发送一个SYN(同步序列编号)包,初始序列号为
x
,状态变为SYN-SENT
。服务器响应SYN-ACK报文:服务器收到SYN包后,发送一个SYN-ACK包,确认号为
x+1
,同时设置自己的初始序列号为y
,状态变为SYN-RECEIVED
。客户端发送ACK报文:客户端收到SYN-ACK包后,发送一个ACK包,确认号为
y+1
,序列号为x+1
,状态变为ESTABLISHED
。服务器收到后同样进入ESTABLISHED
状态,连接建立完成。四次挥手是TCP协议断开连接的过程,确保双方数据完全传输完毕。
客户端发送FIN报文:客户端主动关闭连接时,发送FIN包,序列号为
u
,状态变为FIN-WAIT-1
。服务器响应ACK报文:服务器收到FIN包后,发送ACK包,确认号为
u+1
,状态变为CLOSE-WAIT
。客户端收到ACK后进入FIN-WAIT-2
状态。服务器发送FIN报文:服务器准备好关闭连接时,发送FIN包,序列号为
v
,状态变为LAST-ACK
。客户端响应ACK报文:客户端收到FIN包后,发送ACK包,确认号为
v+1
,状态变为TIME-WAIT
。服务器收到ACK后关闭连接。客户端等待2MSL
(报文最大生存时间)后也关闭连接。
“你有使用过哪些自动化工具或脚本语言?比如 Bash、Python 或 Ansible?”
Bash 日志监控脚本
#!/bin/bashLOG_FILE=\"/var/log/nginx/error.log\"ALERT_EMAIL=\"admin@example.com\"ERROR_THRESHOLD=10error_count=$(grep -c \"ERROR\" \"$LOG_FILE\")if [ \"$error_count\" -gt \"$ERROR_THRESHOLD\" ]; then mail -s \"High Error Rate Detected in Nginx Log\" \"$ALERT_EMAIL\" <<EOFWarning: $error_count errors found in $LOG_FILE.Please check the server immediately.EOFfi
Python 定时文件清理脚本
import osimport timefrom datetime import datetime, timedeltadef clean_old_files(directory, days_threshold): cutoff = datetime.now() - timedelta(days=days_threshold) for filename in os.listdir(directory): filepath = os.path.join(directory, filename) if os.path.isfile(filepath): mod_time = datetime.fromtimestamp(os.path.getmtime(filepath)) if mod_time < cutoff: os.remove(filepath) print(f\"Removed: {filepath}\")clean_old_files(\'/tmp/backups\', 30)
Ansible 系统巡检 Playbook
---- name: System Health Check hosts: all tasks: - name: Check disk usage command: df -h register: disk_usage - name: Check memory usage command: free -m register: memory_usage - name: Save report copy: content: | Disk Usage: {{ disk_usage.stdout_lines | join(\'\\n\') }} Memory Usage: {{ memory_usage.stdout_lines | join(\'\\n\') }} dest: /var/log/system_check.log
PowerShell 服务监控脚本
$services = @(\"WinRM\", \"Spooler\", \"EventLog\")$output = \"\"foreach ($service in $services) { $status = Get-Service -Name $service | Select-Object Status $output += \"$service Status: $($status.Status)`n\"}if ($output -match \"Stopped\") { Send-MailMessage -From \"monitor@domain.com\" -To \"admin@domain.com\" -Subject \"Service Alert\" -Body $output -SmtpServer \"smtp.domain.com\"}
对于日志脚本我应该下个月开始学习,并深入了解。
如何管理和优化 Docker 容器?
镜像优化
- 使用多阶段构建减少镜像层数和体积,例如合并 RUN 指令。
- 选择 Alpine 等轻量级基础镜像,避免包含冗余依赖。
- 定期清理无用镜像:
docker image prune -a
。
资源限制
- 通过
--memory
和--cpu
参数限制容器资源,防止单容器耗尽主机资源:docker run --memory=512m --cpus=1.5 my_app
- 使用
docker stats
实时监控资源使用情况。
性能调优技巧
存储优化
- 避免容器存储驱动(如 overlay2)成为瓶颈,对于高 I/O 场景,挂载卷(Volume)替代容器层写入:
docker run -v /host/path:/container/path my_app
- 考虑使用
tmpfs
mounts 加速临时文件读写。
网络优化
- 选择适当的网络模式(如
host
模式避免 NAT 开销,但牺牲隔离性)。 - 自定义桥接网络优化容器间通信。
编排工具实践
Kubernetes 优化
- 配置 Horizontal Pod Autoscaler(HPA)自动伸缩 Pod 数量。
- 使用 Resource Quotas 和 Limit Ranges 管理命名空间资源。
- 通过
kubectl top
和 Prometheus 监控集群状态。
日志与调试
- 集中日志管理:Fluentd 或 Loki 收集容器日志。
- 使用
kubectl describe pod
排查部署问题。
总结
运维知识体系庞大,需从基础协议(如 TCP/IP、HTTP)、系统操作(Linux/Windows)、自动化工具(Shell/Python/Ansible)到容器技术(Docker/K8s)逐步深入。建议结合实践(如部署简单服务、编写监控脚本)巩固理论,同时关注性能优化与故障排查(如网络连接问题、资源瓶颈),逐步提升运维能力。