Shell使用指南
Shell是Linux/Unix系统中最常用的命令行工具,掌握Shell的使用方法和快捷键操作可以大大提高工作效率。
📋 目录
🎯 基础知识
1.1 Shell类型
常见的Shell类型:
Bash(Bourne Again Shell)
- Linux默认Shell
- 功能强大,兼容性好
Zsh(Z Shell)
- macOS默认Shell(Catalina以后)
- 功能丰富,支持插件
Fish(Friendly Interactive Shell)
- 用户友好
- 自动补全功能强大
1.2 查看当前Shell
bash
# 查看当前使用的Shell
echo $SHELL
# 查看所有可用的Shell
cat /etc/shells1.3 切换Shell
bash
# 切换到Bash
bash
# 切换到Zsh
zsh
# 退出当前Shell
exit🎯 二、常用命令
2.1 文件操作
查看文件
bash
# 列出文件
ls # 列出当前目录文件
ls -l # 详细信息
ls -a # 包括隐藏文件
ls -lh # 人类可读的文件大小
# 查看文件内容
cat filename # 显示整个文件
less filename # 分页查看(支持搜索)
more filename # 分页查看
head -n 10 filename # 查看前10行
tail -n 10 filename # 查看后10行
tail -f filename # 实时查看文件变化文件操作
bash
# 复制文件
cp source dest # 复制文件
cp -r source dest # 复制目录
# 移动/重命名
mv old new # 移动或重命名
# 删除文件
rm filename # 删除文件
rm -r dirname # 删除目录
rm -rf dirname # 强制删除目录
# 创建文件/目录
touch filename # 创建空文件
mkdir dirname # 创建目录
mkdir -p dir1/dir2 # 递归创建目录2.2 文本处理
搜索和过滤
bash
# grep:搜索文本
grep pattern file # 搜索包含pattern的行
grep -i pattern file # 忽略大小写
grep -r pattern dir # 递归搜索目录
grep -v pattern file # 反向搜索(不包含pattern)
# find:查找文件
find . -name "*.txt" # 查找.txt文件
find . -type f -name "*.log" # 查找.log文件
find . -mtime -7 # 查找7天内修改的文件
find . -size +100M # 查找大于100MB的文件
# awk:文本处理
awk '{print $1}' file # 打印第一列
awk -F: '{print $1}' /etc/passwd # 以:为分隔符
# sed:流编辑器
sed 's/old/new/g' file # 替换文本
sed -n '10,20p' file # 打印10-20行排序和去重
bash
# sort:排序
sort file # 排序
sort -r file # 反向排序
sort -n file # 数值排序
sort -u file # 去重并排序
# uniq:去重
uniq file # 去重
sort file | uniq # 排序后去重
sort file | uniq -c # 统计重复次数2.3 系统管理
进程管理
bash
# 查看进程
ps aux # 查看所有进程
ps aux | grep nginx # 查找nginx进程
top # 实时查看进程
htop # 增强版top(需安装)
# 杀死进程
kill pid # 杀死进程
kill -9 pid # 强制杀死进程
killall process_name # 杀死所有同名进程
pkill pattern # 根据模式杀死进程系统信息
bash
# 系统信息
uname -a # 系统信息
uptime # 运行时间
whoami # 当前用户
id # 用户ID信息
# 磁盘使用
df -h # 磁盘使用情况
du -h dirname # 目录大小
du -sh * # 当前目录各文件大小
# 内存使用
free -h # 内存使用情况网络操作
bash
# 网络连接
netstat -tuln # 查看端口监听
ss -tuln # 现代版netstat
lsof -i :8080 # 查看8080端口
# 网络测试
ping hostname # ping测试
curl url # 发送HTTP请求
wget url # 下载文件🎯 三、快捷键操作
3.1 移动光标
光标移动:
| 快捷键 | 功能 |
|---|---|
Ctrl + A | 移动到行首 |
Ctrl + E | 移动到行尾 |
Ctrl + B | 向左移动一个字符 |
Ctrl + F | 向右移动一个字符 |
Alt + B | 向左移动一个单词 |
Alt + F | 向右移动一个单词 |
Ctrl + XX | 在当前光标和行首之间切换 |
3.2 编辑操作
文本编辑:
| 快捷键 | 功能 |
|---|---|
Ctrl + D | 删除光标处的字符 |
Ctrl + H | 删除光标前的字符(同Backspace) |
Ctrl + K | 删除从光标到行尾 |
Ctrl + U | 删除从光标到行首 |
Ctrl + W | 删除光标前的一个单词 |
Alt + D | 删除光标后的一个单词 |
Ctrl + Y | 粘贴刚才删除的内容 |
Ctrl + T | 交换光标前后的字符 |
Alt + T | 交换光标前后的单词 |
3.3 历史命令
命令历史:
| 快捷键 | 功能 |
|---|---|
Ctrl + P | 上一个命令(同↑) |
Ctrl + N | 下一个命令(同↓) |
Ctrl + R | 搜索历史命令(反向搜索) |
Ctrl + S | 正向搜索历史命令 |
Ctrl + G | 退出历史搜索模式 |
Alt + . | 使用上一个命令的最后一个参数 |
Alt + * | 展开上一个命令的所有参数 |
3.4 补全操作
自动补全:
| 快捷键 | 功能 |
|---|---|
Tab | 自动补全命令或文件名 |
Tab Tab | 显示所有可能的补全选项 |
Alt + ? | 显示可能的补全选项 |
Alt + * | 插入所有可能的补全 |
3.5 控制操作
终端控制:
| 快捷键 | 功能 |
|---|---|
Ctrl + L | 清屏(同clear命令) |
Ctrl + C | 中断当前命令 |
Ctrl + Z | 暂停当前命令(放入后台) |
Ctrl + D | 退出Shell(EOF) |
Ctrl + S | 暂停输出 |
Ctrl + Q | 恢复输出 |
Ctrl + \ | 强制退出(SIGQUIT) |
3.6 其他常用快捷键
其他操作:
| 快捷键 | 功能 |
|---|---|
Ctrl + _ | 撤销上一次操作 |
Alt + C | 将光标处的单词首字母大写 |
Alt + U | 将光标处的单词转为大写 |
Alt + L | 将光标处的单词转为小写 |
Ctrl + X Ctrl + E | 在编辑器中打开当前命令 |
Ctrl + X Ctrl + U | 撤销上一次编辑 |
🎯 四、Shell脚本
4.1 基本语法
bash
#!/bin/bash
# 这是注释
# 变量
name="John"
age=25
# 使用变量
echo "Name: $name"
echo "Age: $age"
# 命令替换
date=$(date)
echo "Current date: $date"
# 条件判断
if [ $age -gt 18 ]; then
echo "Adult"
else
echo "Minor"
fi
# 循环
for i in {1..5}; do
echo $i
done
# 函数
function greet() {
echo "Hello, $1"
}
greet "World"4.2 特殊变量
bash
# 特殊变量
$0 # 脚本名称
$1, $2, ... # 位置参数
$# # 参数个数
$@ # 所有参数
$? # 上一个命令的退出码
$$ # 当前进程ID
$! # 上一个后台进程ID4.3 条件判断
bash
# 文件测试
[ -f file ] # 文件存在
[ -d dir ] # 目录存在
[ -r file ] # 文件可读
[ -w file ] # 文件可写
[ -x file ] # 文件可执行
# 数值比较
[ $a -eq $b ] # 相等
[ $a -ne $b ] # 不等
[ $a -gt $b ] # 大于
[ $a -lt $b ] # 小于
# 字符串比较
[ "$a" = "$b" ] # 相等
[ "$a" != "$b" ]# 不等
[ -z "$a" ] # 空字符串
[ -n "$a" ] # 非空字符串🎯 五、高级技巧
5.1 管道和重定向
bash
# 管道
command1 | command2 # 将command1的输出作为command2的输入
# 重定向
command > file # 输出重定向(覆盖)
command >> file # 输出重定向(追加)
command < file # 输入重定向
command 2> file # 错误重定向
command > file 2>&1 # 输出和错误都重定向
command &> file # 同上(Bash 4+)5.2 后台执行
bash
# 后台执行
command & # 后台执行
nohup command & # 后台执行,不受终端关闭影响
# 任务管理
jobs # 查看后台任务
fg %1 # 将任务1转到前台
bg %1 # 将任务1转到后台5.3 别名和函数
bash
# 别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# 取消别名
unalias ll
# 永久保存别名(添加到~/.bashrc或~/.zshrc)
echo 'alias ll="ls -alF"' >> ~/.bashrc
source ~/.bashrc5.4 环境变量
bash
# 设置环境变量
export PATH=$PATH:/usr/local/bin
export JAVA_HOME=/usr/lib/jvm/java-8
# 查看环境变量
echo $PATH
env # 查看所有环境变量
printenv # 同上
# 永久设置(添加到~/.bashrc或~/.zshrc)
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
source ~/.bashrc📖 学习资源
在线教程
书籍推荐
- 《Linux命令行与shell脚本编程大全》 - Richard Blum
- 《鸟哥的Linux私房菜》 - 鸟哥
练习网站
✅ 学习检查清单
- [ ] 已掌握Shell基础知识
- [ ] 已熟悉常用命令
- [ ] 已掌握快捷键操作
- [ ] 已学会编写Shell脚本
- [ ] 已理解管道和重定向
- [ ] 已掌握进程管理
- [ ] 已练习编写常用脚本