菜单

日常使用

相关源文件

目的与范围

本文档涵盖了日常终端工作中常用的基本命令行技术和工具。它侧重于提高终端导航、文本编辑、进程管理和常见任务自动化效率的实用技巧。对于文件处理或系统调试等更专业的操作,请参阅处理文件和数据系统调试

来源: 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 条命令
  • !$ 指的是上一条命令的最后一个参数
  • !! 指的是上一整条命令
  • 如果您开始输入命令但改变了主意,请按 Alt+# 注释掉它(或按 Ctrl+A,然后输入 #,最后按 Enter)。

来源: README.md90-96

工作目录导航

高效的目录导航

  • 不带参数执行 cd 会进入您的主目录
  • 使用 ~ 作为前缀引用主目录中的文件(例如,~/.bashrc
  • 使用 cd - 返回到您之前的工作目录

来源: README.md92-94

图示:命令行导航和编辑工作流程

来源: README.md81-94

进程管理

使用 xargs 和 parallel 运行任务

xargsparallel 命令允许您高效地对多个输入执行命令。

xargs 的主要选项

  • -L 控制每个命令行的处理项数
  • -P 设置并行级别
  • -I{} 允许替换占位符

来源: README.md98-102

进程监控与控制

处理进程的基本命令

命令目的
pstree -p显示带 PID 的进程树
pgrep / pkill按名称查找或信号进程
kill -STOP [pid]暂停进程
kill -CONT [pid]恢复已暂停的进程
nohup / disown在登出后保持进程运行
netstat -lntpss -plat检查监听的 TCP 端口
lsof列出打开的文件和套接字
uptimew查看系统正常运行时间与负载

来源: README.md104-117

图示:进程管理生命周期

来源: README.md104-115

Shell 自定义和配置

创建和管理别名

别名是常用命令的快捷方式。

来源: README.md118

Shell 配置文件

理解不同配置文件之间的关系很重要。

文件目的
~/.bashrc所有 Shell 会话的别名、函数和 Shell 设置
~/.bash_profile环境变量和登录命令
~/.inputrcReadline 配置(影响命令行编辑)

考虑使用 Git 在计算机之间同步您的配置文件。

来源: README.md120-123

图示:Shell 配置文件及其关系

来源: README.md119-122

Bash 脚本最佳实践

错误处理和调试

编写更健壮的 Bash 脚本

  • set -e:出错时退出(非零退出码)
  • set -u:检测未定义变量的使用
  • set -o pipefail:管道中出错时中止
  • trap:在接收到特定信号时执行代码
  • set -x:启用调试输出

来源: README.md128-132

子 Shell 和变量扩展

强大的 Bash 技术

  1. 子 Shell 用于临时更改上下文
  1. 变量扩展:
  • 检查变量是否存在:${name:?error message}
  • 默认值:${name:-default}
  • 算术:i=$(( (i + 1) % 5 ))
  • 序列:{1..10}
  • 字符串截断:${var%suffix}${var#prefix}
  1. 花括号展开以生成组合

来源: README.md133-145

图示:Bash 展开过程

来源: README.md139-145

高级终端技巧

进程替换

使用进程替换将命令输出视为文件

来源: README.md147-150

重定向和 Here documents

同时重定向标准输出和标准错误

使用“here documents”处理多行输入

来源: README.md159-165 README.md167-169

终端多路复用

使用 screentmux 来管理多个终端会话,这对于以下情况尤其有用:

  • 希望在断开连接后继续运行的远程会话
  • 以有组织的方式处理多个终端窗口
  • 与他人共享终端会话

byobu 增强功能为这些工具增加了状态信息和更方便的管理。

来源: README.md171-172

SSH 优化与远程工作

SSH 隧道

SSH 隧道允许您通过中间服务器访问资源

  • 使用 -L 进行本地端口转发
  • 使用 -D 进行动态 (SOCKS) 代理
  • 使用 -R 进行远程端口转发

来源: README.md173-174

SSH 配置

通过配置设置优化您的 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

交互式选择工具

  • percolfzf:从命令输出中交互式选择值
  • fpp (PathPicker):与 git 等命令输出的文件进行交互

来源: README.md195-197

快速 Web 服务器

为当前目录创建一个简单的 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 限制。当遇到“参数列表过长”错误时,可以使用 findxargs 等替代方法来处理大量文件。

来源: README.md206-207