在Mac和Linux上使用终端之间有什么区别?[关闭]


89

最近四年来我一直在使用Ubuntu。
我对shell命令有基本的了解,我更喜欢在终端中工作而不是使用GUI。最近,我开始使用Mac。

我已经在Mac终端中尝试了一些终端命令(我在Ubuntu上使用过),并且它的响应方式几乎相同。

我使用的命令,它们执行的任务或我应注意的Shell环境是否存在重大差异?


8
我想重新打开并进行程序员交流。
Michael Durrant

1
在网络上的任何地方都可以找到完整的mac vs linux终端命令列表吗?
jasonleonhard

Answers:


61

如果您全新或全新安装了OS X 10.3或更高版本,则默认用户终端外壳为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升级或使用OS X版本,则默认的用户shell是tcsh,它是csh('c-shell')的增强版本。早期的实现有些bug,编程语法也有些怪异,因此产生了一个糟糕的说唱。

正如Gordon Davisson恰当地列出的那样,mac和linux之间仍然存在一些根本差异,例如useraddMac上没有,并且ifconfig工作方式也不同。

下表对于了解各种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,最喜欢的是.bash_profile使用别名自定义.bashrc(来自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类完成。
戴夫·牛顿

感谢您提醒我,颜色在linux和macos ls命令上的表现有所不同。我对两者都使用相同的bashrc,并且需要找到一种方法来有条件地使用一个ls选项或另一个选项以确保ls始终获得颜色。
巴斯蒂安2015年

我将使用它来根据操作系统在条件上使用一个ls选项或另一个: / foo';; FreeBSD | OpenBSD)别名foo ='/ path / to / bsd / bin / foo';; *);; esac
巴斯蒂安

1
巴斯蒂安(Bastian),您可以ls在Linux(--color=all)和OSX(-G)中使用以下颜色: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant 2015年

TerminalBasics.pdf链接似乎已失效。就是同一个文件?
Plasma

29

@Michael Durrant的回答很好地涵盖了外壳本身,但是外壳环境还包括您在外壳中使用的各种命令,并且它们在OS X和linux之间将是相似的,但并不完全相同。通常,两者将具有相同的核心命令和功能(尤其是Posix标准中定义的那些命令)和功能,但是许多扩展会有所不同。

例如,Linux系统通常具有useradd创建新用户的命令,而OS X没有。在OS X上,通常使用GUI创建用户。如果您需要从命令行创建它们,则可以使用dscl(Linux没有)来编辑用户数据库(请参见此处)。(更新:从macOS High Sierra v10.13开始,您可以sysadminctl -addUser改为使用。)

同样,它们共有的某些命令将具有不同的功能和选项。例如,Linux通常包括GNU sed,它使用该-r选项来调用扩展的正则表达式。在OS X上,您可以使用该-E选项获得相同的效果。同样,在linux中,您可能会使用它ls --color=auto来获取彩色输出。在macOS上,最接近的等效项是ls -G

编辑:另一个区别是,许多linux命令允许在其参数后指定选项(例如ls file1 file2 -l),而大多数OS X命令要求选项严格排在第一位(ls -l file1 file2)。

最后,由于操作系统本身不同,因此某些命令在操作系统之间的行为也有所不同。例如,在Linux上,您可能会ifconfig用来更改网络配置。在OS X上ifconfig可以使用(语法可能稍有不同),但是您的更改很可能会被系统配置守护程序随机覆盖。相反,您应该使用来编辑网络首选项networksetup,然后让config守护程序将它们应用于实时网络状态。


3
大点戈登!即使我也有答案,我也会+1;)-我不应该为此得到些许信誉吗?
Michael Durrant

1
特别是因为您自己的回答很不错;我也给你投票。
Gordon Davisson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.