Bash 效率提升 - 技巧与窍门

作者:Antonio Riso

介绍

当您一天中的大部分时间都在 bash shell 环境中度过时,一遍又一遍地输入相同的命令是很常见的,这几乎就是对精神错乱的定义。

幸运的是,bash 提供了几种避免重复和提高效率的方法。

今天,我们将探索可以利用哪些工具来优化我喜欢称之为“shell 时间”的东西。

别名

Bash 别名是定义自定义命令或覆盖默认命令的方法之一。

您可以将别名视为包含选项的所需命令的“快捷方式”。

许多流行的 Linux 发行版都预置了一组预定义的别名。

让我们看看 Ubuntu 20.04 的默认别名,要做到这一点,只需输入 “alias” 并按 [ENTER]。

Image removed.

通过简单地发出命令 “l”,在幕后,bash 将执行 “ls -CF”。

就这么简单。

这当然很好,但是如果我们能为最常用的命令指定我们自己的别名呢?! 答案是,当然可以!

我非常常用的命令之一是 “cd ..”,用于将工作目录更改为父文件夹。 我花了很多时间敲击相同的键…

有一天我决定够了,并设置了一个别名!

要创建一个新的别名,输入 “alias ”,然后是别名名称,在我的例子中,我选择了 “..”,后跟 “=”,最后是用单引号括起来的我们要为其创建别名的命令。

下面是一个例子。

Image removed.

函数

有时您需要自动化一个复杂的命令,也许需要接受参数作为输入。在这些约束条件下,别名将不足以实现您的目标,但不用担心。总会有办法的!

函数使您能够创建复杂的自定义命令,这些命令可以直接从终端像任何其他命令一样调用。

例如,我一直做两个连续的动作,创建一个文件夹,然后 cd 进入它。为了避免输入 “mkdir newfolder” 然后 “cd newfolder” 的麻烦,我创建了一个名为 “mkcd” 的 bash 函数,它将要创建的文件夹的名称作为参数,创建文件夹并 cd 进入它。

要声明一个新函数,我们需要输入函数名 “mkcd ”,后跟 “()” 和用花括号括起来的复杂命令 “{ mkdir -vp "$@" && cd "$@"; }”。

Image removed.

.bashrc 文件

别名和函数是非常棒的工具,但是如果每次我们打开一个新的 shell 都需要设置它们,那么这本身就变成了浪费时间。

幸运的是,解决方案就在眼前。我们有 .bashrc 文件。

通常位于用户的主目录中,每次启动新的 bash 进程时,都会静默执行此文件。

这是定义别名和函数的理想位置,这些别名和函数将在启动新的 bash shell 时自动加载。

使用您最喜欢的文本编辑器,在文件末尾附加所有您觉得有用的别名和函数。

Image removed.

快捷键和默认变量

像任何现代程序一样,bash 支持键盘快捷键。与任何其他程序一样,键盘快捷键是提高生产力的好方法。

此外,bash shell 附带一组预定义的变量,这些变量非常方便。

让我们看看其中的一些!

类型

描述

快捷键

CTRL + a

将光标移动到行首

快捷键

CTRL + e

将光标移动到行尾

快捷键

ALT + .

使用上一个命令的最后一个词

快捷键

CTRL + l

清屏

快捷键

CTRL + r

搜索命令历史记录

默认变量

$HOME

转换为用户的主目录

默认变量

$HOSTNAME

转换为计算机主机名

默认变量

$BASHPID

转换为当前 bash shell 的进程 ID

 

上面的表格展示了一些示例,如果这引起了您的兴趣并想了解更多信息,您可以查看

  • “env” 命令 - 将打印所有已定义的环境变量
  • “declare” 命令 - 将打印所有已定义的函数(包括内置函数)
  • “set” 命令 - 将打印所有已定义和可用的变量和函数
  • bash 手册 - 它包含有关 bash 内置命令的所有详细信息

技巧

我想通过与您分享我最喜欢的别名和函数列表来结束本文。

随意挑选您喜欢的别名和函数,并将它们添加到您自己的 .bashrc 中!

别名

...

alias ..='cd ..'

使用 .. 移动到父文件夹

chx

alias chx='chmod +x'

使用 “chx 文件名” 授予名为 文件名 的文件可执行权限

ddu

alias ddu='du -sh * | sort -hr | head -20'

使用 “ddu” 获取前 20 个文件/文件夹大小的列表

Image removed.

函数

ftext

ftext () {
grep -iIHrn --color=always "$1" . | less -R -r
}

使用 “ftext 文本” 获取当前文件夹和子文件夹中包含单词 “文本” 的文件列表,以及 “less” 中显示的行号和行内容。

例如,我在 /etc/sysctl.d 文件夹中使用了 “ftext kernel”。

Image removed.

duplicatefind

duplicatefind ()
{
find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
}

使用 “duplicatefind” 创建重复文件列表。请注意,文件是否被认为是重复的是基于其内容,而不是其名称。

示例

Image removed.

generateqr

generateqr ()
{
printf "$@" | curl -F-=\<- qrenco.de
}

使用 “generateqr 字符串” 为单词 字符串 生成 QR 码。

有时能够快速地在终端和手机之间共享文本和链接非常方便。

示例

Image removed.

Antonio Riso 是一位终身技术爱好者,在 IT 和 IT 安全领域工作超过 10 年。他主要专注于基础设施管理、云技术、自动化和编排。 他沉迷于解决问题,他的座右铭是“总会有办法的(即使您可能不喜欢它)”。 Antonio 对 FOSS 有瘾,并且对任何带有闪烁 LED 的东西都非常着迷。

加载 Disqus 评论