运维小白逆袭:从 Linux 命令到 Docker 容器的零基础成长笔记

运维小白逆袭:从 Linux 命令到 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 的区别是什么?各自的应用场景有哪些?

特性TCPUDP
连接性面向连接(三次握手建立连接)无连接(直接发送数据包)
可靠性可靠传输(确认、重传、排序)不可靠传输(无确认机制)
传输效率效率低(头部开销大)效率高(头部仅 8 字节)
应用场景HTTP、FTP、SMTP视频流、DNS、SNMP、游戏通信

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="[email protected]"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"<<EOF Warning: $error_count errors found in $LOG_FILE. Please check the server immediately. EOFfi

Python 定时文件清理脚本

import os import time from datetime import datetime, timedelta defclean_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"[email protected]"-To "[email protected]"-Subject "Service Alert"-Body $output-SmtpServer "smtp.domain.com"}

对于日志脚本我应该下个月开始学习,并深入了解。

如何管理和优化 Docker 容器?

镜像优化

  • 使用多阶段构建减少镜像层数和体积,例如合并 RUN 指令。
  • 选择 Alpine 等轻量级基础镜像,避免包含冗余依赖。
  • 定期清理无用镜像:docker image prune -a

资源限制

  • 使用 docker stats 实时监控资源使用情况。

通过 --memory--cpu 参数限制容器资源,防止单容器耗尽主机资源:

docker run --memory=512m --cpus=1.5 my_app 

性能调优技巧

存储优化

  • 考虑使用 tmpfs mounts 加速临时文件读写。

避免容器存储驱动(如 overlay2)成为瓶颈,对于高 I/O 场景,挂载卷(Volume)替代容器层写入:

docker run -v /host/path:/container/path my_app 

网络优化

  • 选择适当的网络模式(如 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)逐步深入。建议结合实践(如部署简单服务、编写监控脚本)巩固理论,同时关注性能优化与故障排查(如网络连接问题、资源瓶颈),逐步提升运维能力。