В чем разница между использованием терминала на Mac и Linux? [закрыто]

89

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

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

Есть ли какие-либо существенные различия в используемых мной командах, задачах, которые они выполняют, или в среде оболочки, о которой мне следует знать?

Дили
источник
8
Хочу снова открыть и перейти на обмен программистами.
Майкл Даррант
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, и мне больше всего нравится настраивать .bash_profileфайл .bashrc (исходный код из 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 по умолчанию.
Дэйв Ньютон
Спасибо, что напомнили мне, что цвет ведет себя по-разному в команде linux и macos ls. Я использую один и тот же bashrc для обоих, и мне нужно найти способ условно использовать один или другой параметр ls, чтобы убедиться, что ls всегда получает цвета.
Bastian
Я собираюсь использовать это, чтобы условно использовать один параметр ls или другой в зависимости от операционной системы: _myos = "$ (uname)", а затем case $ _myos в Linux) alias foo = '/ path / to / linux / bin / foo ';; FreeBSD | OpenBSD) alias foo = '/ path / to / bsd / bin / foo' ;; *) ;; esac
Bastian
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 кажется мертвой. Является ли это тот же документ?
Plasma
29

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

Например, в системах Linux обычно есть useraddкоманда для создания новых пользователей, а в OS X нет. В OS 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, хотя у меня тоже есть ответ;) - разве я не должен получить за это доверие ?!
Майкл Даррант,
1
Тем более, что ваш ответ сам по себе неплохой; Я тоже дал вам голос.
Гордон Дэвиссон