不可或缺的bash别名

author author     2023-04-08     194

关键词:

参考技术A

Bash 别名是一种用新的命令补充或覆盖 Bash 命令的方法。Bash 别名使用户可以轻松地在 POSIX 终端中自定义其体验。它们通常定义在 $HOME/.bashrc 或 $HOME/bash_aliases 中(它是由 $HOME/.bashrc 加载的)。

大多数发行版在新用户帐户的默认 .bashrc 文件中至少添加了一些流行的别名。这些可以用来简单演示 Bash 别名的语法:

但并非所有发行版都附带预先添加好的别名。如果你想手动添加别名,则必须将它们加载到当前的 Bash 会话中:

否则,你可以关闭终端并重新打开它,以便重新加载其配置文件。

通过 Bash 初始化脚本中定义的那些别名,你可以键入 ll 而得到 ls -l 的结果,当你键入 ls 时,得到也不是原来的 ls 的普通输出。

那些别名很棒,但它们只是浅尝辄止。以下是十大 Bash 别名,一旦你试过它们,你会发现再也不能离开它们。

在开始之前,创建一个名为 ~/.bash_aliases 的文件:

然后,确认这些代码出现在你的 ~/.bashrc 文件当中:

如果你想亲自尝试本文中的任何别名,请将它们输入到 .bash_aliases 文件当中,然后使用 source ~/.bashrc 命令将它们加载到当前 Bash 会话中。

如果你一开始使用过 GNOME 中的 Nautilus、MacOS 中的 Finder 或 Windows 中的资源管理器等 GUI 文件管理器,那么你很可能习惯了按文件大小排序文件列表。你也可以在终端上做到这一点,但这条命令不是很简洁。

将此别名添加到 GNU 系统上的配置中:

此别名将 lt 替换为 ls 命令,该命令在单个列中显示每个项目的大小,然后按大小对其进行排序,并使用符号表示文件类型。加载新别名,然后试一下:

在 MacOS 或 BSD 上,ls 命令没有相同的选项,因此这个别名可以改为:

这个版本的结果稍有不同:

实际上,即使在 Linux上,上面这个命令也很有用,因为使用 ls 列出的目录和符号链接的大小为 0,这可能不是你真正想要的信息。使用哪个看你自己的喜好。

感谢 Brad Alexander 提供的这个别名的思路。

mount 命令过去很简单。只需一个命令,你就可以获得计算机上所有已挂载的文件系统的列表,它经常用于概览连接到工作站有哪些驱动器。在过去看到超过三、四个条目就会令人印象深刻,因为大多数计算机没有那么多的 USB 端口,因此这个结果还是比较好查看的。

现在计算机有点复杂,有 LVM、物理驱动器、网络存储和虚拟文件系统,mount 的结果就很难一目了然:

要解决这个问题,试试这个别名:

此别名使用 awk 按列解析 mount 的输出,将输出减少到你可能想要查找的内容(挂载了哪些硬盘驱动器,而不是文件系统):

在 MacOS 上,mount 命令不提供非常详细的输出,因此这个别名可能过度精简了。但是,如果你更喜欢简洁的报告,请尝试以下方法:

结果:

有时你好不容易弄清楚了如何在终端完成某件事,并觉得自己永远不会忘记你刚学到的东西。然后,一个小时过去之后你就完全忘记了你做了什么。

搜索 Bash 历史 记录是每个人不时要做的事情。如果你确切地知道要搜索的内容,可以使用 Ctrl + R 对 历史 记录进行反向搜索,但有时你无法记住要查找的确切命令。

这是使该任务更容易的别名:

这是如何使用的例子:

每个星期一都会这样:你坐在你的电脑前开始工作,你打开一个终端,你发现你已经忘记了上周五你在做什么。你需要的是列出最近修改的文件的别名。

你可以使用 ls 命令创建别名,以帮助你找到上次离开的位置:

输出很简单,但如果你愿意,可以使用 --long 选项扩展它。这个别名列出的显示如下:

如果你需要知道目录中有多少文件,那么该解决方案是 UNIX 命令构造的最典型示例之一:使用 ls 命令列出文件,用-1 选项将其输出控制为只有一列,然后输出到 wc(单词计数)命令的管道,以计算有多少行。

这是 UNIX 理念如何允许用户使用小型的系统组件构建自己的解决方案的精彩演示。如果你碰巧每天都要做几次,这个命令组合也要输入很多字母,如果没有使用 -R 选项,它就不能用于目录,这会为输出引入新行并导致无用的结果。

而这个别名使这个过程变得简单:

这个别名会计算文件,忽略目录,但 不会 忽略目录的内容。如果你有一个包含两个目录的项目文件夹,每个目录包含两个文件,则该别名将返回 4,因为整个项目中有 4 个文件。

你用 Python 编程吗?

你用 Python 编写了很多程序吗?

如果是这样,那么你就知道创建 Python 虚拟环境至少需要 53 次击键。

这个数字里有 49 次是多余的,它很容易被两个名为 ve 和 va 的新别名所解决:

运行 ve 会创建一个名为 venv 的新目录,其中包含 Python 3 的常用虚拟环境文件系统。va 别名在当前 shell 中的激活该环境:

每个人都会吐槽进度条,因为它们似乎总是不合时宜。然而,在内心深处,我们似乎都想要它们。UNIX 的 cp 命令没有进度条,但它有一个 -v 选项用于显示详细信息,它回显了复制的每个文件名到终端。这是一个相当不错的技巧,但是当你复制一个大文件并且想要了解还有多少文件尚未传输时,它的作用就没那么大了。

pv 命令可以在复制期间提供进度条,但它并不常用。另一方面,rsync 命令包含在几乎所有的 POSIX 系统的默认安装中,并且它被普遍认为是远程和本地复制文件的最智能方法之一。

更好的是,它有一个内置的进度条。

像使用 cp 命令一样使用此别名:

使用此命令的一个有趣的副作用是 rsync 无需 -r 标志就可以复制文件和目录,而 cp 则需要。

你不应该使用 rm 命令。rm 手册甚至这样说:

如果要删除文件,则应将文件移动到“废纸篓”,就像使用桌面时一样。

POSIX 使这很简单,因为垃圾桶是文件系统中可访问的一个实际位置。该位置可能会发生变化,具体取决于你的平台:在 FreeDesktop 上,“垃圾桶”位于 ~/.local/share/Trash,而在 MacOS 上则是 ~/.Trash,但无论如何,它只是一个目录,你可以将文件藏在那个看不见的地方,直到你准备永久删除它们为止。

这个简单的别名提供了一种从终端将文件扔进垃圾桶的方法:

该别名使用一个鲜为人知的 mv 标志(-t),使你能够提供作为最终移动目标的参数,而忽略了首先列出要移动的文件的通常要求。现在,你可以使用新命令将文件和文件夹移动到系统垃圾桶:

现在文件已“消失”,只有在你一头冷汗的时候才意识到你还需要它。此时,你可以从系统垃圾桶中抢救该文件;这肯定可以给 Bash 和 mv 开发人员提供一些帮助。

注意: 如果你需要一个具有更好的 FreeDesktop 兼容性的更强大的垃圾桶命令,请参阅 Trashy 。

每个人都有自己独特的工作流程,但无论如何,通常都会有重复的任务。如果你经常使用 Git,那么你可能会发现自己经常重复的一些操作序列。也许你会发现自己回到主分支并整天一遍又一遍地拉取最新的变化,或者你可能发现自己创建了标签然后将它们推到远端,抑或可能完全是其它的什么东西。

无论让你厌倦一遍遍输入的 Git 魔咒是什么,你都可以通过 Bash 别名减轻一些痛苦。很大程度上,由于它能够将参数传递给钩子,Git 拥有着丰富的内省命令,可以让你不必在 Bash 中执行那些丑陋冗长的命令。

例如,虽然你可能很难在 Bash 中找到项目的顶级目录(就 Bash 而言,它是一个完全随意的名称,因为计算机的绝对顶级是根目录),但 Git 可以通过简单的查询找到项目的顶级目录。如果你研究过 Git 钩子,你会发现自己能够找到 Bash 一无所知的各种信息,而你可以利用 Bash 别名来利用这些信息。

这是一个来查找 Git 项目的顶级目录的别名,无论你当前在哪个项目中工作,都可以将目录改变为顶级目录,切换到主分支,并执行 Git 拉取:

这种别名绝不是一个普遍有用的别名,但它演示了一个相对简单的别名如何能够消除大量繁琐的导航、命令和等待提示。

一个更简单,可能更通用的别名将使你返回到 Git 项目的顶级目录。这个别名非常有用,因为当你在一个项目上工作时,该项目或多或少会成为你的“临时家目录”。它应该像回家一样简单,就像回你真正的家一样,这里有一个别名:

现在,命令 cg 将你带到 Git 项目的顶部,无论你下潜的目录结构有多深。

(据称)曾经一位著名科学家提出过,我们可以通过收集极客输入 cd 后跟 ls 消耗的能量来解决地球上的许多能量问题。

这是一种常见的用法,因为通常当你更改目录时,你都会有查看周围的内容的冲动或需要。

但是在你的计算机的目录树中移动并不一定是一个走走停停的过程。

这是一个作弊,因为它根本不是别名,但它是 探索 Bash 功能的一个很好的借口。虽然别名非常适合快速替换一个命令,但 Bash 也允许你在 .bashrc 文件中添加本地函数(或者你加载到 .bashrc 中的单独函数文件,就像你的别名文件一样)。

为了保持模块化,创建一个名为 ~/.bash_functions 的新文件,然后让你的 .bashrc 加载它:

在该函数文件中,添加这些代码:

将函数加载到 Bash 会话中,然后尝试:

函数比别名更灵活,但有了这种灵活性,你就有责任确保代码有意义并达到你的期望。别名是简单的,所以要保持简单而有用。要正式修改 Bash 的行为,请使用保存到 PATH 环境变量中某个位置的函数或自定义的 shell 脚本。

附注,有一些巧妙的奇技淫巧来实现 cd 和 ls 序列作为别名,所以如果你足够耐心,那么即使是一个简单的别名也永无止限。

可以定制你的环境使得 Linux 变得如此有趣,提高效率使得 Linux 可以改变生活。开始使用简单的别名,进而使用函数,并在评论中发布你必须拥有的别名!

via: https://opensource.com/article/19/7/bash-aliases

作者: Seth Kenlon 选题: lujun9972 译者: wxy 校对: wxy

bash别名中的Git自动完成?

】bash别名中的Git自动完成?【英文标题】:Gitautocompleteinbashaliases?【发布时间】:2012-04-0918:51:06【问题描述】:我使用go作为gitcheckoutbranchname的简单bash别名。我想念的是与完整的gitcheckoutbranchna...命令一起使用但不在别名中的自... 查看详情

bash的基础特性二

1、命令别名    alias是命令别名命令,在生产环境根据常用的命令,可以制作为命令别名,可以提高操作效率    alias:打开当前bash的所有命令别名  定义别名:alias别名=‘执行的命令’ &nb... 查看详情

bash别名中的转义字符[重复]

】bash别名中的转义字符[重复]【英文标题】:Escapingcharactersinbashalias[duplicate]【发布时间】:2017-08-1416:23:03【问题描述】:这是别名:#makeatmuxsessioninworkingdirwiththenameofthediraliasth=\'tmuxnew-s$(pwd|tr\'\\/\'\'\\n\'|tail-n1)\'由于转义字符或别... 查看详情

shgit的bash别名(代码片段)

查看详情

终端:-bash:'别名:找不到命令

】终端:-bash:\\\'别名:找不到命令【英文标题】:Teminal:-bash:‘alias:commandnotfound终端:-bash:\'别名:找不到命令【发布时间】:2012-04-1108:37:22【问题描述】:每次我打开终端或其他与编程相关的程序时,我都会得到以下输出:... 查看详情

text常见的bash别名(代码片段)

查看详情

如何创建 Bash 别名?

】如何创建Bash别名?【英文标题】:HowdoIcreateaBashalias?【发布时间】:2012-02-1613:53:27【问题描述】:我在OSX上,我需要在配置文件中添加类似aliasblah="/usr/bin/blah"的内容,但我不知道配置文件在哪里。【问题讨论】:切线... 查看详情

linux别名总结

1.注意,Linux的别名,即alias是不能写在/etc/profile或/etc/environment里的,即便开机启动后执行了/etc/environment,然后里面有配置别名,但是打开一个bash输入里面写的别名也是会提示找不到命令,因为别名它是属于bash的范畴,要写在/e... 查看详情

bash脚本中的大写命令别名?

】bash脚本中的大写命令别名?【英文标题】:Uppercasedcommandaliasinginbashscript?【发布时间】:2021-01-2922:16:41【问题描述】:我有一个脚本,我正在尝试使其至少在某种程度上独立于平台。因为我不能指望我的用户的PATH或shell别名(... 查看详情

bash 别名中的多个命令

】bash别名中的多个命令【英文标题】:Multiplecommandsinanaliasforbash【发布时间】:2010-10-1921:31:03【问题描述】:我想定义一个别名来连续运行以下两个命令。gnome-screensavergnome-screensaver-command--lock现在我已经添加了aliaslock=\'gnome-screen... 查看详情

bash别名不自动完成与别名相同

】bash别名不自动完成与别名相同【英文标题】:bashaliasnotautocompletingsameasaliased【发布时间】:2015-08-0520:08:36【问题描述】:我正在尝试用更直观的watch命令替换vlc。所需的功能自动补全观看/path/to/moTab-->观看/path/to/movie.avi执行v... 查看详情

Bash 别名和点文件

】Bash别名和点文件【英文标题】:BashAliasesandDotfiles【发布时间】:2017-05-0910:23:56【问题描述】:我最近在一个包含别名的文件顶部遇到了这个#-*-sh-*-。它是某人的bash目录中的点文件的一部分,直到现在,我以前从未见过它。那... 查看详情

bash特性之五

一、bash特性之四,命令别名alias,shell的内建命令,显示当前系统所有的命令别名alias别名="原始命令"ualias别名撤销已经定义的别名。命令使用命令本身,而非命令别名。二、bash特性之五,globbing,统配符 *:匹配任意长度的... 查看详情

使用 bash 别名修改受保护的文件 [重复]

】使用bash别名修改受保护的文件[重复]【英文标题】:Modifyprotectedfilewithbashalias[duplicate]【发布时间】:2021-11-1205:32:04【问题描述】:我的.bashrc文件中有以下别名,aliasgenpass="tr-dcA-Za-z0-9</dev/urandom|head-c13;echo\'\'"aliassavepass=\'echo"$... 查看详情

xargs 无法识别 bash 别名

】xargs无法识别bash别名【英文标题】:xargsdoesn\'trecognizebashaliases【发布时间】:2010-10-0513:03:44【问题描述】:我正在尝试运行以下命令:find.-iname\'.#*\'-print0|xargs-0-L1foobar其中“foobar”是在我的.bashrc文件中定义的别名或函数(在... 查看详情

sh有用的bash别名或命令(代码片段)

查看详情

.bash_profile中定义的别名在osx中不起作用(代码片段)

我在我的.bash_profile中定义了三个别名但我的bashshell没有读它。定义的别名在我的终端中不起作用,我无法解决此问题。aliashandybook="cd/Users/rsukla/development/repos/handybook/"这行在.bash_profile中定义,但它在我的shell中不起作用。到目前... 查看详情

bash的常用功能呢

...有命令2、!历史命令编号调用历史的某一个命令三、命令别名1、设置别名  alias别名=‘命令’2、移除别名  unalias别名3、为使用频率较高的复杂命令设置剪短的调用名称,存放位置:~/.bashrc四、bash的重定向操作 ... 查看详情