Standardmäßig verfügbare Befehlszeilentools

In einem Unix-basierten System sind eine Reihe von Befehlen standardmäßig verfügbar (entweder in /binoder /usr/bin). Angenommen, ich habe irgendwann mehr Tools wie git, svn … installiert.

Wenn ich in OS X XCode und dann das Befehlszeilen-Tools-Paket installiere, wird ein Bündel von Entwicklungstools auf dem System installiert. Wie kann ich also wissen, welche Befehle zum Zeitpunkt der Installation des Betriebssystems verfügbar sind?

Ist netcatstandardmäßig ncauf Mac OSX verfügbar oder wird das zusammen mit Befehlszeilen-Tools installiert?

Antworten (3)

Wie kann ich also wissen, welche Befehle zum Zeitpunkt der Installation verfügbar sind?

Befehle, die nach einer Neuinstallation von Mavericks (OS X 10.9) verfügbar sind, gehören zu einem dieser vier Pakete:

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

(Beachten Sie, dass ab High Sierra (macOS 10.13) Befehle in dieses Paket verschoben wurden com.apple.pkg.Core.)

Mit diesem Befehl können Sie die in jedem Paket enthaltenen Befehle auflisten:

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

Sind netcat, ncstandardmäßig unter Mac OS X verfügbar oder werden diese zusammen mit den Befehlszeilentools installiert?

Ich fand ncmit:

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

(Auf High Sierra pkgutil --files com.apple.pkg.Core | egrep '^usr/bin/nc'stattdessen ausführen.)

also ja, ncgehört zur Basis-OS-Installation.

Ich konnte es nicht finden netcat. Wenn Sie es also auf Ihrem System haben, wurde es später installiert.


Um alle Befehle aufzulisten, die von allen Paketen bereitgestellt werden, führen Sie im Terminal Folgendes aus:

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

Sie können den Befehl auch zur späteren Referenz an eine Datei auf Ihrem Desktop weiterleiten:

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
ncIST netcat.
Es gibt tatsächlich mehrere Netcat-Programme, auf den SUSE-Linux-Servern, die ich verwalte, heißt es netcat, auf OS X heißt es nc, auf Ubuntu 12.04 netcatist ein Symlink zu nc. Und dann haben Sie natürlich ncat, verfügbar unter nmap.org. ncscheint der bevorzugte BSD-Name zu sein, während GNU und einige Distributionen netcat. Obwohl SUSE netcatdie ursprüngliche Implementierung von hobbit@avian.org zu sein scheint, wurde OS X ncvon Erick Jackson neu geschrieben (AUTHOR-Abschnitt in der Manpage), deshalb behandle ich ncund netcatals unterschiedliche Programme.
Eine andere Option ist die Verwendung pkgutil --file-info /usr/bin/nc, um die Pakete zu erhalten, die es installiert hatten. Der Befehl listet auch Betriebssystemaktualisierungen auf, die die Datei seit der Installation aktualisiert haben. Am 10.11 ist das Paket, das enthält nc, com.apple.pkg.Essentialsalso ja, es ist standardmäßig enthalten.
Auf High Sierra (möglicherweise auch früher) scheinen die oben genannten Pakete durch com.apple.pkg.Core.
@LeoNikkilä Danke für den Hinweis, ich habe meine Antwort aktualisiert, um die Änderung widerzuspiegeln.

netcatist Teil der Basissystem-Binärdateien, wie Sie mit sehen können

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

Sie können nicht wirklich sagen, welche ausführbaren Dateien Teil des ursprünglichen Betriebssystems waren und welche später installiert wurden.

Ein Blick auf die Manpage gibt Ihnen jedoch im Allgemeinen eine gute Vorstellung. Wenn die Manpage so etwas wie "BSD General Commands Manual" beginnt, ist sie mit ziemlicher Sicherheit Teil des ursprünglichen Betriebssystems. Sie werden feststellen, dass diese auch mit einer Zeile enden, die an jedem Ende entweder „BSD“ oder „Mac OS X“ enthält.