Leopard ByHost Plist Preference File Naming Convention Change

In Mac OS X 10.4 Tiger some system preferences were unique to a particular computer and so were named using a naming convention that included the MAC address of the first network device in the computer (en0). In Mac OS X 10.5 Leopard this naming convention was changed to use a different unique identifier other than the first network adapter’s MAC address. Leopard now uses something called the UUID for this unique identifier. You can determine a UUID of a Leopard computer by running the terminal command:

ioreg -rd1 -c IOPlatformExpertDevice | grep -E '(UUID)'

Terminal

How To Determine Dynamic Library Dependencies For An Executable or Library File in OS X

This script uses otool -L to determine and print all dynamic library dependencies of a given executable or library file recursively and you use it like this:

$ checklibs.pl /bin/ls
   /bin/ls:
            /usr/lib/libgcc_s.1.dylib
            /usr/lib/libncurses.5.4.dylib
            /usr/lib/libSystem.B.dylib
   /usr/lib/libgcc_s.1.dylib:
            /usr/lib/libSystem.B.dylib
   /usr/lib/libncurses.5.4.dylib:
            /usr/lib/libgcc_s.1.dylib
            /usr/lib/libSystem.B.dylib
   /usr/lib/libSystem.B.dylib:
            /usr/lib/system/libmathCommon.A.dylib

Here’s the script which was written by Marc Liyanage:

#!/usr/bin/perl
#
# Written by Marc Liyanage <http://www.entropy.ch>
# use strict;
use warnings; 

my ($file) = @ARGV;
die $! unless (-f $file); 

my $libs = {};
check_libs(file => $file, libs => $libs); 

print
	map {("\n$_:\n", map {"\t$_\n"} sort {lc($a) cmp lc($b)} @{$libs->{$_}})}
	sort {lc($a) cmp lc($b)}
	grep {@{$libs->{$_}}}
	keys(%$libs);
sub check_libs {
	my (%args) = @_;
	my $libs = $args{libs};
	my @file_libs = grep {$_ ne $args{file}} grep {$_} map {/^\s+(\S+)/} qx(otool -L $args{file});
	$libs->{$args{file}} = \@file_libs;
	foreach my $lib (grep {!$libs->{$_}} @file_libs) {
		unless (-f $lib) {
			$libs->{$lib} = ['(missing)'];
			next;
		}
		check_libs(%args, file => $lib);
	}
}

In case my blog software mangles the code above, you can download the script in a plain text file by clicking here: checklibs.zip

Code

How to Determine What Program Is Listening on a Port in OS X or Linux

To determine what daemon or program is listening on a port in Linux or OS X you can use the lsof command. You need to run the command while logged in as root or if your operating system supports sudo like OS X, you can use that.

Command to run in Linux:

lsof -i -nP

Command to run in OS X:

sudo lsof -i -nP

Terminal

How to Determine What Shared Libraries a Program Requires in OS X

In Linux you can use the command “ldd” to display what shared libraries a program requires. This is handy if you need to figure out what missing libraries are required to get a program running. Here is the syntax for the Linux ldd command along with example usage for it:

ldd pathToExecuteable

Example:

ldd /usr/bin/ftp

Mac OS X does not include the ldd command. Instead you need to use the command “otool”. Otool gives you basically the same information as what ldd does in Linux. Here is the syntax for the otool command along with example usage for it:

otool -L pathToExecuteable

Example:

otool -L /usr/bin/ftp

Mac OS X Terminal