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

89

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

Ich habe ein paar Terminalbefehle (die ich unter Ubuntu verwende) im Mac-Terminal ausprobiert und es scheint größtenteils auf die gleiche Weise zu reagieren.

Gibt es signifikante Unterschiede in den von mir verwendeten Befehlen, den von ihnen ausgeführten Aufgaben oder der Shell-Umgebung, die ich beachten sollte?

Dili
quelle
8
Ich möchte wieder öffnen und zum Programmiereraustausch wechseln.
Michael Durrant
1
Gibt es irgendwo im Web eine umfassende Liste von Befehlen für Mac- und Linux-Terminals?
Jasonleonhard

Antworten:

61

Wenn Sie eine Neu- oder Neuinstallation von OS X Version 10.3 oder neuer durchgeführt haben, lautet die Standard-User-Terminal-Shell bash.

Bash ist im Wesentlichen eine verbesserte 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), wird die OS X-Befehlszeilenerfahrung dadurch vertraut. Andernfalls sollten Sie Ihre Shell entweder auf tcsh oder auf zsh umstellen, da einige diese benutzerfreundlicher finden.

Wenn Sie ein Upgrade von OS X Version 10.2.x, 10.1.x oder 10.0.x durchgeführt oder dieses verwendet haben, lautet die Standardbenutzer-Shell tcsh, eine erweiterte Version von csh ('c-shell'). Frühe Implementierungen waren etwas fehlerhaft und die Programmiersyntax etwas seltsam, so dass sich ein schlechter Rap entwickelte.

Es gibt immer noch einige grundlegende Unterschiede zwischen Mac und Linux, wie Gordon Davisson so treffend auflistet, zum Beispiel nein useraddauf Mac und ifconfigfunktioniert 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

Möglicherweise finden Sie auch diese Anleitungen hilfreich:

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. Am besten gefällt mir, dass ich die .bashrc-Datei (Source'd from .bash_profileOSX) mit Aliasnamen anpasse , einige Beispiele unten. Ich habe jetzt alle meine Aliase in einer separaten .bash_aliases-Datei abgelegt und in Folgendes eingefügt:

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

in der Datei .bashrc oder .bash_profile.

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

Möglicherweise ist auch https://unix.stackexchange.com/q/127799/10043 hilfreich

# ~/.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
quelle
1
Ich mag zshdie Standardvervollständigung der Java-Klasse.
Dave Newton
danke, dass du mich daran erinnert hast, dass sich color unter linux und macos ls anders verhält. Ich verwende für beide den gleichen bashrc und muss einen Weg finden, die eine oder andere Option bedingt zu verwenden, um sicherzustellen, dass ls immer Farben erhält.
Bastian
Ich werde dies verwenden, um die eine oder die andere ls-Option je nach Betriebssystem bedingt zu verwenden: _myos = "$ (uname)" und dann $ _myos unter Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) alias foo = '/ path / to / bsd / bin / foo' ;; *) ;; esac
Bastian
1
Bastian, Sie können Farbe für lssowohl Linux ( --color=all) als auch OSX ( -G) mit den folgenden haben: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant
Der Link TerminalBasics.pdf scheint tot zu sein. Ist das das gleiche Dokument?
Plasma
29

Die Antwort von @Michael Durrant deckt die Shell selbst geschickt ab, aber die Shell-Umgebung enthält auch die verschiedenen Befehle, die Sie in der Shell verwenden, und diese werden zwischen 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), viele Erweiterungen sind jedoch unterschiedlich.

Beispielsweise verfügen Linux-Systeme im Allgemeinen über einen useraddBefehl zum Erstellen neuer Benutzer, 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(was Linux nicht hat), um die Benutzerdatenbank zu bearbeiten (siehe hier ). (Update: Ab MacOS High Sierra 10.13 können Sie sysadminctl -addUserstattdessen verwenden.)

Außerdem haben einige Befehle, die sie gemeinsam haben, unterschiedliche Funktionen und Optionen. Beispielsweise enthalten Linux im Allgemeinen GNU sed, das die -rOption zum Aufrufen erweiterter regulärer Ausdrücke verwendet. Unter OS X würden Sie die -EOption verwenden, um den gleichen Effekt zu erzielen. In ähnlicher Weise können Sie unter Linux ls --color=autoeine kolorierte Ausgabe erhalten. Unter macOS ist das nächste Äquivalent ls -G.

BEARBEITEN: Ein weiterer Unterschied besteht darin, dass bei vielen Linux-Befehlen Optionen nach ihren Argumenten angegeben werden können (z. B. ls file1 file2 -l), während bei den meisten OS X-Befehlen Optionen unbedingt an erster Stelle stehen müssen ( ls -l file1 file2).

Da sich das Betriebssystem selbst unterscheidet, verhalten sich einige Befehle zwischen den Betriebssystemen unterschiedlich. Unter Linux würden Sie beispielsweise wahrscheinlich ifconfigIhre Netzwerkkonfiguration ändern. Funktioniert unter OS X ifconfig(wahrscheinlich mit etwas anderer Syntax), aber Ihre Änderungen werden wahrscheinlich vom Systemkonfigurationsdämon zufällig überschrieben. Stattdessen sollten Sie die Netzwerkeinstellungen mit bearbeiten networksetupund dann vom Konfigurationsdämon auf den Live-Netzwerkstatus anwenden lassen.

Gordon Davisson
quelle
3
Tolle Punkte Gordon! Ich werde +1, obwohl ich auch eine Antwort habe;) - sollte ich dafür keine Anerkennung bekommen?!
Michael Durrant
1
Zumal Ihre Antwort für sich genommen eine recht gute ist; Ich habe dir auch eine Stimme gegeben.
Gordon Davisson