什么是 Shell?
Shell 是 Linux/Unix 系统的命令行解释器,是用户与操作系统内核之间的接口。常见的 Shell 包括:
-
Bash (Bourne Again Shell) - 最常用,默认 Shell
-
Zsh - 功能更丰富,支持插件
-
Fish - 用户友好,开箱即用
-
Sh - 原始 Bourne Shell
基础命令
bash
# 文件和目录操作
ls -la # 列出所有文件(包括隐藏文件)
cd /path # 切换目录
pwd # 显示当前路径
mkdir dir # 创建目录
rm file # 删除文件
rm -rf dir # 递归删除目录
cp source dest # 复制文件
mv source dest # 移动/重命名
# 文件查看
cat file # 查看完整文件
less file # 分页查看
head -n 10 file # 查看前10行
tail -n 10 file # 查看后10行
tail -f file # 实时跟踪文件变化
# 权限管理
chmod 755 file # 修改权限(rwxr-xr-x)
chown user:group file # 修改所有者
重定向与管道
bash
# 重定向
command > file # 标准输出重定向到文件(覆盖)
command >> file # 标准输出重定向到文件(追加)
command 2> file # 错误输出重定向
command &> file # 全部输出重定向
# 管道 - 将一个命令的输出作为另一个命令的输入
ls -la | grep ".txt" # 查找 txt 文件
ps aux | grep python # 查找 Python 进程
cat file.txt | wc -l # 统计行数
变量与环境
bash
# 变量定义和使用
name="John"
echo $name # 输出 John
echo ${name}World # 输出 JohnWorld
# 环境变量
export PATH=$PATH:/my/path # 添加路径到 PATH
echo $HOME # 用户主目录
echo $PWD # 当前目录
# 命令替换
files=$(ls) # 或者 `ls`
echo "当前目录有: $files"
Shell 脚本基础
bash
#!/bin/bash
# 这是第一个脚本
# 变量
name="World"
# 用户输入
echo "请输入名字:"
read input_name
# 条件判断
if [ "$input_name" != "" ]; then
echo "Hello, $input_name!"
else
echo "Hello, $name!"
fi
# 循环
for i in {1..5}; do
echo "Count: $i"
done
# 函数
greet() {
echo "Hello, $1"
}
greet "Alice"
常用工具命令
bash
# 文本处理
grep "pattern" file # 搜索文本
sed 's/old/new/g' file # 替换文本
awk '{print $1}' file # 提取第一列
sort file # 排序
uniq # 去重(需先排序)
# 系统信息
top/htop # 进程监控
df -h # 磁盘使用情况
free -h # 内存使用情况
netstat -tuln # 端口监听状态
ps aux # 进程列表
# 压缩解压
tar -czf archive.tar.gz dir/ # 创建 tar.gz
tar -xzf archive.tar.gz # 解压 tar.gz
zip -r archive.zip dir/ # 创建 zip
unzip archive.zip # 解压 zip
实用技巧
bash
# 快捷键
Ctrl + C # 终止当前命令
Ctrl + Z # 暂停当前命令
Ctrl + D # 退出 Shell
Ctrl + A # 跳到行首
Ctrl + E # 跳到行尾
Tab # 自动补全
↑ ↓ # 历史命令
# 通配符
* # 匹配任意字符
? # 匹配单个字符
[abc] # 匹配 a/b/c 之一
# 后台运行
command & # 后台运行
nohup command & # 退出终端后继续运行
Ctrl + Z; bg # 将当前任务放到后台
# 组合命令
cmd1 && cmd2 # cmd1 成功才执行 cmd2
cmd1 || cmd2 # cmd1 失败才执行 cmd2
cmd1 ; cmd2 # 依次执行,不管结果