From b20f78af0ec75cd8197ce6a4c2a700e78f2633eb Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 3 Aug 2019 09:57:40 +0800 Subject: [PATCH] TSL&PRF @wxy --- ...731 Bash aliases you can-t live without.md | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/sources/tech/20190731 Bash aliases you can-t live without.md b/sources/tech/20190731 Bash aliases you can-t live without.md index f6a90c218e..232f0f2e59 100644 --- a/sources/tech/20190731 Bash aliases you can-t live without.md +++ b/sources/tech/20190731 Bash aliases you can-t live without.md @@ -1,21 +1,22 @@ [#]: collector: (lujun9972) [#]: translator: (wxy) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) [#]: subject: (Bash aliases you can’t live without) [#]: via: (https://opensource.com/article/19/7/bash-aliases) -[#]: author: (Seth Kenlon https://opensource.com/users/sethhttps://opensource.com/users/sethhttps://opensource.com/users/marcobravohttps://opensource.com/users/samwebstudiohttps://opensource.com/users/greg-phttps://opensource.com/users/greg-p) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) 不可或缺的 Bash 别名 ====== + > 厌倦了一遍又一遍地输入相同的长命令?你觉得在命令行上工作效率低吗?Bash 别名可以为你创造一个与众不同的世界。 -![bash logo on green background][1] +![](https://img.linux.net.cn/data/attachment/album/201908/03/095855ip0h0jpi5u9t3r00.jpg) Bash 别名是一种用新的命令补充或覆盖 Bash 命令的方法。Bash 别名使用户可以轻松地在 [POSIX][2] 终端中自定义其体验。它们通常定义在 `$HOME/.bashrc` 或 `$HOME/bash_aliases` 中(它是由 `$HOME/.bashrc` 加载的)。 -大多数发行版在新用户帐户的默认 `.bashrc` 文件中至少添加一些流行的别名。这些可以用来简单演示 Bash 别名的语法: +大多数发行版在新用户帐户的默认 `.bashrc` 文件中至少添加了一些流行的别名。这些可以用来简单演示 Bash 别名的语法: ``` alias ls='ls -F' @@ -30,7 +31,7 @@ $ source ~/.bashrc 否则,你可以关闭终端并重新打开它,以便重新加载其配置文件。 -使用 Bash 初始化脚本中定义的那些别名,然后你可以键入 `ll` 而得到 `ls -l` 的结果,当你键入 `ls` 时,得到也不是原来的 [ls][3] 的普通输出。 +通过 Bash 初始化脚本中定义的那些别名,你可以键入 `ll` 而得到 `ls -l` 的结果,当你键入 `ls` 时,得到也不是原来的 [ls][3] 的普通输出。 那些别名很棒,但它们只是浅尝辄止。以下是十大 Bash 别名,一旦你试过它们,你会发现再也不能离开它们。 @@ -44,18 +45,17 @@ $ touch ~/.bash_aliases 然后,确认这些代码出现在你的 `~/.bashrc` 文件当中: - ``` if [ -e $HOME/.bash_aliases ]; then     source $HOME/.bash_aliases fi ``` -如果你想亲自尝试本文中的任何别名,请将它们输入到 `.bash_aliases` 文件当中,然后使用 `source ~/.bashrc` 命令将它们加载到 Bash 会话中。 +如果你想亲自尝试本文中的任何别名,请将它们输入到 `.bash_aliases` 文件当中,然后使用 `source ~/.bashrc` 命令将它们加载到当前 Bash 会话中。 ### 按文件大小排序 -如果你一开始使用过 GNOME 中的 Nautilus、MacOS 中的 Finder 或 Windows 中的资源管理器等 GUI 文件管理器,那么你可能习惯按文件大小排序文件列表。你也可以在终端上做到这一点,但这条命令并不完全简洁。 +如果你一开始使用过 GNOME 中的 Nautilus、MacOS 中的 Finder 或 Windows 中的资源管理器等 GUI 文件管理器,那么你很可能习惯了按文件大小排序文件列表。你也可以在终端上做到这一点,但这条命令不是很简洁。 将此别名添加到 GNU 系统上的配置中: @@ -127,11 +127,11 @@ $ du -sh * | sort -h 实际上,即使在 Linux上,上面这个命令也很有用,因为使用 `ls` 列出的目录和符号链接的大小为 0,这可能不是你真正想要的信息。使用哪个看你自己的喜好。 -*感谢 Brad Alexander 的这个别名的想法。* +*感谢 Brad Alexander 提供的这个别名的思路。* ### 只查看挂载的驱动器 -`mount` 命令过去很简单。只需一个命令,你就可以获得计算机上所有已挂载的文件系统的列表,并且它经常用于概览连接到工作站有哪些驱动器。在过去看到超过三个或四个条目就令人印象深刻,因为大多数计算机没有比这更多的 USB 端口,因此这个结果还是比较好查看的。 +`mount` 命令过去很简单。只需一个命令,你就可以获得计算机上所有已挂载的文件系统的列表,它经常用于概览连接到工作站有哪些驱动器。在过去看到超过三、四个条目就会令人印象深刻,因为大多数计算机没有那么多的 USB 端口,因此这个结果还是比较好查看的。 现在计算机有点复杂,有 LVM、物理驱动器、网络存储和虚拟文件系统,`mount` 的结果就很难一目了然: @@ -158,7 +158,6 @@ alias mnt='mount | awk -F' ' '{ printf "%s\t%s\n",$1,$3; }' | column -t | egrep 此别名使用 `awk` 按列解析 `mount` 的输出,将输出减少到你可能想要查找的内容(挂载了哪些硬盘驱动器,而不是文件系统): - ``` $ mnt /dev/mapper/fedora-root  / @@ -184,7 +183,7 @@ $ mnt ### 在你的 grep 历史中查找命令 -有时你好不容易弄清楚了如何在终端完成某件事,并保证自己永远不会忘记你刚学到的东西。然后,一个小时过去之后你就完全忘记了你做了什么。 +有时你好不容易弄清楚了如何在终端完成某件事,并觉得自己永远不会忘记你刚学到的东西。然后,一个小时过去之后你就完全忘记了你做了什么。 搜索 Bash 历史记录是每个人不时要做的事情。如果你确切地知道要搜索的内容,可以使用 `Ctrl + R` 对历史记录进行反向搜索,但有时你无法记住要查找的确切命令。 @@ -230,9 +229,9 @@ query-letter.xml 如果你需要知道目录中有多少文件,那么该解决方案是 UNIX 命令构造的最典型示例之一:使用 `ls` 命令列出文件,用`-1` 选项将其输出控制为只有一列,然后输出到 `wc`(单词计数)命令的管道,以计算有多少行。 -这是 UNIX 理念如何允许用户使用小型的系统组件构建自己的解决方案的精彩演示。如果你碰巧每天都要做几次,这个命令组合也要输入很多字母,如果没有使用 `-R` 选项,它就不能完全用于目录,这会为输出引入新行并导致无用的结果。 +这是 UNIX 理念如何允许用户使用小型的系统组件构建自己的解决方案的精彩演示。如果你碰巧每天都要做几次,这个命令组合也要输入很多字母,如果没有使用 `-R` 选项,它就不能用于目录,这会为输出引入新行并导致无用的结果。 -相反,这个别名使这个过程变得简单: +而这个别名使这个过程变得简单: ``` alias count='find . -type f | wc -l' @@ -255,7 +254,7 @@ $ count 如果是这样,那么你就知道创建 Python 虚拟环境至少需要 53 次击键。 -这个数字有 49 次是多余的,很容易被两个名为 `ve` 和 `va` 的新别名所解决: +这个数字里有 49 次是多余的,它很容易被两个名为 `ve` 和 `va` 的新别名所解决: ``` alias ve='python3 -m venv ./venv' @@ -273,9 +272,9 @@ $ va ### 增加一个复制进度条 -每个人都会吐槽进度条,因为它们似乎总是不合时宜。然而,在内心深处,我们似乎都想要它们。UNIX 的 `cp` 命令没有进度条,但它有一个 `-v` 选项用于显示详细信息,它回显了复制的每个文件名称到终端。 这是一个相当不错的技巧,但是当你复制一个大文件并且想要了解有多少文件尚未传输时,它的作用就没那么大了。 +每个人都会吐槽进度条,因为它们似乎总是不合时宜。然而,在内心深处,我们似乎都想要它们。UNIX 的 `cp` 命令没有进度条,但它有一个 `-v` 选项用于显示详细信息,它回显了复制的每个文件名到终端。这是一个相当不错的技巧,但是当你复制一个大文件并且想要了解还有多少文件尚未传输时,它的作用就没那么大了。 -`pv` 命令可以在复制期间提供进度条,但它不常使用。另一方面,`rsync` 命令包含在几乎所有的 POSIX 系统的默认安装中,并且它被普遍认为是远程和本地复制文件的最智能方法之一。 +`pv` 命令可以在复制期间提供进度条,但它并不常用。另一方面,`rsync` 命令包含在几乎所有的 POSIX 系统的默认安装中,并且它被普遍认为是远程和本地复制文件的最智能方法之一。 更好的是,它有一个内置的进度条。 @@ -308,7 +307,7 @@ POSIX 使这很简单,因为垃圾桶是文件系统中可访问的一个实 alias tcn='mv --force -t ~/.local/share/Trash ' ``` -该别名使用一个鲜为人知的 `mv` 标志,使你能够提供作为最终移动目标的参数,而忽略了首先列出要移动的文件的通常要求。现在,你可以使用新命令将文件和文件夹移动到系统垃圾桶: +该别名使用一个鲜为人知的 `mv` 标志(`-t`),使你能够提供作为最终移动目标的参数,而忽略了首先列出要移动的文件的通常要求。现在,你可以使用新命令将文件和文件夹移动到系统垃圾桶: ``` $ ls @@ -318,19 +317,19 @@ $ ls bar ``` -现在文件已“消失”,但只有在你一头冷汗的时候才意识到你还需要它。此时,你可以从系统垃圾桶中抢救该文件;这肯定可以给 Bash 和 `mv` 开发人员提供帮助。 +现在文件已“消失”,只有在你一头冷汗的时候才意识到你还需要它。此时,你可以从系统垃圾桶中抢救该文件;这肯定可以给 Bash 和 `mv` 开发人员提供一些帮助。 **注意:**如果你需要一个具有更好的 FreeDesktop 兼容性的更强大的垃圾桶命令,请参阅 [Trashy][5]。 ### 简化 Git 工作流 -每个人都有一个独特的工作流程,但无论如何,通常都会有重复的任务。如果你定期使用 Git,那么你可能会发现自己经常重复的一些操作序列。也许你会发现自己回到主分支并整天一遍又一遍地拉取最新的变化,或者你可能发现自己创建标签然后将它们推到远端,抑或可能完全是其的什么东西。 +每个人都有自己独特的工作流程,但无论如何,通常都会有重复的任务。如果你经常使用 Git,那么你可能会发现自己经常重复的一些操作序列。也许你会发现自己回到主分支并整天一遍又一遍地拉取最新的变化,或者你可能发现自己创建了标签然后将它们推到远端,抑或可能完全是其它的什么东西。 无论让你厌倦一遍遍输入的 Git 魔咒是什么,你都可以通过 Bash 别名减轻一些痛苦。很大程度上,由于它能够将参数传递给钩子,Git 拥有着丰富的内省命令,可以让你不必在 Bash 中执行那些丑陋冗长的命令。 -例如,虽然你可能很难在 Bash 中找到项目的顶级目录(就 Bash 而言,它是一个完全随意的名称,因为计算机的绝对顶级是根目录),Git 可以通过简单的查询找到项目的顶级目录。如果你研究过 Git 钩子,你会发现自己能够找到 Bash 一无所知的各种信息,而你可以利用 Bash 别名来利用这些信息。 +例如,虽然你可能很难在 Bash 中找到项目的顶级目录(就 Bash 而言,它是一个完全随意的名称,因为计算机的绝对顶级是根目录),但 Git 可以通过简单的查询找到项目的顶级目录。如果你研究过 Git 钩子,你会发现自己能够找到 Bash 一无所知的各种信息,而你可以利用 Bash 别名来利用这些信息。 -这是一个来查找 Git 项目的顶级目录的别名,无论你当前在哪个项目中工作,都可以将目录切换为顶级目录,切换为主分支,并执行 Git 拉取: +这是一个来查找 Git 项目的顶级目录的别名,无论你当前在哪个项目中工作,都可以将目录改变为顶级目录,切换到主分支,并执行 Git 拉取: ``` alias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git pull' @@ -338,7 +337,7 @@ alias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git 这种别名绝不是一个普遍有用的别名,但它演示了一个相对简单的别名如何能够消除大量繁琐的导航、命令和等待提示。 -一个更简单,可能更通用的别名将使你返回到 Git 项目的顶级目录。这个别名非常有用,因为当你处理项目时,该项目或多或少会成为你的“临时家目录”。它应该像回家一样简单,就像去你真正的家一样,这里有一个别名: +一个更简单,可能更通用的别名将使你返回到 Git 项目的顶级目录。这个别名非常有用,因为当你在一个项目上工作时,该项目或多或少会成为你的“临时家目录”。它应该像回家一样简单,就像回你真正的家一样,这里有一个别名: ``` alias cg='cd `git rev-parse --show-toplevel`' @@ -348,13 +347,13 @@ alias cg='cd `git rev-parse --show-toplevel`' ### 切换目录并同时查看目录内容 -(据称)曾经由一位著名科学家提出,我们可以通过利用极客输入 `cd` 后跟 `ls` 消耗的能量来解决地球上的许多能量问题。 +(据称)曾经一位著名科学家提出过,我们可以通过收集极客输入 `cd` 后跟 `ls` 消耗的能量来解决地球上的许多能量问题。 这是一种常见的用法,因为通常当你更改目录时,你都会有查看周围的内容的冲动或需要。 -但是在你的计算机的目录树中移动不一定是一个启停的过程。 +但是在你的计算机的目录树中移动并不一定是一个走走停停的过程。 -这是一个作弊,因为它根本不是别名,但它是探索 Bash 功能的一个很好的借口。虽然别名非常适合快速替换,但 Bash 允许你在 `.bashrc` 文件中添加本地函数(或者你加载到 `.bashrc` 中的单独函数文件,就像你的别名文件一样)。 +这是一个作弊,因为它根本不是别名,但它是探索 Bash 功能的一个很好的借口。虽然别名非常适合快速替换一个命令,但 Bash 也允许你在 `.bashrc` 文件中添加本地函数(或者你加载到 `.bashrc` 中的单独函数文件,就像你的别名文件一样)。 为了保持模块化,创建一个名为 `~/.bash_functions` 的新文件,然后让你的 `.bashrc` 加载它: @@ -394,13 +393,13 @@ $ pwd /home/seth ``` -函数比别名更灵活,但有了这种灵活性,你就有责任确保代码有意义并达到你的期望。别名是简单的,所以要保持简单,但有用。要严格修改 Bash 的行为,请使用保存到 `PATH` 环境变量中某个位置的函数或自定义 shell 脚本。 +函数比别名更灵活,但有了这种灵活性,你就有责任确保代码有意义并达到你的期望。别名是简单的,所以要保持简单而有用。要正式修改 Bash 的行为,请使用保存到 `PATH` 环境变量中某个位置的函数或自定义的 shell 脚本。 -为了记录,有一些巧妙的黑客来实现 `cd` 和 `ls` 序列作为别名,所以如果你足够耐心,那么即使使用卑微的别名,天空也是极限。 +附注,有一些巧妙的奇技淫巧来实现 `cd` 和 `ls` 序列作为别名,所以如果你足够耐心,那么即使是一个简单的别名也永无止限。 ### 开始别名化和函数化吧 -可以定制你的环境是让 Linux 变得如此有趣的原因,提高效率是 Linux 改变生活的原因。开始使用简单的别名,逐步完成功能,并在评论中发布您必须拥有的别名! +可以定制你的环境使得 Linux 变得如此有趣,提高效率使得 Linux 可以改变生活。开始使用简单的别名,进而使用函数,并在评论中发布你必须拥有的别名! -------------------------------------------------------------------------------- @@ -409,11 +408,11 @@ via: https://opensource.com/article/19/7/bash-aliases 作者:[Seth Kenlon][a] 选题:[lujun9972][b] 译者:[wxy](https://github.com/wxy) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 -[a]: https://opensource.com/users/sethhttps://opensource.com/users/sethhttps://opensource.com/users/marcobravohttps://opensource.com/users/samwebstudiohttps://opensource.com/users/greg-phttps://opensource.com/users/greg-p +[a]: https://opensource.com/users/seth [b]: https://github.com/lujun9972 [1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bash_command_line.png?itok=k4z94W2U (bash logo on green background) [2]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains