如何在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