Linux 与 Shell 自动化运维基础知识记录
一、什么是 ShellShell壳是一个命令行解释器它是用户与操作系统内核进行交互的接口。简单来说你输入命令Shell 接收并解释这些命令Shell 调用操作系统内核执行最后返回执行结果Shell 就像是你和 Linux 之间的“翻译员”。一个最直观的理解比如你输入lsShell 会把这个命令交给系统去执行然后把结果显示出来。二、Shell 的作用Shell 的作用很简单帮你把命令变成系统能执行的动作。它常见的用途有查看文件切换目录创建文件执行脚本自动化运维也就是说Shell 是 Linux 自动化运维的基础之一。三、为什么要学 Shell因为很多运维工作都可以通过 Shell 脚本自动完成。比如每天自动备份数据库每小时检查服务是否存活自动清理日志批量重启服务如果不用 Shell这些事情就要一遍一遍手工做。四、最简单的 Shell 脚本#!/bin/bashechoHello Linux这段脚本的意思是使用 bash 执行输出一句话运行方式bashtest.sh如果加了执行权限也可以直接运行chmodx test.sh ./test.sh五、Shell 脚本最基础的几个概念1. 变量namelinuxecho$name变量就是给一个值起名字后面可以重复使用。2. 条件判断if[-f/tmp/test.txt];thenecho文件存在elseecho文件不存在fi意思是如果文件存在就输出“文件存在”。3. 循环foriin123doecho$idone意思是依次输出 1、2、3。六、Shell 在运维中的常见用途1. 备份#!/bin/bashcp/data/app.log /backup/app.log2. 清理日志#!/bin/bashrm-f/var/log/test.log3. 检查服务#!/bin/bashsystemctl status nginx这些都是最常见的基础运维动作。七、Shell 和自动化运维的关系自动化运维的核心思想就是原来手工做的事情尽量交给脚本和定时任务去做。Shell 是实现这个目标最基础、最常用的工具之一。八、常见的 Shell 类型常见的 Shell 类型有这些bash最主流功能强大Linux 和 MacOS 默认常见zsh兼容 bash扩展更强MacOS 和 Linux 都可用sh最基础的 Unix Shell所有 Unix/Linux 基本都支持PowerShell面向对象可处理 .NETWindows 默认常见对于 Linux 运维来说最常见的还是bash。简单记法bash最常用sh最基础zsh更强一些兼容 bashPowerShell偏 Windows 体系九、Shell 的核心功能Shell 的核心功能主要有下面几类1. 命令执行运行系统命令和程序。例如lspwdcat/etc/os-release2. 文件管理创建、删除、复制、移动文件。例如toucha.txtcpa.txt b.txtmvb.txt /tmp/rm-fa.txt3. 进程管理启动、停止、查看程序运行情况。例如ps-ef|grepnginx systemctl restart nginx systemctl status nginx4. 脚本编程把多个命令组合成自动化脚本。例如#!/bin/bashechostartdateechodone5. 环境控制配置系统环境变量、用户工作环境。例如exportPATH$PATH:/usr/local/bin这些功能加在一起就是 Shell 在 Linux 里的核心作用。十、Shell 最擅长的场景Shell 最擅长的场景可以简单记成下面几类1. 简单的单行命令适合快速执行一个动作。例如ls/tmp2. 临时任务比如临时查日志、清理文件、检查进程。例如rm-f/tmp/test.log3. 系统启动脚本在系统启动时自动做一些初始化工作。例如启动某个服务设置环境变量初始化目录4. 管道数据处理Shell 很适合把多个命令串起来处理数据。常见组合是grep/awk/sed例如ps-ef|grepnginx|awk{print $2}5. 交互式命令行操作在终端里边查边改做快速操作。例如查文件查进程看日志6. 性能敏感的批量小文件处理Shell 处理大量小文件时很方便。例如批量改名批量删除批量移动十一、Shell 的常见限制1. 不适合太复杂的逻辑Shell 可以写逻辑但太复杂后可读性会下降。2. 不适合大型程序开发大型项目更适合 Python、Java、Go。3. 不适合特别复杂的数据处理能做但维护起来不如专门语言舒服。十二、AI 时代 Shell 的常用场景AI 时代里Shell 依然很有用只是使用方式更丰富了。1. AI 辅助脚本开发让 AI 帮你写 Shell 脚本从自然语言直接生成可执行代码。例如“帮我写一个每天备份日志的脚本”“帮我写一个检查 nginx 是否存活的脚本”2. 智能日志分析Shell 负责采集和预处理日志AI 负责分析和判断。例如Shell 提取日志文件AI 分析异常内容AI 给出问题结论3. AIOps 自动化运维Shell 作为执行层AI 作为决策层。例如Shell 检查服务状态AI 判断是否异常AI 给出处理建议4. AI 数据预处理Shell 可以快速整理训练数据。例如去重过滤合并文件转换格式5. AI 模型部署与管理Shell 常用于启动、停止、更新模型服务。例如启动推理服务拉取新版本代码重启模型容器6. AI 工作流编排Shell 可以把多个 AI 工具串起来形成自动化流程。例如先抓取数据再调用模型最后整理结果7. AI 安全与监控Shell 可以配合 AI 做系统检查。例如检查端口是否开放检查日志是否有异常检查磁盘是否快满了十三、AI 时代 Shell 的核心价值Shell AI 超级生产力不会 Shell只能用 AI 聊天、查资料会 Shell能用 AI 操控整个系统、自动化复杂任务这也是现在学习 Shell 依然有价值的原因。十四、Shell 常用命令文件操作类这一类命令最常用主要用于文件和目录的查看、创建、复制、移动、删除等操作。1.ls列出目录内容ls这个命令会显示当前目录下有哪些文件和文件夹。常用参数ls-a显示所有文件包括隐藏文件。ls-l以长格式显示文件详细信息。ls-la同时显示隐藏文件和详细信息。简单例子ls/tmp意思是查看/tmp目录下有哪些内容。ls-la/tmp意思是查看/tmp目录下的所有文件并显示详细信息。2.llls -l的常用别名ll很多 Linux 环境里ll是ls -l的快捷写法。它通常等价于ls-l3.cd切换目录cd/tmp意思是进入/tmp目录。4.pwd显示当前目录路径pwd意思是查看自己现在在哪个目录里。5.cp复制文件或目录cpa.txt b.txt意思是把a.txt复制成b.txt。6.mv移动或重命名文件mva.txt b.txt意思是把a.txt改名成b.txt。如果目标是目录就是移动文件。7.rm删除文件或目录rma.txt意思是删除a.txt。8.mkdir创建目录mkdirtest意思是创建一个叫test的目录。9.rmdir删除空目录rmdirtest意思是删除一个空目录。10.touch创建空文件或更新时间戳toucha.txt意思是创建一个空文件a.txt。11.find查找文件find/tmp-name*.log意思是在/tmp目录下查找所有.log文件。12.ln创建链接文件ln-s/data/app.log app.log意思是创建一个指向/data/app.log的软链接app.log。ln常用参数ln-s目标文件 链接名其中-s表示创建软链接不加-s默认创建硬链接简单例子ln-s/data/app.log /tmp/app.log意思是在/tmp下创建一个软链接app.log指向/data/app.log。十五、Shell 常用命令文件查看类这一类命令主要用于查看文件内容、分页查看、统计内容、查看大小和文件类型。1.cat查看文件内容全部显示cata.txt意思是把a.txt的内容全部显示出来。2.less分页查看文件可上下翻页less/var/log/syslog意思是分页查看日志文件可以上下翻页。常用操作Space下一页b上一页/关键词搜索q退出3.more分页查看文件只能向下翻页more/var/log/syslog意思是分页查看文件但只能向下翻页。4.head查看文件开头heada.txt默认显示前 10 行。5.tail查看文件结尾taila.txt默认显示后 10 行。6.wc统计行数、单词数、字节数wca.txt意思是统计文件的行数、单词数和字节数。7.du查看文件或目录大小du-sh/var/log意思是查看/var/log目录占用多大空间。8.df查看磁盘空间使用情况df-h意思是查看磁盘使用情况单位更容易读。9.file查看文件类型filetest.sh意思是查看test.sh是文本文件、脚本文件还是其他类型。十六、Shell 常用命令文本处理类这一类命令最常用于日志分析、文本过滤、结果整理。1.grep搜索文本greperrorapp.log意思是在app.log里搜索包含error的行。2.awk按列处理文本awk{print $1}file.txt意思是输出每一行的第一列。3.sed流式文本编辑seds/old/new/gfile.txt意思是把old替换成new。4.sort排序sortfile.txt意思是把file.txt内容排序后输出。5.uniq去重uniqfile.txt意思是去掉相邻重复行。6.cut剪切列cut-d:-f1/etc/passwd意思是以:为分隔符取第一列。7.tr替换或删除字符tra-zA-Z意思是把小写字母转换成大写字母。8.diff比较文件差异diffa.txt b.txt意思是比较a.txt和b.txt的不同。9.echo输出文本echohello意思是输出一段文字。十七、Shell 常用命令快速记忆文件操作类ls看目录内容ls -a看所有文件包括隐藏文件ls -l看详细信息ls -la看所有文件的详细信息llls -l的常用简写ln -s创建软链接文件查看类cat看全部内容less分页看能上下翻页more分页看只能向下翻页head看开头tail看结尾wc统计行数、单词数、字节数du看目录或文件大小df看磁盘空间file看文件类型文本处理类grep搜索文本awk按列处理文本sed替换、删除、编辑文本sort排序uniq去重cut剪切列tr替换或删除字符diff比较文件差异echo输出文本十八、Shell 常用命令网络类这一类命令主要用于测试网络、查看连接、传输文件、远程登录。1.ping测试网络连通性ping8.8.8.8意思是测试到8.8.8.8的网络是否通。2.curl发送网络请求curlhttps://example.com意思是向这个网址发起请求查看返回内容。3.wget下载文件wgethttps://example.com/test.zip意思是从网上下载一个文件。4.ssh远程登录sshroot192.168.1.10意思是远程登录到另一台 Linux 机器。5.scp远程复制文件scpa.txt root192.168.1.10:/tmp/意思是把a.txt复制到远程机器的/tmp/目录。6.netstat查看网络连接状态netstat-tulnp意思是查看当前机器有哪些端口在监听。7.ifconfig查看/配置网络接口ifconfig意思是查看网卡信息。8.ipifconfig的新版替代命令ipaddr意思是查看网卡地址信息。9.nslookup查询 DNS 记录nslookupwww.baidu.com意思是查看域名对应的 IP。10.telnet远程测试端口telnet192.168.1.1080意思是测试这台机器的 80 端口通不通。十九、Shell 常用命令权限与用户类这一类命令主要用于修改权限、切换用户、查看当前用户身份、创建用户等。1.chmod修改文件权限chmodx test.sh意思是给test.sh加上可执行权限。2.chown修改文件所有者chownroot:root a.txt意思是把a.txt的所有者和所属组改成root。3.chgrp修改文件所属组chgrpdockera.txt意思是把a.txt的所属组改成docker。4.useradd创建用户useraddtestuser意思是创建一个新用户testuser。5.passwd修改密码passwdtestuser意思是修改testuser的密码。6.su切换用户su- testuser意思是切换到testuser用户。7.sudo以 root 权限执行命令sudosystemctl restart nginx意思是以管理员权限重启 nginx。8.whoami显示当前用户名whoami意思是查看当前是谁在执行命令。9.id显示用户 ID 和组 IDid意思是查看当前用户的 UID、GID 以及所属组。二十、Shell 常用命令进程与系统类这一类命令主要用于查看进程、管理进程、控制后台任务、管理系统服务。1.ps查看进程状态ps意思是查看当前进程情况。2.top动态显示进程top意思是实时查看系统里哪些进程最占资源。3.htop增强版tophtop意思是比top更好看、更好用的进程查看工具。4.kill终止进程kill1234意思是结束 PID 为1234的进程。5.pkill按名称终止进程pkillnginx意思是结束名字包含nginx的进程。6.jobs查看后台任务jobs意思是查看当前终端里有哪些后台任务。7.fg将后台任务调到前台fg意思是把后台任务切回前台继续运行。8.bg将前台任务调到后台bg意思是让当前任务在后台继续跑。9.nohup后台运行退出终端也不停止nohuppython app.py意思是即使你退出终端程序也继续运行。10.systemctl管理系统服务systemctl status nginx意思是查看 nginx 服务状态。systemctl restart nginx意思是重启 nginx 服务。二十一、Shell 常用命令压缩与打包类这一类命令主要用于压缩、解压、打包文件。1.tar打包和解包tar-cvftest.tar dir/意思是把dir/打包成test.tar。tar-xvftest.tar意思是把test.tar解包出来。2.gzip压缩文件gziptest.txt意思是把test.txt压缩成test.txt.gz。3.gunzip解压.gz文件gunzip test.txt.gz意思是把.gz文件解压回来。4.zip打包压缩为 zipziptest.zip test.txt意思是把test.txt打包成test.zip。5.unzip解压 zip 文件unziptest.zip意思是解压test.zip。6.xz压缩为.xz格式xz test.txt意思是把test.txt压缩成test.txt.xz。常见记法tar打包/解包gzip压缩gunzip解压.gzzip压成 zipunzip解压 zipxz压成 xz二十一、Shell 常用命令最常用的 TOP 10这一页可以当作最基础的入门记忆表。1.ls看有什么文件ls2.cd进入目录cd/tmp3.pwd看自己在哪pwd4.cp/mv复制 / 移动文件cpa.txt b.txtmvb.txt /tmp/5.rm删除文件rma.txt6.cat/less看文件内容cata.txtless/var/log/syslog7.grep搜索内容greperrorapp.log8.ps看进程ps9.chmod改权限chmodx test.sh10.man不会用就查手册manls二十二、Shell 常用命令帮助与文档类这一类命令主要用于查看命令帮助、命令位置、历史记录等。1.man查看命令手册manls意思是查看ls命令的详细手册。2.help查看内置命令帮助helpcd意思是查看cd这个内置命令的帮助信息。3.whatis查看命令简介whatisls意思是查看ls是做什么的。4.which查看命令所在路径whichls意思是查看ls命令实际在哪个路径下。5.whereis查看命令的二进制、源码、手册路径whereisls意思是查看ls的可执行文件、源码和手册在哪里。6.history查看命令历史history意思是查看当前终端执行过的命令记录。二十三、Shell 常用命令快速记忆文件操作类ls看目录内容ls -a看所有文件包括隐藏文件ls -l看详细信息ls -la看所有文件的详细信息llls -l的常用简写ln -s创建软链接文件查看类cat看全部内容less分页看能上下翻页more分页看只能向下翻页head看开头tail看结尾wc统计行数、单词数、字节数du看目录或文件大小df看磁盘空间file看文件类型文本处理类grep搜索文本awk按列处理文本sed替换、删除、编辑文本sort排序uniq去重cut剪切列tr替换或删除字符diff比较文件差异echo输出文本进程与系统类ps看进程状态top动态看进程htop增强版topkill终止进程pkill按名称终止进程jobs看后台任务fg调到前台bg调到后台nohup退出终端也不中断systemctl管理系统服务