在Mac和Linux上使用terminal有什么区别?

过去四年来我一直在使用Ubuntu。
我有一个shell命令的基本知识,我更喜欢在terminal上工作,而不是使用GUI。 最近我已经开始使用Mac。

我已经在Macterminal上尝试了一些terminal命令(我在Ubuntu上使用),并且似乎以大致相同的方式响应。

在我使用的命令,它们执行的任务或者我应该注意的shell环境中,是否有任何重大差异?

如果您新安装了OS X 10.3或更新版本,则默认的用户terminalshell是bash。

Bash本质上是原始Bourne shell的增强版和GNU免费版本,sh。 如果你以前有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 

您也可以find这些指南有用:

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(来自OSX上的.bash_profile )文件,下面是一些别名。 我现在将所有别名放在一个单独的.bash_aliases文件中,并将其包含在:

 if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi 

在.bashrc或.bash_profile文件中。

请注意,这是一个mac-linux差异的例子,因为在Mac上你不能有--color=auto 。 我第一次这样做(不知道)我重新定义了ls是无效的,这有点惊人,直到我删除--auto-color

你也可以find有用的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' 

@Michael Durrant的答案巧妙地涵盖了shell本身,但是shell环境还包含了你在shell中使用的各种命令,而这些命令在OS X和linux之间将会是类似的,但不完全相同。 一般而言,两者将具有相同的核心命令和特征(特别是那些在Posix标准中定义的),但是许多扩展将是不同的。

例如,linux系统通常有一个useradd命令来创build新的用户,但是OS X却没有。 在OS X上,通常使用GUI来创build用户; 如果你需要从命令行创build它们,你可以使用dscl (linux没有的)编辑用户数据库(见这里 )。

另外,他们有一些共同的命令会有不同的function和选项。 例如,linuxes通常包含GNU sed ,它使用-r选项来调用扩展正则expression式; 在OS X上,您可以使用-E选项来获得相同的效果。

编辑:另一个区别是,许多Linux命令允许选项后,他们的参数(例如ls file1 file2 -l ),而大多数OS X命令要求选项严格先来( ls -l file1 file2 )。

最后,由于操作系统本身是不同的,所以一些命令在操作系统之间performance出不同的performance。 例如,在Linux上你可能会使用ifconfig来改变你的networkingconfiguration。 在OS X上, ifconfig可能会工作(可能语法略有不同),但是您的更改可能会被系统configuration守护进程随机覆盖; 相反,您应该使用networksetup编辑networking首选项,然后让configuration守护程序将它们应用于实时networking状态。