文章目录
- [Linux Shell命令完全指南](#Linux Shell命令完全指南)
-
- [一、Shell 基础入门](#一、Shell 基础入门)
-
- [1. 什么是 Shell?](#1. 什么是 Shell?)
- [2. 核心基础命令(必背)](#2. 核心基础命令(必背))
- [3. 常用快捷键(提升效率)](#3. 常用快捷键(提升效率))
- 二、文件操作进阶
-
- [1. 文件内容查看与编辑](#1. 文件内容查看与编辑)
- [2. 文件搜索与过滤](#2. 文件搜索与过滤)
- [3. 文件权限管理](#3. 文件权限管理)
- 三、系统管理与监控
-
- [1. 进程管理](#1. 进程管理)
- [2. 系统资源监控](#2. 系统资源监控)
- [3. 系统服务管理(Systemd)](#3. 系统服务管理(Systemd))
- 四、高级技巧:管道、重定向与脚本
-
- [1. 管道命令(`|`):连接多个命令,前一个输出作为后一个输入](#1. 管道命令(
|):连接多个命令,前一个输出作为后一个输入) - [2. 重定向(`>`/`>>`/`<`):控制命令输入输出](#2. 重定向(
>/>>/<):控制命令输入输出) - [3. Shell 脚本入门(自动化批量操作)](#3. Shell 脚本入门(自动化批量操作))
- [1. 管道命令(`|`):连接多个命令,前一个输出作为后一个输入](#1. 管道命令(
- 五、常见问题排查与避坑指南
- 六、总结与进阶学习
-
- [1. 核心要点回顾](#1. 核心要点回顾)
- [2. 进阶学习方向](#2. 进阶学习方向)
- [3. 常用参考资源](#3. 常用参考资源)
Linux Shell命令完全指南
若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com
Shell 是 Linux/Unix 系统的核心交互工具,掌握 Shell 命令能极大提升开发、运维效率。本文从基础操作到高级技巧,覆盖文件管理、系统监控、批量处理等核心场景,结合详细示例、参数表格和实战脚本,适合初学者入门与开发者进阶参考。

一、Shell 基础入门
1. 什么是 Shell?
Shell 是操作系统的命令行解释器,用于接收用户指令并调用系统内核执行。常见的 Shell 版本包括:
- Bash:Linux 系统默认 Shell(本文基于 Bash 讲解)
- Zsh:兼容 Bash,支持更多插件和语法优化
- Sh:Unix 系统原生 Shell,语法更简洁
2. 核心基础命令(必背)
| 命令 | 功能描述 | 常用参数 | 实操示例 |
|---|---|---|---|
ls |
列出目录内容 | -l(详细信息)、-a(显示隐藏文件)、-h(人性化大小) |
ls -lha(查看当前目录所有文件及权限、大小) |
cd |
切换目录 | ..(上一级)、~(家目录)、-(上一次目录) |
cd ~/Documents(切换到文档目录) |
pwd |
显示当前工作目录 | 无核心参数 | pwd(输出:/home/user/Documents) |
mkdir |
创建目录 | -p(递归创建多级目录) |
mkdir -p project/{src,docs}(创建项目目录及子目录) |
touch |
创建空文件或修改文件时间 | 无核心参数 | touch test.txt(创建空文件) |
rm |
删除文件/目录 | -r(递归删除目录)、-f(强制删除,不提示) |
rm -rf old_dir(强制删除旧目录及内容) |
cp |
复制文件/目录 | -r(复制目录)、-v(显示复制过程) |
cp -rv src/ dest/(复制 src 目录到 dest,显示进度) |
mv |
移动/重命名文件/目录 | -v(显示移动过程) |
mv test.txt docs/(移动文件到 docs 目录) |
cat |
查看文件内容 | -n(显示行号) |
cat -n config.yml(查看配置文件并显示行号) |
echo |
输出字符串或环境变量 | -e(解析转义字符) |
echo "Hello Shell"(输出字符串)、echo $PATH(输出环境变量) |
3. 常用快捷键(提升效率)
| 快捷键 | 功能描述 |
|---|---|
Tab |
自动补全命令/文件名(双击显示所有选项) |
Ctrl+C |
终止当前运行的命令 |
Ctrl+Z |
暂停当前命令(可通过 fg 恢复) |
Ctrl+R |
搜索历史命令(输入关键词匹配) |
↑/↓ |
切换历史命令 |
Ctrl+L |
清空终端屏幕 |
二、文件操作进阶
1. 文件内容查看与编辑
| 命令 | 功能描述 | 适用场景 | 实操示例 |
|---|---|---|---|
cat |
一次性显示文件全部内容 | 小文件快速查看 | cat log.txt(查看日志文件) |
more |
分页显示文件内容(向下滚动) | 中大型文件查看 | more large_file.txt(按 Enter 翻行,Q 退出) |
less |
分页显示(支持上下滚动、搜索) | 大型文件查看 | less access.log(按 /关键词 搜索,Esc 退出) |
head |
查看文件前 N 行 | 查看文件开头(如配置文件头部) | head -10 error.log(查看前 10 行错误日志) |
tail |
查看文件后 N 行 | 实时监控日志 | tail -f app.log(实时刷新显示最新日志) |
nano |
简单文本编辑器(无需学习成本) | 快速修改文件 | nano test.sh(编辑脚本文件,Ctrl+O 保存,Ctrl+X 退出) |
vim |
高级文本编辑器(需学习基础操作) | 代码编写、复杂文件编辑 | vim main.go(编辑 Go 代码,i 进入编辑模式,:wq 保存退出) |
2. 文件搜索与过滤
(1)find:按条件搜索文件/目录
bash
# 语法:find [搜索路径] [搜索条件] [操作]
find ~/ -name "*.go" # 搜索家目录下所有 .go 文件
find /var/log -type f -mtime -7 # 搜索 /var/log 下 7 天内修改的文件(-type f 表示文件)
find ./project -size +10M # 搜索项目目录下大于 10MB 的文件
find ./src -name "*.txt" -exec rm -f {} \; # 搜索并删除 src 目录下所有 .txt 文件({} 表示搜索结果)
(2)grep:过滤文件内容或命令输出
bash
# 语法:grep [参数] 关键词 文件名/命令输出
grep "error" app.log # 从日志文件中搜索包含 "error" 的行
grep -i "warning" app.log # 忽略大小写搜索 "warning"
grep -n "timeout" config.yml # 搜索并显示行号
ps aux | grep "nginx" # 过滤 nginx 进程(结合管道命令)
(3)awk:文本处理工具(按列分割、格式化输出)
bash
# 示例1:查看系统用户(/etc/passwd 格式:用户名:密码:UID:GID:描述:家目录:Shell)
awk -F ":" '{print "用户名:"$1, "UID:"$3}' /etc/passwd
# 示例2:统计日志中各状态码出现次数(日志格式:... 200 OK ...)
grep -E "[0-9]{3}" access.log | awk '{print $9}' | sort | uniq -c | sort -nr
3. 文件权限管理
(1)权限表示规则
- 权限字符串:
rwxr-xr--(共 10 位)- 第 1 位:文件类型(
-普通文件、d目录、l软链接) - 第 2-4 位:所有者权限(
r读、w写、x执行) - 第 5-7 位:所属组权限
- 第 8-10 位:其他用户权限
- 第 1 位:文件类型(
- 数字权限(常用):
r=4、w=2、x=1,总和表示权限等级755:所有者 rwx(7)、组 r-x(5)、其他 r-x(5)(默认目录权限)644:所有者 rw-(6)、组 r--(4)、其他 r--(4)(默认文件权限)
(2)权限修改命令
bash
# chmod:修改权限(字母/数字方式)
chmod 755 script.sh # 数字方式:所有者可执行,其他只读
chmod u+x script.sh # 字母方式:给所有者添加执行权限(u=所有者,g=组,o=其他,a=所有)
# chown:修改文件所有者和组
sudo chown user:group test.txt # 将文件所有者改为 user,所属组改为 group
sudo chown -R user:group project/ # 递归修改目录及内容的所有者和组
三、系统管理与监控
1. 进程管理
| 命令 | 功能描述 | 常用参数 | 实操示例 |
|---|---|---|---|
ps |
查看进程状态 | aux(显示所有进程详细信息)、ef(显示进程树) |
`ps aux |
top |
实时监控系统资源与进程 | -p PID(监控指定进程)、H(显示线程) |
top -p 1234(实时监控 PID 为 1234 的进程) |
htop |
增强版 top(更友好的界面) | 无核心参数 | htop(实时监控,支持鼠标操作) |
kill |
终止进程 | -9(强制终止,无响应时使用)、-15(正常终止,默认) |
kill -9 1234(强制终止 PID 为 1234 的进程) |
pkill |
按进程名终止进程 | -f(匹配完整命令行) |
pkill -f "python app.py"(终止所有运行 app.py 的 Python 进程) |
2. 系统资源监控
bash
# 1. 查看 CPU 信息
lscpu # 显示 CPU 架构、核心数、频率等
top # 实时查看 CPU 使用率(%us 表示用户进程占用)
# 2. 查看内存信息
free -h # 人性化显示内存使用情况(total/used/free/available)
vmstat # 显示内存、进程、IO 等系统状态
# 3. 查看磁盘信息
df -h # 查看磁盘分区使用情况
du -sh ~/ # 查看家目录总大小(-s 汇总,-h 人性化)
du -h --max-depth=1 ~/ # 查看家目录下一级目录大小
# 4. 查看网络状态
ifconfig # 查看网卡信息(CentOS 需安装 net-tools)
ip addr # 查看 IP 地址(通用命令)
netstat -tuln # 查看监听的端口(t=TCP,u=UDP,l=监听,n=数字格式)
ss -tuln # 增强版 netstat(更快)
ping -c 4 baidu.com # 测试网络连通性(-c 4 发送 4 个包)
curl -I https://www.baidu.com # 查看 HTTP 响应头(测试网站可用性)
3. 系统服务管理(Systemd)
bash
# 语法:systemctl [命令] 服务名
sudo systemctl start nginx # 启动 Nginx 服务
sudo systemctl stop nginx # 停止 Nginx 服务
sudo systemctl restart nginx # 重启 Nginx 服务
sudo systemctl status nginx # 查看 Nginx 运行状态
sudo systemctl enable nginx # 设置 Nginx 开机自启
sudo systemctl disable nginx # 取消开机自启
四、高级技巧:管道、重定向与脚本
1. 管道命令(|):连接多个命令,前一个输出作为后一个输入
bash
# 示例1:查看当前目录下最大的 5 个文件
ls -lha | sort -k5 -nr | head -n 5 # sort -k5 按第 5 列(大小)排序,-nr 逆序数字排序
# 示例2:统计日志中 ERROR 出现的次数
grep -i "error" app.log | wc -l # wc -l 统计行数
# 示例3:查找占用 CPU 最高的 3 个进程
ps aux | sort -k3 -nr | head -n 3 # sort -k3 按第 3 列(CPU 使用率)排序
2. 重定向(>/>>/<):控制命令输入输出
| 符号 | 功能描述 | 示例 |
|---|---|---|
> |
覆盖输出到文件(文件不存在则创建,存在则清空) | ls -l > file_list.txt(将目录列表写入文件) |
>> |
追加输出到文件(不覆盖原有内容) | echo "新内容" >> file.txt(追加字符串到文件末尾) |
< |
从文件读取输入 | cat < input.txt(等价于 cat input.txt) |
2> |
重定向错误输出 | ls /root 2> error.log(将权限不足的错误写入日志) |
&> |
同时重定向标准输出和错误输出 | command &> output.log(所有输出写入文件) |
3. Shell 脚本入门(自动化批量操作)
(1)脚本基础结构
创建 hello.sh 文件,内容如下:
bash
#!/bin/bash
# 这是注释:Shell 脚本入门示例
# 作者:XXX
# 日期:2024-XX-XX
# 定义变量
NAME="Shell"
echo "Hello, $NAME!" # 输出变量(注意 $ 符号)
# 接收命令行参数($1 第一个参数,$2 第二个参数,$* 所有参数)
echo "你输入的参数:$*"
# 条件判断(if-else)
if [ $# -ge 1 ]; then
echo "第一个参数:$1"
else
echo "未输入参数"
fi
# 循环(for 循环)
echo "当前目录下的 .txt 文件:"
for file in $(ls *.txt); do
echo "- $file"
done
# 函数定义
sum() {
echo $(( $1 + $2 )) # 计算两个数的和
}
echo "10 + 20 = $(sum 10 20)"
(2)脚本运行步骤
bash
# 1. 给脚本添加执行权限
chmod +x hello.sh
# 2. 运行脚本(两种方式)
./hello.sh # 直接运行(需在脚本所在目录)
bash hello.sh 参数1 参数2 # 指定 Shell 运行(无需执行权限)
# 3. 输出结果示例
Hello, Shell!
你输入的参数:参数1 参数2
第一个参数:参数1
当前目录下的 .txt 文件:
- test.txt
- docs.txt
10 + 20 = 30
(3)实战脚本:批量备份文件
创建 backup.sh,自动备份指定目录到压缩包:
bash
#!/bin/bash
# 批量备份文件脚本
# 使用:./backup.sh 源目录 备份目录
# 检查参数数量
if [ $# -ne 2 ]; then
echo "用法错误!正确用法:./backup.sh 源目录 备份目录"
exit 1 # 退出并返回错误码 1
fi
SRC_DIR=$1
DEST_DIR=$2
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S).tar.gz" # 备份文件名(含时间戳)
# 检查源目录是否存在
if [ ! -d $SRC_DIR ]; then
echo "错误:源目录 $SRC_DIR 不存在!"
exit 1
fi
# 创建备份目录(不存在则创建)
mkdir -p $DEST_DIR
# 执行备份(tar 压缩)
echo "开始备份 $SRC_DIR 到 $DEST_DIR/$BACKUP_NAME..."
tar -czf $DEST_DIR/$BACKUP_NAME $SRC_DIR # c=创建,z=gzip压缩,f=指定文件名
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份成功!备份文件:$DEST_DIR/$BACKUP_NAME"
else
echo "备份失败!"
exit 1
fi
运行脚本:
bash
./backup.sh ~/project ~/backup # 备份 project 目录到 backup 目录
五、常见问题排查与避坑指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 命令未找到(command not found) | 命令未安装,或环境变量 PATH 未包含命令路径 | 1. 安装命令(如 sudo apt install nginx);2. 检查 PATH(echo P A T H ),添加路径( e x p o r t P A T H = PATH),添加路径(export PATH= PATH),添加路径(exportPATH=PATH:/命令目录) |
| 权限不足(Permission denied) | 当前用户无执行/读写权限 | 1. 使用 sudo 提升权限(sudo 命令);2. 用 chmod 修改文件权限(chmod +x 脚本.sh) |
| 无法删除文件(Operation not permitted) | 文件被锁定,或为系统只读文件 | 1. 检查文件是否被进程占用(lsof 文件名);2. 强制删除(sudo rm -rf 文件名) |
| 脚本运行报错(syntax error near unexpected token) | 脚本换行符为 Windows 格式(\r\n) | 用 dos2unix 转换(dos2unix 脚本.sh),或在 vim 中执行 :set fileformat=unix 保存 |
| 管道命令无输出 | 前一个命令无输出,或过滤条件错误 | 1. 单独运行前一个命令检查输出;2. 调整过滤参数(如 grep 关键词大小写) |
六、总结与进阶学习
1. 核心要点回顾
- 基础命令是 Shell 操作的基石,重点掌握文件管理、权限控制、系统监控;
- 管道(
|)和重定向(>/>>)是 Shell 高效处理数据的核心; - Shell 脚本可自动化重复任务,提升工作效率,核心是变量、条件、循环、函数;
- 遇到问题先查看命令输出的错误信息,结合
man 命令(查看官方文档)排查。
2. 进阶学习方向
- Shell 语法深化:学习数组、正则表达式、case 语句、循环嵌套等;
- 工具扩展 :掌握
sed(文本替换)、awk(复杂文本处理)、rsync(文件同步)等工具; - 自动化运维 :结合 Cron 定时任务(
crontab -e)实现脚本自动执行(如定时备份、日志清理); - Shell 脚本调试 :使用
bash -x 脚本.sh调试脚本,查看执行过程。
3. 常用参考资源
- 官方文档:
man 命令(如man grep查看 grep 详细用法); - 在线教程:Linux 命令大全(https://www.linuxcool.com/);
- 实战练习:LeetCode Shell 题库(https://leetcode.cn/problemset/shell/)。