2011-11-08 130 views
67

我過去四年來一直在使用Ubuntu。
我有一個shell命令的基本知識,我更喜歡在終端上工作,而不是使用GUI。最近我開始使用Mac。在Mac和Linux上使用終端之間有什麼區別?

我已經嘗試了幾個終端命令(我在Ubuntu上使用)在Mac終端,它似乎以基本相同的方式迴應。

在我使用的命令,它們執行的任務或我應該注意的shell環境中,是否有任何顯着差異?

+7

我想重新打開並轉向程序員交換。 –

+1

有沒有web上任何地方的mac和linux終端命令的完整列表? – jasonleonhard

回答

51

如果您執行了OS X 10.3或更新版本的新安裝或全新安裝,則默認的用戶終端shell爲bash。

Bash本質上是原始Bourne shell sh的增強版和GNU免費版本。如果您以前有bash經驗(通常是GNU/Linux安裝中的默認設置),這會使OS X命令行體驗變得很熟悉,否則請考慮將shell切換到tcsh或zsh,因爲有些人覺得這些更加用戶友好。

如果您從OS X版本10.2.x,10.1.x或10.0.x進行升級,則默認用戶shell是tcsh,它是csh('c-shell')的增強版本。早期的實現是有點bug,編程語法有點怪,所以它開發了一個壞的說唱。

作爲Gordon Davisson,mac和linux仍然存在一些根本差異,例如Mac上的useraddifconfig的工作方式不同。

下表對於瞭解各種unix shell非常有用。

sh  The original Bourne shell Present on every unix system 
ksh  Original Korn shell   Richer shell programming environment than sh 
csh  Original C-shell   C-like syntax; early versions buggy 
tcsh Enhanced C-shell   User-friendly and less buggy csh implementation 
bash GNU Bourne-again shell  Enhanced and free sh implementation 
zsh  Z shell      Enhanced, user-friendly ksh-like shell 

您也可能會發現這些指南有所幫助:

http://homepage.mac.com/rgriff/files/TerminalBasics.pdf

http://guides.macrumors.com/Terminal
http://www.ofb.biz/safari/article/476.html

關於最後一點,我在Linux(Ubuntu的11)和Mac OSX所以我使用bash,而我最喜歡的是定製.bashrc(源自.bash_profile在OSX上)帶有別名的文件,下面是一些例子。 我現在把我所有的別名在一個單獨的文件.bash_aliases,包括它:

if [ -f ~/.bash_aliases ]; then 
    . ~/.bash_aliases 
fi 
在.bashrc或者.bash_profile文件中

請注意,這是一個mac-linux差異的例子,因爲在Mac上不能有--color=auto。我第一次這樣做(不知道)我重新定義ls是無效的,這有點驚人,直到我刪除了--auto-color

您也可以找到有用的https://unix.stackexchange.com/q/127799/10043

# ~/.bash_aliases 
# ls variants 
#alias l='ls -CF' 
alias la='ls -A' 
alias l='ls -alFtr' 
alias lsd='ls -d .*' 
# Various 
alias h='history | tail' 
alias hg='history | grep' 
alias mv='mv -i' 
alias zap='rm -i' 
# One letter quickies: 
alias p='pwd' 
alias x='exit' 
alias {ack,ak}='ack-grep' 
# Directories 
alias s='cd ..' 
alias play='cd ~/play/' 
# Rails 
alias src='script/rails console' 
alias srs='script/rails server' 
alias raked='rake db:drop db:create db:migrate db:seed' 
alias rvm-restart='source '\''/home/durrantm/.rvm/scripts/rvm'\''' 
alias rrg='rake routes | grep ' 
alias rspecd='rspec --drb ' 
# 
# DropBox - syncd 
WORKBASE="~/Dropbox/97_2012/work" 
alias work="cd $WORKBASE" 
alias code="cd $WORKBASE/ror/code" 
# 
# DropNot - NOT syncd ! 
WORKBASE_GIT="~/Dropnot" 
alias {dropnot,not}="cd $WORKBASE_GIT" 
alias {webs,ww}="cd $WORKBASE_GIT/webs" 
alias {setups,docs}="cd $WORKBASE_GIT/setups_and_docs" 
alias {linker,lnk}="cd $WORKBASE_GIT/webs/rails_v3/linker" 
# 
# git 
alias {gsta,gst}='git status' 
# Warning: gst conflicts with gnu-smalltalk (when used). 
alias {gbra,gb}='git branch' 
alias {gco,go}='git checkout' 
alias {gcob,gob}='git checkout -b ' 
alias {gadd,ga}='git add ' 
alias {gcom,gc}='git commit' 
alias {gpul,gl}='git pull ' 
alias {gpus,gh}='git push ' 
alias glom='git pull origin master' 
alias ghom='git push origin master' 
alias gg='git grep ' 
# 
# vim 
alias v='vim' 
# 
# tmux 
alias {ton,tn}='tmux set -g mode-mouse on' 
alias {tof,tf}='tmux set -g mode-mouse off' 
# 
# dmc 
alias {dmc,dm}='cd ~/Dropnot/webs/rails_v3/dmc/' 
alias wf='cd ~/Dropnot/webs/rails_v3/dmc/dmWorkflow' 
alias ws='cd ~/Dropnot/webs/rails_v3/dmc/dmStaffing' 
+1

我喜歡'zsh'的默認Java類完成。 –

+0

感謝提醒我,顏色在Linux和macos ls命令上表現不同。我爲兩者使用相同的bashrc,並且需要找到一種方法來有條件地使用一個ls選項或另一個來確保ls總是獲取顏色。 – Bastian

+0

我將使用這個有條件地使用一個LS選項或根據操作系統中的其他:_myos =「$(UNAME)」,並在 的Linux然後 情況$ _myos)別名富='/路徑/到/ LINUX /斌/富';; FreeBSD | OpenBSD)alias foo ='/ path/to/bsd/bin/foo';; *);; ESAC – Bastian

24

@邁克爾杜蘭特的回答巧妙地覆蓋殼體本身,而是shell環境還包括您在shell中使用,並且這些都將是類似的各種命令 - 但不完全相同 - 在OS X和Linux之間。一般而言,兩者將具有相同的核心命令和功能(尤其是那些在Posix標準中定義的),但許多擴展將會不同。

例如,Linux系統一般有useradd命令來創建新用戶,但OS X沒有。在OS X上,通常使用GUI來創建用戶;如果需要從命令行創建它們,則使用dscl(Linux不具備)來編輯用戶數據庫(請參閱here)。

此外,一些命令他們的共同點將有不同的功能和選項。例如,linuxes通常包含GNU sed,它使用-r選項來調用擴展正則表達式;在OS X上,您可以使用-E選項來獲得相同的效果。

編輯:另一個區別是,很多linux命令允許在其參數後面指定選項(例如ls file1 file2 -l),而大多數OS X命令需要嚴格優先選項(ls -l file1 file2)。

最後,由於操作系統本身是不同的,一些命令拉閘的操作系統之間的行爲不同。例如,在Linux上,您可能會使用ifconfig來更改網絡配置。在OS X上,ifconfig可以工作(可能語法略有不同),但您的更改可能會被系統配置守護進程隨機覆蓋;相反,您應該使用networksetup編輯網絡首選項,然後讓配置守護程序將它們應用到實時網絡狀態。

+3

偉大的戈登!即使我也有答案,我會+1!) - 我不應該爲此獲得某些榮譽嗎?! –

+1

特別是因爲你自己是一個相當好的答案;我也給了你一票。 –

相關問題