Saya telah menggunakan Ubuntu selama empat tahun terakhir.
Saya memiliki pengetahuan dasar tentang perintah shell dan saya lebih suka bekerja di terminal daripada menggunakan GUI. Baru-baru ini saya mulai menggunakan Mac.
Saya sudah mencoba beberapa perintah terminal (yang saya gunakan di Ubuntu) di terminal Mac dan sepertinya merespons dengan cara yang hampir sama.
Apakah ada perbedaan signifikan dalam perintah yang saya gunakan, tugas yang mereka lakukan, atau lingkungan shell yang harus saya ketahui?
Jawaban:
Jika Anda melakukan penginstalan baru atau bersih dari OS X versi 10.3 atau yang lebih baru, shell terminal pengguna default adalah bash.
Bash pada dasarnya adalah versi freeware GNU yang disempurnakan dari Bourne shell asli, sh. Jika Anda memiliki pengalaman sebelumnya dengan bash (seringkali merupakan default pada instalasi GNU / Linux), ini membuat pengalaman baris perintah OS X menjadi familiar, jika tidak pertimbangkan untuk mengganti shell Anda ke tcsh atau ke zsh, karena beberapa menganggap ini lebih ramah pengguna.
Jika Anda mengupgrade dari atau menggunakan OS X versi 10.2.x, 10.1.x, atau 10.0.x, shell pengguna default adalah tcsh, versi csh ('c-shell') yang ditingkatkan. Implementasi awal agak bermasalah dan sintaks pemrogramannya agak aneh sehingga mengembangkan rap yang buruk.
Masih ada beberapa perbedaan mendasar antara mac dan linux seperti yang dicantumkan dengan tepat oleh Gordon Davisson, misalnya tidak
useradd
di Mac danifconfig
bekerja secara berbeda.Tabel berikut berguna untuk mengetahui berbagai shell unix.
Anda mungkin juga menemukan panduan ini bermanfaat:
http://homepage.mac.com/rgriff/files/TerminalBasics.pdf
http://guides.macrumors.com/Terminal
http://www.ofb.biz/safari/article/476.html
Pada catatan terakhir, saya menggunakan Linux (Ubuntu 11) dan Mac osX jadi saya menggunakan bash dan hal yang paling saya sukai adalah menyesuaikan file .bashrc (bersumber dari
.bash_profile
OSX) dengan alias, beberapa contoh di bawah ini. Saya sekarang menempatkan semua alias saya dalam file .bash_aliases terpisah dan menyertakannya dengan:if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi
di file .bashrc atau .bash_profile.
Perhatikan bahwa ini adalah contoh perbedaan mac-linux karena di Mac Anda tidak dapat memiliki ekstensi
--color=auto
. Pertama kali saya melakukan ini (tanpa mengetahui) saya mendefinisikan ulangls
menjadi tidak valid yang agak mengkhawatirkan sampai saya menghapusnya--auto-color
!Anda mungkin juga menemukan https://unix.stackexchange.com/q/127799/10043 berguna
# ~/.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'
sumber
zsh
penyelesaian kelas Java default.ls
Linux (--color=all
) dan OSX (-G
) dengan yang berikut:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Jawaban @Michael Durrant mampu menutupi shell itu sendiri, tetapi lingkungan shell juga menyertakan berbagai perintah yang Anda gunakan di shell dan ini akan serupa - tetapi tidak identik - antara OS X dan linux. Secara umum, keduanya akan memiliki perintah dan fitur inti yang sama (terutama yang ditentukan dalam standar Posix), tetapi banyak ekstensi akan berbeda.
Misalnya, sistem linux umumnya memiliki file
useradd
perintah untuk membuat pengguna baru, tetapi OS X tidak. Di OS X, Anda biasanya menggunakan GUI untuk membuat pengguna; jika Anda perlu membuatnya dari baris perintah, Anda menggunakandscl
(yang tidak dimiliki linux) untuk mengedit database pengguna (lihat di sini ). (Pembaruan: mulai di macOS High Sierra v10.13, Anda dapat menggunakansysadminctl -addUser
sebagai gantinya.)Juga, beberapa perintah yang sama akan memiliki fitur dan opsi yang berbeda. Misalnya, linux umumnya menyertakan GNU
sed
, yang menggunakan-r
opsi untuk memanggil ekspresi reguler yang diperluas; di OS X, Anda akan menggunakan-E
opsi untuk mendapatkan efek yang sama. Demikian pula, di linux yang mungkin Anda gunakanls --color=auto
untuk mendapatkan keluaran berwarna; di macOS, padanan terdekatnya adalahls -G
.EDIT: Perbedaan lainnya adalah bahwa banyak perintah linux memungkinkan opsi ditentukan setelah argumennya (misalnya
ls file1 file2 -l
), sementara sebagian besar perintah OS X memerlukan opsi untuk didahulukan (ls -l file1 file2
).Akhirnya, karena OS itu sendiri berbeda, beberapa perintah akhirnya berperilaku berbeda di antara OS. Misalnya, di linux yang mungkin Anda gunakan
ifconfig
untuk mengubah konfigurasi jaringan Anda. Di OS X,ifconfig
akan berfungsi (mungkin dengan sintaks yang sedikit berbeda), tetapi perubahan Anda kemungkinan besar akan ditimpa secara acak oleh daemon konfigurasi sistem; sebagai gantinya Anda harus mengedit preferensi jaringan dengannetworksetup
, dan kemudian membiarkan daemon konfigurasi menerapkannya ke status jaringan langsung.sumber