本文档涵盖了日常终端工作中常用的基本命令行技术和工具。它侧重于提高终端导航、文本编辑、进程管理和常见任务自动化效率的实用技巧。对于文件处理或系统调试等更专业的操作,请参阅处理文件和数据和系统调试。
来源: README.md79-207
命令行 Shell 提供了许多快捷方式和技巧,可以高效地导航和编辑命令。
这些键盘快捷键在 Bash 的默认 emacs 模式下工作,将极大地提高您的效率。
| 快捷键 | 功能 |
|---|---|
| Tab键 | 自动补全命令和参数 |
| Ctrl+R | 搜索命令历史(按多次可循环浏览匹配项) |
| Ctrl+W | 删除最后一个单词 |
| Ctrl+U | 从光标处删除到行首 |
| Alt+B | 光标向后移动一个单词 |
| Alt+F | 光标向前移动一个单词 |
| Ctrl+A | 光标移至行首 |
| Ctrl+E | 光标移至行尾 |
| Ctrl+K | 从光标处删除到行尾 |
| Ctrl+L | 清屏 |
| Alt+. | 插入上一条命令的最后一个参数 |
| Alt+-* | 展开 glob 表达式 |
对于 Vi 用户,您可以使用 set -o vi 启用 vi 风格的按键绑定,而不是默认的 emacs 模式。
来源: README.md81-86
Shell 会跟踪您的命令历史,您可以利用它避免重复输入命令。
history 查看您的命令历史!n 执行历史中的第 n 条命令!$ 指的是上一条命令的最后一个参数!! 指的是上一整条命令来源: README.md90-96
高效的目录导航
cd 会进入您的主目录~ 作为前缀引用主目录中的文件(例如,~/.bashrc)cd - 返回到您之前的工作目录来源: README.md92-94
图示:命令行导航和编辑工作流程
来源: README.md81-94
xargs 和 parallel 命令允许您高效地对多个输入执行命令。
xargs 的主要选项
-L 控制每个命令行的处理项数-P 设置并行级别-I{} 允许替换占位符来源: README.md98-102
处理进程的基本命令
| 命令 | 目的 |
|---|---|
pstree -p | 显示带 PID 的进程树 |
pgrep / pkill | 按名称查找或信号进程 |
kill -STOP [pid] | 暂停进程 |
kill -CONT [pid] | 恢复已暂停的进程 |
nohup / disown | 在登出后保持进程运行 |
netstat -lntp 或 ss -plat | 检查监听的 TCP 端口 |
lsof | 列出打开的文件和套接字 |
uptime 或 w | 查看系统正常运行时间与负载 |
来源: README.md104-117
图示:进程管理生命周期
来源: README.md104-115
别名是常用命令的快捷方式。
来源: README.md118
理解不同配置文件之间的关系很重要。
| 文件 | 目的 |
|---|---|
~/.bashrc | 所有 Shell 会话的别名、函数和 Shell 设置 |
~/.bash_profile | 环境变量和登录命令 |
~/.inputrc | Readline 配置(影响命令行编辑) |
考虑使用 Git 在计算机之间同步您的配置文件。
来源: README.md120-123
图示:Shell 配置文件及其关系
来源: README.md119-122
编写更健壮的 Bash 脚本
set -e:出错时退出(非零退出码)set -u:检测未定义变量的使用set -o pipefail:管道中出错时中止trap:在接收到特定信号时执行代码set -x:启用调试输出来源: README.md128-132
强大的 Bash 技术
${name:?error message}${name:-default}i=$(( (i + 1) % 5 )){1..10}${var%suffix} 和 ${var#prefix}来源: README.md133-145
图示:Bash 展开过程
来源: README.md139-145
使用进程替换将命令输出视为文件
来源: README.md147-150
同时重定向标准输出和标准错误
使用“here documents”处理多行输入
来源: README.md159-165 README.md167-169
使用 screen 或 tmux 来管理多个终端会话,这对于以下情况尤其有用:
byobu 增强功能为这些工具增加了状态信息和更方便的管理。
来源: README.md171-172
SSH 隧道允许您通过中间服务器访问资源
-L 进行本地端口转发-D 进行动态 (SOCKS) 代理-R 进行远程端口转发来源: README.md173-174
通过配置设置优化您的 SSH 体验
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
这些设置有助于防止在不可靠的网络中连接中断,并通过连接共享和压缩来提高性能。
来源: README.md175-187
图示:SSH 连接管理和隧道
来源: README.md173-186
以八进制格式获取文件权限(常用于系统配置)
来源: README.md190-193
percol 或 fzf:从命令输出中交互式选择值fpp (PathPicker):与 git 等命令输出的文件进行交互来源: README.md195-197
为当前目录创建一个简单的 Web 服务器
来源: README.md199-200
sudo:以其他用户身份运行命令(默认为 root)sudo -u 用户名:以特定用户身份运行sudo -i:登录为 root(会要求输入你的密码)su 用户名:切换到用户(会要求输入该用户的密码)su - 用户名:以登录环境切换到用户来源: README.md202-204
使用 Python 作为快速的命令行计算器
python -c "print(2+3)"
或交互式使用
python
>>> 2+3
5
来源: README.md208-213
图示:常用工具及其应用
来源: README.md104-213
在使用匹配许多文件的通配符时,请注意命令行上的 128K 限制。当遇到“参数列表过长”错误时,可以使用 find 和 xargs 等替代方法来处理大量文件。
来源: README.md206-207