0%

[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 中。

依出現頻率排序

  • 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。

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