[2023 15th鐵人賽] Day11 - 調查工程師的 alias 設定排行

發佈時間

原文連結:世の中のエンジニアの 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 中。

依出現頻率排序#

依字母排序#

介紹#

當初雖然想以排名的形式撰寫這篇文章,但只根據出現次數來排名感覺不太有趣,因此決定以分組結果和較被關注的 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。

cpumemは忘れっぽい人にはいいかもしれないです。

出奇不意地定義了第二類。對於健忘的人來說,cpumem可能很有用。

# 人それぞれ 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