Mac ile Linux üzerinde terminal kullanmak arasındaki farklar nelerdir? [kapalı]


89

Son dört yıldır Ubuntu kullanıyorum.
Kabuk komutları hakkında temel bilgilere sahibim ve bir GUI kullanmak yerine bir terminalde çalışmayı tercih ederim. Son zamanlarda bir Mac kullanmaya başladım.

Mac terminalinde birkaç terminal komutunu (Ubuntu'da kullandığım) denedim ve çoğunlukla aynı şekilde yanıt veriyor gibi görünüyor.

Kullandığım komutlarda, gerçekleştirdikleri görevlerde veya bilmem gereken kabuk ortamında önemli farklılıklar var mı?


8
Yeniden açıp programcı değişimine geçmek istiyorum.
Michael Durrant

1
Web'de herhangi bir yerde, Mac ve Linux terminal komutlarının kapsamlı bir listesi var mı?
jasonleonhard

Yanıtlar:


61

OS X sürüm 10.3 veya daha yeni bir sürümün yeni veya temiz bir kurulumunu yaptıysanız, varsayılan kullanıcı terminal kabuğu bash'dir.

Bash, esas olarak orijinal Bourne kabuğunun geliştirilmiş ve GNU ücretsiz bir sürümüdür, sh. Bash ile daha önce deneyiminiz varsa (genellikle GNU / Linux kurulumlarında varsayılan), bu OS X komut satırı deneyimini tanıdık hale getirir, aksi takdirde kabuğunuzu tcsh veya zsh olarak değiştirmeyi düşünün, çünkü bazıları bunları daha kullanıcı dostu bulmaktadır.

OS X sürüm 10.2.x, 10.1.x veya 10.0.x'ten yükseltme yaptıysanız veya kullanıyorsanız, varsayılan kullanıcı kabuğu csh'ın ('c-shell') geliştirilmiş bir sürümü olan tcsh'dir. İlk uygulamalar biraz hatalıydı ve programlama sözdizimi biraz garipti, bu yüzden kötü bir rap geliştirdi.

Gordon Davisson'ın uygun bir şekilde listelediği gibi mac ve linux arasında hala bazı temel farklılıklar var, örneğin useraddMac'te hayır ve ifconfigfarklı çalışıyor.

Aşağıdaki tablo, çeşitli unix kabuklarını bilmek için kullanışlıdır.

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

Ayrıca bu kılavuzları yararlı bulabilirsiniz:

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

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

Son bir not olarak, Linux (Ubuntu 11) ve Mac osX kullanıyorum, bu yüzden bash kullanıyorum ve en çok sevdiğim şey .bashrc (OSX'ten kaynaklanmıştır .bash_profile) dosyasını takma adlarla özelleştirmek, aşağıdaki bazı örnekler. Şimdi tüm takma adlarımı ayrı bir .bash_aliases dosyasına yerleştirdim ve şunu ekledim:

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

.bashrc veya .bash_profile dosyasında.

Bunun bir mac-linux farkı örneği olduğunu unutmayın, çünkü bir Mac'te--color=auto . Bunu ilk kez yaptığımda (bilmeden) lsgeçersiz olarak yeniden tanımladım , bu da kaldırana kadar biraz endişe vericiydi --auto-color!

Ayrıca https://unix.stackexchange.com/q/127799/10043'ü de yararlı bulabilirsiniz

# ~/.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
zshVarsayılan Java sınıfı tamamlamasını beğendim .
Dave Newton

rengin linux ve macos ls komutunda farklı davrandığını hatırlattığın için teşekkürler. Her ikisi için de aynı bashrc'yi kullanıyorum ve ls'nin her zaman renkleri aldığından emin olmak için koşullu olarak birini veya diğerini kullanmanın bir yolunu bulmam gerekiyor.
Bastian

Bunu, işletim sistemine göre bir ls seçeneğini veya diğerini koşullu olarak kullanmak için kullanacağım: _myos = "$ (uname)" ve ardından Linux'ta $ _myos) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) takma adı foo = '/ yol / / bsd / bin / foo' ;; *) ;; esac
Bastian

1
Bastian, sizin için renge sahip olabilir lsLinux (her ikisi de --color=all) ve OSX ( -G: takipçinizin) ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant

TerminalBasics.pdf bağlantısı çalışmıyor. Mı bu aynı belge?
Plazma

29

@Michael Durrant'ın cevabı kabuğun kendisini ustaca kapsıyor, ancak kabuk ortamı aynı zamanda kabukta kullandığınız çeşitli komutları da içeriyor ve bunlar OS X ve linux arasında benzer - ancak aynı değil - olacak. Genel olarak, her ikisi de aynı temel komutlara ve özelliklere (özellikle Posix standardında tanımlananlar) sahip olacaktır, ancak birçok uzantı farklı olacaktır.

Örneğin, linux sistemleri genellikle useraddyeni kullanıcılar oluşturmak için bir komuta sahiptir, ancak OS X'te yoktur. OS X'te, kullanıcı oluşturmak için genellikle GUI'yi kullanırsınız; bunları komut satırından oluşturmanız gerekiyorsa dscl, kullanıcı veritabanını düzenlemek için (linux'un sahip olmadığı) seçeneğini kullanırsınız ( buraya bakın ). (Güncelleme: macOS High Sierra v10.13'ten başlayarak sysadminctl -addUserbunun yerine kullanabilirsiniz .)

Ayrıca, sahip oldukları bazı ortak komutların farklı özellikleri ve seçenekleri olacaktır. Örneğin, linux'lar genellikle genişletilmiş düzenli ifadeleri çağırma seçeneğini sedkullanan GNU'yu içerir -r; OS X'te, -Eaynı etkiyi elde etmek için seçeneği kullanırsınız. Benzer şekilde, ls --color=autolinux'ta renklendirilmiş çıktı elde etmek için kullanabilirsiniz ; macOS'ta en yakın eşdeğeri ls -G.

DÜZENLEME: Diğer bir fark, birçok linux komutunun seçeneklerin argümanlarından sonra belirtilmesine izin vermesidir (örn. ls file1 file2 -l), Çoğu OS X komutu ise seçeneklerin kesinlikle önce gelmesini gerektirir ( ls -l file1 file2).

Son olarak, işletim sisteminin kendisi farklı olduğu için, bazı komutlar işletim sistemleri arasında farklı şekilde davranır. Örneğin, linux'ta muhtemelen ifconfigağ yapılandırmanızı değiştirmek için kullanırsınız . OS X'te ifconfigçalışacaktır (muhtemelen biraz farklı sözdizimiyle), ancak değişikliklerinizin üzerine sistem yapılandırma arka plan programı tarafından rastgele yazılacak; bunun yerine, ile ağ tercihlerini düzenlemeli networksetupve ardından yapılandırma arka plan programının bunları canlı ağ durumuna uygulamasına izin vermelisiniz .


3
Harika puan Gordon! Benim de bir cevabım olmasına rağmen + 1'leyeceğim;) - bunun için biraz kredi almam gerekmez mi ?!
Michael Durrant

1
Özellikle de sizinki oldukça iyi bir cevap olduğu için; Ben de sana oy verdim.
Gordon Davisson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.