Introduction to Bash Scripting:用 alias 创建自定义 Bash 命令的实战指南
【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting
在终端里反复敲击一长串命令,是每个开发者和系统管理员日常工作中最消耗耐心的事情。本指南取自开源电子书 Introduction to Bash Scripting 的「创建自定义 Bash 命令」章节(英文原稿,本文基于其葡萄牙语版 ebook/pt_br/content/014-creating-custom-bash-commands.md 展开),以「统计 Web 服务器 80/443 端口 TCP 连接数」这一真实运维场景为例,带你掌握 Bashalias的创建、使用与持久化,理解~/.bashrc、~/.bash_profile等 Shell 配置文件的作用,并学会用函数、脚本等方式替代别名实现更复杂的自定义命令。读完本文,你将能够为任何高频命令建立自己的「快捷键」,显著提升终端操作效率。
为什么需要自定义 Bash 命令
作为开发者或系统管理员,你可能一天中大部分时间都待在终端里。凡是重复性的操作,都值得去优化——这正是 Bash 脚本与别名(alias)存在的意义。
创建自定义命令通常有两种方式:
- 编写简短的 Bash 脚本:把一组命令放进
.sh文件,通过bash script.sh或直接执行来复用; - 创建别名(alias):为一个很长的命令定义短名称,本质上就是命令的「快捷键」。
对于「偶尔用到、但命令很长」的场景,别名是最轻量、最直接的解决方案:不必为一句命令单独建文件、赋执行权限,一条alias语句即可。
实战场景:统计 80/443 端口的 TCP 连接数
当服务器在 80(HTTP)或 443(HTTPS)端口上出现连接异常时,我们通常需要确认:
- 是否有服务正在这些端口上监听;
- 当前有多少条 TCP 连接落在这些端口上。
下面的netstat命令可以一次性回答这两个问题——统计当前 80 与 443 端口的 TCP 连接数量:
netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l这条命令由四个环节通过管道(|)串联而成,逐段拆解如下:
| 片段 | 作用 |
|---|---|
netstat -plant | -p显示进程信息,-l显示监听套接字,-a显示所有连接,-n以数字形式显示地址与端口,-t仅显示 TCP 连接 |
grep '80\|443' | 用基本正则匹配包含80或443的行(\|表示「或」) |
grep -v LISTEN | -v反向过滤,排除处于LISTEN监听状态的连接 |
wc -l | 统计剩余行数,即当前活动连接数 |
命令本身并不复杂,但每次排查都完整敲一遍显然不划算——尤其是在需要快速定位问题时。这正是别名的用武之地。
说明:
netstat在部分新版发行版中已被ss取代(ss -plant参数语义类似),具体以你服务器上可用的工具为准。
创建第一个别名:conn
假设我们希望输入conn(connections 的缩写)就能获得上面那条命令的完整输出,只需要执行:
alias conn="netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l"这样就定义了一个名为conn的别名,它是长命令的「快捷方式」。之后在同一个 Shell 会话中,直接运行:
conn即可得到与长命令完全一致的输出。
让输出更友好:拼接 echo 提示
别名不仅可以指向一条命令,还可以组合多条命令。用分号;可以把多条命令拼进同一个别名中,例如先输出一行提示信息,再执行统计:
alias conn="echo 'Total de conexões na porta 80 e 443:' ; netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l"此时运行conn,你会看到类似下面的输出:
Total de conexões na porta 80 e 443: 12先有提示文字,再是统计数字,一眼就能看懂结果含义,非常适合在告警排查时快速自报家门。
别名的局限性
需要注意:用alias定义的自定义命令只在当前 Shell 会话中生效。一旦你退出登录(logout)或关闭终端再重新进入,别名就会丢失。要让别名跨会话持久存在,必须把它写进 Shell 的配置文件——这就是下一节的内容。
让别名永久生效:写入 Shell 配置文件
为了让别名在每次登录时都自动加载,需要把alias语句添加到 Shell 的**配置文件(profile file)**中。
不同的系统、不同的 Shell 加载的文件不一样,常见的有:
| 文件 | 典型适用场景 |
|---|---|
~/.bashrc | Ubuntu 等发行版默认的 Bash 交互式 Shell 配置,每个新的交互式终端都会读取 |
~/.bash_profile | 登录 Shell(login shell)读取的配置,macOS 及部分 Linux 环境常见 |
~/.profile | 登录 Shell 的通用配置,某些环境没有.bash_profile时会回退读取它 |
~/.zshrc | 使用 Zsh 作为默认 Shell 时对应的配置文件 |
以 Ubuntu 为例,默认是~/.bashrc。用你喜欢的编辑器打开它:
nano ~/.bashrc滚动到文件底部,追加如下一行:
alias conn="echo 'Total de conexões na porta 80 e 443:' ; netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l"保存并退出编辑器(nano中为Ctrl + O保存、Ctrl + X退出)。
从此以后,即使退出登录再重新登录,别名依然存在,conn这条自定义命令就真正「永久化」了。
立即生效:source 命令
如果你不想等下次登录,可以让当前会话立刻重新加载配置文件:
source ~/.bashrc(也可以写成. ~/.bashrc。)执行后,当前终端就能直接使用conn了,无需重启终端。
查看与管理所有别名
当你怀疑某些命令行为异常(例如ls的默认参数被某个别名改掉了),可以列出当前 Shell 中所有已定义的别名:
alias不带任何参数的alias会输出类似这样的清单:
alias conn='...' alias ls='ls --color=auto' alias ll='ls -alF' ...常用别名管理命令
| 命令 | 作用 |
|---|---|
alias | 列出当前 Shell 的所有别名 |
alias name='command' | 定义临时别名(仅当前会话有效) |
unalias name | 删除指定别名 |
unalias -a | 删除当前会话的所有别名 |
type name | 查看name究竟是别名、函数还是可执行文件 |
如果只想临时绕过某个别名、直接执行原始命令,可以在命令前加反斜杠,例如\ls。
深入对比:别名、函数与脚本,该选哪个?
原文档的结论部分指出:你也可以把一段逻辑写成一个 Bash 脚本,放进/usr/bin目录来「注册」全局命令,但这通常需要root或sudo权限;而别名完全可以在普通用户下使用,无需任何提权操作。
三者各有适用场景,可以这样选择:
- 别名(alias):适合单行命令的简写,无需提权,配置在
~/.bashrc中即可; - 函数(function):适合需要接收参数、包含条件分支或多步逻辑的命令。定义在
~/.bashrc或单独的函数文件中,同样无需提权,例如:function conn_count() { echo "Port 80/443 connections:" netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l } - 独立脚本(放到
/usr/bin或自定义的PATH目录):适合可独立分发、供多台服务器复用的完整工具,但写入系统目录需要相应权限;若没有 root 权限,也可以把脚本放到~/bin并把该目录加入$PATH。
作为补充参考,第 12 章「Bash 函数」 系统讲解了函数的定义与调用,第 15 章「编写你的第一个 Bash 脚本」 则展示了如何把变量、函数与系统命令组合成完整的.sh工具脚本,值得与本章对照阅读。
结合仓库验证:多语言章节与代码质量保障
在本仓库中,本章内容被完整收录于多个语言版本,除葡萄牙语外还包括英文 ebook/en/content/014-creating-custom-bash-commands.md、西班牙语 ebook/es/content/014-creating-custom-bash-commands.md、德语 ebook/de/content/014-erstellen-benutzerdefinierter-bash-befehle.md 等,这从侧面印证了「创建自定义命令」是 Bash 入门读者普遍需要的基础能力。
同时,仓库还提供了专门的代码质量校验脚本 scripts/shellcheck-ebook.sh:它会自动提取各章节 Markdown 中的bash代码块,逐一交给 ShellCheck 做静态检查,并跳过故意演示错误或占位符的代码块。这意味着书中(包括本章)的示例命令都经过了自动化校验,你可以放心在真实环境中试用。如果你想自行验证某个别名或脚本片段,同样可以用 ShellCheck 这类工具在本地做一次检查。
小结
通过一个运维实战案例,我们完整走过了自定义 Bash 命令的四个关键步骤:
- 识别高频长命令:以
netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l为例; - 用
alias创建快捷键:alias conn="...",并可用分号拼接echo提示信息; - 写入配置文件持久化:Ubuntu 默认写
~/.bashrc(macOS 等环境可能是~/.bash_profile),并用source ~/.bashrc立即生效; - 用
alias命令随时审查:发现命令行为异常时,检查现有别名是否覆盖了默认命令。
相比把脚本放进/usr/bin,别名方案的最大优势是无需 root 或 sudo 权限即可在用户级完成自定义。当需求从「一句话简写」升级为「带参数、带逻辑」时,再平滑过渡到 Bash 函数与独立脚本即可。把重复劳动交给别名,把时间留给真正有价值的事情。
【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考