Bash 效率提升 - 技巧与窍门
介绍
当您一天中的大部分时间都在 bash shell 环境中度过时,一遍又一遍地输入相同的命令是很常见的,这几乎就是对精神错乱的定义。
幸运的是,bash 提供了几种避免重复和提高效率的方法。
今天,我们将探索可以利用哪些工具来优化我喜欢称之为“shell 时间”的东西。
别名
Bash 别名是定义自定义命令或覆盖默认命令的方法之一。
您可以将别名视为包含选项的所需命令的“快捷方式”。
许多流行的 Linux 发行版都预置了一组预定义的别名。
让我们看看 Ubuntu 20.04 的默认别名,要做到这一点,只需输入 “alias” 并按 [ENTER]。
通过简单地发出命令 “l”,在幕后,bash 将执行 “ls -CF”。
就这么简单。
这当然很好,但是如果我们能为最常用的命令指定我们自己的别名呢?! 答案是,当然可以!
我非常常用的命令之一是 “cd ..”,用于将工作目录更改为父文件夹。 我花了很多时间敲击相同的键…
有一天我决定够了,并设置了一个别名!
要创建一个新的别名,输入 “alias ”,然后是别名名称,在我的例子中,我选择了 “..”,后跟 “=”,最后是用单引号括起来的我们要为其创建别名的命令。
下面是一个例子。
函数
有时您需要自动化一个复杂的命令,也许需要接受参数作为输入。在这些约束条件下,别名将不足以实现您的目标,但不用担心。总会有办法的!
函数使您能够创建复杂的自定义命令,这些命令可以直接从终端像任何其他命令一样调用。
例如,我一直做两个连续的动作,创建一个文件夹,然后 cd 进入它。为了避免输入 “mkdir newfolder” 然后 “cd newfolder” 的麻烦,我创建了一个名为 “mkcd” 的 bash 函数,它将要创建的文件夹的名称作为参数,创建文件夹并 cd 进入它。
要声明一个新函数,我们需要输入函数名 “mkcd ”,后跟 “()” 和用花括号括起来的复杂命令 “{ mkdir -vp "$@" && cd "$@"; }”。
.bashrc 文件
别名和函数是非常棒的工具,但是如果每次我们打开一个新的 shell 都需要设置它们,那么这本身就变成了浪费时间。
幸运的是,解决方案就在眼前。我们有 .bashrc 文件。
通常位于用户的主目录中,每次启动新的 bash 进程时,都会静默执行此文件。
这是定义别名和函数的理想位置,这些别名和函数将在启动新的 bash shell 时自动加载。
使用您最喜欢的文本编辑器,在文件末尾附加所有您觉得有用的别名和函数。
快捷键和默认变量
像任何现代程序一样,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 个文件/文件夹大小的列表
函数
ftext
ftext () { grep -iIHrn --color=always "$1" . | less -R -r }
使用 “ftext 文本” 获取当前文件夹和子文件夹中包含单词 “文本” 的文件列表,以及 “less” 中显示的行号和行内容。
例如,我在 /etc/sysctl.d 文件夹中使用了 “ftext kernel”。
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” 创建重复文件列表。请注意,文件是否被认为是重复的是基于其内容,而不是其名称。
示例
generateqr
generateqr () { printf "$@" | curl -F-=\<- qrenco.de }
使用 “generateqr 字符串” 为单词 字符串 生成 QR 码。
有时能够快速地在终端和手机之间共享文本和链接非常方便。
示例