Quali sono le differenze tra l'utilizzo del terminale su un Mac e Linux? [chiuso]


89

Uso Ubuntu da quattro anni.
Ho una conoscenza di base dei comandi della shell e preferisco lavorare in un terminale piuttosto che utilizzare una GUI. Recentemente ho iniziato a usare un Mac.

Ho provato alcuni comandi da terminale (che uso su Ubuntu) nel terminale Mac e sembra rispondere quasi allo stesso modo.

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


8
Vorrei riaprire e passare allo scambio di programmatori.
Michael Durrant

1
Esiste un elenco completo dei comandi del terminale Mac vs Linux ovunque sul Web?
jasonleonhard

Risposte:


61

Se hai eseguito un'installazione nuova o pulita di OS X versione 10.3 o più recente, la shell del terminale utente predefinita è bash.

Bash è essenzialmente una versione freeware potenziata e GNU della shell Bourne originale, sh. Se hai precedenti esperienze con bash (spesso l'impostazione predefinita sulle 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, poiché alcuni le trovano più user-friendly.

Se si esegue l'aggiornamento da o si utilizza OS X versione 10.2.x, 10.1.x o 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 elenca in modo appropriato Gordon Davisson, ad esempio no useraddsu Mac e ifconfigfunziona in modo diverso.

La tabella seguente è 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

Potresti anche trovare utili queste guide:

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

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

Un'ultima nota, sono su Linux (Ubuntu 11) e Mac osX quindi uso bash e la cosa che mi piace di più è personalizzare il file .bashrc (fonte .bash_profilesu OSX) con alias, alcuni esempi di seguito. Ora ho inserito tutti i miei alias in un file .bash_aliases separato e lo includo con:

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

nel file .bashrc o .bash_profile.

Nota che questo è un esempio di una differenza tra mac-linux perché su un Mac non puoi avere l'estensione--color=auto . La prima volta che l'ho fatto (senza saperlo) ho ridefinito lscome non valido, il che era un po 'allarmante finché non l'ho rimosso --auto-color!

Potresti anche trovare utile 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'

1
Mi piace zshil completamento della classe Java predefinito.
Dave Newton

grazie per avermi ricordato che il colore si comporta in modo diverso sui comandi linux e macos ls. Uso lo stesso bashrc per entrambi e ho bisogno di trovare un modo per usare in modo condizionale un'opzione ls o l'altra per assicurarmi che ls riceva sempre i colori.
Bastian

Lo userò per usare in modo condizionale una delle opzioni ls o l'altra in base al sistema operativo: _myos = "$ (uname)" e poi case $ _myos in Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) alias foo = '/ path / to / bsd / bin / foo' ;; *) ;; esac
Bastian

1
Bastian, puoi avere il colore lssia in Linux ( --color=all) che OSX ( -G) con quanto segue: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant

Il collegamento TerminalBasics.pdf sembra essere morto. È questo lo stesso documento?
Plasma

29

La risposta di @Michael Durrant copre abilmente la shell stessa, ma l'ambiente della shell include anche i vari comandi che usi nella shell e questi saranno simili, ma non identici, tra OS X e Linux. In generale, entrambi avranno gli stessi comandi e funzionalità principali (specialmente quelli definiti nello standard Posix), ma molte estensioni saranno diverse.

Ad esempio, i sistemi Linux generalmente hanno un useraddcomando per creare nuovi utenti, ma OS X no. Su OS X, generalmente utilizzi la GUI per creare utenti; se è necessario crearli dalla riga di comando, si usa dscl(che Linux non ha) per modificare il database utente (vedere qui ). (Aggiornamento: a partire da macOS High Sierra v10.13, puoi usare sysadminctl -addUserinvece.)

Inoltre, alcuni comandi che hanno in comune avranno caratteristiche e opzioni differenti. Ad esempio, Linux generalmente include GNU sed, che utilizza l' -ropzione per invocare espressioni regolari estese; su OS X, useresti l' -Eopzione per ottenere lo stesso effetto. Allo stesso modo, in Linux potreste usare ls --color=autoper ottenere un output colorato; su macOS, l'equivalente più vicino è ls -G.

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

Infine, poiché il sistema operativo stesso è diverso, alcuni comandi finiscono per comportarsi in modo diverso tra i sistemi operativi. Ad esempio, su Linux probabilmente useresti ifconfigper modificare la configurazione di rete. Su OS X, ifconfigfunzionerà (probabilmente con una sintassi leggermente diversa), ma è probabile che le modifiche vengano sovrascritte casualmente dal demone di configurazione del sistema; invece dovresti modificare le preferenze di rete con networksetup, e poi lasciare che il demone di configurazione le applichi allo stato della rete live.


3
Ottimi punti Gordon! Farò +1 anche se ho anche una risposta;) - non dovrei ottenere un po 'di credito per questo ?!
Michael Durrant

1
Soprattutto perché la tua è una risposta abbastanza buona da sola; Anch'io ti ho dato un voto.
Gordon Davisson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.