一、什么是 Shell
Shell(壳)是一个命令行解释器,它是用户与操作系统内核进行交互的接口。
简单来说:
- 你输入命令
- Shell 接收并解释这些命令
- Shell 调用操作系统内核执行
- 最后返回执行结果
Shell 就像是你和 Linux 之间的"翻译员"。
一个最直观的理解
比如你输入:
bash
ls
Shell 会把这个命令交给系统去执行,然后把结果显示出来。
二、Shell 的作用
Shell 的作用很简单:帮你把命令变成系统能执行的动作。
它常见的用途有:
- 查看文件
- 切换目录
- 创建文件
- 执行脚本
- 自动化运维
也就是说,Shell 是 Linux 自动化运维的基础之一。
三、为什么要学 Shell
因为很多运维工作都可以通过 Shell 脚本自动完成。
比如:
- 每天自动备份数据库
- 每小时检查服务是否存活
- 自动清理日志
- 批量重启服务
如果不用 Shell,这些事情就要一遍一遍手工做。
四、最简单的 Shell 脚本
bash
#!/bin/bash
echo "Hello Linux"
这段脚本的意思是:
- 使用 bash 执行
- 输出一句话
运行方式
bash
bash test.sh
如果加了执行权限,也可以直接运行:
bash
chmod +x test.sh
./test.sh
五、Shell 脚本最基础的几个概念
1. 变量
bash
name="linux"
echo $name
变量就是给一个值起名字,后面可以重复使用。
2. 条件判断
bash
if [ -f /tmp/test.txt ]; then
echo "文件存在"
else
echo "文件不存在"
fi
意思是:如果文件存在,就输出"文件存在"。
3. 循环
bash
for i in 1 2 3
do
echo $i
done
意思是依次输出 1、2、3。
六、Shell 在运维中的常见用途
1. 备份
bash
#!/bin/bash
cp /data/app.log /backup/app.log
2. 清理日志
bash
#!/bin/bash
rm -f /var/log/test.log
3. 检查服务
bash
#!/bin/bash
systemctl status nginx
这些都是最常见的基础运维动作。
七、Shell 和自动化运维的关系
自动化运维的核心思想就是:
原来手工做的事情,尽量交给脚本和定时任务去做。
Shell 是实现这个目标最基础、最常用的工具之一。
八、常见的 Shell 类型
常见的 Shell 类型有这些:
- bash:最主流,功能强大,Linux 和 MacOS 默认常见
- zsh:兼容 bash,扩展更强,MacOS 和 Linux 都可用
- sh:最基础的 Unix Shell,所有 Unix/Linux 基本都支持
- PowerShell:面向对象,可处理 .NET,Windows 默认常见
对于 Linux 运维来说,最常见的还是 bash。
简单记法
- bash:最常用
- sh:最基础
- zsh:更强一些,兼容 bash
- PowerShell:偏 Windows 体系
九、Shell 的核心功能
Shell 的核心功能主要有下面几类:
1. 命令执行
运行系统命令和程序。
例如:
bash
ls
pwd
cat /etc/os-release
2. 文件管理
创建、删除、复制、移动文件。
例如:
bash
touch a.txt
cp a.txt b.txt
mv b.txt /tmp/
rm -f a.txt
3. 进程管理
启动、停止、查看程序运行情况。
例如:
bash
ps -ef | grep nginx
systemctl restart nginx
systemctl status nginx
4. 脚本编程
把多个命令组合成自动化脚本。
例如:
bash
#!/bin/bash
echo "start"
date
echo "done"
5. 环境控制
配置系统环境变量、用户工作环境。
例如:
bash
export PATH=$PATH:/usr/local/bin
这些功能加在一起,就是 Shell 在 Linux 里的核心作用。
十、Shell 最擅长的场景
Shell 最擅长的场景可以简单记成下面几类:
1. 简单的单行命令
适合快速执行一个动作。
例如:
bash
ls /tmp
2. 临时任务
比如临时查日志、清理文件、检查进程。
例如:
bash
rm -f /tmp/test.log
3. 系统启动脚本
在系统启动时自动做一些初始化工作。
例如:
- 启动某个服务
- 设置环境变量
- 初始化目录
4. 管道数据处理
Shell 很适合把多个命令串起来处理数据。
常见组合是:
bash
grep / awk / sed
例如:
bash
ps -ef | grep nginx | 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 的核心价值
text
Shell + AI = 超级生产力
text
不会 Shell:只能用 AI 聊天、查资料
text
会 Shell:能用 AI 操控整个系统、自动化复杂任务
这也是现在学习 Shell 依然有价值的原因。
十四、Shell 常用命令:文件操作类
这一类命令最常用,主要用于文件和目录的查看、创建、复制、移动、删除等操作。
1. ls:列出目录内容
bash
ls
这个命令会显示当前目录下有哪些文件和文件夹。
常用参数
bash
ls -a
显示所有文件,包括隐藏文件。
bash
ls -l
以长格式显示文件详细信息。
bash
ls -la
同时显示隐藏文件和详细信息。
简单例子
bash
ls /tmp
意思是:查看 /tmp 目录下有哪些内容。
bash
ls -la /tmp
意思是:查看 /tmp 目录下的所有文件,并显示详细信息。
2. ll:ls -l 的常用别名
bash
ll
很多 Linux 环境里,ll 是 ls -l 的快捷写法。
它通常等价于:
bash
ls -l
3. cd:切换目录
bash
cd /tmp
意思是:进入 /tmp 目录。
4. pwd:显示当前目录路径
bash
pwd
意思是:查看自己现在在哪个目录里。
5. cp:复制文件或目录
bash
cp a.txt b.txt
意思是:把 a.txt 复制成 b.txt。
6. mv:移动或重命名文件
bash
mv a.txt b.txt
意思是:把 a.txt 改名成 b.txt。
如果目标是目录,就是移动文件。
7. rm:删除文件或目录
bash
rm a.txt
意思是:删除 a.txt。
8. mkdir:创建目录
bash
mkdir test
意思是:创建一个叫 test 的目录。
9. rmdir:删除空目录
bash
rmdir test
意思是:删除一个空目录。
10. touch:创建空文件或更新时间戳
bash
touch a.txt
意思是:创建一个空文件 a.txt。
11. find:查找文件
bash
find /tmp -name "*.log"
意思是:在 /tmp 目录下查找所有 .log 文件。
12. ln:创建链接文件
bash
ln -s /data/app.log app.log
意思是:创建一个指向 /data/app.log 的软链接 app.log。
ln 常用参数
bash
ln -s 目标文件 链接名
其中:
-s:表示创建软链接- 不加
-s:默认创建硬链接
简单例子
bash
ln -s /data/app.log /tmp/app.log
意思是:在 /tmp 下创建一个软链接 app.log,指向 /data/app.log。
十五、Shell 常用命令:文件查看类
这一类命令主要用于查看文件内容、分页查看、统计内容、查看大小和文件类型。
1. cat:查看文件内容(全部显示)
bash
cat a.txt
意思是:把 a.txt 的内容全部显示出来。
2. less:分页查看文件(可上下翻页)
bash
less /var/log/syslog
意思是:分页查看日志文件,可以上下翻页。
常用操作:
Space:下一页b:上一页/关键词:搜索q:退出
3. more:分页查看文件(只能向下翻页)
bash
more /var/log/syslog
意思是:分页查看文件,但只能向下翻页。
4. head:查看文件开头
bash
head a.txt
默认显示前 10 行。
5. tail:查看文件结尾
bash
tail a.txt
默认显示后 10 行。
6. wc:统计行数、单词数、字节数
bash
wc a.txt
意思是:统计文件的行数、单词数和字节数。
7. du:查看文件或目录大小
bash
du -sh /var/log
意思是:查看 /var/log 目录占用多大空间。
8. df:查看磁盘空间使用情况
bash
df -h
意思是:查看磁盘使用情况,单位更容易读。
9. file:查看文件类型
bash
file test.sh
意思是:查看 test.sh 是文本文件、脚本文件还是其他类型。
十六、Shell 常用命令:文本处理类
这一类命令最常用于日志分析、文本过滤、结果整理。
1. grep:搜索文本
bash
grep "error" app.log
意思是:在 app.log 里搜索包含 error 的行。
2. awk:按列处理文本
bash
awk '{print $1}' file.txt
意思是:输出每一行的第一列。
3. sed:流式文本编辑
bash
sed 's/old/new/g' file.txt
意思是:把 old 替换成 new。
4. sort:排序
bash
sort file.txt
意思是:把 file.txt 内容排序后输出。
5. uniq:去重
bash
uniq file.txt
意思是:去掉相邻重复行。
6. cut:剪切列
bash
cut -d ':' -f 1 /etc/passwd
意思是:以 : 为分隔符,取第一列。
7. tr:替换或删除字符
bash
tr 'a-z' 'A-Z'
意思是:把小写字母转换成大写字母。
8. diff:比较文件差异
bash
diff a.txt b.txt
意思是:比较 a.txt 和 b.txt 的不同。
9. echo:输出文本
bash
echo "hello"
意思是:输出一段文字。
十七、Shell 常用命令快速记忆
文件操作类
ls:看目录内容ls -a:看所有文件,包括隐藏文件ls -l:看详细信息ls -la:看所有文件的详细信息ll:ls -l的常用简写ln -s:创建软链接
文件查看类
cat:看全部内容less:分页看,能上下翻页more:分页看,只能向下翻页head:看开头tail:看结尾wc:统计行数、单词数、字节数du:看目录或文件大小df:看磁盘空间file:看文件类型
文本处理类
grep:搜索文本awk:按列处理文本sed:替换、删除、编辑文本sort:排序uniq:去重cut:剪切列tr:替换或删除字符diff:比较文件差异echo:输出文本
十八、Shell 常用命令:网络类
这一类命令主要用于测试网络、查看连接、传输文件、远程登录。
1. ping:测试网络连通性
bash
ping 8.8.8.8
意思是:测试到 8.8.8.8 的网络是否通。
2. curl:发送网络请求
bash
curl https://example.com
意思是:向这个网址发起请求,查看返回内容。
3. wget:下载文件
bash
wget https://example.com/test.zip
意思是:从网上下载一个文件。
4. ssh:远程登录
bash
ssh root@192.168.1.10
意思是:远程登录到另一台 Linux 机器。
5. scp:远程复制文件
bash
scp a.txt root@192.168.1.10:/tmp/
意思是:把 a.txt 复制到远程机器的 /tmp/ 目录。
6. netstat:查看网络连接状态
bash
netstat -tulnp
意思是:查看当前机器有哪些端口在监听。
7. ifconfig:查看/配置网络接口
bash
ifconfig
意思是:查看网卡信息。
8. ip:ifconfig 的新版替代命令
bash
ip addr
意思是:查看网卡地址信息。
9. nslookup:查询 DNS 记录
bash
nslookup www.baidu.com
意思是:查看域名对应的 IP。
10. telnet:远程测试端口
bash
telnet 192.168.1.10 80
意思是:测试这台机器的 80 端口通不通。
十九、Shell 常用命令:权限与用户类
这一类命令主要用于修改权限、切换用户、查看当前用户身份、创建用户等。
1. chmod:修改文件权限
bash
chmod +x test.sh
意思是:给 test.sh 加上可执行权限。
2. chown:修改文件所有者
bash
chown root:root a.txt
意思是:把 a.txt 的所有者和所属组改成 root。
3. chgrp:修改文件所属组
bash
chgrp docker a.txt
意思是:把 a.txt 的所属组改成 docker。
4. useradd:创建用户
bash
useradd testuser
意思是:创建一个新用户 testuser。
5. passwd:修改密码
bash
passwd testuser
意思是:修改 testuser 的密码。
6. su:切换用户
bash
su - testuser
意思是:切换到 testuser 用户。
7. sudo:以 root 权限执行命令
bash
sudo systemctl restart nginx
意思是:以管理员权限重启 nginx。
8. whoami:显示当前用户名
bash
whoami
意思是:查看当前是谁在执行命令。
9. id:显示用户 ID 和组 ID
bash
id
意思是:查看当前用户的 UID、GID 以及所属组。
二十、Shell 常用命令:进程与系统类
这一类命令主要用于查看进程、管理进程、控制后台任务、管理系统服务。
1. ps:查看进程状态
bash
ps
意思是:查看当前进程情况。
2. top:动态显示进程
bash
top
意思是:实时查看系统里哪些进程最占资源。
3. htop:增强版 top
bash
htop
意思是:比 top 更好看、更好用的进程查看工具。
4. kill:终止进程
bash
kill 1234
意思是:结束 PID 为 1234 的进程。
5. pkill:按名称终止进程
bash
pkill nginx
意思是:结束名字包含 nginx 的进程。
6. jobs:查看后台任务
bash
jobs
意思是:查看当前终端里有哪些后台任务。
7. fg:将后台任务调到前台
bash
fg
意思是:把后台任务切回前台继续运行。
8. bg:将前台任务调到后台
bash
bg
意思是:让当前任务在后台继续跑。
9. nohup:后台运行,退出终端也不停止
bash
nohup python app.py &
意思是:即使你退出终端,程序也继续运行。
10. systemctl:管理系统服务
bash
systemctl status nginx
意思是:查看 nginx 服务状态。
bash
systemctl restart nginx
意思是:重启 nginx 服务。
二十一、Shell 常用命令:压缩与打包类
这一类命令主要用于压缩、解压、打包文件。
1. tar:打包和解包
bash
tar -cvf test.tar dir/
意思是:把 dir/ 打包成 test.tar。
bash
tar -xvf test.tar
意思是:把 test.tar 解包出来。
2. gzip:压缩文件
bash
gzip test.txt
意思是:把 test.txt 压缩成 test.txt.gz。
3. gunzip:解压 .gz 文件
bash
gunzip test.txt.gz
意思是:把 .gz 文件解压回来。
4. zip:打包压缩为 zip
bash
zip test.zip test.txt
意思是:把 test.txt 打包成 test.zip。
5. unzip:解压 zip 文件
bash
unzip test.zip
意思是:解压 test.zip。
6. xz:压缩为 .xz 格式
bash
xz test.txt
意思是:把 test.txt 压缩成 test.txt.xz。
常见记法
tar:打包/解包gzip:压缩gunzip:解压.gzzip:压成 zipunzip:解压 zipxz:压成 xz
二十一、Shell 常用命令:最常用的 TOP 10
这一页可以当作最基础的入门记忆表。
1. ls:看有什么文件
bash
ls
2. cd:进入目录
bash
cd /tmp
3. pwd:看自己在哪
bash
pwd
4. cp / mv:复制 / 移动文件
bash
cp a.txt b.txt
mv b.txt /tmp/
5. rm:删除文件
bash
rm a.txt
6. cat / less:看文件内容
bash
cat a.txt
less /var/log/syslog
7. grep:搜索内容
bash
grep "error" app.log
8. ps:看进程
bash
ps
9. chmod:改权限
bash
chmod +x test.sh
10. man:不会用就查手册
bash
man ls
二十二、Shell 常用命令:帮助与文档类
这一类命令主要用于查看命令帮助、命令位置、历史记录等。
1. man:查看命令手册
bash
man ls
意思是:查看 ls 命令的详细手册。
2. help:查看内置命令帮助
bash
help cd
意思是:查看 cd 这个内置命令的帮助信息。
3. whatis:查看命令简介
bash
whatis ls
意思是:查看 ls 是做什么的。
4. which:查看命令所在路径
bash
which ls
意思是:查看 ls 命令实际在哪个路径下。
5. whereis:查看命令的二进制、源码、手册路径
bash
whereis ls
意思是:查看 ls 的可执行文件、源码和手册在哪里。
6. history:查看命令历史
bash
history
意思是:查看当前终端执行过的命令记录。
二十三、Shell 常用命令快速记忆
文件操作类
ls:看目录内容ls -a:看所有文件,包括隐藏文件ls -l:看详细信息ls -la:看所有文件的详细信息ll:ls -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:管理系统服务