У чому різниця між використанням терміналу на mac та linux? [зачинено]


89

Я використовую Ubuntu останні чотири роки.
Я маю базові знання команд оболонки, і я віддаю перевагу роботі в терміналі, а не використанню графічного інтерфейсу. Нещодавно я почав користуватися Mac.

Я спробував кілька команд терміналу (які я використовую в Ubuntu) в терміналі Mac, і, схоже, він реагує в основному однаково.

Чи є якісь суттєві відмінності в командах, які я використовую, в завданнях, які вони виконують, або в середовищі оболонки, про яке я повинен знати?


8
Я хотів би знову відкрити і перейти до обміну програмістами.
Michael Durrant

1
Чи є де-небудь в Інтернеті вичерпний перелік команд терміналів mac проти linux?
jasonleonhard

Відповіді:


61

Якщо ви робили нову чи чисту інсталяцію OS X версії 10.3 або новішої, оболонка терміналу користувача за замовчуванням - bash.

Bash - це, по суті, вдосконалена та безкоштовна версія GNU оригінальної оболонки Bourne, sh. Якщо у вас є попередній досвід роботи з bash (часто за замовчуванням для інсталяцій GNU / Linux), це робить досвід роботи з командним рядком OS X знайомим, інакше розгляньте можливість переключення вашої оболонки або на tcsh, або на zsh, оскільки деякі вважають це більш зручним для користувача.

Якщо ви оновили OS X версії 10.2.x, 10.1.x або 10.0.x або використовуєте її, оболонка користувача за замовчуванням - tcsh, розширена версія csh ('c-shell'). Ранні впровадження були трохи глючними, а синтаксис програмування трохи дивним, тому це створило поганий реп.

Все ще існують деякі принципові відмінності між mac та linux, як Гордон Девіссон так влучно перелічує, наприклад, немає useraddна Mac і ifconfigпрацює по-іншому.

Наступна таблиця корисна для знання різних оболонок 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

Вам також можуть стати в нагоді ці посібники:

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

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

Нарешті, я працюю на Linux (Ubuntu 11) та Mac osX, тому я використовую bash, і мені найбільше подобається налаштування .bashrc (джерело від .bash_profile файлу OSX) з псевдонімами, деякі приклади нижче. Тепер я розмістив усі свої псевдоніми в окремому файлі .bash_aliases і включив його до:

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

у файлі .bashrc або .bash_profile.

Зверніть увагу, що це приклад різниці у mac-linux, оскільки на Mac ви не можете мати--color=auto . Перший раз, коли я зробив це (не знаючи), я перевизначивls недійсність, що було трохи тривожно, доки я не видалив --auto-color!

Вам також може стати в нагоді 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 за замовчуванням.
Dave Newton

дякую за нагадування, що колір поводиться по-різному в командах linux та macos ls. Я використовую один і той же bashrc для обох і мені потрібно знайти спосіб умовно використовувати той чи інший варіант ls, щоб переконатися, що ls завжди отримує кольори.
Бастіан

Я збираюся використовувати це для умовного використання того чи іншого параметра ls відповідно до операційної системи: _myos = "$ (uname)", а потім випадок $ _myos у Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) псевдонім foo = '/ шлях / до / bsd / bin / foo' ;; *) ;; esac
Бастіан

1
Бастіане, ти можеш мати кольори lsяк для Linux ( --color=all), так і для OSX ( -G) з наступним: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Майкл Дюррант

Посилання TerminalBasics.pdf, здається, мертве. Є чи це той самий документ?
Плазма

29

Відповідь @Michael Durrant вміло охоплює саму оболонку, але середовище оболонки також включає різні команди, які ви використовуєте в оболонці, і вони будуть схожими, але не ідентичними, між OS X та Linux. Загалом, обидві будуть мати однакові основні команди та функції (особливо ті, що визначені стандартом Posix), але багато розширень будуть різними.

Наприклад, системи Linux зазвичай мають useraddкоманду створювати нових користувачів, а OS X - ні. В ОС X ви зазвичай використовуєте графічний інтерфейс для створення користувачів; якщо вам потрібно створити їх із командного рядка, ви використовуєте dscl(яких Linux не має) для редагування бази даних користувачів (див. тут ). (Оновлення: починаючи з macOS High Sierra v10.13, ви можете використовувати його sysadminctl -addUser.)

Крім того, деякі спільні команди матимуть різні функції та параметри. Наприклад, Linux зазвичай включають GNU sed, який використовує -rопцію для виклику розширених регулярних виразів; на OS X ви б використовували -Eопцію, щоб отримати той самий ефект. Подібним чином, в Linux ви можете використовувати ls --color=autoдля отримання кольорового виводу; на macOS найближчим еквівалентом є ls -G.

РЕДАГУВАТИ: Ще одна відмінність полягає в тому, що багато команд Linux дозволяють вказувати параметри після своїх аргументів (наприклад ls file1 file2 -l), тоді як більшість команд OS X вимагають, щоб параметри стояли строго першими ( ls -l file1 file2).

Нарешті, оскільки сама ОС відрізняється, деякі команди закінчують поводитися по-різному між ОС. Наприклад, у Linux ви, мабуть, використовували б ifconfigдля зміни конфігурації мережі. В OS X це ifconfigбуде працювати (можливо, з дещо іншим синтаксисом), але ваші зміни, швидше за все, будуть випадково перезаписані демоном конфігурації системи; натомість вам слід відредагувати мережеві налаштування за допомогою networksetup, а потім дозволити демону конфігурації застосувати їх до стану реальної мережі.


3
Чудові окуляри Гордон! Я поставлю +1, хоча у мене теж є відповідь;) - чи не повинен я отримати за це кредит ?!
Michael Durrant

1
Тим паче, що ваша - цілком гарна відповідь сама по собі; Я також дав вам голос.
Гордон Девіссон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.