Я использую Ubuntu последние четыре года.
У меня есть базовые знания команд оболочки, и я предпочитаю работать в терминале, а не в графическом интерфейсе. Недавно я начал пользоваться Mac.
Я пробовал несколько команд терминала (которые я использую в Ubuntu) в терминале Mac, и, похоже, он реагирует в основном таким же образом.
Есть ли какие-либо существенные различия в используемых мной командах, задачах, которые они выполняют, или в среде оболочки, о которой мне следует знать?
Ответы:
Если вы выполнили новую или чистую установку 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.
Вы также можете найти эти руководства полезными:
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'
источник
zsh
завершение класса Java по умолчанию.ls
как в Linux (--color=all
), так и в OSX (-G
) со следующим:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Ответ @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
, а затем позволить демону конфигурации применить их к текущему состоянию сети.источник