Quais são as diferenças entre usar o terminal em um Mac vs Linux? [fechadas]

89

Uso o Ubuntu há quatro anos.
Tenho um conhecimento básico de comandos do shell e prefiro trabalhar em um terminal em vez de usar uma GUI. Recentemente, comecei a usar um Mac.

Eu tentei alguns comandos de terminal (que uso no Ubuntu) no terminal Mac e parece responder da mesma maneira.

Há alguma diferença significativa nos comandos que uso, nas tarefas que executam ou no ambiente de shell do qual devo estar ciente?

Dili
fonte
8
Eu gostaria de reabrir e passar para o intercâmbio de programadores.
Michael Durrant
1
Existe uma lista abrangente de comandos de terminal mac vs linux em qualquer lugar da web?
jasonleonhard

Respostas:

61

Se você fez uma instalação nova ou limpa do OS X versão 10.3 ou mais recente, o shell do terminal do usuário padrão é bash.

O Bash é essencialmente uma versão freeware GNU aprimorada do shell Bourne original, sh. Se você tiver experiência anterior com bash (geralmente o padrão em instalações GNU / Linux), isso torna a experiência de linha de comando do OS X familiar, caso contrário, considere mudar seu shell para tcsh ou zsh, já que alguns acham isso mais amigável.

Se você atualizou ou usa o OS X versão 10.2.x, 10.1.x ou 10.0.x, o shell do usuário padrão é tcsh, uma versão aprimorada do csh ('c-shell'). As primeiras implementações eram um pouco problemáticas e a sintaxe de programação um pouco estranha, por isso desenvolveu uma má reputação.

Ainda existem algumas diferenças fundamentais entre mac e linux como Gordon Davisson lista tão apropriadamente, por exemplo, não useraddno Mac e ifconfigfunciona de maneira diferente.

A tabela a seguir é útil para conhecer os vários shells do Unix.

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

Você também pode achar estes guias úteis:

http://homepage.mac.com/rgriff/files/TerminalBasics.pdf

http://guides.macrumors.com/Terminal
http://www.ofb.biz/safari/article/476.html

Para finalizar, estou no Linux (Ubuntu 11) e no Mac osX, então uso o bash e o que mais gosto é de customizar o arquivo .bashrc (fonte do .bash_profileOSX) com aliases, alguns exemplos abaixo. Agora coloquei todos os meus aliases em um arquivo .bash_aliases separado e o incluí com:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

no arquivo .bashrc ou .bash_profile.

Observe que este é um exemplo de uma diferença mac-linux porque em um Mac você não pode ter o--color=auto . A primeira vez que fiz isso (sem saber) redefini- lsme como inválido, o que foi um pouco alarmante até que removi --auto-color!

Você também pode achar https://unix.stackexchange.com/q/127799/10043 útil

# ~/.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'
Michael Durrant
fonte
1
Eu gosto zshda conclusão da classe Java padrão.
Dave Newton
obrigado por me lembrar que a cor se comporta de maneira diferente no comando linux e macos ls. Eu uso o mesmo bashrc para ambos e preciso encontrar uma maneira de usar condicionalmente uma opção ls ou a outra para garantir que ls sempre obtenha cores.
Bastian
Vou usar isso para usar condicionalmente uma das opções ls ou a outra de acordo com o sistema operacional: _myos = "$ (uname)" e o caso $ _myos no Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) alias foo = '/ path / to / bsd / bin / foo' ;; *) ;; esac
Bastian
1
Bastian, você pode ter cores para lsLinux ( --color=all) e OSX ( -G) com o seguinte: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant
O link TerminalBasics.pdf parece estar morto. Este é o mesmo documento?
Plasma de
29

A resposta de @Michael Durrant cobre habilmente o shell em si, mas o ambiente do shell também inclui os vários comandos que você usa no shell e eles serão semelhantes - mas não idênticos - entre o OS X e o Linux. Em geral, ambos terão os mesmos comandos e recursos principais (especialmente aqueles definidos no padrão Posix), mas muitas extensões serão diferentes.

Por exemplo, os sistemas Linux geralmente têm um useraddcomando para criar novos usuários, mas o OS X não. No OS X, você geralmente usa a GUI para criar usuários; se você precisar criá-los na linha de comando, use dscl(o que o Linux não tem) para editar o banco de dados do usuário (veja aqui ). (Atualização: a partir do macOS High Sierra v10.13, você pode usar em seu sysadminctl -addUserlugar.)

Além disso, alguns comandos que eles têm em comum terão diferentes recursos e opções. Por exemplo, os linuxes geralmente incluem GNU sed, que usa a -ropção de invocar expressões regulares estendidas; no OS X, você usaria a -Eopção para obter o mesmo efeito. Da mesma forma, no Linux, você pode usar ls --color=autopara obter saída colorida; no macOS, o equivalente mais próximo é ls -G.

EDITAR: Outra diferença é que muitos comandos do Linux permitem que opções sejam especificadas após seus argumentos (por exemplo ls file1 file2 -l), enquanto a maioria dos comandos do OS X requerem que as opções venham estritamente primeiro ( ls -l file1 file2).

Finalmente, como o próprio sistema operacional é diferente, alguns comandos acabam se comportando de maneira diferente entre os sistemas operacionais. Por exemplo, no Linux, você provavelmente usaria ifconfigpara alterar a configuração da rede. No OS X, ifconfigfuncionará (provavelmente com sintaxe um pouco diferente), mas suas alterações provavelmente serão sobrescritas aleatoriamente pelo daemon de configuração do sistema; em vez disso, você deve editar as preferências de rede com networksetupe deixar o daemon de configuração aplicá-las ao estado de rede ativo.

Gordon Davisson
fonte
3
Grandes pontos Gordon! Vou marcar com +1, embora também tenha uma resposta;) - não devo receber algum crédito por isso ?!
Michael Durrant
1
Especialmente porque a sua resposta é muito boa por si só; Eu dei a você um voto também.
Gordon Davisson