it-swarm.com.de

Was sind die Unterschiede zwischen der Verwendung des Terminals auf einem Mac und Linux?

Ich benutze Ubuntu seit vier Jahren.
Ich habe Grundkenntnisse in Shell-Befehlen und arbeite lieber in einem Terminal als mit einer GUI. Vor kurzem habe ich angefangen, einen Mac zu benutzen.

Ich habe ein paar Terminal-Befehle (die ich unter Ubuntu verwende) im Mac-Terminal ausprobiert und es scheint, als würde es auf die gleiche Weise reagieren.

Gibt es signifikante Unterschiede in den von mir verwendeten Befehlen, den von ihnen ausgeführten Aufgaben oder der Shell-Umgebung, die mir bekannt sein sollten?

86
mchandy

Wenn Sie eine Neu- oder Neuinstallation von OS X Version 10.3 oder neuer durchgeführt haben, ist die Standardbenutzerterminal-Shell bash.

Bash ist im Wesentlichen eine erweiterte und GNU Freeware-Version der ursprünglichen Bourne Shell, sh. Wenn Sie bereits Erfahrung mit Bash haben (häufig die Standardeinstellung bei GNU/Linux-Installationen), führt dies den OS X-Befehl aus -Line-Erfahrung vertraut, andernfalls erwägen Sie, Ihre Shell entweder auf tcsh oder auf zsh umzustellen, da dies für einige benutzerfreundlicher ist.

Wenn Sie ein Upgrade von OS X Version 10.2.x, 10.1.x oder 10.0.x durchgeführt haben, lautet die Standardbenutzershell tcsh, eine erweiterte Version von csh ('c-Shell'). Frühe Implementierungen waren ein bisschen fehlerhaft und die Programmiersyntax ein bisschen komisch, so dass es zu einem schlechten Rap kam.

Es gibt immer noch einige fundamentale Unterschiede zwischen Mac und Linux, wie Gordon Davisson so treffend auflistet, zum Beispiel funktioniert kein useradd auf Mac und ifconfig anders.

Die folgende Tabelle ist nützlich, um die verschiedenen Unix-Shells zu kennen.

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

Diese Anleitungen können auch hilfreich sein:

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

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

Abschließend möchte ich sagen, dass ich unter Linux (Ubuntu 11) und Mac OSX arbeite. Daher verwende ich bash und das, was mir am besten gefällt, ist, die .bashrc-Datei (Quelle von .bash_profile Unter OSX) mit Aliasen anzupassen. einige Beispiele unten. Ich habe jetzt alle meine Aliase in einer separaten .bash_aliases-Datei abgelegt und füge sie bei:

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

in der Datei .bashrc oder .bash_profile.

Beachten Sie, dass dies ein Beispiel für einen Unterschied zwischen Mac und Linux ist, da Sie auf einem Mac nicht den --color=auto haben können. Als ich dies das erste Mal tat (ohne es zu wissen), definierte ich ls neu, um ungültig zu werden, was ein bisschen alarmierend war, bis ich --auto-color Entfernte!

Sie können auch https://unix.stackexchange.com/q/127799/1004 nützlich finden

# ~/.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'
58
Michael Durrant

@Michael Durrants Antwort deckt geschickt die Shell selbst ab, aber die Shell-Umgebung enthält auch die verschiedenen Befehle, die Sie in der Shell verwenden, und diese werden unter OS X und Linux ähnlich - aber nicht identisch - sein. Im Allgemeinen verfügen beide über dieselben Kernbefehle und -funktionen (insbesondere die im Posix-Standard definierten), jedoch sind viele Erweiterungen unterschiedlich.

Beispielsweise verfügen Linux-Systeme im Allgemeinen über den Befehl useradd, um neue Benutzer zu erstellen, OS X jedoch nicht. Unter OS X verwenden Sie im Allgemeinen die GUI, um Benutzer zu erstellen. Wenn Sie sie über die Befehlszeile erstellen müssen, verwenden Sie dscl (welches Linux nicht hat), um die Benutzerdatenbank zu bearbeiten (siehe hier ). (Update: Ab macOS High Sierra 10.13 können Sie stattdessen auch sysadminctl -addUser verwenden.)

Außerdem haben einige Befehle, die sie gemeinsam haben, unterschiedliche Funktionen und Optionen. Zum Beispiel enthalten Linuxe im Allgemeinen GNU sed, das die Option -r verwendet, um erweiterte reguläre Ausdrücke aufzurufen, unter OS X würden Sie die Option -E verwenden, um denselben Effekt zu erzielen Auf ähnliche Weise können Sie unter Linux ls --color=auto verwenden, um eine farbige Ausgabe zu erhalten, unter macOS ist ls -G die am nächsten liegende Entsprechung.

BEARBEITEN: Ein weiterer Unterschied besteht darin, dass bei vielen Linux-Befehlen die Angabe von Optionen nach ihren Argumenten zulässig ist (z. B. ls file1 file2 -l), während bei den meisten OS X-Befehlen die Angabe von Optionen strikt an erster Stelle stehen muss (ls -l file1 file2).

Schließlich verhalten sich einige Befehle zwischen den Betriebssystemen unterschiedlich, da das Betriebssystem selbst unterschiedlich ist. Unter Linux würden Sie beispielsweise wahrscheinlich ifconfig verwenden, um Ihre Netzwerkkonfiguration zu ändern. Unter OS X wird ifconfig funktionieren (wahrscheinlich mit etwas anderer Syntax), aber Ihre Änderungen werden wahrscheinlich vom Systemkonfigurations-Daemon zufällig überschrieben. Stattdessen sollten Sie die Netzwerkeinstellungen mit networksetup bearbeiten und sie dann vom Konfigurationsdämon auf den Live-Netzwerkstatus anwenden lassen.

26
Gordon Davisson