Ни для кого не секрет, что Mac OS X базируется на BSD, и, как следствие, получила в наследство полный комплект BSD-шных command line утилит, таких как ls, find, xargs, и многие другие. Они хорошие и правильные, и использовать их вполне можно — однако если вы долго использовали Linux, наверняка вы привыкли к GNU версиям этих утилит, то есть, к примеру, рвать волосы на груди нервничать и читать man, что не способствовало производительности труда.
Несколько позже я подумал — а почему, собственно, я не могу использоваться GNU версии утилит — только потому, что они не поставляются с системой? Нет, это — не UNIX way!
Несколько минут поиска подтвердили мои подозрения, и требуемые мне версии утилит я нашел на GNU coreutils. Теперь вопрос заключался в том, как их установить.
В целом, у меня было два варианта:
Я предпочел использовать второй метод, хотя это — личное дело каждого :-)
Итак, краткую инструкцию по установке MacPort можно найти на официальном сайте — процесс предельно простой и понятный, необходимо лишь иметь установленные Apple Developer Tools (xcode в частности).
После того, как MacPort установлен, в простейшем случае требуется выполнить всего одну команду в терминале:
Почему в простейшем случае? Все дело в том, что MacPort по умолчанию не перезаписывает файловые утилиты, и устанавливает свои версии в отдельную директорию с другим именем:
Решить эту проблему можно несколькими способами, выбрать конкретный — дело каждого, я же их всего лишь перечислю.
Таким образом, мы получаем полностью GNU-версию командных утилит — что будет очень удобно линуксоидам, которые по долгу службы или душевному позыву используют Mac (я гордо себя причисляю к последним).
--длинным-аргументам
, нормальной опции --help — ну и вообще выработали определенные привычки. К числу таких людей принадлежу и я, и когда мне понадобилось набрать пару десятков команд в Terminal.app, через 10 минут я начал Несколько позже я подумал — а почему, собственно, я не могу использоваться GNU версии утилит — только потому, что они не поставляются с системой? Нет, это — не UNIX way!
Несколько минут поиска подтвердили мои подозрения, и требуемые мне версии утилит я нашел на GNU coreutils. Теперь вопрос заключался в том, как их установить.
В целом, у меня было два варианта:
- Собрать их из исходников самостоятельно
- Более цивилизованный — воспользоваться MacPorts, который представляет вполне нормальный менеджер пакетов
Я предпочел использовать второй метод, хотя это — личное дело каждого :-)
Итак, краткую инструкцию по установке MacPort можно найти на официальном сайте — процесс предельно простой и понятный, необходимо лишь иметь установленные Apple Developer Tools (xcode в частности).
После того, как MacPort установлен, в простейшем случае требуется выполнить всего одну команду в терминале:
sudo port install coreutils
Почему в простейшем случае? Все дело в том, что MacPort по умолчанию не перезаписывает файловые утилиты, и устанавливает свои версии в отдельную директорию с другим именем:
/opt/local/bin/gls вместо /usr/bin/ls
/opt/local/bin/gfind вместо /usr/bin/find
...
Решить эту проблему можно несколькими способами, выбрать конкретный — дело каждого, я же их всего лишь перечислю.
- Самый простой — устанавливать coreutils с опцией with_default_names:
В этом случае утилиты по умолчанию будут перезаписаны. Я бы не рекомендовал использовать этот способ, так как система в целом может не оценить, если системные утилиты будут заменены пусть и на совместимые, но все же — другие программы.sudo port install coreutils +with_default_names
- Опция вторая — переименовать утилиты по умолчанию, и добавить линки на новые программы:
В этом случае исходные версии утилит будут доступны по имени с префиксом «m». Тоже не самый лучший способ, так как по /usr/bin/ls все без исключения программы получат GNU-версию утилитыmv /usr/bin/ls /usr/bin/mls ln /opt/local/bin/gls /usr/bin/ls
- Третий способ — идеологически наиболее выдержанный. Он заключается в том, что ссылки создаются без префикса «g», но в
/opt/local/bin
после чего в вашем локальномln /opt/local/bin/gls /opt/local/bin/ls
~/.bashrc
вы добавляете в PATH этот путь перед/usr/bin
:
Как вариант, можно создавать линки вообще в отдельной директории, и перед $PATH прописать именно ее. В этом случае, только вы, и только работая с вашим любимым шеллом (который, кстати, тоже можно установить из macport) будете использовать GNU версии утилит. Все же остальные программы и люди даже не будут догадываться об их существовании, и будут использовать стандартные BSD-совместимые fileutils.export PATH=/opt/local/bin:$PATH
- Четвертый вариант, посоветованный хабрачеловеком gribozavr (и позор на мои седины, что я сам до этого не додумался) — сделать alias:
и добавить это в ваш ~/.bashrcalias ls='/opt/local/bin/gls'
Таким образом, мы получаем полностью GNU-версию командных утилит — что будет очень удобно линуксоидам, которые по долгу службы или душевному позыву используют Mac (я гордо себя причисляю к последним).