Useful built-in macOS command-line utilities

(weiyen.net)

Comments

daneel_w 6 November 2024
A couple more:

    afconvert(1) - an audio file format converter, which includes Apple's superior AAC codec from the Core Audio framework

    diskutil(8) - tons of tools for fixed and removable storage
Examples:

    afconvert in.wav -o out.m4a -q 127 -s 2 -b 160000 -f m4af -d 'aac '

    mb=300; diskutil eraseVolume APFS myramdisk `hdiutil attach -nomount ram://$((mb*2048))`
vbezhenar 6 November 2024
Few additions.

open -n file.pdf : opens new instance of Preview application which is useful if you want to open the same file twice (for example to look at different pages at once).

caffeinate -d : prevents display turning off, useful if you want to look at display without moving mouse.

antononcube 6 November 2024
I would like to also recommend the app:

   hear (macOS speech recognition and dictation via the command line)
See: https://sveinbjorn.org/hear

(Uses built-in macOS capabilities for transcription from audio to text.)

zitterbewegung 6 November 2024
The terminal version of Disk Utility is actually much better than the GUI (it doesn't hang and the app is glitchy.

Docs are at https://ss64.com/mac/diskutil.html

doodpants 6 November 2024
This article contains links to https://ss64.com/ , which is an amazing resource that I wish I'd known about sooner!
nxobject 6 November 2024
If you want the least useful macOS commandline utility, 'pdisk' is:

     "...a menu driven program which partitions disks using the standard
     Apple disk partitioning scheme described in "Inside Macintosh: Devices".
     It does not support the Intel/DOS partitioning scheme[.]"
terminaltrove 6 November 2024
Although not built in, we have a list of easy to install command-line utilities for macOS.

https://terminaltrove.com/categories/macos/

You might find one you've never heard of that is useful! :)

mcc1ane 6 November 2024
Related - https://news.ycombinator.com/item?id=36491704 "macOS command-line tools you might not know about"
zazaulola 6 November 2024
It's probably been written about a lot of places already.

For me, increasing the number of icons in the launcher grid was very useful.

After running these three commands, the size of the Launcher will be set to 13x8 apps:

    defaults write com.apple.dock springboard-columns -int 13
    defaults write com.apple.dock springboard-rows -int 8
    defaults write com.apple.dock ResetLaunchPad -bool TRUE; killall Dock
In general, a lot of parameters of different applications can be changed via command `defaults`

https://macos-defaults.com/

To get a complete list of parameters, you can execute

    defaults read
__m 6 November 2024
$ say Hello

To scare your teammates when you are logged in remotely optionally with

$ osascript -e "set volume output volume 100"

lagrange77 6 November 2024
Not a command, but a little known feature of the Terminal app:

(shift+command+K) or Menu 'Shell' -> 'New Remote Connection...'

opens a SSH, S(FTP), TELNET connection manager window!

runjake 6 November 2024
More:

  nc(1) - netcat, arbitrary TCP and UDP connections and listens

  networkQuality - Speed test + network stress tool.

  system_profiler(8) - Useful way to grab extensive system information in shell scripts.

  wdutil(8) - wdutil provides functionality of the Wireless Diagnostics application in
     command line form.
l33tman 6 November 2024
As they seem to have removed Bluetooth Explorer and all ways to get diagnostic info about the bluetooth system and/or change codecs and settings, does anybody know any good cmdline ways in later mac osxes to do the same?

For example I'm having a problem that comes and goes now and then where Bluetooth audio is 300 ms delayed compared to the video playback everywhere except in Youtube on Safari, very strange. It's good for a few months then suddenly it becomes unusable, then back to zero sync delay after a few months.

I was thinking this might be related to CODEC selections etc or some hidden setting that might get changed which we normally aren't allowed to determine :)

(btw I know there is a difference between latency and synchronization - latency might be unavoidable but video sync should always be able to compensate - I got curious on how exactly that works, where in the app / SDK / OS pipeline does the a/v sync happen on a Mac?)

cantSpellSober 6 November 2024
TinkerTool provides a GUI that runs some useful commands under the hood

https://www.bresink.com/osx/0TinkerTool/download.php

cglong 6 November 2024
One-liner for previewing a file with Quick Look. I aliased this to `ql` :)

    qlmanage -p $argv >/dev/null 2>&1
10729287 6 November 2024
It misses the most important of them all, if you are used to copy content to usb drive for reading on a multimedia player : dot_clean -m
zazaulola 6 November 2024
To find what causes your laptop drains its battery, you can use

    sudo powermetrics
pseufaux 6 November 2024
I'll add `plutil` to the list. It's great for reading plist files, but did you know it can parse json too?

/usr/bin/plutil -extract your.key.path raw -o - - <<< "$jsoninput"

(obviously, less useful now that `jq`is built in)

beeandapenguin 6 November 2024
Looks like the site's down.

https://archive.is/kGmn6

trynumber9 6 November 2024
sips https://ss64.com/mac/sips.html
huskyr 6 November 2024
I've never heard of networkQuality, that's seems like quite a useful tool.
tzs 6 November 2024
Here's a handy use I've found for mdfind.

Say you've got a directory that has scripts or data files related to some thing you do. For example I've got several scripts that I use when I scan books with my book scanner. I only need these when doing book scanning stuff so don't want to put them somewhere in $PATH. I want to be able to easily run them from scripts that aren't in that directory, but I don't want to hard code the path to that directory.

Solution: in the directory with the book scanning scripts I make a file named ID that contains a unique string. I currently use 16 byte random hex strings [1].

I have this script, named find-dir-by-ID, somewhere in $PATH:

  #!/bin/zsh
  ID=${1:?Must specific ID}
  IDSHA=`echo $ID | shasum | cut -d ' ' -f 1`
  mdfind $ID 2>/dev/null | grep /ID | while read F; do
      FSHA=`shasum $F | cut -d ' ' -f 1`
      if [ $IDSHA = $FSHA ]; then
          dirname $F
          exit 0
      fi
  done
  exit 1
If some script wants to use scripts from my book scanning script directory, it can do this:

  SCRIPT_DIR=`find-dir-by-ID 54f757919a5ede5961291bec27b15827`
  if [ ! -d $SCRIPT_DIR ]; then
    >&2 echo Cannot find book scanning scripts
    exit 1
  fi
and then SCRIPT_DIR has the full path to the scanning script directory.

The IDs do not have to be hex strings. If I'd thought about it more I probably would have made IDs look like this "book-scanning:54f757919a5ede59" or "arduino-tools:3b6b4f47bf803663".

[1] here's a script for that:

  #!/bin/sh
  N=${1:-8} # number of bytes
  xxd -g $N -c $N -p -l $N < /dev/urandom
Bengalilol 6 November 2024
There is also pmset which is very useful (since macOS doesn't give a UI counterpart) https://support.apple.com/en-am/guide/mac-help/mchl40376151/...
xpe 6 November 2024
My non-built-in CLI utility recommendations, none of which are macOS specific:

* atuin - TUI for shell history, backed by SQLite - https://github.com/atuinsh/atuin

* LSD (LSDeluxe) - rewrite of `ls` - https://github.com/lsd-rs/lsd

* ripgrep - https://github.com/BurntSushi/ripgrep

* fzf - command-line fuzzy finder that enhances file search, command history search, and more - https://github.com/junegunn/fzf

Notes:

- To get pretty extra file/folder symbols with LSD, you'll probably need to install some special fonts.

- You can use `fzf` and `ripgrep` together.

gkfasdfasdf 6 November 2024
pbcopy and pbpaste are handy, for a version that works over ssh connections there is osc: https://github.com/theimpostor/osc
jasoneckert 7 November 2024
And for those of us who have to support macOS users:

   sw_vers (to display the version/build of macOS),

   dsenableroot (to enable the root user), and

   say "phrase" (useful for freaking out users over a remote SSH connection)
urbandw311er 6 November 2024
Great tip about the `security` command, a new one for me.
BasilPH 6 November 2024
I got this trick from someone on the Internet:

$> long_running_command && say "Witness me, for I am done"

RandallBrown 6 November 2024
A fun easter egg in the "say" command is that "OS X" is said as "Oh Ess Ten".

You can also change voices with -v. My favorite is "cellos" since it sings to you.

chasil 6 November 2024
Since Apple spent so much effort in getting certified:

https://www.opengroup.org/openbrand/register/

These are all guaranteed to work:

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/

(I may not have linked to the precisely correct version.)

hk1337 6 November 2024
plutil. Maybe not that useful to a lot of people but I have been going through and collecting bookmarks and Safari bookmarks are binary files. plutil is a means of converting the binary property file to a json or xml file.

https://keith.github.io/xcode-man-pages/plutil.1.html

semanticist 6 November 2024
Want to scan the local wifi networks from the command line, and get useful information like signal strength?

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s

I set a shell alias so I can just do `airport -s`. I've no idea why this is hidden away inside some framework and not in a directory which is in the normal path, but there you go.

reaperducer 6 November 2024
mdls shows a file's metadata.

I use it most often for pulling lat lon data from photos.

onnimonni 6 November 2024
What I'm really missing still is a cli to iCloud stored passwords. AFAIK 'security' cli can't access the credentials stored in the cloud. This would be helpful to store secrets outside of git but would still allow scriptable access to them similarly as 1password cli 'op' has.
amai 7 November 2024
Time Machine utility, examine and manipulate Time Machine backups, restore data from backups, add or remove exclusions, and compare backups

https://ss64.com/mac/tmutil.html

llimllib 6 November 2024
I maintain a more comprehensive list here: https://notes.billmill.org/computer_usage/mac_os/mac_os_comm...

But I don’t have uuidgen!

Doctor_Fegg 6 November 2024
fs_usage is my favourite - find out what's thrashing the disk. (Usually Spotlight or Spark...)
noja 6 November 2024
Does anyone remember the shortcut that brings up a list of currently available keyboard shortcuts for the current app? It may not be built-in, in which case it was a free utility.
extraduder_ire 6 November 2024
Looks like a lot of these have linux equivalents that could be aliased. I wonder if anyone's made a set of those for regular macos users who occasionally use something else.
adolph 6 November 2024
> If you store your secrets in the Keychain (and you should!)

As part of the OS, Keychain suffers from the same sorts of sharp edges as using a built-in interpreter. An alternative is to use a password manager. Below is an example of the tools available in one.

https://developer.1password.com/docs/cli/get-started/#step-1...

cwales95 6 November 2024
I actual wrote a similar post a while back: https://www.chriswales.uk/blog/my-favourite-macos-terminal-c...

networksetup was one of my favourites as well as du and caffeinate.

The 'security' command is new to me so thanks!

dhosek 7 November 2024
I just remembered at a previous job where we were always paired and used team rather than individual iMacs for development that as a prank I ssh’d into the other iMac from my team and periodically would run open on a random URL which caused a Safari window to mysteriously pop up their system.
zikduruqe 6 November 2024

    locate 
https://ss64.com/mac/locate.html

locate searches a database for all pathnames which match the specified pattern. The database is recomputed periodically, (about once a week) and contains the path-names of all files which are publicly accessible.

wodenokoto 7 November 2024
pbcopy and pbpaste are among my top commandline utilities. If you are running linux in WSL, you can add the following to you path to recreate their functionality:

    # pbpaste
    #!/bin/bash
    # Adapted from https://www.techtronic.us/pbcopy-pbpaste-for-wsl/
    powershell.exe Get-Clipboard | sed 's/\r$//' | sed -z '$ s/\n$//'
    exit 0
and

    # pbcopy
    #!/bin/bash
    #Adapted from https://www.techtronic.us/pbcopy-pbpaste-for-wsl/
    <&0 clip.exe
    exit 0
BossingAround 6 November 2024
I'm sure everyone knows this, but `open` has an equivalent on Linux: `xdg-open`.
selectnull 6 November 2024
TIL: caffeinate

Very useful.

dozzman 6 November 2024
There is also 'say' which is great if you need to step away from a long running command, in a similar fashion to ringing the terminal bell but with more context.
westurner 6 November 2024
upgrade_mac.sh: https://github.com/westurner/dotfiles/blob/develop/scripts/u... :

  upgrade_macos() {
    softwareupdate --list
    softwareupdate --download
    softwareupdate --install --all --restart
  }
pantulis 6 November 2024
afconvert is pretty nifty for audio format conversion.
noname120 6 November 2024
jasomill 6 November 2024
cliclick[1] is useful for gap-filling the AppleScript accessibility APIs when automating poorly-behaved applications.

[1] https://github.com/BlueM/cliclick

wapxmas 7 November 2024
"what other operating systems might call the "clipboard""

might

WorldPeas 6 November 2024
shameless plug for my mac lsblk port https://github.com/JakeTrock/gosblk
JohnMakin 6 November 2024
pbcopy is my favorite. Almost enough to prefer a mac over my usual linux stations, but you can get that on linux easy enough.
jlv2 6 November 2024
"I like to look at the list of macOS Bash commands."

Sigh. These are shell commands, not "Bash commands".

M04R_PYL0N5 7 November 2024
stoked they baked in caffeine to macos, such a useful utility.
kid1412621 8 November 2024
How about launchctl