Herramientas de línea de comandos disponibles por defecto

En un sistema basado en Unix, una serie de comandos están disponibles de forma predeterminada (ya sea en /bino /usr/bin). Supongamos que en algún momento instalé más herramientas como git, svn…

En OS X, si instalo XCode y luego el paquete de herramientas de línea de comandos, se instalará un conjunto de herramientas de desarrollo en el sistema. Entonces, ¿cómo puedo saber qué comandos están disponibles en el momento de la instalación del sistema operativo?

¿Está disponible netcatde ncforma predeterminada en Mac OSX o se instala junto con las herramientas de línea de comandos?

Respuestas (3)

Entonces, ¿cómo puedo saber qué comandos están disponibles en el momento de la instalación?

Los comandos disponibles después de una instalación nueva de Mavericks (OS X 10.9) pertenecen a uno de estos cuatro paquetes:

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

(Tenga en cuenta que, a partir de High Sierra (macOS 10.13), los comandos se han trasladado a este paquete com.apple.pkg.Core).

Puede enumerar los comandos incluidos en cada paquete con este comando:

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

¿Están disponibles netcatde ncforma predeterminada en Mac OS X o se instalan junto con las herramientas de línea de comandos?

encontré nccon:

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

(En High Sierra, corre pkgutil --files com.apple.pkg.Core | egrep '^usr/bin/nc'en su lugar).

entonces sí, ncpertenece a la instalación del sistema operativo base.

No pude encontrar netcat, por lo que si lo tiene en su sistema, se instaló más tarde.


Para enumerar todos los comandos provistos por todos los paquetes, ejecute en Terminal:

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

También puede canalizar el comando a un archivo en su escritorio para referencia posterior:

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
ncES netcat.
En realidad, hay varios programas netcat, en los servidores SUSE Linux que administro se llama netcat, en OS X se llama nc, en Ubuntu 12.04 netcates un enlace simbólico a nc. Y luego, por supuesto, tiene ncat, disponible en nmap.org. ncparece ser el nombre BSD preferido, mientras que GNU y algunas distribuciones usan netcat. Aunque SUSE netcatparece ser la implementación original de hobbit@avian.org, OS X ncfue reescrito por Erick Jackson (sección AUTOR en la página de manual), es por eso que lo trato nccomo netcatprogramas diferentes.
Otra opción es usar pkgutil --file-info /usr/bin/ncpara obtener los paquetes que lo tenían instalado. El comando enumera también las actualizaciones del sistema operativo que han actualizado el archivo desde la instalación. El 10.11, el paquete que contiene nces com.apple.pkg.Essentials, por lo que sí, está incluido de forma predeterminada.
En High Sierra (posiblemente antes también) los paquetes antes mencionados parecen haber sido reemplazados por com.apple.pkg.Core.
@LeoNikkilä Gracias por el aviso, actualicé mi respuesta para reflejar el cambio.

netcates parte de los binarios del sistema base como puede ver con

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

En realidad, no puede saber qué ejecutables formaban parte del sistema operativo original y cuáles se instalaron más tarde.

Sin embargo, mirar la página del manual generalmente le dará una buena idea. Si la página de manual comienza con algo así como "Manual de comandos generales de BSD", es casi seguro que sea parte del sistema operativo original. Notará que estos también terminarán con una línea que contiene 'BSD' o 'Mac OS X' en cada extremo.