Contents

如何在Linux中创建别名

1. 概述

Linux 用户随着时间的推移重复使用相同的命令是很常见的。通过终端历史复制粘贴命令是一项乏味且耗时的任务,随后会降低用户的工作效率。对于 Linux 用户来说,优化他们的工作流程并最大限度地提高工作效率始终是一个好主意。

例如,我们可以为复杂的命令快速创建快捷方式,并多次重复使用它们,而不是输入或记住它们。

别名帮助我们轻松解决这个问题,它们类似于 Windows 快捷方式。

现在,让我们深入了解它的本质。

2. 创建别名

通常,别名是用户定义的用于执行一组复杂命令的自定义命令:

别名快捷方式名称 = 要执行的命令

itcodingman@blogdemo:~/blogdemo$ du -hs /var/log/* | sort -hr | head -3 
4.1G    /var/log/journal 
239M    /var/log/btmp.1 
48M     /var/log/logstash 
itcodingman@blogdemo:~/blogdemo$ alias top3logs='du -hs /var/log/* | sort -hr | head -10' 
itcodingman@blogdemo:~/blogdemo$ top3logs 
4.1G    /var/log/journal 
239M    /var/log/btmp.1 
48M     /var/log/logstash 

此外,创建别名是一个相对简单且有效的过程。有两种类型的别名:永久和临时

2.1. 临时别名

如果别名仅在我们的会话处于活动状态时才处于活动状态,我们将其归类为临时的。当我们打开一个新会话或终止当前会话时,这些别名不起作用。

让我们看一个简单的例子:

itcodingman@blogdemo:~$ date 
Tue Aug  3 05:24:14 IST 2021 
itcodingman@blogdemo:~$ who -u 
tools    pts/0        2021-08-03 05:24   .         20728 (122.164.227.87) 
itcodingman@blogdemo: $ pwd 
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-dead_letter_queue-1.1.5/vendor/jar-dependencies/co/elastic/logstash/input/logstash-input-dead_letter_queue/1.1.4 
itcodingman@blogdemo:~$ alias goto_elk_jar_path='cd /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-dead_letter_queue-1.1.5/vendor/jar-dependencies/co/elastic/logstash/input/logstash-input-dead_letter_queue/1.1.4/' 
itcodingman@blogdemo:~/blogdemo$ pwd 
/home/tools/blogdemo 
itcodingman@blogdemo:~/blogdemo$ goto_elk_jar_path 
itcodingman@blogdemo:~$ pwd 
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-input-dead_letter_queue-1.1.5/vendor/jar-dependencies/co/elastic/logstash/input/logstash-input-dead_letter_queue/1.1.4 

who -u命令帮助我们获取当前会话的详细信息。

让我们终止当前会话(PID:20728)并打开一个新会话(PID:25267),如下所示。

itcodingman@blogdemo:~$ date 
Tue Aug  3 05:37:04 IST 2021 
itcodingman@blogdemo:~$ who -u 
tools    pts/0        2021-08-03 05:36   .         25267 (122.164.227.87) 
itcodingman@blogdemo:~$ goto_elk_jar_path 
goto_elk_jar_path: command not found 

command not found”错误告诉我们没有任何名为“goto_elk_jar_path”的自定义alias命令。

2.2. 永久别名

通常,CLI 是程序员非常常见的接触点,我们需要永久保留别名以便快速执行命令。在 Linux 中永久添加别名有两种主要方法。

一种选择是将别名直接添加到.bashrc*文件*中。然后,使用*source 命令,我们可以执行文件并在当前会话本身中实现别名*:

vi ~/.bashrc 
alias apt-update='sudo apt update && apt upgrade -y' ## Add this line in the file and save the file using :wq!.
source ~/.bashrc 

或者,我们也可以将所有别名管理到一个名为*.bash_aliases*的文件中:

vi ~/.bash_aliases 
alias apt-update='sudo apt update && upgrade -y' ## Add this line in the file and save the file using :wq!
source ~/.bashrc 

请务必从.bashrc文件中调用.bash_aliases ,如下所示:**

if [ -f ~/.bash_aliases ]; then 
. ~/.bash_aliases 
fi 

现在,让我们尝试执行为 apt-get 存储库更新和升级创建的别名

itcodingman@blogdemo:~$ apt-update 
Hit:1 https://artifacts.elastic.co/packages/7.x/apt stable InRelease 
.. 
.. 
.. 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
All packages are up to date. 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
Calculating upgrade... Done 
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 

3. 列出别名

在这里,alias命令将列出当前在用户空间中的所有活动别名,包括临时别名和永久别名:

itcodingman@blogdemo:~$ alias | grep -E "temp|apt" 
alias apt-update='sudo apt update -y && sudo apt upgrade -y' 
alias temp_disk='du -h .' 

同样,*&&*命令将确保只有第一个命令的成功执行才能调用第二个命令的执行。

4. 删除别名

同样,unalias命令有助于删除附加到当前用户会话的临时和永久别名

itcodingman@blogdemo:~$ alias temp_alias_disk='du -h .' 
itcodingman@blogdemo:~$ alias | grep -E "apt|temp" 
alias apt-update='sudo apt update -y && sudo apt upgrade -y' 
alias temp_alias_disk='du -h .' 
itcodingman@blogdemo:~$ unalias apt-update temp_alias_disk 
itcodingman@blogdemo:~$ alias | grep -E "apt|temp" 
itcodingman@blogdemo:~$ 

但是,当我们打开一个新会话时,我们在上一个会话中删除的任何永久别名仍然有效,因为它们已硬编码在*.bashrc*文件中。

我们必须从*.bashrc文件中删除相应的别名*行才能永久删除它们。

5. 带参数的别名

很多时候,当我们可以将参数传递给别名时,别名会变得更方便。一个简单的 bash 函数可以帮助我们执行这个操作。

一般语法:
function fn_name {
[commands]
}
让我们在*~/.bashrc*文件中定义创建嵌套目录的函数,然后将我们带入其中。

通常,在*~/.bashrc文件中添加代码后,我们使用source*命令执行该文件:

function make-dir-cd() 
{ 
    mkdir -p -- "$1/$2/$3" && cd -P -- "$1/$2/$3" 
} 

这里,$1$2$3*是在 CLI 上传递的参数,位于函数名之后的相应位置*:

itcodingman@blogdemo:~$ vi ~/.bashrc 
itcodingman@blogdemo:~$ source ~/.bashrc 
itcodingman@blogdemo:~$ pwd 
/home/tools 
itcodingman@blogdemo:~$ make-dir-cd blog demo alias 
itcodingman@blogdemo:~/blog/demo/alias$ pwd 
/home/tools/blog/demo/alias