在mac和linux上使用终端有什么区别?

Dil*_*ili 88 macos bash shell terminal ubuntu

我过去四年一直在使用Ubuntu.
我有shell命令的基本知识,我更喜欢在终端中工作而不是使用GUI.最近我开始使用Mac.

我在Mac终端上尝试了一些终端命令(我在Ubuntu上使用它),它似乎以大致相同的方式响应.

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

Mic*_*ant 59

如果您安装了OS X 10.3或更新版本的新安装或干净安装,则默认用户终端shell为bash.

Bash本质上是原始Bourne shell的增强版和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').早期的实现有点错误,编程语法有点怪异,所以它开发了一个糟糕的说唱.

Mac和Linux之间仍存在一些根本区别,因为Gordon Davisson如此恰当地列出,例如useradd在Mac上没有,并且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
Run Code Online (Sandbox Code Playgroud)

您可能还会发现这些指南很有帮助:

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
Run Code Online (Sandbox Code Playgroud)

在.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'
Run Code Online (Sandbox Code Playgroud)


Gor*_*son 27

@Michael Durrant的答案巧妙地涵盖了shell本身,但是shell环境还包括你在shell中使用的各种命令,这些命令在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命令需要选项严格来自first(ls -l file1 file2).

最后,由于操作系统本身不同,一些命令最终会在操作系统之间表现不同.例如,在linux上你可能会ifconfig用来改变你的网络配置.在OS X上,ifconfig可以工作(可能语法略有不同),但系统配置守护程序可能会随机覆盖您的更改; 相反,您应该使用编辑网络首选项networksetup,然后让配置守护程序将它们应用于实时网络状态.

  • 伟大的点戈登!我会+1,即使我也有答案;) - 我不应该得到一些信誉吗?! (3认同)