В чем разница между использованием терминала на mac и linux? [закрытый]
Я использую Ubuntu в течение последних четырех лет.
У меня есть базовые знания команд и я предпочитаю работать в терминале, а не через графический интерфейс. Недавно я начал использовать Mac.
Я пробовал несколько команд терминала (которые я использую на Ubuntu) в терминале Mac, и он, похоже, реагирует в основном одинаково.
есть ли какие-либо существенные различия в командах, которые я использую, задаче (задачах), которые они выполняют, или среде оболочки, которой я должен быть в курсе?
2 ответов
если вы сделали новую или чистую установку 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 or .файл 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'
@Michael Durrant's answer умело охватывает саму оболочку, но среда оболочки также включает в себя различные команды, которые вы используете в оболочке, и они будут похожи-но не идентичны-между OS X и linux. В общем, оба будут иметь одинаковые основные команды и функции (особенно те, которые определены в стандарте Posix), но многие расширения будут разными.
например, системы linux обычно имеют useradd
команда для создания новых пользователей, но OS X нет. В OS X вы обычно используете GUI для создания пользователей; если вам нужно создать их из командной строки, вы используете dscl
(которого нет в linux) для редактирования базы данных пользователей (см. здесь).
кроме того, некоторые команды, которые у них есть, будут иметь разные функции и параметры. Например, линуксы обычно включают GNU sed
, который использует -r
возможность вызова расширенных регулярных выражений; в OS X вы бы использовали -E
возможность получить то же самое эффект.
EDIT: другое отличие заключается в том, что многие команды linux позволяют указывать параметры после их аргументов (например,ls file1 file2 -l
), в то время как большинство команд OS X требуют, чтобы опции были строго первыми (ls -l file1 file2
).
наконец, поскольку сама ОС отличается, некоторые команды ведут себя по-разному между ОС. Например, в linux вы, вероятно, используете ifconfig
изменить конфигурацию сети. На OS X,ifconfig
будет работать (вероятно, со слегка другой синтаксис), но ваши изменения, скорее всего, будут перезаписаны случайным образом демоном конфигурации системы; вместо этого вы должны отредактировать сетевые настройки с помощью networksetup
, а затем пусть демон конфигурации применит их к состоянию живой сети.