30個(gè)方便的bash shell別名
bash 別名只不過是指向命令的快捷方式而已。alias
命令允許用戶只輸入一個(gè)單詞就運(yùn)行任意一個(gè)命令或一組命令(包括命令選項(xiàng)和文件名)。執(zhí)行 alias
命令會顯示一個(gè)所有已定義別名的列表。你可以在 ~/.bashrc 文件中自定義別名。使用別名可以在命令行中減少輸入的時(shí)間,使工作更流暢,同時(shí)增加生產(chǎn)率。
本文通過 30 個(gè) bash shell 別名的實(shí)際案例演示了如何創(chuàng)建和使用別名。
bash alias 的那些事
bash shell 中的 alias 命令的語法是這樣的:
alias [alias-name[=string]...]
如何列出 bash 別名
輸入下面的 alias 命令:
alias
結(jié)果為:
alias ..='cd ..'
alias amazonbackup='s3backup'
alias apt-get='sudo apt-get'
...
alias
命令默認(rèn)會列出當(dāng)前用戶定義好的別名。
如何定義或者創(chuàng)建一個(gè) bash shell 別名
使用下面語法 創(chuàng)建別名:
alias name =value
alias name = 'command'
alias name = 'command arg1 arg2'
alias name = '/path/to/script'
alias name = '/path/to/script.pl arg1'
舉個(gè)例子,輸入下面命令并回車就會為常用的 clear
(清除屏幕)命令創(chuàng)建一個(gè)別名 c
:
alias c = 'clear'
然后輸入字母 c
而不是 clear
后回車就會清除屏幕了:
c
如何臨時(shí)性地禁用 bash 別名
下面語法可以臨時(shí)性地禁用別名:
## 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
例如,刪除我們之前創(chuàng)建的別名 c
:
unalias c
你還需要用文本編輯器刪掉 ~/.bashrc 文件 中的別名定義(參見下一部分內(nèi)容)。
如何讓 bash shell 別名永久生效
別名 c
在當(dāng)前登錄會話中依然有效。但當(dāng)你登出或重啟系統(tǒng)后,別名 c
就沒有了。為了防止出現(xiàn)這個(gè)問題,將別名定義寫入 ~/.bashrc file 中,輸入:
vi ~/.bashrc
輸入下行內(nèi)容讓別名 c
對當(dāng)前用戶永久有效:
alias c = 'clear'
保存并關(guān)閉文件就行了。系統(tǒng)級的別名(也就是對所有用戶都生效的別名)可以放在 /etc/bashrc
文件中。請注意,alias
命令內(nèi)建于各種 shell 中,包括 ksh,tcsh/csh,ash,bash 以及其他 shell。
關(guān)于特權(quán)權(quán)限判斷
可以將下面代碼加入 ~/.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
定義與操作系統(tǒng)類型相關(guān)的別名
可以將下面代碼加入 ~/.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 個(gè) bash shell 別名的案例
你可以定義各種類型的別名來節(jié)省時(shí)間并提高生產(chǎn)率。
#1:控制 ls 命令的輸出
ls 命令列出目錄中的內(nèi)容 而你可以對輸出進(jìn)行著色:
## 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 命令是一個(gè)用于在純文本文件中搜索匹配正則表達(dá)式的行的命令行工具:
## 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:讓計(jì)算器默認(rèn)開啟 math 庫
alias bc = 'bc -l'
#4:生成 sha1 數(shù)字簽名
alias sha1 = 'openssl sha1'
#5:自動創(chuàng)建父目錄
mkdir 命令 用于創(chuàng)建目錄:
alias mkdir = 'mkdir -pv'
#6:為 diff 輸出著色
你可以使用 diff 來一行行第比較文件 而一個(gè)名為 colordiff
的工具可以為 diff 輸出著色:
# install colordiff package :)
alias diff = 'colordiff'
#7:讓 mount 命令的輸出更漂亮,更方便人類閱讀
alias mount = 'mount |column -t'
#8:簡化命令以節(jié)省時(shí)間
# handy short cuts #
alias h = 'history'
alias j = 'jobs -l'
#9:創(chuàng)建一系列新命令
alias path = 'echo -e ${PATH//:/\\n}'
alias now = 'date +"%T"'
alias nowtime =now
alias nowdate = 'date +"%d-%m-%Y"'
#10:設(shè)置 vim 為默認(rèn)編輯器
alias vi = vim
alias svi = 'sudo vi'
alias vis = 'vim "+set si"'
alias edit = 'vim'
#11:控制網(wǎng)絡(luò)工具 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 命令 可以快速列出服務(wù)區(qū)中所有的 TCP/UDP 端口:
alias ports = 'netstat -tulanp'
#13:喚醒休眠的服務(wù)器
Wake-on-LAN (WOL) 是一個(gè)以太網(wǎng)標(biāo)準(zhǔn),可以通過網(wǎng)絡(luò)消息來開啟服務(wù)器。你可以使用下面別名來快速激活 nas 設(shè)備 以及服務(wù)器:
## 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 操作系統(tǒng)上的主機(jī)防火墻。它是 Linux 發(fā)行版中的一部分,且默認(rèn)情況下是激活狀態(tài)。這里列出了大多數(shù) Liux 新手防護(hù)入侵者最常用的 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 調(diào)試 web 服務(wù)器 / 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 服務(wù)器
apt-get 命令 用于通過因特網(wǎng)安裝軟件包 (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 服務(wù)器
yum 命令 是 RHEL / CentOS / Fedora Linux 以及其他基于這些發(fā)行版的 Linux 上的軟件包管理工具:
## distrp specifc RHEL/CentOS ##
alias update = 'yum update'
alias updatey = 'yum -y update'
#19:優(yōu)化 sudo 和 su 命令
# become root #
alias root = 'sudo -i'
alias su = 'sudo -i'
#20:使用 sudo 執(zhí)行 halt/reboot 命令
shutdown 命令 會讓 Linux / Unix 系統(tǒng)關(guān)機(jī):
# 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 服務(wù)器
# 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:與備份相關(guān)的別名
# 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:桌面應(yīng)用相關(guān)的別名 - 按需播放的 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:設(shè)置系統(tǒng)管理相關(guān)命令的默認(rèn)網(wǎng)卡
vnstat 一款基于終端的網(wǎng)絡(luò)流量檢測器。dnstop 是一款分析 DNS 流量的終端工具。tcptrack 和 iftop 命令顯示 TCP/UDP 連接方面的信息,它監(jiān)控網(wǎng)卡并顯示其消耗的帶寬。
## 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:快速獲取系統(tǒng)內(nèi)存,cpu 使用,和 gpu 內(nèi)存相關(guān)信息
## 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 admin@192.168.1.1 /sbin/reboot"
#27 wget 默認(rèn)斷點(diǎn)續(xù)傳
GNU wget 是一款用來從 web 下載文件的自由軟件。它支持 HTTP,HTTPS,以及 FTP 協(xié)議,而且它也支持?jǐn)帱c(diǎn)續(xù)傳:
## this one saved by butt so many times ##
alias wget = 'wget -c'
#28 使用不同瀏覽器來測試網(wǎng)站
## 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:關(guān)于 ssh 別名的注意事項(xiàng)
不要創(chuàng)建 ssh 別名,代之以 ~/.ssh/config
這個(gè) OpenSSH SSH 客戶端配置文件。它的選項(xiàng)更加豐富。下面是一個(gè)例子:
Host server10
Hostname 1.2.3.4
IdentityFile ~/backups/.ssh/id_dsa
user foobar
Port 30000
ForwardX11Trusted yes
TCPKeepAlive yes
然后你就可以使用下面語句連接 server10 了:
$ ssh server10
#30:現(xiàn)在該分享你的別名了
## 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'
總結(jié)
本文總結(jié)了 *nix bash 別名的多種用法:
- 為命令設(shè)置默認(rèn)的參數(shù)(例如通過
alias ethtool='ethtool eth0'
設(shè)置 ethtool 命令的默認(rèn)參數(shù)為 eth0)。 - 修正錯(cuò)誤的拼寫(通過
alias cd..='cd ..'
讓cd..
變成cd ..
)。 - 縮減輸入。
- 設(shè)置系統(tǒng)中多版本命令的默認(rèn)路徑(例如 GNU/grep 位于
/usr/local/bin/grep
中而 Unix grep 位于/bin/grep
中。若想默認(rèn)使用 GNU grep 則設(shè)置別名grep='/usr/local/bin/grep'
)。 - 通過默認(rèn)開啟命令(例如
rm
,mv
等其他命令)的交互參數(shù)來增加 Unix 的安全性。 - 為老舊的操作系統(tǒng)(比如 MS-DOS 或者其他類似 Unix 的操作系統(tǒng))創(chuàng)建命令以增加兼容性(比如
alias del=rm
)。
我已經(jīng)分享了多年來為了減少重復(fù)輸入命令而使用的別名。若你知道或使用的哪些 bash/ksh/csh 別名能夠減少輸入,請?jiān)诹粞钥蛑蟹窒怼?nbsp;