Sự khác biệt giữa sử dụng terminal trên mac và linux là gì? [đóng cửa]


89

Tôi đã sử dụng Ubuntu trong bốn năm qua.
Tôi có kiến ​​thức cơ bản về các lệnh shell và tôi thích làm việc trong một thiết bị đầu cuối hơn là sử dụng GUI. Gần đây tôi đã bắt đầu sử dụng máy Mac.

Tôi đã thử một vài lệnh đầu cuối (mà tôi sử dụng trên Ubuntu) trong thiết bị đầu cuối của Mac và nó dường như phản hồi theo cùng một cách.

Có bất kỳ sự khác biệt đáng kể nào trong các lệnh tôi sử dụng, (các) tác vụ mà chúng thực hiện hoặc môi trường trình bao mà tôi nên biết không?


8
Tôi muốn mở lại và chuyển sang trao đổi lập trình viên.
Michael Durrant

1
Có danh sách đầy đủ các lệnh đầu cuối mac và linux ở bất kỳ đâu trên web không?
jasonleonhard

Câu trả lời:


61

Nếu bạn đã cài đặt mới hoặc sạch OS X phiên bản 10.3 trở lên, trình bao đầu cuối người dùng mặc định là bash.

Bash về cơ bản là một phiên bản phần mềm miễn phí GNU và nâng cao của vỏ Bourne gốc, sh. Nếu bạn đã có kinh nghiệm với bash trước đó (thường là mặc định trên các bản cài đặt GNU / Linux), điều này làm cho trải nghiệm dòng lệnh OS X trở nên quen thuộc, nếu không, hãy cân nhắc chuyển shell của bạn sang tcsh hoặc zsh, vì một số thấy những điều này thân thiện với người dùng hơn.

Nếu bạn nâng cấp từ hoặc sử dụng OS X phiên bản 10.2.x, 10.1.x hoặc 10.0.x, trình bao người dùng mặc định là tcsh, một phiên bản nâng cao của csh ('c-shell'). Việc triển khai ban đầu có một chút lỗi và cú pháp lập trình hơi kỳ lạ nên nó đã phát triển một đoạn rap tệ.

Vẫn có một số khác biệt cơ bản giữa mac và linux như Gordon Davisson liệt kê một cách khéo léo, ví dụ như không có useraddtrên Mac và ifconfighoạt động khác nhau.

Bảng sau rất hữu ích để biết các shell unix khác nhau.

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

Bạn cũng có thể thấy những hướng dẫn này hữu ích:

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

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

Lưu ý cuối cùng, tôi đang sử dụng Linux (Ubuntu 11) và Mac osX nên tôi sử dụng bash và điều tôi thích nhất là tùy chỉnh tệp .bashrc (nguồn từ .bash_profiletrên OSX) bằng bí danh, một số ví dụ bên dưới. Bây giờ tôi đã đặt tất cả bí danh của mình trong một tệp .bash_aliases riêng biệt và bao gồm nó với:

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

trong tệp .bashrc hoặc .bash_profile.

Lưu ý rằng đây là một ví dụ về sự khác biệt giữa mac-linux vì trên máy Mac, bạn không thể có--color=auto . Lần đầu tiên tôi làm điều này (mà không biết) tôi đã xác định lại lslà không hợp lệ, điều này hơi đáng báo động cho đến khi tôi xóa --auto-color!

Bạn cũng có thể thấy https://unix.stackexchange.com/q/127799/10043 hữu ích

# ~/.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
Tôi thích zshhoàn thành lớp Java mặc định.
Dave Newton

cảm ơn vì đã nhắc nhở tôi rằng màu sắc hoạt động khác nhau trên lệnh ls linux và macos. Tôi sử dụng cùng một bashrc cho cả hai và cần tìm cách sử dụng có điều kiện tùy chọn ls này hoặc tùy chọn khác để đảm bảo ls luôn nhận được màu sắc.
Bastian

Tôi sẽ sử dụng điều này để sử dụng có điều kiện một tùy chọn ls hoặc tùy chọn khác theo hệ điều hành: _myos = "$ (uname)" và sau đó là trường hợp $ _myos trong Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) bí danh foo = '/ path / to / bsd / bin / foo' ;; *) ;; esac
Bastian

1
Bastian, bạn có thể có màu cho lscả Linux ( --color=all) và OSX ( -G) với những điều sau đây: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Michael Durrant

Liên kết TerminalBasics.pdf dường như đã chết. Là này cùng một tài liệu?
Huyết tương

29

Câu trả lời của @Michael Durrant hoàn toàn bao hàm chính shell, nhưng môi trường shell cũng bao gồm các lệnh khác nhau mà bạn sử dụng trong shell và những lệnh này sẽ tương tự - nhưng không giống nhau - giữa OS X và linux. Nói chung, cả hai sẽ có các lệnh và tính năng cốt lõi giống nhau (đặc biệt là những lệnh và tính năng được định nghĩa trong tiêu chuẩn Posix), nhưng rất nhiều phần mở rộng sẽ khác nhau.

Ví dụ, hệ thống linux thường có useraddlệnh để tạo người dùng mới, nhưng OS X thì không. Trên OS X, bạn thường sử dụng GUI để tạo người dùng; nếu bạn cần tạo chúng từ dòng lệnh, bạn sử dụng dscl(mà linux không có) để chỉnh sửa cơ sở dữ liệu người dùng (xem tại đây ). (Cập nhật: bắt đầu trong macOS High Sierra v10.13, bạn có thể sử dụng sysadminctl -addUserthay thế.)

Ngoài ra, một số lệnh chung của chúng sẽ có các tính năng và tùy chọn khác nhau. Ví dụ, linux thường bao gồm GNU sed, sử dụng -rtùy chọn để gọi các biểu thức chính quy mở rộng; trên OS X, bạn sẽ sử dụng -Etùy chọn để có được hiệu quả tương tự. Tương tự, trong linux, bạn có thể sử dụng ls --color=autođể có được đầu ra được tô màu; trên macOS, tương đương gần nhất là ls -G.

CHỈNH SỬA: Một sự khác biệt khác là nhiều lệnh linux cho phép các tùy chọn được chỉ định sau các đối số của chúng (ví dụ ls file1 file2 -l), trong khi hầu hết các lệnh OS X yêu cầu các tùy chọn phải đến trước ( ls -l file1 file2).

Cuối cùng, vì bản thân hệ điều hành khác nhau, một số lệnh kết thúc hoạt động khác nhau giữa các hệ điều hành. Ví dụ, trên linux, bạn có thể sử dụng ifconfigđể thay đổi cấu hình mạng của mình. Trên OS X, ifconfigsẽ hoạt động (có thể với cú pháp hơi khác), nhưng các thay đổi của bạn có thể bị ghi đè ngẫu nhiên bởi daemon cấu hình hệ thống; thay vào đó, bạn nên chỉnh sửa các tùy chọn mạng networksetupvà sau đó để trình nền cấu hình áp dụng chúng cho trạng thái mạng trực tiếp.


3
Điểm tuyệt vời Gordon! Tôi sẽ +1 mặc dù tôi cũng có câu trả lời;) - tôi không nên nhận được một số tín dụng cho điều đó sao ?!
Michael Durrant

1
Đặc biệt là vì câu trả lời của bạn là một câu trả lời khá hay; Tôi cũng đã cho bạn một phiếu bầu.
Gordon Davisson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.