【Linux系统管理】从Shell脚本到容器云:Linux运维学习心得

【Linux系统管理】从Shell脚本到容器云:Linux运维学习心得

前言

《Linux系统管理》是我这学期投入时间最多的课程之一。从最基础的Shell脚本语法,一路学到云计算平台搭建和Docker容器化部署,14个章节、18份课件完整覆盖了Linux运维从入门到进阶的全链路知识。

这篇文章按课程三大模块梳理核心知识点和实验心得,每个模块都附上实验中用到的关键命令和踩坑记录。适合正在学Linux运维的同学参考,也可以作为入门学习路线的参考指南。

实验环境:CentOS 7.5 + VMware Workstation + 阿里云ECS + Docker CE

文章目录

    • 前言
    • 一、课程总览
    • 二、模块一:Shell脚本编程(第1~5章)
      • 2.1 Shell入门与重定向管道
      • 2.2 变量、判断与循环
    • 三、模块二:云计算技术(第6~12章)
      • 3.1 云计算概念与虚拟化基础
      • 3.2 主流云平台:AWS与OpenStack
      • 3.3 公有云实战:阿里云ECS + LAMP网站部署
    • 四、模块三:容器技术(第13~14章)
      • 4.1 容器基础:Docker核心概念
      • 4.2 容器化部署与运维
    • 五、总结与学习建议

一、课程总览

整个课程划分为三个递进模块,从"会用Linux命令行"到"能管云平台",再到"会容器化部署",层层递进:

模块覆盖章节核心内容实验重点
Shell脚本编程第1~5章重定向/管道 → 常用命令 → 变量 → 判断 → 循环与分支编写可复用的自动化脚本
云计算技术第6~12章虚拟化 → AWS/OpenStack → 私有云 → 公有云ECS/LAMP云主机环境搭建与网站部署
容器技术第13~14章容器基础 → 容器应用 → 容器化部署与运维Docker部署完整Web应用

三个模块之间的关系可以用下面的图来呈现——Shell是地基,云平台是上层建筑,容器是现代化的应用交付手段:

Shell脚本编程
地基:命令行基本功

云计算技术
平台:虚拟化+云服务

容器技术
交付:Docker镜像与编排

自动化运维能力

学完整门课回头看,Shell基础是最值得反复练习的部分。后面无论是SSH到云主机上操作、编写Dockerfile里的RUN指令、还是写自动化运维脚本,本质上都是在写Shell命令。前面5章学得越扎实,后面越轻松。


二、模块一:Shell脚本编程(第1~5章)

2.1 Shell入门与重定向管道

课程从Shell最基础的概念讲起——Shell是用户与Linux内核之间的"翻译官",负责把人类输入的命令翻译成内核能理解的系统调用。课程统一使用bash,系统中可用的Shell可以通过cat /etc/shells查看,常见的有sh、bash、csh、ksh等。

第一节课就接触了两个贯穿全课程的核心概念——重定向管道。这两个操作符是Shell脚本的基石:

# ===== 重定向:控制命令的输入输出流向 =====ls-l>output.txt# 标准输出覆盖写入文件(>覆盖,>>追加)echo"追加一行">>output.txt# 追加到文件末尾,不会覆盖已有内容command2>&1# 将标准错误(2)重定向到标准输出(1),合并输出# ===== 管道:把前一个命令的输出作为后一个命令的输入 =====psaux|grepnginx# 从所有进程中过滤出nginx相关进程cat/etc/passwd|wc-l# 统计Linux系统中有多少用户dmesg|tail-20# 查看最近20条内核启动日志

编写第一个Shell脚本的实验步骤虽然只用了三行命令,但"创建→赋权→执行"这个标准流程是后续所有脚本操作的基本模板:

# ① 用vi编辑器创建脚本文件vifirst.sh# 脚本内容——逐条命令,按执行顺序编写:cd/boot/pwdls-lhvml*# ② 赋予可执行权限(chmod +x)chmod+x first.sh# 验证:ls -l first.sh 应该显示 -rwxr-xr-x 权限# ③ 执行脚本——两种常用方式./first.sh# 相对路径执行(.表示当前目录)shfirst.sh# 用Shell解释器执行(不需要x权限也能跑)

踩坑记录:第一次写脚本时,写完就./first.sh,结果反复报"Permission denied"。排查了几分钟才发现忘了chmod +x。后来养成肌肉记忆:写完脚本先ls -l检查权限,chmod +x一步到位,再执行。这个习惯在后面的所有实验里都帮了大忙。


2.2 变量、判断与循环

第4~5章进入Shell编程的核心地带。变量、判断、循环三个概念,让Shell从"逐条敲命令"进化到"写程序自动执行"。

变量是脚本存储和传递数据的灵魂:

#!/bin/bash# ===== 变量定义——等号两边绝对不能有空格!这是最常见的初学者错误 =====name="Linux"version=7.5# ===== 引用变量的三种写法,各有用途 =====echo"系统:$name, 版本:$version"# 双引号中$name会被解析为变量值echo'系统: $name'# 单引号中$name原样输出,不解析echo"路径:${name}_home"# 花括号明确变量边界,防止歧义# ===== 命令替换:把命令执行结果赋给变量 =====current_date=$(date+%Y-%m-%d)# 推荐使用$()语法file_count=$(ls|wc-l)echo"今天是$current_date,当前目录有$file_count个文件"# ===== 位置参数:从脚本外部接收参数 =====echo"脚本名称:$0"echo"第一个参数:$1, 第二个参数:$2"echo"参数总数:$#"echo"所有参数列表:$@"

判断语句让脚本有了决策能力。这块学完后就可以写带逻辑判断的运维脚本了:

#!/bin/bash# ===== if-elif-else 多分支判断 =====read-p"请输入分数(0-100): "scoreif[$score-ge90];thenecho"优秀"elif[$score-ge60];thenecho"及格"elseecho"不及格"fi# ===== 常用测试条件速查表 =====# 数值比较:-eq(等于) -ne(不等于) -gt(大于) -lt(小于) -ge(>=) -le(<=)# 文件测试:-f(是普通文件) -d(是目录) -r(可读) -w(可写) -x(可执行)# 字符串测试:-z(为空) -n(非空) str1 = str2(相等) str1 != str2(不等)# 注意:[ ] 内侧必须有空格,否则语法报错

循环与分支是实现批量操作的核心:

#!/bin/bash# ===== for循环——遍历列表批量处理 =====foruserinuser1 user2 user3;douseradd$userecho"用户$user创建完成,家目录: /home/$user"done# ===== while循环——满足条件时持续执行 =====count=1while[$count-le5];doecho"第$count次循环"((count++))# 计数器自增,必须有退出条件否则死循环done# ===== case多分支匹配——比多个if-elif更清晰易读 =====read-p"选择操作(start/stop/restart): "actioncase$actioninstart)echo"正在启动服务...";;stop)echo"正在停止服务...";;restart)echo"正在重启服务...";;*)echo"无效操作,请输入start/stop/restart";;esac

核心细节提醒:Shell语法中两个最常见的坑——变量赋值name="Linux"等号两边不能有空格(跟Python/Java完全相反);判断语句[ $a -eq $b ]中括号内侧必须有空格。这些细节光看PPT是记不住的,必须亲手敲一遍、看到报错信息才能形成条件反射。


三、模块二:云计算技术(第6~12章)

3.1 云计算概念与虚拟化基础

第6~7章建立了云计算的理论框架,从虚拟化技术的起源讲起。IBM在20世纪60年代就开发了支持14个虚拟机同时运行的CP-40系统,但真正让虚拟化走向大众的是后来的VMware和AWS。

虚拟化解决了传统IT的最大痛点:一台物理服务器只跑一个应用,CPU利用率常年不到20%。通过虚拟化技术,一台物理机可以运行数十个虚拟机,每个虚拟机独立运行不同的操作系统和应用,资源利用率大幅提升。

云计算的三种服务模型是课程重点和考试常考点:

模型全称核心含义代表产品
IaaSInfrastructure as a Service提供虚拟化基础设施(虚拟机、存储、网络)阿里云ECS、AWS EC2
PaaSPlatform as a Service提供应用开发和运行平台阿里云ACE、Heroku
SaaSSoftware as a Service直接提供成品软件服务Office 365、钉钉

学习体会:刚开始总觉得IaaS/PaaS/SaaS这些概念很抽象,记不住。后来在阿里云上实际租了一台ECS实例,SSH连上去自己装软件搭环境,才真正理解——IaaS就是给你一台空白虚拟机,操作系统往上你全权负责;PaaS是你只写代码不用管服务器;SaaS是软件直接给你用。


3.2 主流云平台:AWS与OpenStack

第8章介绍了两个代表性的云平台——AWS是公有云标杆,OpenStack是私有云标杆,两者代表了云计算的两种部署模式。

AWS(亚马逊云):底层存储架构Dynamo采用完全分布式、去中心化设计,使用一致性哈希算法实现海量数据的均衡分布和高可用。核心服务包括EC2(弹性计算)、S3(对象存储)、RDS(关系数据库)、Lambda(无服务器计算)等。AWS是目前全球市场份额最大的云服务商。

OpenStack(开源私有云):相当于在自有数据中心搭建一个"迷你AWS"。课程重点讲了它的六大核心组件,理解这些组件的分工是掌握OpenStack的关键:

组件功能定位公有云类比
Nova计算服务,管理虚拟机的创建、调度和销毁AWS EC2
Neutron网络服务,管理虚拟网络、子网、路由和IPAWS VPC
Cinder块存储服务,为虚拟机提供持久化数据盘AWS EBS
Swift对象存储服务,存储非结构化数据AWS S3
Keystone身份认证服务,统一管理用户和权限AWS IAM
HorizonWeb管理界面,管理员通过浏览器操作所有资源AWS Console

第9章进行了OpenStack网络环境配置实验:

# 编辑NAT模式网卡配置文件vi/etc/sysconfig/network-scripts/ifcfg-ens33# 配置DNS——修改后立刻生效vi/etc/resolv.conf# VMware中设置本地网卡共享到vmnet8虚拟交换机# 验证网络连通ping-c3www.baidu.com

3.3 公有云实战:阿里云ECS + LAMP网站部署

第11~12章是整个课程中最贴近实际工作的部分,从零开始在公有云上搭建一个完整的Web服务。

第11章——云服务租赁:在阿里云控制台完成ECS实例的选购(选择地域、规格、镜像、网络)、设置SSH密钥对、获取公网IP、通过FTP上传网站文件到云主机。阿里云ECS属于典型的IaaS服务,优势包括按需付费(不用不花钱)、弹性伸缩(流量高峰自动扩容)、分钟级交付。

第12章——LAMP网站部署:在ECS实例上搭建完整的Web服务栈:

# ===== LAMP环境搭建完整流程(CentOS 7)=====# 第一步:安装Apache + MariaDB + PHP三件套yuminstall-yhttpd mariadb-server php php-mysql# 第二步:启动服务并设置开机自启systemctl start httpd systemctl start mariadb systemctlenablehttpd systemctlenablemariadb# 第三步:配置防火墙放行Web端口firewall-cmd --add-port=80/tcp--permanentfirewall-cmd--reload# 第四步:上传网站文件到 /var/www/html/ 目录# 第五步:浏览器访问 http://你的ECS公网IP 验证部署结果

重要踩坑——双重防火墙:在系统里用firewall-cmd放行了80端口,但从外网浏览器还是访问不了。排查半天才意识到阿里云控制台还有一个安全组规则也需要放行80端口。公有云的安全模型是云平台安全组 + 操作系统防火墙两层防护,做任何网络配置都要检查这两层是否都放行了。这个经验在后面所有云平台实验中都反复用到。


四、模块三:容器技术(第13~14章)

4.1 容器基础:Docker核心概念

第13章是课程最具现代化色彩的部分。容器和虚拟机有本质区别——虚拟机每个实例都跑完整的操作系统内核,而容器共享宿主机内核,所以启动速度从分钟级变成秒级,磁盘和内存占用也大幅降低。

课程从Docker的三个核心概念展开:

  • 镜像(Image):容器的静态模板,类似于虚拟机的ISO镜像。镜像是只读的分层文件系统。
  • 容器(Container):镜像的运行实例。一个镜像可以启动多个容器,类比"镜像是类,容器是实例对象"。
  • 仓库(Registry):存储和分发镜像的地方。Docker Hub是最大的公共仓库,类似于GitHub存放代码、Registry存放镜像。
# ===== Docker基本操作(课程实验)=====# 从Docker Hub拉取官方Nginx镜像dockerpull nginx:latest# 后台运行容器:-d后台模式 --name自定义名称 -p端口映射(宿主机:容器)dockerrun-d--namemy-nginx-p8080:80 nginx:latest# 查看当前运行的容器dockerps# 进入容器内部Shell环境(-it交互模式)dockerexec-itmy-nginx /bin/bash# 停止并删除容器dockerstop my-nginxdockerrmmy-nginx

4.2 容器化部署与运维

第14章是课程的收官之作——用Docker将前面的LAMP应用打包成镜像,实现"一次构建、到处运行"。

# ===== Dockerfile:将应用环境固化为镜像 =====# 创建文件名为 Dockerfile 的文件,内容如下:FROM centos:7 RUN yuminstall-yhttpd php php-mysql COPY ./webapp /var/www/html/ EXPOSE80CMD["httpd","-D","FOREGROUND"]# 构建镜像:-t指定镜像名和标签,最后的.表示当前目录dockerbuild-tmy-webapp:v1.# 运行容器dockerrun-d-p80:80--namewebapp my-webapp:v1# 验证:浏览器访问 http://宿主机IP

核心感悟:学完Shell脚本再回头看Dockerfile,会发现RUN后面的每一条指令本质上都是在容器中执行Shell命令。Dockerfile就是把之前手工安装LAMP环境的步骤,用脚本化的方式固化下来——之前要SSH到ECS上逐条敲命令,现在定义好Dockerfile一行docker build全自动完成,这就是容器带来的效率革命。


五、总结与学习建议

完成整门课程后,我把18个章节的核心收获凝练为三点:

  1. Shell是所有操作的底层语言:无论是SSH到云主机上敲命令、编写Dockerfile的RUN指令、还是写自动化运维脚本,本质上都是在写Shell。前5章的Shell基础是整个课程的基石,建议把常用命令(grep、awk、sed、find)练到肌肉记忆的程度,对整个运维生涯都受益无穷。

  2. 从虚拟化到容器,是运维思维的代际升级:虚拟化解决的是硬件资源利用率问题(一台机器跑多个系统),容器解决的是应用交付效率问题(一个应用秒级部署和弹性伸缩)。理解了第6章的虚拟化原理,再学第13章的Docker就是水到渠成的过程——"容器是进程级隔离的轻量虚拟化"这句话背后有扎实的理论支撑。

  3. 云运维的双重防护思维:公有云安全组 + 系统防火墙、镜像仓库权限 + 容器运行时安全——每一层都有独立的访问控制。做云运维不能只看操作系统层面,必须从云平台和虚拟机两个维度同时思考安全问题。

推荐的学习资源

  • Linux命令行与Shell脚本编程大全 —— Shell入门必读经典
  • Docker从入门到实践 —— 开源Docker中文教程,从安装到编排全覆盖
  • 阿里云ECS帮助文档 —— 公有云实战操作指南
  • 本地实验环境推荐:VMware Workstation + CentOS 7.5 + Docker CE