Инструменты командной строки, доступные по умолчанию

В системе на основе Unix ряд команд доступен по умолчанию (либо в , либо в /bin) /usr/bin. Предположим, через какое-то время я установил больше инструментов, таких как git, svn…

В OS X, если я установлю XCode, а затем пакет инструментов командной строки, в систему будет установлен пакет инструментов разработки. Итак, как я могу узнать, какие команды доступны во время установки ОС?

Доступен ли netcatон ncпо умолчанию в Mac OSX или он устанавливается вместе с инструментами командной строки?

Ответы (3)

Итак, как я могу узнать, какие команды доступны во время установки?

Команды, доступные после новой установки Mavericks (OS X 10.9), относятся к одному из этих четырех пакетов:

  • com.apple.pkg.BSD
  • com.apple.pkg.BaseSystemBinaries
  • com.apple.pkg.BaseSystemResources
  • com.apple.pkg.Essentials

(Обратите внимание, что начиная с High Sierra (macOS 10.13) команды были перемещены в этот пакет com.apple.pkg.Core.)

Вы можете перечислить команды, включенные в каждый пакет, с помощью этой команды:

pkgutil --files <package name> | egrep '^usr/s*bin|^s*bin/'

Доступны ли netcatпо ncумолчанию в Mac OS X или они устанавливаются вместе с инструментами командной строки?

Я нашел ncс:

pkgutil --files com.apple.pkg.BaseSystemBinaries | egrep '^usr/bin/nc'

(На High Sierra pkgutil --files com.apple.pkg.Core | egrep '^usr/bin/nc'вместо этого бегите.)

так что да, ncотносится к базовой установке ОС.

Я не смог найти netcat, поэтому, если он есть в вашей системе, он был установлен позже.


Чтобы просмотреть все команды, предоставляемые всеми пакетами, запустите в Терминале:

for p in $(pkgutil --packages); do 
  list_of_cmds=$(pkgutil --files $p | egrep '^usr/s*bin|^s*bin/')
  if [ ! -z "$list_of_cmds" ]; then
    echo ">>>> $p <<<<"
    echo "$list_of_cmds"
  fi
done

Вы также можете передать команду в файл на рабочем столе для дальнейшего использования:

for p in $(pkgutil --packages); do 
  list_of_cmds=$(pkgutil --files $p | egrep '^usr/s*bin|^s*bin/')
  if [ ! -z "$list_of_cmds" ]; then
    echo ">>>> $p <<<<"
    echo "$list_of_cmds"
  fi
done > ~/Desktop/cmds_from_pkgs.txt
ncЕСТЬ netcat.
На самом деле существует несколько программ netcat, на серверах SUSE Linux, которые я администрирую, она называется netcat, в OS X она называется nc, в Ubuntu 12.04 netcatэто символическая ссылка на nc. И, конечно же, у вас есть ncat, доступный на nmap.org. ncкажется предпочтительным именем BSD, в то время как GNU и некоторые дистрибутивы используют netcat. Хотя SUSE netcatкажется оригинальной реализацией hobbit@avian.org, OS X ncбыла переписана Эриком Джексоном (раздел AUTHOR на странице руководства), поэтому я рассматриваю ncи netcatкак разные программы.
Другой вариант — использовать pkgutil --file-info /usr/bin/ncдля получения пакетов, в которых он был установлен. Команда также выводит список обновлений ОС, которые обновили файл с момента установки. В 10.11 пакет, содержащий nc, com.apple.pkg.Essentialsтак что да, он включен по умолчанию.
В High Sierra (возможно, и раньше) вышеупомянутые пакеты, похоже, были заменены на com.apple.pkg.Core.
@LeoNikkilä Спасибо за предупреждение, я обновил свой ответ, чтобы отразить изменения.

netcatявляется частью двоичных файлов базовой системы, как вы можете видеть с помощью

pkgutil --files com.apple.pkg.BaseSystemBinaries | grep "usr/bin/nc"

На самом деле вы не можете сказать, какие исполняемые файлы были частью исходной ОС, а какие были установлены позже.

Однако просмотр справочной страницы, как правило, даст вам хорошее представление. Если справочная страница начинается с чего-то вроде «Руководство по основным командам BSD», она почти наверняка является частью исходной ОС. Вы заметите, что они также заканчиваются строкой, содержащей либо «BSD», либо «Mac OS X» на каждом конце.