GNU command line utils

    Ни для кого не секрет, что Mac OS X базируется на BSD, и, как следствие, получила в наследство полный комплект BSD-шных command line утилит, таких как ls, find, xargs, и многие другие. Они хорошие и правильные, и использовать их вполне можно — однако если вы долго использовали Linux, наверняка вы привыкли к GNU версиям этих утилит, то есть, к примеру, --длинным-аргументам, нормальной опции --help — ну и вообще выработали определенные привычки. К числу таких людей принадлежу и я, и когда мне понадобилось набрать пару десятков команд в Terminal.app, через 10 минут я начал рвать волосы на груди нервничать и читать man, что не способствовало производительности труда.
    Несколько позже я подумал — а почему, собственно, я не могу использоваться 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
    ...

    Решить эту проблему можно несколькими способами, выбрать конкретный — дело каждого, я же их всего лишь перечислю.
    1. Самый простой — устанавливать coreutils с опцией with_default_names:
      sudo port install coreutils +with_default_names
      В этом случае утилиты по умолчанию будут перезаписаны. Я бы не рекомендовал использовать этот способ, так как система в целом может не оценить, если системные утилиты будут заменены пусть и на совместимые, но все же — другие программы.
    2. Опция вторая — переименовать утилиты по умолчанию, и добавить линки на новые программы:
      mv /usr/bin/ls /usr/bin/mls
      ln /opt/local/bin/gls  /usr/bin/ls
      В этом случае исходные версии утилит будут доступны по имени с префиксом «m». Тоже не самый лучший способ, так как по /usr/bin/ls все без исключения программы получат GNU-версию утилиты
    3. Третий способ — идеологически наиболее выдержанный. Он заключается в том, что ссылки создаются без префикса «g», но в /opt/local/bin
      ln /opt/local/bin/gls  /opt/local/bin/ls
      после чего в вашем локальном ~/.bashrc вы добавляете в PATH этот путь перед /usr/bin:
      export PATH=/opt/local/bin:$PATH
      Как вариант, можно создавать линки вообще в отдельной директории, и перед $PATH прописать именно ее. В этом случае, только вы, и только работая с вашим любимым шеллом (который, кстати, тоже можно установить из macport) будете использовать GNU версии утилит. Все же остальные программы и люди даже не будут догадываться об их существовании, и будут использовать стандартные BSD-совместимые fileutils.
    4. Четвертый вариант, посоветованный хабрачеловеком gribozavr (и позор на мои седины, что я сам до этого не додумался) — сделать alias:
      alias ls='/opt/local/bin/gls'
      и добавить это в ваш ~/.bashrc

    Таким образом, мы получаем полностью GNU-версию командных утилит — что будет очень удобно линуксоидам, которые по долгу службы или душевному позыву используют Mac (я гордо себя причисляю к последним).
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 28

    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        Пожалуйста, надеюсь что будет полезно (вообще предполагаю, что это нужно только подлинным гикам, и 90% мак-юзеров просто непонятно и неинтересно).
        • НЛО прилетело и опубликовало эту надпись здесь
            +2
            Аа, ну тогда понятно ;-)
            Я где-то посередине завис - дома Мак, на работе Линукс.
        +1
        А лучше всего (и быстрее) сделать alias.
          0
          Согласен, тоже вариант.
          0
          огромное спасибо за статью! давно думал о том, чтобы установить coreutils, но всё руки не доходили
            0
            Ну не все так страшно ;-)
            +2
            Спасибо большое. :) Когда купил мак, после 15 минут тыкания в Mac OS X и попыток поработать в консоли был порыв был поставить Gentoo. Потом смирился, т.к. времени не было собирать Gentoo и возиться с MacPorts. Но благодаря вам, видимо займусь. :)
              0
              Как я написал выше, ничего сложного нет - весь процесс занимает дай Б-г 10 минут (не считая установки xcode, правда).
                0
                Ну, xcode я сразу поставил... а вот хорошо было бы еще список алиасов сформировать. Может на каких-нибудь виках сделаем?
                +1
                сносить macos чтобы поставить gentoo?! это святотатсво!! либо вам просто очень понравился корпус за полторы штуки баксов для linux-box ;)
                0
                А почему выбор сделан в пользу MacPorts, а не скажем DarwinPorts?
                  0
                  Однако.... это оказывается одно и тоже =)
                  Вопрос снят >:-)
                  +1
                  Я после линукса ужасно скучаю по человеческому пакетному менеджеру и прекомппиленным бинарникам. Потому что когда речь заходит о чем-нибудь менее тривиальном, чем coreutils (в моем случае — darcs), то оказывается, что сборка длится полчаса, а потом валится из-за того, что автор порта плохо его сконфигурировал.
                    0
                    Ну вообще говоря на Маке есть правильный и strategically approved способ установки приложений - а именно, путем копирования их в папочку Applications. Все остальное - не более чем хаки "под себя", и отношение к ним должно быть соответствующее.
                      0
                      Тут вы не правы. Есть еще большое кол-во софта в виде .pkg. Такие вот установки потом замучаешся вычищать с системы...
                        0
                        согласен, однако копирование все же правильнее с точки зрения организации системы.
                      0
                      А вообще-то вот: http://www.finkproject.org/index.php
                        0
                        Точно, вот про него и хотел спросить, когда писал про ДарвинПорты выше.
                        Чем финк отличается от МакПорта ну и главный вопрос - кто из них лучше ))
                          0
                          Ну вы спросили ;-) какой вопрос - такой и ответ - кому что удобнее ;-)
                            0
                            Так как я не пользовался - я не знаю какой мне удобнее. А тратить время на изучения их особеностей не хочется.

                            Случайно не знаете сравнительной статьи по этой тематике?
                              0
                              Я не знаю. Он знает.
                                0
                                Он то все знает =) Думал у вас есть какой-то опыт или знания по данному вопросу =)
                        0
                        Не пробовали использовать FreeBSD 7.0? :) Там есть не только бинарные пакеты, но и linuxulator. Каталог /compat/linux: 10329 элементов, вычисление объёма 306,1 MB. :D
                        0
                        Спасибо за инфу
                        P.S. Даже если у человека Мак, не лишним будет поучиться чему-то новому.
                          0
                          В fink есть готовые пакеты GNU утилит с именами, перекрывающими системные
                            0
                            кстати, также очень полезно поставить findutils

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое