2011-11-08 4 views
67

지난 4 년 동안 우분투를 사용해 왔습니다.
쉘 명령에 대한 기본 지식이 있으며 GUI를 사용하는 대신 터미널에서 작업하는 것을 선호합니다. 최근에 저는 Mac을 사용하기 시작했습니다.Mac에서 Linux를 사용하는 것과 Mac에서 Linux를 사용하는 것의 차이점은 무엇입니까?

저는 Mac 터미널에서 (우분투에서 사용하는) 몇 가지 터미널 명령을 시도했지만 대부분 같은 방식으로 응답하는 것 같습니다.

내가 사용하는 명령, 수행하는 작업 또는 내가 알아야하는 셸 환경에 중요한 차이점이 있습니까?

+7

나는 프로그래머 교환을 다시 열고 싶습니다. –

+1

웹에서 mac vs linux terminal 명령의 포괄적 인 목록이 있습니까? – jasonleonhard

답변

51

OS X 버전 10.3 이상을 새로 설치하거나 새로 설치 한 경우 기본 사용자 터미널 쉘은 bash입니다.

기본적으로 Bash는 원래 Bourne 쉘 sh의 향상된 GNU 프리웨어 버전입니다. 이전에 bash (GNU/Linux 설치시 기본 설정)를 사용해 본 경험이 있다면 OS X 명령 행 환경을 친숙하게 만들었습니다. 그렇지 않으면 쉘을 tcsh 또는 zsh로 전환하는 것을 고려해보십시오.

OS X 버전 10.2.x, 10.1.x 또는 10.0.x에서 업그레이드하거나 사용하는 경우 기본 사용자 쉘은 csh ('c-shell')의 향상된 버전 인 tcsh입니다. 초기 구현은 다소 버그가 많았고 프로그래밍 구문이 다소 이상해서 랩을 잘못 개발했습니다.

맥과 리눅스 사이의 근본적인 차이점은 Gordon Davisson이 Mac의 경우 useradd, ifconfig의 경우와 다를 수 있습니다.

다음 표는 다양한 유닉스 셸을 아는 데 유용합니다.

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 

또한이 가이드가 도움이 찾을 수 있습니다 :

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

마지막 주에 http://guides.macrumors.com/Terminal
http://www.ofb.biz/safari/article/476.html

, 나는 리눅스 (우분투 11) 및 Mac OSX 오전 그래서 나는 bash를 사용하고 가장 좋아하는 것은 .bashrc (source'd from)를 커스터마이징하는 것이다. 0 OSX에서) 별칭과 파일, 아래 예제 몇 가지. 지금은 별도의 .bash_aliases 파일에 내 모든 별칭을 배치하고 그것을 같습니다의 .bashrc 또는 .bash_profile을 파일에

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

.

이것은 Mac의 에 Mac의 --color=auto을 사용할 수 없기 때문에 Mac-Linux의 차이점의 예입니다. 내가 이것을 처음 (알지 못함)했을 때 나는 을 제거 할 때까지 조금 놀랄만한 무효가되도록 ls을 재정의했습니다!

당신은 또한 찾을 수 있습니다 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

나는'zsh'의 기본 Java 클래스 완성을 좋아합니다. –

+0

저에게 색상이 리눅스와 macos ls 명령에서 다르게 동작한다는 것을 상기시켜 주셔서 감사합니다. 두 가지 모두에 대해 동일한 bashrc를 사용하고 조건부로 하나의 옵션을 사용하거나 다른 옵션을 사용하여 항상 색상을 가져올 수있는 방법을 찾아야합니다. – Bastian

+0

운영체제에 따라 ls 옵션 또는 다른 옵션을 조건부로 사용하기 위해이 옵션을 사용합니다 : _myos = "$ (uname)"다음 케이스 $ _myos in Linux) alias foo = '/ path/to/linux/bin/foo ';; FreeBSD | OpenBSD) 별칭 foo = '/ 경로/to/bsd/bin/foo';; *) ;; esac – Bastian

24

@Michael 듀런트의 대답은 훌륭하게 쉘 자체를 다루고 있지만, 쉘 환경 또한 다양한 명령은 쉘에서 사용하는 이들은 유사 할 예정을 포함 - OS X와 ​​리눅스 간에는 동일하지는 않습니다.일반적으로 둘 모두 동일한 코어 명령과 기능 (특히 Posix 표준에서 정의 된 기능)을 갖지만 확장 기능이 많이 다릅니다.

예를 들어, 리눅스 시스템은 일반적으로 새로운 사용자를 생성하기 위해 useradd 명령을 가지고 있지만 OS X는 그렇지 않습니다. OS X에서는 일반적으로 GUI를 사용하여 사용자를 생성합니다. 명령 줄에서 작성해야 할 경우 dscl (Linux에는 없음)을 사용하여 사용자 데이터베이스를 편집하십시오 (here 참조).

또한 공통 명령에는 다른 기능과 옵션이 있습니다. 예를 들어, linux에는 일반적으로 GNU sed이 포함되어 있습니다. -r 옵션을 사용하면 확장 정규 표현식을 호출 할 수 있습니다. OS X에서는 -E 옵션을 사용하면 동일한 효과를 얻을 수 있습니다.

편집 : 또 다른 차이점은 대부분의 OS X 명령은 엄격하게 먼저 옵션 (ls -l file1 file2)이 필요한 반면 많은 리눅스 명령은 인수 (예 : ls file1 file2 -l) 뒤에 옵션을 지정할 수 있다는 점입니다.

마지막으로 OS 자체가 다르므로 일부 명령은 OS간에 다르게 동작합니다. 예를 들어, 리눅스에서 아마도 ifconfig을 사용하여 네트워크 구성을 변경할 수 있습니다. OS X에서 ifconfig이 작동하지만 (아마도 약간 다른 구문으로), 변경 사항은 시스템 구성 데몬에 의해 무작위로 덮어 쓰여질 수 있습니다. 대신 네트워크 환경 설정을 networksetup으로 편집 한 다음 config 데몬에서이를 라이브 네트워크 상태에 적용하게하십시오.

+3

그레이트 포인트 고든! 나는 대답 할지라도 +1 할 것이다.) - 나는 그것에 대해 약간의 신뢰를 얻지 말아야 하는가? –

+1

특히 당신 자신이 아주 좋은 대답이기 때문에; 나는 당신에게도 투표권을주었습니다. –

관련 문제