30 個方便的 Bash shell 別名
bash alias 的那些事
bash shell 中的 alias 命令的語法是這樣的:
alias [alias-name[=string]...]
如何列出 bash 別名
輸入下面的 [alias 命令](https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html "See Linux/Unix alias command examples for more info"):
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'
4:生成 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 -i.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 操作系統上的主機防火牆](https://www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial/ "iptables CentOS/RHEL/Fedora tutorial")。它是 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 命令
shutdown 命令 會讓 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 一款基於終端的網路流量檢測器。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 admin@192.168.1.1 /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'
總結
本文總結了 *nix bash 別名的多種用法:
- 為命令設置默認的參數(例如通過
alias ethtool='ethtool eth0'
設置 ethtool 命令的默認參數為 eth0)。 - 修正錯誤的拼寫(通過
alias cd..='cd ..'
讓cd..
變成cd ..
)。 - 縮減輸入。
- 設置系統中多版本命令的默認路徑(例如 GNU/grep 位於
/usr/local/bin/grep
中而 Unix grep 位於/bin/grep
中。若想默認使用 GNU grep 則設置別名grep='/usr/local/bin/grep'
)。 - 通過默認開啟命令(例如
rm
,mv
等其他命令)的交互參數來增加 Unix 的安全性。 - 為老舊的操作系統(比如 MS-DOS 或者其他類似 Unix 的操作系統)創建命令以增加兼容性(比如
alias del=rm
)。
我已經分享了多年來為了減少重複輸入命令而使用的別名。若你知道或使用的哪些 bash/ksh/csh 別名能夠減少輸入,請在留言框中分享。
via: https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html
作者:nixCraft 譯者:lujun9972 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive