原文連結:世の中のエンジニアのalias設定 - Qiita
alias 是什麼?文章中也有稍微介紹到,簡單來說,就是「設定命令別名」,通常用於慣用指令特別長的情況,或是增設預設屬性在一些慣用指令,避免發生誤刪等憾事。
詳細可以參考鳥哥的文章:第十章、認識與學習BASH
以下正文開始!
前幾天,我和同事們進行一次討論,內容是關於「工程師都在終端機上設置什麼樣的 alias?」,因此我試著從 GitHub 上的 1000 個 Repository 程式碼中進行調查。
2019/04/10 根據評論進行微幅修改。感謝所有留下評論的人。
2019/04/11 嘗試寫了這篇文章: 常用的 vimrc 設置排名
2019/04/15 也寫了插件版本:最常用的 vim 插件 top20
什麼是 alias
根據 wikipedia:
在 UNIX 等系統中,註冊指令的替代名稱。也就是指令的別名。
每次都要輸入冗長的指令,或輸入經常使用的選項,感覺很麻煩對吧?
透過在終端機的設定檔中編寫 alias,即可定義指令的別名。
調査方法
- 使用 GitHub API
- 依照星星數排序,選出標有
dotfiles
主題標籤的 Repository 前 1000 個 - 在 Repository 中搜索名稱為
.bashrc
、.bash_profile
、.zshrc
、.zsh_profile
的檔案- 開頭有無句點均可
- 從檔案中提取包含
alias
的行數 - 共有 1602 個檔案符合條件
用來執行 API 的 Source Code
結果
我將調查結果分別依照「出現頻率」和「字母順序」列在 gist 中。
依出現頻率排序
- reireias/alias_ranking.md
依字母排序
- reireias/alias.md
介紹
當初雖然想以排名的形式撰寫這篇文章,但只根據出現次數來排名感覺不太有趣,因此決定以分組結果和較被關注的 alias 進行介紹。
ls 系
在出現次數方面,這個系列的排名相當高。
嗯,這結果準沒錯。
alias ls='ls --color=auto'
alias ls='ls -G'
alias ll='ls -alF'
alias ll='ls -lh'
alias ll='ls -l'
alias la='ls -A'
alias la='ls -a'
alias l='ls -CF'
# 也有這種
alias l='clear && ll'
alias l='clear && ls'
cd 系列
目錄移動系列的相關操作如下,有許多指令可用來快速移動到常用目錄:
# 和常用目錄的字母首結合使用
alias abc='cd ~/aaa/bbb/ccc'
# 即使都是 'd',也可能代表各種路徑
alias d='cd ~/.dotfiles'
alias d='cd ~/Desktop'
alias d='cd ~/Documents/Dropbox'
alias d='cd ~/Dropbox'
意外地大家都有定義這樣的別名。
使用數字來表示的方法似乎非常方便。
# 用點的數目表示
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# 用數字表示
alias ..2='cd ../..'
alias ..3='cd ../../..'
git 系列
將 git 指令依照使用多寡排序結果如下,我也有設定幾乎相同的 alias:
alias g='git'
alias ga='git add'
alias gd='git diff'
alias gs='git status'
alias gp='git push'
alias gb='git branch'
alias gst='git status'
alias gco='git checkout'
alias gf='git fetch'
alias gc='git commit'
dotfiles 相關
接著介紹有關設定 alias 的 dotfiles(點文件,指各種程式的配置文件)相關指令。
編輯系列感覺相當方便,之後也來設定看看吧。
# 縮寫因人而異
alias d='/path/to/dotfiles'
alias dot='/path/to/dotfiles'
alias dotfiles='/path/to/dotfiles'
# 編輯系列
alias zshrc='vi /path/to/dotfiles/.zshrc'
alias zshconfig='vi /path/to/dotfiles/.zshrc'
apt 系列
主要是針對 ubuntu 的設定。
# apt
alias agi='sudo apt install'
alias agr='sudo apt remove'
alias agu='sudo apt update'
# apt-get
alias ag='sudo apt-get'
alias agi='sudo apt-get install'
alias agr='sudo apt-get remove'
alias agu='sudo apt-get update'
順帶一提,使用 apt
指令比 apt-get
更好。
可參考:「apt-get」已過時?使用新的「apt」指令進行 Ubuntu 套件管理
bundle 系列
這是 Ruby on Rails 中熟悉的 bundle
。
這裡分成幾種流派。
alias b='bundle'
alias be='bundle exec'
alias bx='bundle exec'
alias bi='bundle install'
alias bo='bundle outdated'
alias bu='bundle update'
alias rc='bundle exec rails c'
top 系列
意外と定義されていた系その2。
cpu
やmem
は忘れっぽい人にはいいかもしれないです。
出奇不意地定義了第二類。對於健忘的人來說,cpu
和mem
可能很有用。
# 人それぞれ
alias top='htop'
alias top='gtop'
alias top='vtop'
alias top='gotop'
# 別名
alias mem='top -o rsize'
alias cpu='top -o cpu'
安全策略
- 指令加上
-interactive
(-i
)參數時,將會在發生覆寫時以互動形式詢問。
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
宗教戰爭系列
使用某些 alias 也可能被視為宣戰。
# 對異教徒的攻撃
alias atom='code'
alias v='code'
alias emacs='vi'
# 激烈的 edit 之爭
alias ed='atom .'
alias ed='emacs --daemon'
alias ed='vim'
alias edit="emacs -nw"
alias edit='subl'
alias edit='subl3'
alias edit='vim'
一字別名系列
可能有些激進,但熟悉後感覺很容易使用。
由於篇幅太長,僅附上提供參考或有趣的部分。
# a
alias a='alias'
alias a='ansible'
alias a='apt'
alias a='apt-get'
alias a='atom'
# b
alias b='brew'
alias b='bundle exec'
alias b='bundle'
alias b='bundler'
alias b='cd ..'
# c
alias c='curl'
alias c='cd'
alias c='clear'
alias c='cat'
alias c='rails console'
alias c='pbcopy' # 這感覺很方便
# d
alias d='cd ~/.dotfiles'
alias d='cd ~/Desktop'
alias d='cd ~/Dropbox'
alias d='date +%Y%m%d'
alias d='docker' # 這個有在使用
alias d='du -h -d=1'
alias d='git diff'
alias d='less' # display?
alias d='pwd'
# e
alias e='atom'
alias e='emacs'
alias e='emacsclient'
alias e='exit' # 有點過激了吧?
alias e='vim'
# f
alias f='fg'
alias f='file'
alias f='find . -name'
alias f='finger'
alias f='fuck'
alias f='open -a Finder ./'
# g
alias g='git status'
alias g='git' # 一定會有的之 1
alias g='googleit' # google
alias g='googler' # google
alias g='grep --color=auto'
alias g='grep' # 一定會有的之 2
# h
alias h='cd ~' # home
alias h='git reset HEAD' # head
alias h='heroku'
alias h='history | grep'
alias h='history'
alias h='tldr' # 這感覺也蠻方便的。help?
# i
alias i='sudo apt install --yes'
#j
alias j='jobs'
alias j='jump'
# k
alias k='kill -9'
alias k='kubectl' # 有在使用
alias k='kwrapper'
alias k='tree' # 因為在 l 的旁邊嗎?
# l
# 大多為 ls 系列因此割愛
# m
alias m='cd ~/Music && ls -a' # music 的 m!!!
alias m='make'
alias m='man'
alias m='mkdir' # 就個人來說也是這個吧
alias m='rake db:migrate db:rollback && rake db:migrate db:test:prepare' # 感覺有點超過
alias m='mv'
alias m='mvn'
# n
alias n='git checkout -b' # new branch
alias n='nano'
alias n='npm run'
alias n='npm' # 實際上比 node 還要常使用?
alias n='nvim'
alias n='sudo netctl'
alias n='node'
# o
alias o='open' # 大多是這個的衍生
# p
alias p='cd ~/Documents/projects'
alias p='cd ~/Dropbox/Projects'
alias p='cd ~/Pictures && ls -a'
alias p='cd ~/Projects'
alias p='ping' # 意外的激戰區?
alias p='popd' # 和 zsh 的 AUTO_PUSHD 是一組的?
alias p='pwd'
alias p='python'
alias p='python3'
alias p='pacman' # 不是 game 唷
# q
alias q='exit' # 幾乎只有這個
# r
alias r='cd / && ls -a' # root 的 r
alias r='rails' # r 對於 rails 開發者可能會感到迷惘?
alias r='rake'
alias r='ranger'
alias r='rgrep'
alias r='rm -i'
alias r='rspec'
alias r='screen -D -R'
alias r='source ~/.zshrc' # reload?
alias r='radian'
# s
alias s='cd ~/src'
alias s='git status'
alias s='ls' # 避免錯誤
alias s='screen'
alias s='spring'
alias s='ssh -l root'
alias s='ssh'
alias s='sudo su'
alias s='sudo'
alias s='svn'
# t
alias t='date +"%H%M%S"' # time
alias t='telnet'
alias t='terraform'
alias t='tig'
alias t='tmux -2'
alias t='tmux attach'
alias t='tmux new-session -A -s main'
alias t='tmux'
alias t='tree -C'
alias t='tree -Cfh'
alias t='tree -I "node_modules"' # 感覺是我的?
alias t='tree -a --ignore ".git|node_modules|bower_components|.DS_Store" -l 3' # 強化版
# u
alias u='cd ..' # up
# v
alias v='code' # VSCode
alias v='vagrant'
# vim 的一族
alias v='mvim'
alias v='nvim'
alias v='vi'
alias v='vim'
# w 沒什麼特別
# x
alias x='exit'
alias x='screen -A -x'
alias x='startx' # IBM?
alias x='/mnt/c/Windows/explorer.exe' # 是 cygwin 嗎?
# y
alias y='yarn' # 來使用這個吧
alias y='yaourt' # ArcLinux
# z
alias z='zathura' # 好像是 PDF Viewer
其他
# 雖然很短...
alias _='sudo'
# 可能是參數很難記的情況?
alias allps='ps aux'
# 當前目錄的 path 複製到剪貼簿(cpwd, copypath 等)
alias pwdc='pwd | tr -d "\n" | pbcopy'
番外編
global alias 全域別名
- zsh 功能
- 只在指令開頭有效,但使用定義帶有
g
的參數時,也可以在指令中途展開 - 常用於 pipe 等經常呼叫的指令
# 有幾個感覺蠻方便的
alias -g A='| awk'
alias -g C='| pbcopy' # copy
alias -g C='| wc -l' # count
alias -g G='| grep --color=auto' # 總是會有
alias -g H='| head' # 當然 tail 也是
alias -g L='| less -R'
alias -g X='| xargs'
suffix alias 後綴別名
- zsh 的功能
- 根據指令的結尾執行相應操作
alias -s gz='tar -xzvf' # 可用 ./hoge.tar.gz 展開
alias -s html='open' # ./index.html 可在瀏覽器開啟
alias -s {mp3,mp4,wav,mkv,m4v,m4a,wmv,avi,mpeg,mpg,vob,mov,rm}='mplayer' # 也可以這麼定義
感想
- 很少 aws 系列的別名
- 在 CLI 感覺這種 sub command 結構相當理想?
- 或因為有自動補完,所以不需要 alias?
- Docker 和 kubectl 的部分比預期中少
- 也學到許多不熟悉的指令
15th鐵人賽目錄傳送門:https://ithelp.ithome.com.tw/users/20135558/ironman/6290