news 2026/9/17 11:52:11

Introduction to Bash Scripting:用 alias 创建自定义 Bash 命令的实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Introduction to Bash Scripting:用 alias 创建自定义 Bash 命令的实战指南

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)存在的意义。

创建自定义命令通常有两种方式:

  1. 编写简短的 Bash 脚本:把一组命令放进.sh文件,通过bash script.sh或直接执行来复用;
  2. 创建别名(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'用基本正则匹配包含80443的行(\|表示「或」)
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 加载的文件不一样,常见的有:

文件典型适用场景
~/.bashrcUbuntu 等发行版默认的 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目录来「注册」全局命令,但这通常需要rootsudo权限;而别名完全可以在普通用户下使用,无需任何提权操作。

三者各有适用场景,可以这样选择:

  • 别名(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 命令的四个关键步骤:

  1. 识别高频长命令:以netstat -plant | grep '80\|443' | grep -v LISTEN | wc -l为例;
  2. alias创建快捷键alias conn="...",并可用分号拼接echo提示信息;
  3. 写入配置文件持久化:Ubuntu 默认写~/.bashrc(macOS 等环境可能是~/.bash_profile),并用source ~/.bashrc立即生效;
  4. 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 11:52:09

解读 Node.js v0.5.4:libuv 的 Windows 之旅与 HTTP Agent 默认化

解读 Node.js v0.5.4:libuv 的 Windows 之旅与 HTTP Agent 默认化 【免费下载链接】nodejs.org The Node.js Website 项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org 本篇文章基于 nodejs.org 官网仓库中的历史版本发布记录 apps/site/pages/…

作者头像 李华
网站建设 2026/9/17 11:49:21

员工心理援助项目(EAP)在国内企业中的应用现状-中国心理学会心理咨询师水平评价-心理咨询师培训机构-长春心理咨询师培训机构

员工心理援助项目(EAP)在国内企业中的应用现状-中国心理学会心理咨询师水平评价-心理咨询师培训机构-长春心理咨询师培训机构当一家公司开始关注员工的心理健康时,通常会首先想到员工心理援助项目——EAP(Employee Assistance Pro…

作者头像 李华
网站建设 2026/9/17 11:48:40

支付宝当面付与网页支付接入:公钥证书与沙箱环境踩坑指南

支付宝当面付与网页支付接入:公钥证书与沙箱环境踩坑指南在国内独立产品的商业化变现通道中,除了微信支付之外,支付宝(Alipay) 是另一大不可或缺的超级结算渠道。 特别是针对个人全栈开发者和个体工商户,支…

作者头像 李华
网站建设 2026/9/17 11:48:32

达梦数据库DMGEO空间数据迁移与实战指南

干了这么多年GIS后端,最烦的不是算法难写,而是项目要从Oracle迁到国产数据库时,JAVA这边一堆代码没问题,空间数据这块却总是第一个卡壳。前两年做某地自然资源项目,甲方明确要求数据库国产化替换,我第一反应…

作者头像 李华
网站建设 2026/9/17 11:47:05

如何设置PI-Desktop的思考级别覆盖:为每个模型定制思考深度

如何设置PI-Desktop的思考级别覆盖:为每个模型定制思考深度 【免费下载链接】PI-Desktop Local-first AI coding agent desktop: Electron Rust host core pi Agent Harness user-installable plugins 项目地址: https://gitcode.com/GitHub_Trending/pid/PI-D…

作者头像 李华