linux基本功系列之alias

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux基本功系列之alias相关的知识,希望对你有一定的参考价值。

1. alias命令介绍

alias命令用来设置指令的别名。

作用: 我们可以使用该命令可以将一些较长的命令进行简化。

使用alias时,用户必须使用单引号 ‘ ‘ 将原来的命令引起来,防止特殊字符导致错误。

alias命令的作用只局限于该次登入的操作,相当于临时变量。

若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件 /etc/bashrc中。

2. 语法格式及常用选项

先来查看一下帮助文档

[root@mufenggrow ~]# help alias
alias: alias [-p] [名称[=值] ... ]
定义或显示别名。

不带参数时, `alias 以可重用的格式
`alias 名称=值在标准输出设备上打印别名列表。

否则,对于每个给定值的名称定义一个别名。
值末尾的空格会使下一个词被检测
作为别名替换展开。

选项:
-p 以可重用的格式打印所有的已定义的别名

退出状态:
除非一个没有定义的名字被作为参数提供,否则 alias
返回值为真。

可以看到alias只有一个-p参数

linux基本功系列之alias_当前用户

接下来,我们进行案例的测试:

3. 参考案例

3.1 查看系统已经存在的别名

linux操作系统中,默认预设了一些拥有别名的命令,我们可以使用alias -p进行查看:

[root@mufenggrow ~]# alias -p
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@mufenggrow ~]#

可以看到,系统中cp -i的别名是cp,也就意味着我们执行cp命令和执行cp -i是一样的。

-i参数通常的是英文 --interactive 的缩写,常见释义如下:

linux基本功系列之alias_bash_02

在我们使用一些危险的命令的时候,比如rm命令删除,有交互提示是否删除,肯定是最保险的选择,所以默认带有i参数。

3.2 设置别名的操作

一些比较长的命令,我们习惯上使用别名,操作会更简单一点。

[root@mufenggrow ~]# alias vimnet=grep IPADDR /etc/sysconfig/network-scripts/ifcfg-ens32 
[root@mufenggrow ~]# vimnet
#IPADDR=192.168.1.101

可以看到,我们设置了别名后,可以直接执行别名,就可以获得想要的信息。

3.3 取消别名

取消别名我们使用的命令是unalias. unalias命令是是为shell内建命令。

如果需要取消任意一个命令别名,则使用该命令别名作为指令的参数选项即可。

如果使用-a选项,则表示取消所有已经存在的命令别名。

我们查看下这个命令的帮助文档:

[root@mufenggrow ~]# help unalias 
unalias: unalias [-a] 名称 [名称 ...]
从别名定义列表中删除每一个“名字‘。

选项:
-a 删除所有的别名定义.

返回成功,除非“名字“不是一个已存在的别名

可以看到,只有一个-a参数

linux基本功系列之alias_bash_03

接下来我们取消下刚才执行的命令:

[root@mufenggrow ~]# unalias vimnet
[root@mufenggrow ~]# vimnet
bash: vimnet: 未找到命令...

可以看到取消完之后,就不会再有原来的命令了。

3.4 alias的全局生效和当前用户生效

对当前用户生效的配置文件在: ~/.bashrc
对所有用户生效的文件在 /etc/bash.rc

先来看看对当前用户生效的时候
在配置文件 ~/.bashrc中添加以下内容:

alias vimnet=‘cat /etc/passwd |wc -l’

linux基本功系列之alias_当前用户_04

执行查看结果:

[root@mufenggrow ~]# source .bashrc

[root@mufenggrow ~]# vimnet
44

在当前用户可以执行,换成其他用户测试:

mufenggrow ~]# su - mufeng
[mufeng@mufenggrow ~]$ vimnet
bash: vimnet: 未找到命令...
[mufeng@mufenggrow ~]$

发现切换到其他用户则无法执行。

接下来,我们切换成全局变量来设置并测试:

在配置文件 /etc/bashrc中进行设置:

[root@mufenggrow ~]# vim /etc/bashrc

底部添加

alias vimnet=cat /etc/passwd | wc -l

设置完成后,我们进行测试,测试前先要source一下:

[root@mufenggrow ~]# source /etc/bashrc

在root中执行:

[root@mufenggrow ~]# vimnet 
45

以上结果表示在root中可以执行。接下来我们到普通用户mefeng中进行测试:

@mufenggrow ~]# su - mufeng
上一次登录:三 1月 18 12:32:57 CST 2023pts/0 上
[mufeng@mufenggrow ~]$ vimnet
45
[mufeng@mufenggrow ~]$

可以看到在普通用户中也可以执行,说明设置的全局变量生效了。

四. 使用命令的注意事项

别名虽好,但也有它的弊端,比如定义的别名恰好和某个命令重名了,这就麻烦了,Shell 中执行的将永远都是别名。

如果我们想执行真正的那个命令而非别名,该怎么办呢?有三种方法可以解决这个问题:
方案一:使用命令的绝对路径。
方案二:切换到命令所在的目录,执行./command。
方案三:在命令前使用反斜线(\\)。

这里仅显示ifconfig命令:

## 设置别名
[root@mufenggrow ~]# alias ifconfig=ls
## 执行命令发现执行的是别名
[root@mufenggrow ~]# ifconfig
anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
## 加上反斜杠来解决只能执行别名的情况
[root@mufenggrow ~]# \\ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.101 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::d524:3f3e:45ed:79c3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:07:39:cc txqueuelen 1000 (Ethernet)
RX packets 662509 bytes 959496840 (915.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 178133 bytes 12980086 (12.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0


Linux系统之alias别名的基本使用

(Linux系统之alias别名的基本使用)

一、alias别名介绍

1.alias简介

2.alias注意事项

二、检查本地系统环境

1.检查操作系统版本

[root@jeven ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"



2.检查系统内核版本

[root@jeven ~]# uname -r 
6.1.8-1.el7.elrepo.x86_64

三、设置alias别名

1.查看当前系统的所有别名

[root@jeven ~]# 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

2.定义一个别名

[root@jeven ~]# alias dc=docker ps -a
[root@jeven ~]# dc
CONTAINER ID   IMAGE                                                     COMMAND                  CREATED              STATUS              PORTS                                                                                                                                                        NAMES
4c894dc1eac4   nginx:1.21                                                "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:811->80/tcp, :::811->80/tcp     


3.永久定义别名

alias dc=docker ps -a  # 在/etc/profile行尾追加
 

[root@jeven ~]#  source /etc/profile
[root@jeven ~]# 

4.取消别名

unalias -a 取消的所有别名。

unalias -name加指定别名的名称,可以取消特定的别名。

四、函数在别名中的简单使用

alias rm=kao() /bin/cp -a $@ ~/backup;rm $@; ;kao $@
  • 测试删除文件
[root@jeven ~]# rmm /data/etc/passwd 
rm: remove regular file ‘/data/etc/passwd’? 
[root@jeven ~]# ll ~/backup/
total 4
-rw-r--r--. 1 root root 101 Feb  2  2022 passwd


以上是关于linux基本功系列之alias的主要内容,如果未能解决你的问题,请参考以下文章

Linux基本命令之alias

Linux系统之alias别名的基本使用

linux基本功系列之tail命令实战

linux下的alias命令之疑问

Linux常用命令总结之alias

Linux基本功系列之usermod命令