我过去四年一直在使用Ubuntu操作系统。
我对Shell命令有基本的了解,而且更喜欢使用终端而非图形界面。最近我开始使用Mac系统。
我已经尝试在Mac终端中运行一些(我在Ubuntu上使用的)命令,似乎大多数情况下它们的反应都相同。
不知道在这些命令、它们执行的任务或者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 OS X,因此我使用bash,并且我最喜欢的是通过自定义.bashrc文件来创建别名。以下是一些示例。 我现在将所有别名都放在单独的.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'
zsh
的默认Java类自动补全。 - Dave Newton--color=all
)和OSX(-G
)中为ls
设置颜色,方法如下:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
。 - Michael Durrant@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命令要求选项严格先于参数(ls -l file1 file2
)。
最后,由于操作系统本身不同,一些命令的行为在不同的操作系统之间可能会有所不同。例如,在Linux上,您可能会使用ifconfig
来更改网络配置。在OS X上,ifconfig
也可以工作(可能需要略微不同的语法),但您的更改可能会被系统配置守护进程随机覆盖;相反,您应该使用networksetup
编辑网络首选项,然后让配置守护进程将其应用到实时网络状态。