明月曾经在【Linux下如何让 alias 设置永久生效】一文里专门讲到过 alias 别名的运用方法已经如何让自定义的别名设置如何永久生效,这个其实有很强的“个人色彩”的,可以根据自己的喜好习惯定制出属于自己的 Linux 命令行,效率是提升了不少,但是对于新手学习 Linux 的话不是很建议大家使用的。

timg (2).jpg

今天在【Linux中国】的知乎专栏里看到了[30 个方便的 Bash shell 别名]一文,感觉很有借鉴意义,所以就转抄为自己的学习笔记收藏了,同时也分享给大家。

bash别名(alias)只不过是指向命令的快捷方式而已。alias命令允许用户只输入一个单词就运行任意一个命令或一组命令(包括命令选项和文件名)。执行alias命令会显示一个所有已定义别名的列表。你可以在~/.bashrc文件中自定义别名。使用别名可以在命令行中减少输入的时间,使工作更流畅,同时增加生产率。

v2-8ae0c3442b9a7c2402e25003b6d1022e_r.jpg

本文通过30个bash shell别名的实际案例演示了如何创建和使用别名。

bash alias的那些事

bash shell中的alias命令的语法是这样的:

alias[alias-name[=string]...]

如何列出bash别名

输入下面的alias命令:

alias

结果为:

alias..='cd..'

alias amazonbackup='s3backup'

alias apt-get='sudo apt-get'

...

alias命令默认会列出当前用户定义好的别名。

如何定义或者创建一个bash shell别名

使用下面语法创建别名:

alias name=value

alias name='command'

alias name='command arg1 arg2'

alias name='/path/to/script'

alias name='/path/to/script.pl arg1'

举个例子,输入下面命令并回车就会为常用的clear(清除屏幕)命令创建一个别名c:

alias c='clear'

然后输入字母c而不是clear后回车就会清除屏幕了:

c

如何临时性地禁用bash别名

下面语法可以临时性地禁用别名:

##path/to/full/command

/usr/bin/clear

##call alias with a backslash##

\c

##use/bin/ls command and avoid ls alias##

command ls

如何删除bash别名

使用unalias命令来删除别名。其语法为:

unalias aliasname

unalias foo

例如,删除我们之前创建的别名c:

unalias c

你还需要用文本编辑器删掉~/.bashrc文件中的别名定义(参见下一部分内容)。

如何让bash shell别名永久生效

别名c在当前登录会话中依然有效。但当你登出或重启系统后,别名c就没有了。为了防止出现这个问题,将别名定义写入~/.bashrc file中,输入:

vi~/.bashrc

输入下行内容让别名c对当前用户永久有效:

alias c='clear'

保存并关闭文件就行了。系统级的别名(也就是对所有用户都生效的别名)可以放在/etc/bashrc文件中。请注意,alias命令内建于各种shell中,包括ksh,tcsh/csh,ash,bash以及其他shell。

关于特权权限判断

可以将下面代码加入~/.bashrc:

#if user is not root,pass all commands via sudo#

if[$UID-ne 0];then

alias reboot='sudo reboot'

alias update='sudo apt-get upgrade'

fi

定义与操作系统类型相关的别名

可以将下面代码加入~/.bashrc使用case语句:

###Get os name via uname###

_myos="$(uname)"

###add alias as per os using$_myos###

case$_myos in

Linux)alias foo='/path/to/linux/bin/foo';;

FreeBSD|OpenBSD)alias foo='/path/to/bsd/bin/foo';;

SunOS)alias foo='/path/to/sunos/bin/foo';;

*);;

esac

30个bash shell别名的案例

你可以定义各种类型的别名来节省时间并提高生产率。

1:控制ls命令的输出

ls命令列出目录中的内容而你可以对输出进行着色:

## Colorize the ls output ##
alias ls = 'ls --color=auto'

## Use a long listing format ##
alias ll = 'ls -la'

## Show hidden files ##
alias l.= 'ls -d . .. .git .gitignore .gitmodules .travis.yml --color=auto'

2:控制cd命令的行为

## get rid of command not found ##
alias cd..= 'cd ..'

## a quick way to get out of current directory ##
alias ..= 'cd ..'
alias ...= 'cd ../../../'
alias ....= 'cd ../../../../'
alias .....= 'cd ../../../../'
alias .4= 'cd ../../../../'
alias .5= 'cd ../../../../..'

3:控制grep命令的输出

grep命令是一个用于在纯文本文件中搜索匹配正则表达式的行的命令行工具:

## Colorize the grep command output for ease of use (good for log files)##
alias grep = 'grep --color=auto'
alias egrep = 'egrep --color=auto'
alias fgrep = 'fgrep --color=auto'

4:让计算器默认开启math库

alias bc='bc -l'

生成sha1数字签名

alias sha1='openssl sha1'

5:自动创建父目录

mkdir命令用于创建目录:

alias mkdir='mkdir -pv'

6:为diff输出着色

你可以使用diff来一行行第比较文件而一个名为colordiff的工具可以为diff输出着色:

# install colordiff package :)
alias diff = 'colordiff'

7:让mount命令的输出更漂亮,更方便人类阅读

alias mount = 'mount |column -t'

8:简化命令以节省时间

# handy short cuts #
alias h = 'history' 
alias j = 'jobs -l'

9:创建一系列新命令

alias path = 'echo -e ${PATH//:/\\n}'
alias now = 'date +"%T"'
alias nowtime =now
alias nowdate = 'date +"%d-%m-%Y"'

10:设置vim为默认编辑器

alias vi = vim
alias svi = 'sudo vi'
alias vis = 'vim "+set si"'
alias edit = 'vim'

11:控制网络工具ping的输出

# Stop after sending count ECHO_REQUEST packets #
alias ping = 'ping -c 5'

# Do not wait interval 1 second, go fast #
alias fastping = 'ping -c 100 -s.2'

12:显示打开的端口

使用netstat命令可以快速列出服务区中所有的TCP/UDP端口:

alias ports = 'netstat -tulanp''

13:唤醒休眠的服务器

Wake-on-LAN(WOL)是一个以太网标准,可以通过网络消息来开启服务器。你可以使用下面别名来快速激活nas设备以及服务器:

## replace mac with your actual server mac address #
alias wakeupnas01 = '/usr/bin/wakeonlan 00:11:32:11:15:FC'
alias wakeupnas02 = '/usr/bin/wakeonlan 00:11:32:11:15:FD'
alias wakeupnas03 = '/usr/bin/wakeonlan 00:11:32:11:15:FE'

14:控制防火墙(iptables)的输出

Netfilter是一款Linux操作系统上的主机防火墙。它是Linux发行版中的一部分,且默认情况下是激活状态。这里列出了大多数Liux新手防护入侵者最常用的iptables方法。

## shortcut for iptables and pass it via sudo#
alias ipt = 'sudo /sbin/iptables'

# display all rules #
alias iptlist = 'sudo /sbin/iptables -L -n -v --line-numbers'
alias iptlistin = 'sudo /sbin/iptables -L INPUT -n -v --line-numbers'
alias iptlistout = 'sudo /sbin/iptables -L OUTPUT -n -v --line-numbers'
alias iptlistfw = 'sudo /sbin/iptables -L FORWARD -n -v --line-numbers'
alias firewall =iptlist

15:使用curl调试web服务器/CDN上的问题

# get web server headers #
alias header = 'curl -I'

# find out if remote server supports gzip / mod_deflate or not #
alias headerc = 'curl -I --compress'

16:增加安全性

# do not delete / or prompt if deleting more than 3 files at a time #
alias rm = 'rm -I --preserve-root'

# confirmation #
alias mv = 'mv -i'
alias cp = 'cp -i'
alias ln = 'ln -i' 

# Parenting changing perms on / #
alias chown = 'chown --preserve-root'
alias chmod = 'chmod --preserve-root'
alias chgrp = 'chgrp --preserve-root'

17:更新Debian Linux服务器

apt-get命令用于通过因特网安装软件包(ftp或http)。你也可以一次性升级所有软件包:

# distro specific - Debian / Ubuntu and friends #
# install with apt-get
alias apt-get= "sudo apt-get"
alias updatey = "sudo apt-get --yes"

# update on one command
alias update = 'sudo apt-get update && sudo apt-get upgrade'

18:更新RHEL/CentOS/Fedora Linux服务器

yum命令是RHEL/CentOS/Fedora Linux以及其他基于这些发行版的Linux上的软件包管理工具:

## distrp specifc RHEL/CentOS ##
alias update = 'yum update'
alias updatey = 'yum -y update'

19:优化sudo和su命令

# become root #
alias root = 'sudo -i' 
alias su = 'sudo -i'

20:使用sudo执行halt/reboot命令

# reboot / halt / poweroff
alias reboot = 'sudo /sbin/reboot'
alias poweroff = 'sudo /sbin/poweroff' 
alias halt = 'sudo /sbin/halt'
alias shutdown = 'sudo /sbin/shutdown'

21:控制web服务器

# also pass it via sudo so whoever is admin can reload it without calling you #
alias nginxreload = 'sudo /usr/local/nginx/sbin/nginx -s reload' 
alias nginxtest = 'sudo /usr/local/nginx/sbin/nginx -t'
alias lightyload = 'sudo /etc/init.d/lighttpd reload' 
alias lightytest = 'sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -t'
alias httpdreload = 'sudo /usr/sbin/apachectl -k graceful' 
alias httpdtest = 'sudo /usr/sbin/apachectl -t && /usr/sbin/apachectl -t -D DUMP_VHOSTS'

22:与备份相关的别名

# if cron fails or if you want backup on demand just run these commands #
# again pass it via sudo so whoever is in admin group can start the job #
# Backup scripts #
alias backup = 'sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type local --taget /raid1/backups' 
alias nasbackup = 'sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01'
alias s3backup = 'sudo /home/scripts/admin/scripts/backup/wrapper.backup.sh --type nas --target nas01 --auth /home/scripts/admin/.authdata/amazon.keys'
alias rsnapshothourly = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf'
alias rsnapshotdaily = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf'
alias rsnapshotweekly = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' 
alias rsnapshotmonthly = 'sudo /home/scripts/admin/scripts/backup/wrapper.rsnapshot.sh --type remote --target nas03 --auth /home/scripts/admin/.authdata/ssh.keys --config /home/scripts/admin/scripts/backup/config/adsl.conf' 
alias amazonbackup =s3backup

23:桌面应用相关的别名-按需播放的avi/mp3文件

## play video files in a current directory ##
# cd ~/Download/movie-name
# playavi or vlc
alias playavi = 'mplayer *.avi' 
alias vlc = 'vlc *.avi' 

# play all music files from the current directory #
alias playwave = 'for i in *.wav; do mplayer "$i"; done'
alias playogg = 'for i in *.ogg; do mplayer "$i"; done'
alias playmp3 = 'for i in *.mp3; do mplayer "$i"; done'

# play files from nas devices #
alias nplaywave = 'for i in /nas/multimedia/wave/*.wav; do mplayer "$i"; done'
alias nplayogg = 'for i in /nas/multimedia/ogg/*.ogg; do mplayer "$i"; done' 
alias nplaymp3 = 'for i in /nas/multimedia/mp3/*.mp3; do mplayer "$i"; done'

# shuffle mp3/ogg etc by default # 
alias music = 'mplayer --shuffle *'

24:设置系统管理相关命令的默认网卡

vnstat一款基于终端的网络流量检测器。dnstop是一款分析DNS流量的终端工具。tcptrack和iftop命令显示TCP/UDP连接方面的信息,它监控网卡并显示其消耗的带宽。

## All of our servers eth1 is connected to the Internets via vlan / router etc ##
alias dnstop = 'dnstop -l 5 eth1'
alias vnstat = 'vnstat -i eth1'
alias iftop = 'iftop -i eth1' 
alias tcpdump = 'tcpdump -i eth1' 
alias ethtool = 'ethtool eth1' 

# work on wlan0 by default #
# Only useful for laptop as all servers are without wireless interface
alias iwconfig = 'iwconfig wlan0'

25:快速获取系统内存,cpu使用,和gpu内存相关信息

## pass options to free ##
alias meminfo = 'free -m -l -t' 

## get top process eating memory
alias psmem = 'ps auxf | sort -nr -k 4' 
alias psmem10 = 'ps auxf | sort -nr -k 4 | head -10'

## get top process eating cpu ##
alias pscpu = 'ps auxf | sort -nr -k 3'
alias pscpu10 = 'ps auxf | sort -nr -k 3 | head -10' 

## Get server cpu info ##
alias cpuinfo = 'lscpu'

## older system use /proc/cpuinfo ##
##alias cpuinfo='less /proc/cpuinfo' ##

## get GPU ram on desktop / laptop##
alias gpumeminfo = 'grep -i --color memory /var/log/Xorg.0.log'

26:控制家用路由器

curl命令可以用来重启Linksys路由器。

# Reboot my home Linksys WAG160N / WAG54 / WAG320 / WAG120N Router / Gateway from *nix.
alias rebootlinksys = "curl -u 'admin:my-super-password' 'http://192.168.1.2/setup.cgi?todo=reboot'"

# Reboot tomato based Asus NT16 wireless bridge
alias reboottomato = "ssh [email protected] /sbin/reboot"
# Reboot my home Linksys WAG160N / WAG54 / WAG320 / WAG120N Router / Gateway from *nix.
alias rebootlinksys = "curl -u 'admin:my-super-password' 'http://192.168.1.2/setup.cgi?todo=reboot'"

# Reboot tomato based Asus NT16 wireless bridge
alias reboottomato = "ssh [email protected] /sbin/reboot"

27:wget默认断点续传

GNU wget是一款用来从web下载文件的自由软件。它支持HTTP,HTTPS,以及FTP协议,而且它也支持断点续传:

## this one saved by butt so many times ##
alias wget = 'wget -c'

28:使用不同浏览器来测试网站

## this one saved by butt so many times ##
alias ff4 = '/opt/firefox4/firefox' 
alias ff13 = '/opt/firefox13/firefox' 
alias chrome = '/opt/google/chrome/chrome' 
alias opera = '/opt/opera/opera'

#default ff
alias ff =ff13

#my default browser
alias browser =chrome

29:关于ssh别名的注意事项

不要创建ssh别名,代之以~/.ssh/config这个OpenSSH SSH客户端配置文件。它的选项更加丰富。下面是一个例子:

 Host server10
 Hostname 1.2.3.4
 IdentityFile ~/backups/.ssh/id_dsa
 user foobar
 Port 30000
 ForwardX11Trusted yes
 TCPKeepAlive yes

然后你就可以使用下面语句连接server10了:

$ssh server10

30:现在该分享你的别名了

## set some other defaults ##
alias df = 'df -H'
alias du = 'du -ch'

# top is atop, just like vi is vim
alias top = 'atop'

## nfsrestart - must be root ##
## refresh nfs mount / cache etc for Apache ##
alias nfsrestart = 'sync && sleep 2 && /etc/init.d/httpd stop && umount netapp2:/exports/http && sleep 2 && mount -o rw,sync,rsize=32768,wsize=32768,intr,hard,proto=tcp,fsc natapp2:/exports /http/var/www/html && /etc/init.d/httpd start'

## Memcached server status ##
alias mcdstats = '/usr/bin/memcached-tool 10.10.27.11:11211 stats'
alias mcdshow = '/usr/bin/memcached-tool 10.10.27.11:11211 display'

## quickly flush out memcached server ##
alias flushmcd = 'echo "flush_all" | nc 10.10.27.11 11211'

## Remove assets quickly from Akamai / Amazon cdn ##
alias cdndel = '/home/scripts/admin/cdn/purge_cdn_cache --profile akamai'
alias amzcdndel = '/home/scripts/admin/cdn/purge_cdn_cache --profile amazon'

## supply list of urls via file or stdin
alias cdnmdel = '/home/scripts/admin/cdn/purge_cdn_cache --profile akamai --stdin' 
alias amzcdnmdel = '/home/scripts/admin/cdn/purge_cdn_cache --profile amazon --stdin'

总结

本文总结了 Linux bash 别名的多种用法:

  1. 为命令设置默认的参数(例如通过alias ethtool='ethtool eth0'设置ethtool命令的默认参数为eth0)。
  2. 修正错误的拼写(通过alias cd..='cd..'让cd..变成cd..)。
  3. 缩减输入。
  4. 设置系统中多版本命令的默认路径(例如GNU/grep位于/usr/local/bin/grep中而Unix
    grep位于/bin/grep中。若想默认使用GNU grep则设置别名grep='/usr/local/bin/grep')。
  5. 通过默认开启命令(例如rm,mv等其他命令)的交互参数来增加Unix的安全性。
  6. 为老旧的操作系统(比如MS-DOS或者其他类似Unix的操作系统)创建命令以增加兼容性(比如alias del=rm)。

我已经分享了多年来为了减少重复输入命令而使用的别名。若你知道或使用的哪些bash/ksh/csh别名能够减少输入,请在留言框中分享。

虽然 Bash shell 别名有一定的“个人色彩”限制,但是通过此文的一些 Bash shell 别名还是可以学到不少的实用命令运用方法的!Linux的学习其实就是这样,就是要靠不断的积累来拓宽学习广度的,对于我们站长来说“深度”不重要,重要的其实就是“广度”。

PS:话说此文真的好长呀!要不是有 Typecho 的 MarkDown 语法编辑排版此文将是个很“劳心劳力”的事儿,不得不再次叹服一下 Typecho 编辑器集成 MarkDown 语法的英明了,写起技术类文章的时候,真的是太爽了,666呀!老铁们!

最后修改:2018 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏