linux-command/command/alias.md

170 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

alias
===
用来设置指令的别名
## 补充说明
**alias命令** 用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时用户必须使用单引号`''`将原来的命令引起来,防止特殊字符导致错误。
alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名则可将相应的alias命令存放到bash的初始化文件`/etc/bashrc`中。
### 语法
```shell
alias(选项)(参数)
```
### 选项
```shell
-c string 如果有 -c 选项,那么命令将从 string 中读取。如果 string 后面有参数 (argument),它们将用于给位置参数 (positional
parameter$0 起始) 赋值。
-i 如果有 -i 选项shell 将交互地执行 ( interactive )
-l 选项使得 bash 以类似登录 shell (login shell) 的方式启动 (参见下面的 启动(INVOCATION) 章节)
-r 如果有 -r 选项shell 成为受限的 ( restricted ) (参见下面的 受限的shell(RESTRICTED SHELL) 章节)
-s 如果有 -s 选项,或者如果选项处理完以后,没有参数剩余,那么命令将从标准输入读取。 这个选项允许在启动一个交互
shell 时可以设置位置参数。
-D 向标准输出打印一个以 $ 为前导的,以双引号引用的字符串列表。 这是在当前语言环境不是 C 或 POSIX
时,脚本中需要翻译的字符串。 这个选项隐含了 -n 选项;不会执行命令。
[-+]O [shopt_option]
shopt_option 是一个 shopt 内建命令可接受的选项 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节)
如果有 shopt_option-O 将设置那个选项的取值; +O 取消它。 如果没有给出 shopt_optionshopt
将在标准输出上打印设为允许的选项的名称和值。 如果启动选项是 +O输出将以一种可以重用为输入的格式显示。
-- -- 标志选项的结束,禁止其余的选项处理。任何 -- 之后的参数将作为文件名和参数对待。参数 - 与此等价。
Bash 也解释一些多字节的选项。在命令行中,这些选项必须置于需要被识别的单字符参数之前。
--dump-po-strings
等价于 -D但是输出是 GNU gettext po (可移植对象) 文件格式
--dump-strings
等价于 -D
--help 在标准输出显示用法信息并成功退出
--init-file file
--rcfile file
如果 shell 是交互的,执行 file 中的命令,而不是标准的个人初始化文件 ~/.bashrc (参见下面的 启动(INVOCATION) 章节)
--login
等价于 -l
--noediting
如果 shell 是交互的,不使用 GNU readline 库来读命令行
--noprofile
不读取系统范围的启动文件 /etc/profile 或者任何个人初始化文件 ~/.bash_profile, ~/.bash_login, 或 ~/.profile
。默认情况下, bash 在作为登录 shell 启动时读取这些文件 (参见下面的 启动(INVOCATION) 章节)
--norc 如果 shell 是交互的,不读取/执行个人初始化文件 ~/.bashrc 这个选项在 shell 以 sh 命令启动时是默认启用的
--posix
如果默认操作与 POSIX 1003.2 标准不同的话,改变 bash 的行为来符合标准 (posix mode)
--restricted
shell 成为受限的 (参见下面的 受限的shell(RESTRICTED SHELL) 章节)
--rpm-requires
产生一个为使脚本运行,需要的文件的列表。 这个选项包含了 -n 选项。 它是为了避免进行编译期错误检测时的限制-- Back
ticks, [] tests, 还有 evals 不会被解释,一些依赖关系可能丢失
--verbose
等价于 -v
--version
在标准输出显示此 bash 的版本信息并成功退出。
```
### 参数
命令别名设置:定义命令别名,格式为“命令别名=‘实际命令’”。
### 实例
**alias 的基本使用方法为:**
```
alias 新的命令='原命令 -选项/参数'
```
例如:`alias l=ls -lsh'`将重新定义ls命令现在只需输入l就可以列目录了。直接输入 alias 命令会列出当前系统中所有已经定义的命令别名。
要删除一个别名,可以使用 unalias 命令,如 unalias l。
**查看系统已经设置的别名:**
```shell
[root@localhost ~]#
[root@localhost ~]# alias
alias cp='cp -i'
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 mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]#
```
### 命令别名永久生效
直接在shell里设定的命令别名在终端关闭或者系统重新启动后都会失效如何才能永久有效呢办法就是将别名的设置加入 `~/.bashrc` 文件,然后重新载入下文件就可以了。
```shell
$ vim ~/.bashrc
```
在文件最后面加入别名设置alias rm=rm -i保存后重新载入
```shell
$ source ~/.bashrc
```
这样就可以永久保存命令的别名了。因为修改的是当前用户目录下的.bashrc文件所以这样的方式只对当前用户有用。如果要对所有用户都有效修改/etc目录下的bashrc文件就可以了。在CentOS7下这个文件是/etc/bash.bashrc。此外在CentOS7下细看~/.bashrc文件会发有这样一段代码
```shell
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
```
这个代码的意思就是加载.bash_aliases文件CentOS7已经帮我们考虑好了所以也可以在用户根目录下新建一个文件 `.bash_aliases` 存放命令别名设置。
### 小结
alias这个命令是shell的内建命令可以根据自己的使用习惯设置一些别名需要注意的就是和其他命令冲突的情况。
#### 一、 范例演示
在使用和维护Linux系统过程中我们常常希望根据自己的需要来定义一些命令那么这样的操作是不是很难呢其实不是系统已经为我们设置好了相关的命令下面小编就以CentOS6.4系统为例,为大家演示如何创建自己的命令。
#### 二、 自定义命令简介
CentOS系统下的创建自定义命令其实比较简单使用的命令就是alias具体使用的方法就是 alias 自定义命令名=‘命令’。但是需要注意的是,在自定义之前需要查看自定义的命令名是否是系统已经使用的命令名,否则会冲突,另外一个就是定期清理不需要的自定义命令名。
#### 三、 演示举例
假定系统操作员希望进行如下操作:
1.进入目录 `/root`
2.查看目录下文件
3.切换回根目录
通常这需要三条命令 `cd /root`, `ls`, `cd /` ,如果需要经常使用那么我们可以通过自定义命令的方式用一条命令完成全部操作。
#### 四、 操作过程
首先使用命令 `type` 自定义命令名 查看自定义命令名是否被系统占用。从图中可以看出test命令名已被系统占用所以不能使用`loo` 这个命令名经查询可以使用。
使用命令alias创建自定义命令`alias loo='cd /root;ls;cd /'` 。需要注意的是命令的使用格式,分号与分号之间是没有空格的。
测试一下自定义命令,当输入命令 `loo` 时,发现系统依次完成了 `cd /root`、`ls`、`cd /` 三条命令,说明设置成功。同时也可直接使用命令 `alias` 查询系统中是否添加了loo这个自定义命令。
如果希望删除这个自定义命令,可以使用命令 `unalias` 自定义命令名 来完成。执行之后发现,`loo` 命令已不存在,同时自定义命令库中也没有 `loo` 命令。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->