作者 | Nixcraft
譯者 | lujun9972
bash 別名只不過是指向命令的快捷方式而已。alias
命令允許使用者只輸入一個單詞就執行任意一個命令或一組命令(包括命令選項和檔案名)。執行 alias
命令會顯示一個所有已定義別名的串列。你可以在 ~/.bashrc[1] 檔案中自定義別名。使用別名可以在命令列中減少輸入的時間,使工作更流暢,同時增加生產率。
本文透過 30 個 bash shell 別名的實際案例演示瞭如何建立和使用別名。
bash alias 的那些事
bash shell 中的 alias 命令的語法是這樣的:
alias [alias-name[=string]...]
如何列出 bash 別名
輸入下麵的 alias 命令[2]:
alias
結果為:
alias ..='cd ..'
alias amazonbackup='s3backup'
alias apt-get='sudo apt-get'
...
alias
命令預設會列出當前使用者定義好的別名。
如何定義或者建立一個 bash shell 別名
使用下麵語法 建立別名[3]:
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 別名
下麵語法可以臨時性地禁用別名[4]:
## 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 命令來刪除別名[5]。其語法為:
unalias aliasname
unalias foo
例如,刪除我們之前建立的別名 c
:
unalias c
你還需要用文字編輯器刪掉 ~/.bashrc 檔案[1] 中的別名定義(參見下一部分內容)。
如何讓 bash shell 別名永久生效
別名 c
在當前登入會話中依然有效。但當你登出或重啟系統後,別名 c
就沒有了。為了防止出現這個問題,將別名定義寫入 ~/.bashrc file[1] 中,輸入:
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 陳述句[6]:
### 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 命令列出目錄中的內容[7] 而你可以對輸出進行著色:
## 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 命令是一個用於在純文字檔案中搜索匹配正則運算式的行的命令列工具[8]:
## 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'
#4:生成 sha1 數字簽名
alias sha1 = 'openssl sha1'
#5:自動建立父目錄
mkdir 命令[9] 用於建立目錄:
alias mkdir = 'mkdir -pv'
#6:為 diff 輸出著色
你可以使用 diff 來一行行第比較檔案[10] 而一個名為 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 命令[11] 可以快速列出服務區中所有的 TCP/UDP 埠:
alias ports = 'netstat -tulanp'
#13:喚醒休眠的伺服器
Wake-on-LAN (WOL) 是一個乙太網標準[12],可以透過網路訊息來開啟伺服器。你可以使用下麵別名來快速啟用 nas 裝置[13] 以及伺服器:
## 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 作業系統上的主機防火牆[14]。它是 Linux 發行版中的一部分,且預設情況下是啟用狀態。這裡列出了大多數 Liux 新手防護入侵者最常用的 iptables 方法[15]。
## 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 essay-headers #
alias essay-header = 'curl -I'
# find out if remote server supports gzip / mod_deflate or not #
alias essay-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 命令[16] 用於透過因特網安裝軟體包 (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 命令[17] 是 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 命令
shutdown 命令[18] 會讓 Linux / Unix 系統關機:
# 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 一款基於終端的網路流量檢測器[19]。dnstop 是一款分析 DNS 流量的終端工具[20]。tcptrack 和 iftop 命令顯示[21] 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 路由器[22]。
# 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 預設斷點續傳
GNU wget 是一款用來從 web 下載檔案的自由軟體[23]。它支援 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'
總結
本文總結了 *nix bash 別名的多種用法:
alias ethtool='ethtool eth0'
設定 ethtool 命令的預設引數為 eth0)。alias cd..='cd ..'
讓 cd..
變成 cd ..
)。/usr/local/bin/grep
中而 Unix grep 位於 /bin/grep
中。若想預設使用 GNU grep 則設定別名 grep='/usr/local/bin/grep'
)。rm
,mv
等其他命令)的互動引數來增加 Unix 的安全性。alias del=rm
)。我已經分享了多年來為了減少重覆輸入命令而使用的別名。若你知道或使用的哪些 bash/ksh/csh 別名能夠減少輸入,請在留言框中分享。
via: https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html
作者:nixCraft[24] 譯者:lujun9972 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出