在 mac 和 linux 上使用终端有啥区别? [关闭]

Posted

技术标签:

【中文标题】在 mac 和 linux 上使用终端有啥区别? [关闭]【英文标题】:What are the differences between using the terminal on a mac vs linux? [closed]在 mac 和 linux 上使用终端有什么区别? [关闭] 【发布时间】:2011-12-24 11:14:07 【问题描述】:

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

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

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

【问题讨论】:

我想重新打开并转到程序员交流。 网络上是否有完整的 mac vs linux 终端命令列表? 【参考方案1】:

如果您对 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') 的增强版本。早期的实现有点错误,编程语法有点奇怪,所以它发展得很糟糕。

正如 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/Terminalhttp://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

您可能还会发现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 类完成。 感谢您提醒我颜色在 linux 和 macos ls 命令上的行为不同。我对两者都使用相同的 bashrc,并且需要找到一种方法来有条件地使用一个 ls 选项或另一个以确保 ls 始终获得颜色。 我将使用它来根据操作系统有条件地使用一个 ls 选项或另一个:_myos="$(uname)" 然后 case $_myos in Linux) alias foo=' /path/to/linux/bin/foo';; FreeBSD|OpenBSD) 别名 foo='/path/to/bsd/bin/foo' ;; *) ;; esac Bastian,您可以在 Linux (--color=all) 和 OSX (-G) 中为 ls 设置颜色:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G' TerminalBasics.pdf link 似乎已经死了。 this 是同一个文档吗?【参考方案2】:

@Michael Durrant 的回答巧妙地涵盖了 shell 本身,但 shell 环境还包括您在 shell 中使用的各种命令,这些命令在 OS X 和 linux 之间将是相似的——但并不完全相同。一般来说,两者都具有相同的核心命令和功能(尤其是在 Posix 标准中定义的那些),但很多扩展会有所不同。

例如,linux 系统一般都有useradd 命令来创建新用户,但 OS X 没有。在 OS X 上,您通常使用 GUI 来创建用户;如果您需要从命令行创建它们,您可以使用dscl(linux 没有)来编辑用户数据库(参见here)。 (更新:从 macOS High Sierra v10.13 开始,您可以改用sysadminctl -addUser。)

此外,它们共有的一些命令将具有不同的功能和选项。例如,linux一般包括GNUsed,它使用-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 编辑网络首选项,然后让配置守护进程将它们应用到实时网络状态。

【讨论】:

好点戈登!即使我也有答案,我也会 +1 ;) - 我不应该为此获得一些信任吗?! 特别是因为您的答案本身就是一个很好的答案;我也给了你一票。

以上是关于在 mac 和 linux 上使用终端有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

sudo -i和sudo -s有啥区别

git,git bash和git shell有啥区别

ps -ef和ps aux有啥区别啊

ubuntu server版与桌面版使用有啥区别

ubuntu桌面版和服务器版有啥区别?

linux 看进程 使用 ps -A 与ps -ef 有啥区别?