2011-11-08 12 views
67

Utilizzo Ubuntu da quattro anni.
Ho una conoscenza di base dei comandi di shell e preferisco lavorare su un terminale piuttosto che usare una GUI. Recentemente ho iniziato a utilizzare un Mac.Quali sono le differenze tra l'utilizzo del terminale su mac vs linux?

Ho provato alcuni comandi del terminale (che uso su Ubuntu) nel terminale Mac e sembra rispondere in gran parte allo stesso modo.

Esistono differenze significative nei comandi che uso, nelle attività che eseguono o nell'ambiente della shell di cui dovrei essere a conoscenza?

+7

Vorrei riaprire e passare allo scambio di programmatori. –

+1

Esiste un elenco completo dei comandi del terminale mac vs linux in qualsiasi punto del web? – jasonleonhard

risposta

51

Se è stata eseguita un'installazione nuova o pulita di OS X versione 10.3 o successiva, la shell del terminale utente predefinito è bash.

Bash è essenzialmente una versione freeware migliorata e GNU dell'originale shell Bourne, sh. Se hai precedenti esperienze con bash (spesso l'impostazione predefinita su installazioni GNU/Linux), questo rende familiare l'esperienza della riga di comando di OS X, altrimenti considera di cambiare la tua shell in tcsh o in zsh, in quanto alcuni trovano più user-friendly.

Se si è aggiornato o si utilizza OS X versione 10.2.x, 10.1.xo 10.0.x, la shell utente predefinita è tcsh, una versione avanzata di csh ('c-shell'). Le prime implementazioni erano un po 'buggate e la sintassi di programmazione un po' strana, quindi ha sviluppato un brutto colpo.

Ci sono ancora alcune differenze fondamentali tra Mac e Linux come Gordon Davisson elenca in modo appropriato, ad esempio no useradd su Mac e ifconfig funziona in modo diverso.

La seguente tabella è utile per conoscere le varie shell 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 

È inoltre possibile trovare queste guide utili:

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

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

In una nota finale, io sono su Linux (Ubuntu 11) e Mac OSX quindi uso bash e la cosa che mi piace di più è la personalizzazione di .bashrc (source'd from .bash_profile su OSX) con alias, alcuni esempi sotto. ora messo tutti i miei alias in un file separato e includerlo .bash_aliases con:

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

nel .bashrc o il file .bash_profile.

Si noti che questo è un esempio di una differenza mac-linux perché su un Mac non è possibile avere il --color=auto. La prima volta che l'ho fatto (senza saperlo) ho ridefinito lo ls che era un po 'allarmante finché non ho rimosso --auto-color!

È inoltre possibile trovare https://unix.stackexchange.com/q/127799/10043 utile

# ~/.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' 
+1

Mi piace il completamento della classe Java predefinito di 'zsh'. –

+0

grazie per avermi ricordato che il colore si comporta diversamente sul comando linux e macos ls. Io uso lo stesso bashrc per entrambi e ho bisogno di trovare un modo per usare condizionatamente un'opzione ls o l'altra per assicurarmi che ls ottenga sempre i colori. – Bastian

+0

Utilizzerò questa opzione per utilizzare in modo condizionale le opzioni ls o l'altra in base al sistema operativo: _myos = "$ (uname)" e quindi caso $ _myos in Linux) alias foo = '/ percorso/a/linux/bin/foo ';; FreeBSD | OpenBSD) alias foo = '/ percorso/a/bsd/bin/foo' ;; *) ;; esac – Bastian

24

risposta di @ Michael Durrant copre abilmente shell stessa, ma l'ambiente di shell include anche i vari comandi che si utilizzano nella shell e questi stanno per essere simile - ma non identico - tra OS X e linux.In generale, entrambi avranno gli stessi comandi e caratteristiche di base (specialmente quelli definiti nello standard Posix), ma molte estensioni saranno diverse.

Ad esempio, i sistemi linux generalmente hanno un comando useradd per creare nuovi utenti, ma OS X non lo fa. Su OS X, generalmente usi la GUI per creare utenti; se è necessario crearli dalla riga di comando, utilizzare dscl (che Linux non ha) per modificare il database utente (vedere here).

Inoltre, alcuni comandi che hanno in comune avranno caratteristiche e opzioni diverse. Ad esempio, linuxes generalmente include GNU sed, che utilizza l'opzione -r per richiamare le espressioni regolari estese; su OS X, si utilizzerà l'opzione -E per ottenere lo stesso effetto.

EDIT: Un'altra differenza è che molti comandi Linux permettono opzioni da specificare dopo che i loro argomenti (ad esempio ls file1 file2 -l), mentre la maggior parte dei comandi OS X richiedono opzioni di venire rigorosamente prima (ls -l file1 file2).

Infine, poiché il sistema operativo è diverso, alcuni comandi si comportano in modo diverso tra i sistemi operativi. Ad esempio, su Linux probabilmente si utilizzerà ifconfig per modificare la configurazione di rete. Su OS X, funzionerà il ifconfig (probabilmente con una sintassi leggermente diversa), ma è probabile che le modifiche vengano sovrascritte casualmente dal daemon di configurazione del sistema; devi invece modificare le preferenze di rete con networksetup, quindi lasciare che il demone config li applichi allo stato della rete live.

+3

Grandi punti Gordon! Io farò +1 anche se avrò una risposta anch'io;) - Non dovrei avere qualche credito per quello ?! –

+1

Tanto più che la tua è una buona risposta da sola; Ti ho anche dato un voto. –

Problemi correlati