在 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 上没有 useradd
和 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/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 上使用终端有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章