Bash的基本特性之命令别名alias

对于 Linux 的运维人员来说,免不了经常敲一大堆命令,有些命令很长或者选项要经常被用到,重复性的输入很长的命令或选项显得效率十分低下,这时候我们使用命令别名来代替复杂的命令就非常有用了。

如何设置一个别名

我们可以在命令行使用如下格式定义一个别名

1
alias CMDALIAS='COMMAND [options] [arguments]'
  • alias 是一个 shell 内置命令
  • CMDALIAS 是用户为命令设置的自定义别名,可以当做命令来执行
  • COMMAND [options] [arguments] 被别名的命令,即实际要执行的命令及其要用到的选项

每次当输入 CMDALIAS 时,Bash 将会把这个别名替换成实际的命令和相应的选项。

并且这里要注意的是,在 = 等号两边不应该有空格,如果被别名的命令由多个选项或者子命令组成,需要使用引号将其括起来。

在命令行中定义的别名仅在当前 shell 生命周期中有效,作用域仅为当前 shell 进程。也就是说在退出当前 shell 之前别名都是生效的,一旦退出就不会再生效了。因此我们可以在 ~/.bash_profile~/.bashrc 这两个文件中使用同样的格式来定义命令别名,一旦定义之后,在下次登录以及以后登录都会永久生效。

如何查看所有的命令别名

直接执行 alias 命令,不加任何参数即可

1
2
3
4
5
6
7
8
9
10
[user1@study ~]$ alias 
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[user1@study ~]$

临时禁用命令别名,使用原命令本身

我们对 cat 命令做一个别名,让它自动加上 -n 选项以显示行号

1
2
3
4
5
6
 [user1@study ~]$ alias cat='cat -n'
[user1@study ~]$ cat file
1 Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file.
2 Bash also incorporates useful features from the Korn and C shells (ksh and csh).
3 Bash can be configured to be POSIX-conformant by default.
[user1@study ~]$

如果只是临时不想使用这个功能,可以试试下面几种方法

使用 \

1
2
3
4
[user1@study ~]$ \cat file
Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file.
Bash also incorporates useful features from the Korn and C shells (ksh and csh).
Bash can be configured to be POSIX-conformant by default.

使用单引号 ''

1
[user1@study ~]$ 'cat' file

使用双引号 ""

1
[user1@study ~]$ "cat" file

使用绝对路径 /path/to/command

1
[user1@study ~]$ /bin/cat file

使用 shell 的内置命令 command

1
[user1@study ~]$ command cat file

如何移除别名

unalias 是一个 shell 内置的用来去除别名的命令,下面是命令的使用格式:

1
unalias CMDALIAS

移除一个别名

1
2
3
4
[user1@study ~]$ unalias cls
[user1@study ~]$ cls
-bash: cls: command not found
[user1@study ~]$

移除所有别名

1
2
3
4
[user1@study ~]$ unalias -a
[user1@study ~]$ cls
-bash: cls: command not found
[user1@study ~]$

如果在 ~/.bash_profile~/.bashrc 这两个文件中定义了命令别名,想要删除的话使用上述命令行的方式只能在当前 shell 生命周期内有效,下次登录后命令别名依然还在。想要永久移除就需要修改文件并删除。

常用的命令别名范例

使用 vim 打开最近被修改的文件

1
2
# Open last modified file in vim
alias Vim="vim $(ls -t | head -1)"

在当前路径下查找文件大小排列前五名的文件

1
2
# Find top 5 big files
alias findbig="find . -type f -exec ls -s {} \; | sort -n -r | head -5"

过滤出 bash 相关的进程

1
2
# Grep for a bash process
alias psg="ps -aux ¦ grep [b]ash"

清空当前 shell 的命令历史,并清屏

1
2
# To clear all the history and screen
alias hcl='history -c; clear'

清屏并列出文件

1
2
# Clear the screen and list file
alias cls='clear;ls'

解压缩文件老是忘记参数?

1
alias untar='tar -zxvf '

在历史命令过滤关键字

1
alias histgrep="history | grep"

下载命令 wget 断点续传

1
alias wget='wget -c '

快速切换到上层目录

1
2
alias ..='cd ..'
alias ....='cd ../../'

为新用户生成 15 位的随机密码

1
alias getpass="openssl rand -base64 15"

使用 python3 的模块在当前路径下启动一个 web 服务器

1
2
3
4
5
# start web server with python2
alias www2='python -m SimpleHTTPServer 8000'

# start web server with python3
alias www3='python3 -m http.server 8000'

对下载的文件测试校验和

1
alias sha='shasum -a 256 '

常用的别名函数

在 shell 中命令别名会在函数后被查找到,因此解析速度较慢。虽然命令别名更容易理解,但对于几乎所有的用途, shell 的函数都比别名更受欢迎。

定义的函数也可以像别名一样来使用,为了使用更方便,直接在 ~/.bash_profile~/.bashrc 文件中添加自定义的函数就可以从下次登录开始永久生效

创建一个目录并进入该目录里

1
mkcd(){ mkdir -p "$1"; cd "$1";}

备份文件

1
bak(){ cp "$1"{,.bak};}

计算并进行比较文件的 md5 值,用法 md5chk 文件名 校验值

1
md5chk(){ md5sum "$1" | grep "$2";}

针对各种压缩文件的解压函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#
# # ex - archive extractor
# # usage: ex <file>
ex (){
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via ex()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
有钱任性,请我吃包辣条
0%