Skip to content

Mac OS X Hints

See how long an app has been running

For a recent customer support question, I needed to know how long our app Witch had been running. There are probably many ways to find this out, but I couldn't think of one. A quick web search found the solution, via ps and the etime flag.

You need the process ID (pid), which you can find via ps ax | grep [a]ppname.1That [s]quare brackets around the first letter are there so grep won't find itself—and thus list itself in the output. In my case, Witch runs a background task called witchdaemon, so I did it this way…

$ ps -ax | grep [w]itchd
  774 ??        26:40.73 /Users/robg/Library/PreferencePanes...[trimmed]

With the pid, the command to find that process' uptime is:

$ ps -o etime= -p "774"
11-03:17:12

The elapsed time readout is in the form of dd-hh:mm:ss, so Witch had been running for 11 days and a few hours and minutes. Note that you can combine these steps, getting the process ID and using it in the ps command all at once:

ps -o etime= -p "`ps -ax | grep [a]ppname | cut -d ' ' -f 1`"

It's messy looking, but this form saves time and typing.

June 2018 Addendum: If you add the lstart flag, you can see the exact start date and time for the process. For example:

$ ps -o lstart= -o etime= -p "16866"
Tue Jun  5 05:49:19 2018     09-06:11:25


Create a savable list of 32-bit apps

Apple has announced that 32-bit apps have a limited future on the Mac: They'll be fully supported in this fall's High Sierra release; macOS' 2018 release ("Really High Sierra") will "aggressively warn" users about 32-bit apps, and I would assume, they won't work at all in the 2019 version of macOS ("That Was My Skull!").

But how do you know which apps on your Mac are 32-bit and which are 64-bit? MacObserver has an article that discusses the easy way, via the System Information app—just look in the Software > Applications section, and you'll be able to see a list of apps and a 64-bit Yes/No column. But seeing the list is all you can do—you can't easily save the list for future reference, for instance, nor can you copy/paste the info to another app.

So here's a geekier solution to generate a list of your 32-bit apps, saved into a text file for easy future reference. Open Terminal, and paste this command:

system_profiler SPApplicationsDataType | grep -B 6 -A 2 "(Intel): No" > ~/Desktop/non64bit.txt

This does the same thing as the System Information app, but it dumps the data in text form; the greater-than sign redirects the output to a text file named non64bit.txt, saved to your desktop. The grep is used to show only the 32-bit applications (the full line reads 64-Bit (Intel): No), and the -B and -A options are added to capture the lines before and after that line in the output.

This is probably not overly useful to most people, but I wanted a way to capture the list of apps, as I have over 290 32-bit apps on my machine, and it takes a while to run the System Information report each time.



Two ways to navigate column-view folders in Finder

If you use a column-view Finder window, and prefer to use keyboard navigation, here's a trick you may not be aware of—even though this dates back to the original release of Mac OS X. If I hadn't started the Mac OS X Hints site, I doubt I would've known this…

To drill down into Finder folders via the keyboard, you use the Right (down) and Left (up) Arrow keys-don't worry, that's not the tip, because that's totally completely obvious. The tip is this: After navigating into a given subfolder (and optionally selecting an item in that folder), the Shift-Tab key combo will navigate back up, but leave your "path" to the subfolder visible. Think of this like a "breadcrumb" trail that shows your navigation. (By comparison, if you use the Left Arrow, Finder "closes" each folder as you exit it, leaving you with nothing selected once you reach the top.)

One you've used Shift-Tab to navigate all the way back out, pressing Tab will navigate back down the highlighted path. Alternatively, pressing the Right Arrow key will jump immediately to the rightmost-selected item.

Update

As of Mojave (or maybe High Sierra), Apple changed the behavior of the Right Arrow after you back navigate with Shift Tab: It no longer jumps back to the end of the trail, instead it just works like a usual Right Arrow and selects the first item in the next column over.

I did some experimenting though, and found that Control-Tab will jump to the end of the breadcrumb trail.

Here's how that all looks in action—first is the normal arrow key navigation, then navigation using Shift-Tab and Tab.

You may not need/want the breadcrumb path all the time, but when you do, just remember to Shift-Tab your way out of the current folder. Using the arrow keys and the Tab/Shift-Tab keys together provides two complementary methods to navigate your column-view Finder windows.



Selective pruning of old rsync backups

In yesterday's post, I described a couple rsync oddities, and how they'd led me to this modified command for pruning old (older than four days) backups:

find /path/to/backups/ -d 1 -type d -Bmin +$((60*4*24)) -maxdepth 1 -exec rm -r {} +

After getting this working, though, I wondered if it'd be possible to keep my backups from the first day of each month, even while clearing out the other dates. After some digging in the rsync man page, and testing in Terminal, it appears it's possible, with some help from regex.

My backup folders are named with a trailing date and time stamp, like this:

back-2017-05-01_2230
back-2017-05-02_0534
back-2017-05-02_1002

To keep any backups made on the first of any month, for my folder naming schema, the modified find command would look like this:

find /path/to/backups/ -d 1 -type d -Bmin +$((60*4*24)) -maxdepth 1 -not -regex ".*-01_.*" -exec rm -r {} +

The new bits, -not -regex ".*-01_.*" basically say "find only files that do not contain anything surrounding a string that is 'hyphen 01 underscore.' And because only backups made on the first of the month will contain that pattern, they're the only ones that will be left out of the purge.

This may be of interest to maybe two people out there; I'm documenting it so I remember how it works!



How to not accidentally delete all your rsync backups

With my Time Machine-like rsync backups running well, I decided it was time to migrate over the cleanup portion of my old script—namely, the bit that removes older backups. Soon after I added this bit to my new script, though, I had a surprise: All of my backups, save the most recent, vanished.

In investigating why this happened, I stumbled across two rsync/macOS behaviors that I wasn't aware of…and if you're using rsync for backup, they may be of interest to you, too.

[continue reading…]



Add some System Preferences icons to the Dock

If you have certain System Preferences panels that you access a lot, and you're a Dock person (as opposed to a ⌘-Space and type person), here's a little timesaver: You can add any System Preferences panel directly to your Dock. You can't add it to the left side, as the individual panels aren't applications. But they are documents, so you can add them to the right side of the dock—just drag and drop from Finder.

You'll find the System-provided panels in /System/Library/PreferencePanes; third-party panels may appear in either your user's Library/PreferencePanes folder, or the top-level /Library/PreferencePanes folder. Find the one(s) you'd like in your Dock, then just drag and drop.

You can, of course, keep System Preferences itself in your Dock, and then right-click to see a list of all preference panels. For those panels you access often, though, this method is much quicker.



How to burn an ISO file to a USB stick

I wanted to install Linux on a hard drive in Frankenmac, as Clover is a multi-boot utility—it lets you choose from any OS it sees during power up. (I'll add Windows, too, eventually.) To do this, you need to get Linux onto a USB stick. I've done this in the past, and my vague recollection of the process was download the ISO, convert to an image file, write image file to USB stick. However, as it'd been a few years, I went searching for references to make sure I had all the commands correct.

I found a lot of pages with a general summary of the process, and few with the specific steps. I tried one of those, but my USB stick didn't work. The other specific pages contained the same basic process, so I was stuck. Until I found this page, which contained a critical step I was missing: Formatting the USB stick before copying the image file.

For future reference, here's the precise process to follow if you want to burn an ISO file onto a USB stick…

[continue reading…]



How to install ruby gems in Terminal

In yesterday's tip, See sensor stats in Terminal, I implied that installation of the iStats ruby gem was a simple one-line command. As a commenter pointed out, that's only true if you already have the prerequisites installed. The prerequisites in this case are the Xcode command line tools. Thankfully, you can install those without installing the full 5GB Xcode development environment.

(Rather than starting from scratch, I'm just going to borrow this bit from my detailed instructions for installing the transcode-video tools, because the Xcode command line tools are required there, too.)

Here's how to install the command line tools. Open Terminal, paste the following line, and press Return:

xcode-select --install

When you hit Return, you'll see a single line in response to your command:

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

At this point, macOS will pop up a dialog, which is somewhat surprising as you're working in the decidedly non-GUI Terminal:

Do not click Get Xcode, unless you want to wait while 5GB of data downloads and installs on your Mac. Instead, click the Install button, which will display an onscreen license agreement. Click Agree, then let the install finish—it'll only take a couple of minutes.

If you're curious as to what just happened, the installer created a folder structure in the top-level Library folder (/Library > Developer > CommandLineTools), and installed a slew of programs in the usr folder within the CommandLineTools folder.

[continue reading…]



See sensor stats in Terminal

Someone—perhaps it was Kirk—pointed me at this nifty Ruby gem to read and display your Mac's sensors in Terminal: iStats -- not to be confused with iStat Menus, a GUI tool that does similar things.

Installation is sinmple, via sudo gem install iStats. After a few minutes, iStats will be ready to use. In its simplest form, call istats by itself with no parameters. Normally I'd list the Terminal output here, but istats (by default, can be disabled) presents informatiomn with neat little inline bar graphs, so here's a screenshot:

This tool is especially useful on a laptop, as it provides an easy-to-read battery summary.

[continue reading…]



Easy Unix date formatting

I use the date function quite often in scripts, mainly to append date/time stamps to filenames. For example, something like this…

newtime=`date +%Y-%m-%d_%H%M`
cp somefile $newtime-some_other_file

That particular format is the one I use most often, with the full date followed by the hours and minutes in 24 hour format: 2017-04-12_2315, for example. I use this one so that filenames wind up sorted by date order in Finder views.

Once I move beyond that format, though, the vagaries of date string formatting leave me dazed. Enter strftime.net, where you can build any date string you like using a point-and-click editor with real-time previews:

It doesn't get much easier than that.