3.bash
Bash 命令与 Shell 使用指南
1. 命令组合与控制
1.1 命令组合方式
1 | 命令1 ; 命令2 # 无论命令1成功与否,都会执行命令2 |
1.2 引用符号
符号 | 名称 | 功能说明 |
---|---|---|
' |
单引号 | 内部所有内容视为纯文本,不解释变量和特殊字符 |
" |
双引号 | 会解释$、`和\等特殊字符,变量会被展开 |
` |
反引号 | 执行内部命令并将结果替换到当前位置(等同于$(命令) 语法) |
2. 命令历史
2.1 history 命令
1 | history # 显示命令历史记录 |
2.2 历史记录管理
1 | history -c # 清除当前shell的历史记录 |
2.3 相关环境变量
1 | HISTSIZE=1000 # 内存中保存的历史记录数量 |
3. Shell 类型与快捷键
3.1 常见Shell类型
- Bourne Shell(sh): 经典Unix shell → 衍生出bash
- Bash(Bourne-Again Shell): Linux默认shell
- C Shell(csh): 类C语法 → 衍生出tcsh
- Korn Shell(ksh): 结合sh和csh优点
- Z Shell(zsh): 功能强大的现代shell
3.2 常用快捷键
快捷键 | 功能描述 |
---|---|
Tab | 命令/文件名自动补全 |
Ctrl+A | 移动到行首 |
Ctrl+E | 移动到行尾 |
Ctrl+D | 删除当前字符(相当于Delete) |
Ctrl+H | 删除前一个字符(相当于Backspace) |
Ctrl+L | 清屏(等同于clear命令) |
Ctrl+C | 终止当前命令 |
Ctrl+Z | 暂停当前命令(可用fg恢复) |
Ctrl+S | 暂停屏幕输出 |
Ctrl+Q | 恢复屏幕输出 |
4. 变量与环境设置
4.1 变量操作
1 | export VAR=value # 设置环境变量(对新shell有效) |
4.2 set 命令选项
1 | set -o option # 启用选项 |
常用选项:
noclobber
/-C
: 防止重定向覆盖已有文件histexpand
/-H
: 启用!
历史命令扩展
4.3 提示符定制(PS1)
1 | PS1='[\u@\h \W]\$ ' # 常见默认提示符格式 |
可用转义符:
\s
: shell名称\v
: bash版本\u
: 用户名\h
: 主机名\w
: 当前工作目录
4.4 用户切换
1 | su user # 切换用户(不改变环境变量) |
5.帮助命令 man
详解
基本用法
1 | man command # 查看命令的手册页(返回第一个匹配的帮助文件) |
常用选项
选项 | 功能说明 | 等价命令 |
---|---|---|
-a |
显示所有匹配的手册页(按顺序显示) | - |
-f |
查找完全匹配的命令文档 | whatis |
-k |
查找包含关键词的文档 | apropos |
-w |
显示手册页的存储路径 | - |
指定手册章节
1 | man 5 passwd # 查看/etc/passwd文件的格式说明(第5节) |
手册章节分类
Section | 内容类型 |
---|---|
1 | 用户命令 |
2 | 系统调用 |
3 | C库函数 |
4 | 设备文件 |
5 | 配置文件格式 |
6 | 游戏 |
7 | 杂项 |
8 | 系统管理命令 |
9 | Linux内核相关 |
手册页存储位置
1 | /usr/share/man # 系统手册页主目录 |
维护whatis数据库
1 | makewhatis # 生成/更新whatis数据库(供-f/-k使用) |
使用示例
1 | man -a printf # 查看所有章节的printf文档 |
6. 管道与重定向
6.1 标准文件描述符
文件描述符 | 名称 | 默认设备 |
---|---|---|
0 | 标准输入(stdin) | 键盘 |
1 | 标准输出(stdout) | 屏幕 |
2 | 标准错误(stderr) | 屏幕 |
6.2 管道(|)
1 | 命令1 | 命令2 # 将命令1的输出作为命令2的输入 |
6.3 tee命令
1 | 命令 | tee 文件 # 同时输出到屏幕和文件 |
6.4 重定向操作
语法 | 功能描述 |
---|---|
命令 > 文件 |
标准输出覆盖写入文件 |
命令 >> 文件 |
标准输出追加写入文件 |
命令 < 文件 |
从文件读取标准输入 |
命令 2> 文件 |
标准错误覆盖写入文件 |
命令 2>> 文件 |
标准错误追加写入文件 |
命令 > 文件 2>&1 |
标准输出和错误都覆盖写入同一文件 |
命令 >> 文件 2>&1 |
标准输出和错误都追加写入同一文件 |
命令 << 结束标记 |
从标准输入读取直到遇到"结束标记"(here文档) |
命令 &> 文件 |
标准输出和错误都覆盖写入文件(bash简写) |
7. 文件操作命令
7.1 ls命令
1 | ls -a # 显示所有文件(包括.开头的隐藏文件) |
7.2 cp命令
1 | cp -f # 强制覆盖不提示 |
7.3 mv命令
1 | mv -f # 强制覆盖不提示 |
7.4 mkdir命令
1 | mkdir -m 755 dir # 创建指定权限的目录 |
7.5 rm命令
1 | rm -f # 强制删除不提示 |
7.6 rmdir命令
1 | rmdir -p dir1/dir2 # 删除多级空目录 |
7.7 touch命令
1 | touch -t 202405071530.00 file # 设置特定时间戳(YYMMDDhhmm.ss) |
7.8 file命令
1 | file document.txt # 检测文件类型和编码 |
8. 元字符(通配符)
元字符 | 功能描述 | 示例 |
---|---|---|
* |
匹配任意长度字符(包括空字符) | ls *.txt |
? |
匹配任意单个字符 | ls file?.txt |
[] |
匹配括号内任意一个字符 | ls file[123].txt |
[!] |
匹配不在括号内的任意一个字符 | ls file[!a-z].txt |
{} |
展开括号内逗号分隔的多个模式 | touch file{1,2,3} |
示例扩展:
[a-z]
: 任意小写字母[0-9]
: 任意数字[a-zA-Z]
: 任意字母file{1..3}
: 展开为file1, file2, file3
9. 文档处理命令
9.1 文件内容查看
cat 命令
1 | cat -n file.txt # 显示文件内容并添加行号 |
nl 命令(行号显示)
1 | nl -b a file.txt # 所有行添加行号 |
od 命令(二进制查看)
1 | od -t c file.bin # 以ASCII字符显示 |
9.2 文件头部/尾部查看
head 命令
1 | head -n 10 file.txt # 显示前10行 |
tail 命令
1 | tail -n 10 file.txt # 显示最后10行 |
9.3 文本提取与转换
cut 命令
1 | cut -c 1-5 file.txt # 提取每行第1-5个字符 |
join 命令(合并文件)
1 | join -j 1 file1.txt file2.txt # 按第一个字段合并两个文件 |
paste 命令
1 | paste -d";" file1.txt file2.txt # 用分号分隔合并文件 |
tr 命令(字符转换)
1 | tr 'a-z' 'A-Z' < file.txt # 小写转大写 |
9.4 文本排序与统计
sort 命令
1 | sort file.txt # 按字母顺序排序 |
uniq 命令(去重)
1 | sort file.txt | uniq # 去重(需先排序) |
wc 命令(统计)
1 | wc -l file.txt # 统计行数 |
9.5 文本分割与格式化
split 命令
1 | split -l 1000 bigfile.txt part_ # 每1000行分割文件 |
pr 命令(分页)
1 | pr -l 40 file.txt # 按每页40行分页显示 |
fmt 命令(格式化)
1 | fmt -w 80 file.txt # 设置每行80个字符 |
expand/unexpand 命令
1 | expand -t 4 file.txt # 将tab转为4个空格 |
8.6 高级文本处理
xargs 命令
1 | find . -name "*.log" | xargs rm # 删除所有log文件 |
10. vi/vim 编辑器
10.1 基本操作
启动与退出
1 | vi file.txt # 编辑文件 |
模式切换
命令 | 说明 |
---|---|
i | 在光标前插入 |
a | 在光标后插入 |
I | 在行首插入 |
A | 在行尾插入 |
o | 在下一行插入 |
O | 在上一行插入 |
ESC | 返回命令模式 |
10.2 光标移动
命令 | 说明 |
---|---|
h/j/k/l | 左/下/上/右 |
0 | 行首 |
$ | 行尾 |
gg | 文件开头 |
G | 文件末尾 |
50G | 跳转到第50行 |
Ctrl+b | 上一页 |
Ctrl+f | 下一页 |
10.3 编辑命令
命令 | 说明 |
---|---|
x | 删除当前字符 |
X | 删除前一个字符 |
dd | 删除当前行 |
dw | 删除下一个单词 |
yy | 复制当前行 |
p | 粘贴到光标后 |
P | 粘贴到光标前 |
u | 撤销 |
Ctrl+r | 重做 |
10.4 搜索与替换
命令 | 说明 |
---|---|
/pattern | 向前搜索 |
?pattern | 向后搜索 |
n | 下一个匹配项 |
N | 上一个匹配项 |
:%s/old/new/g | 全局替换 |
:1,10s/old/new/g | 替换1-10行的内容 |
10.5 设置选项
1 | :set nu # 显示行号 |
11. 正则表达式与文本搜索
11.1 基本元字符
元字符 | 说明 |
---|---|
. | 匹配任意单个字符 |
* | 前一个字符0次或多次 |
[] | 匹配括号内任意一个字符 |
[^] | 不匹配括号内的字符 |
^ | 行首 |
$ | 行尾 |
\ | 转义特殊字符 |
11.2 grep 命令
1 | grep "pattern" file.txt # 基本搜索 |
特殊变体
1 | egrep = grep -E # 扩展正则表达式 |
11.3 sed 流编辑器
基本用法
1 | sed 's/old/new/' file.txt # 替换第一个匹配 |
高级用法
1 | sed -n '10,20p' file.txt # 只打印10-20行 |
脚本示例
1 | # 将1-5行行首添加>字符 |
11.4 正则表达式示例
- 匹配IP地址:
1 | grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt |
- 匹配邮箱地址:
1 | grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt |
- 提取HTML标签内容:
1 | sed -n 's/<title>\(.*\)<\/title>/\1/p' file.html |