Bash (Bourne Again SHell)是 Linux 和 macOS 系统中最常用、最强大的命令行解释器(Shell)。它不仅是用户与操作系统内核交互的接口,也是脚本编程的重要工具。
1. 什么是 Bash
了解什么是Bash,需要理解与之相关的几个概念:
- Shell:是操作系统的"外壳",负责接收用户输入的命令,将其翻译成内核能理解的指令,并返回结果。
- Bash:是 GNU 项目开发的 Shell,是大多数 Linux 发行版的默认 Shell。它兼容早期的 Bourne Shell(sh),并增加了许多新功能(如命令历史、自动补全、脚本编程等)。
- 终端(Terminal):是你输入 Bash 命令的软件界面(如 GNOME Terminal、iTerm2、Windows Terminal)。
✅ 简单理解:你在黑窗口里敲的每一行字,都是 Bash 在帮你执行。Bash将你输入的命令翻译成内核能理解的指令,并返回结果。
2. 常用 Bash 命令
2.1 📁 文件与目录操作
| 命令 | 全称 | 功能说明 | 示例 |
|---|---|---|---|
ls |
list | 列出目录内容 | ls -la(显示隐藏文件和详细信息) |
cd |
change directory | 切换目录 | cd /home/user 或 cd ..(返回上一级) |
pwd |
print working directory | 显示当前所在路径 | pwd |
mkdir |
make directory | 创建新目录 | mkdir my_folder |
rm |
remove | 删除文件或目录 | rm file.txt;rm -rf folder/(强制删除目录,⚠️谨慎使用) |
cp |
copy | 复制文件/目录 | cp src.txt dest.txt |
mv |
move | 移动或重命名文件 | mv old.txt new.txt |
touch |
- | 创建空文件或更新时间戳 | touch new_file.txt |
2.2 🔍 文件查看与搜索
| 命令 | 功能说明 | 示例 |
|---|---|---|
cat |
一次性显示整个文件内容 | cat config.yaml |
less / more |
分页查看大文件(支持上下滚动) | less large_log.log(按 q 退出) |
head / tail |
查看文件开头/末尾几行 | tail -f app.log(实时追踪日志变化) |
grep |
在文件中搜索特定文本 | grep "error" app.log |
find |
按名称、大小、时间等查找文件 | find . -name "*.py" |
2.3 📊 系统信息与进程管理
| 命令 | 功能说明 | 示例 |
|---|---|---|
ps |
查看当前运行的进程 | ps aux |
top / htop |
实时监控系统资源(CPU、内存) | top(按 q 退出) |
kill |
终止进程 | kill 1234(1234 是进程 PID) |
df |
查看磁盘空间使用情况 | df -h(以人类可读格式显示) |
free |
查看内存使用情况 | free -h |
uname |
显示系统信息 | uname -a |
2.4 🌐 网络相关
| 命令 | 功能说明 | 示例 |
|---|---|---|
ping |
测试网络连通性 | ping google.com |
curl |
发送 HTTP 请求或下载文件 | curl https://example.com |
wget |
从网络下载文件 | wget https://example.com/file.zip |
ssh |
安全远程登录服务器 | ssh user@192.168.1.100 |
scp |
安全复制文件到远程主机 | scp file.txt user@host:/path/ |
2.5 🔧 权限与管理
| 命令 | 功能说明 | 示例 |
|---|---|---|
chmod |
修改文件权限 | chmod +x script.sh(赋予执行权限) |
chown |
修改文件所有者 | sudo chown user:group file.txt |
sudo |
以超级管理员(root)身份执行命令 | sudo apt update |
2.6 实用技巧与快捷键
| 快捷键 | 功能 |
|---|---|
Tab |
自动补全命令或文件名(按两次可显示所有匹配项) |
↑ / ↓ |
浏览历史命令 |
Ctrl + C |
中断当前正在运行的命令 |
Ctrl + Z |
将当前命令挂起到后台 |
Ctrl + L |
清屏(等同于 clear 命令) |
!! |
重复执行上一条命令(常用于忘记加 sudo 时:sudo !!) |
!$ |
引用上一条命令的最后一个参数 |
3. Bash 的强大特性
管道与重定向 是 Bash 最精髓的部分,允许你将多个命令组合起来完成复杂任务。
3.1 管道
管道(Pipe |):将前一个命令的输出,作为后一个命令的输入。
bash
# 示例:查找包含 "error" 的行,并统计数量
grep "error" app.log | wc -l
3.2 重定向
重定向(Redirect > 和 >>):
- **
>:**将输出写入文件(覆盖原有内容) - **
>>:**将输出追加到文件末尾 - **
<:**从文件读取输入
bash
# >:将标准输出写入文件(覆盖模式);
# 如果文件已存在,原有内容会被完全清空并替换;如果文件不存在,则创建新文件
# 将 "Hello World" 写入文件 output.txt;
echo "Hello World" > output.txt
#------------------------------------------------------------
# >>:将标准输出追加到文件末尾(追加模式)
# 如果文件已存在,保留原有内容,新内容接在后面;如果文件不存在,则创建新文件。
echo "Hello World" >> output.txt
#------------------------------------------------------------
# <:从文件读取输入(输入重定向)
# 让命令从指定文件读取输入,而不是从键盘(标准输入 stdin)读取;配合需要交互式输入的命令,或用于数据处理工具(如 sort, wc, mail 等)。
# 正常用法:wc -l 从键盘等待输入,按 Ctrl+D 结束;使用 < 重定向:直接从文件读取
wc -l < myfile.txt
# 输出: 42 (表示 myfile.txt 有 42 行)
3.3 Bash 脚本
可以将一系列命令保存为 .sh 文件,实现自动化任务。
bash
#!/bin/bash
# 这是一个简单的 Bash 脚本示例
echo "开始备份..."
cp important_data.txt backup_$(date +%Y%m%d).txt
echo "备份完成!"
运行方式:
bash
chmod +x backup.sh # 赋予执行权限
./backup.sh # 执行脚本
3.4 Bash里调用Python解释器
当你在 Bash 中输入:
bash
python3 script.py arg1 arg2
Bash 会:
- 找到
python3可执行文件(通常在/usr/bin/python3或通过 PATH 查找) - 启动它,并把
script.py,arg1,arg2作为参数传给它 - Python 解释器读取并执行
script.py
用户是在 Bash 终端里输入的命令,看起来像"Bash 命令",但并不是 "Bash 执行了Python 脚本",而是 在 Bash 终端中调用 Python 解释器去执行 Python 脚本。
这里Bash 是"外壳",Python 是"程序":
- Bash 是命令行解释器(Shell),它负责接收你的输入,然后启动其他程序。
python3是一个独立的可执行程序(Python 解释器)。
类似的还有:
bash
gcc hello.c -o hello
./hello
也不是"Bash 编译 C 语言",而是 Bash 调用了 gcc 和 ./hello 这两个程序。