Every year I like to dig a little around some default paths to see what new binaries will be available to assist in deployment or troubleshooting. I use a simple easy script that generates a list of all the binaries in /bin, /sbin, /usr/bin, /usr/sbin, and /usr/libexec from one OS (usually 10.x.4) to a recent beta build of the upcoming OS (in this case Yosemite).
New Binaries
/bin
Nothing has changed inside the /bin folder
/sbin
Nothing was added, what should not be surprising is what was removed, specifically ipfw and ip6fw. If you do a man ipfw
on your Mavericks machine Apple warned you that this was going away with:
This utility is DEPRECATED. Please use pfctl(8) instead ipfw man page
/usr/bin
There are a lot of updated binaries that had endings of â.12â which were removed and â.18â were added. Donât really know what those are. There are some new items with AVB (which was actually added in 10.9.5), but was is really interesting is all the âdiagnoseâ items. If you think Apple has a QA problem, they are trying to fix it with all of these diagnose binaries such as:
avbdiagnose # Audio Visual diagnose
csdiagnose # CoreStorage diagnose
csgather # CoreStorage metadata for diagnosis
ostraceutil # OS
taskinfo # Prints current processes
thermals # I have no idea what "thermals" is doing.
/usr/libexec
A lot of new â*dâ daemon processes that do not have man files or output help files when executed, but PlistBuddy is still there!
/usr/sbin
Here are new commands that I can see being used by macadmins:
discoveryutil - running sudo discoveryutil âhelp doesnât give you much, but there it shows a âdebug option that states âinteract w/discoverydâ. Hmm.. what is discoveryd? The man page states:
The discoveryd daemon is responsible for unicast DNS resolution, multicast DNS resolution, and Service Discovery on the system. It performs queries, registrations, and provides answers on behalf of other clients through the DNS Service Discovery API as documented in dns_sd.h man discoveryd
We have DNS debugging! More info in man discoveryd such as logging level (None, Basic, Intermediate, Detailed, VeryDetailed, Everything, or a number) or the class (Events, Sockets, Bonjour, Network).
Some of the fun commands for discoveryutil are:
sudo discoveryutil help # prints all discoveryutil options
sudo discoveryutil configresolvers # gives DNS servers for each interface and search domain
sudo discoveryutil mdnsflushcache # everyones favorite network "fix"
sudo discoveryutil mdnsbrowses # gives all the _service._tcp.domain.tld broadcasts (like appletv). use grep "MDNS Browses" to limit the lines
sudo discoveryutil mdnsregistrations # current machine's MDNS broadcast
sudo discoveryutil loglevel # Default is "Basic", can see above for levels
sudo discoveryutil configinterfaces # Current IP configurations for each interface. something like a reformatted ipconfig or ifconfig
dnctl - this command forces your machine to work on a poor network for testing. The man page gives you a checklist (things to think about), variable flag options, and some examples.
firmwarepasswd - Iâm guessing this will now be the default for setting your firmware password on devices and setregproptool
will no longer be used. Update your scripts!
sysadminctl - New command line tool to manipulate local users. You can add, delete, password update, reset passwords for local accounts. Unfortunately there is no man page. I havenât tested this fully to see how it handles directory accounts (AD or OD).
unsetpassword - set password to blank, needing a new pass. From the help page:
Performs the following actions on the current userâs record and then shuts down the system:
- Sets the password to blank.
- Marks the record as requiring a new password. You must run this while logged in as an admin, non-root user and quit all running apps before running this tool.
Source script
#!/bin/bash
# descriptions
# This script looks in /bin, /sbin, /usr/bin, /usr/sbin, and /usr/libexec
# and generates a text file with all the unix binaries that are available.
# variables
os=`sw_vers -productVersion`
# functions
me=`whoami`
cd /Users/"${me}"/Desktop
for i in /bin /sbin /usr/bin /usr/sbin /usr/libexec; do
fname=`echo $i | sed 's/\//-/g'`
[ -d "$i" ] && { ls $i > "${os}${fname}".txt; }
done
exit 0
Comments are closed. If you have a question concerning the content of this page, please feel free to contact me.
Comments
David Acland
I wish Iâd seen this page after doing the same this morning! Iâm a definite fan of sysadminctl. Looks pretty straight forward. Iâve just tested it in a post imaging script to add a hidden admin account and it works great.
dk_millares
Great job, thank u!