Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Eight Terminal Utilities Every OS X Command Line User Should Know
- =================================================================
- May 14, 2014 o Mitchell Cohen
- The OS X Terminal opens up a world of powerful UNIX utilities and
- scripts. If you're migrating from Linux, you'll find many familiar
- commands work the way you expect. But power users often aren't aware
- that OS X comes with a number of its own text-based utilities not found
- on any other operating system. Learning about these Mac-only programs
- can make you more productive on the command line and help you bridge
- the gap between UNIX and your Mac.
- Update: Thanks to reader feedback, I've written about a few more
- commands in a follow-up post: [7](And eight hundred more).
- 1. open
- open opens files, directories and applications. Exciting, right? But it
- really does come in handy as a command-line double-click. For instance,
- typing:
- $ open /Applications/Safari.app/
- ...will launch Safari as if you had double-clicked its icon in the
- Finder.^[8]1
- If you point open at a file instead, it will try to load the file with
- its associated GUI application. open screenshot.png on an image will
- open that image in Preview. You can set the -a flag to choose the app
- yourself, or -e to open the file for editing in TextEdit.
- Running open on a directory will take you straight to that directory in
- a Finder window. This is especially useful for bringing up the current
- directory by typing open .
- Remember that the integration between Finder and Terminal goes both
- ways - if you drag a file from Finder into a Terminal window, its full
- path gets pasted into the command line.
- 2. pbcopy and pbpaste
- These two commands let you copy and paste text from the command line.
- Of course, you could also just use your mouse--but the real power of
- pbcopy and pbpaste comes from the fact that they're UNIX commands, and
- that means they benefit from piping, redirection, and the ability to be
- in scripts in conjunction with other commands. Typing:
- $ ls ~ | pbcopy
- ...will copy a list of files in your home directory to the OS X
- clipboard. You can easily capture the contents of a file:
- $ pbcopy < blogpost.txt
- ..or do something crazier. This hacked-up script will grab the link of
- the latest Google doodle and copy it to your clipboard.
- $ curl http://www.google.com/doodles#oodles/archive | grep -A5 'latest-doodle on
- ' | grep 'img src' | sed s/.*'<img src="\/\/'/''/ | sed s/'" alt=".*'/''/ | pbco
- py
- Using pbcopy with pipes is a great way to capture the output of a
- command without having to scroll up and carefully select it. This makes
- it easy to share diagnostic information. pbcopy and pbpaste can also be
- used to automate or speed up certain kinds of tasks. For instance, if
- you want to save email subject lines to a task list, you could copy the
- subjects from Mail.app and run:
- $ pbpaste >> tasklist.txt
- 3. mdfind
- Many a Linux power user has tried to use locate to search for files on
- a Mac and then quickly discovered that it didn't work. There's always
- the venerable UNIX find command, but OS X comes with its own killer
- search tool: Spotlight. So why not tap into its power from the command
- line?
- That's exactly what mdfind does. Anything Spotlight can find, mdfind
- can find too. That includes the ability to search inside files and
- metadata.
- mdfind comes with a few conveniences that make it stand out from its
- big blue brother. For instance, the -onlyin flag can restrict the
- search to a single directory:
- $ mdfind -onlyin ~/Documents essay
- The mdfind database should stay up to date in the background, but you
- can also troubleshoot it (as well as Spotlight) using mdutil. If
- Spotlight isn't working the way it should, mdutil -E will erase the
- index and rebuild it from scratch. You can also turn off indexing
- entirely with mdutil -i off.
- 4. screencapture
- screencapture lets you take many different kinds of screenshots. It's
- similar to Grab.app and the keyboard shortcuts cmd + shift + 3 and cmd
- + shift + 4, except it's far more flexible. Here are just a few
- different ways you can use screencapture:
- Capture the contents of the screen, including the cursor, and attach
- the resulting image (named `image.png') to a new Mail message:
- $ screencapture -C -M image.png
- Select a window using your mouse, then capture its contents without the
- window's drop shadow and copy the image to the clipboard:
- $ screencapture -c -W
- Capture the screen after a delay of 10 seconds and then open the new
- image in Preview:
- $ screencapture -T 10 -P image.png
- Select a portion of the screen with your mouse, capture its contents,
- and save the image as a pdf:
- $ screencapture -s -t pdf image.pdf
- To see more options, type screencapture --help
- 5. launchctl
- launchctl lets you interact with the OS X init script system, launchd.
- With launch daemons and launch agents, you can control the services
- that start up when you boot your computer. You can even set up scripts
- to run periodically or at timed intervals in the background, similar to
- cron jobs on Linux.
- For example, if you'd like to have the Apache web server start
- automatically when you turn on your Mac, simply type:
- $ sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
- Running launchctl list will show you what launch scripts are currently
- loaded. sudo launchctl unload [path/to/script] will stop and unload
- running scripts, and adding the -w flag will remove those scripts
- permanently from your boot sequence. I like to run this one on all the
- auto-update "helpers" created by Adobe apps and Microsoft Office.
- Launchd scripts are stored in the folllowing locations:
- ~/Library/LaunchAgents
- /Library/LaunchAgents
- /Library/LaunchDaemons
- /System/Library/LaunchAgents
- /System/Library/LaunchDaemons
- To see what goes into a launch agent or daemon, there's a great blog
- post by [9]Paul Annesley that walks you through the file format. And if
- you'd like to learn how to write your own launchd scripts, Apple
- provides some helpful documentation on their [10]Developer site.
- There's also the fantastic [11]Lingon app if you'd prefer to avoid the
- command line entirely.
- 6. say
- This is a fun one: say converts text to speech, using the same TTS
- engine OS X uses for [12]VoiceOver. Without any options, say will
- simply speak whatever text you give it out loud.:^[13]2
- $ say "Never trust a computer you can't lift."
- You can also use say to speak the contents of a text file with the -f
- flag, and you can store the resulting audio clip with the -o flag:
- $ say -f mynovel.txt -o myaudiobook.aiff
- The say command can be useful in place of console logging or alert
- sounds in scripts. For instance, you can set up an Automator or
- [14]Hazel script to do batch file processing and then announce the
- task's completion with say.
- But the most enjoyable use for say is rather more sinister: if you have
- ssh access to a friend or coworker's Mac, you can silently log into
- their machine and haunt them through the command line. Give `em a
- Siri-ous surprise.
- You can set the voice (and language!) used by say by changing the
- default setting in the Dictation & Speech panel in System Preferences.
- 7. diskutil
- diskutil is a command line interface to the Disk Utility app that comes
- with OS X. It can do everything its graphical cousin can, but it also
- has some extra capabilities--such as filling a disk with zeroes or
- random data. Simply type diskutil list to see the path names of disks
- and removable media attached to your machine, and then point the
- command at the volume you want to operate on. Be careful: diskutil can
- permanently destroy data if it's used incorrectly.
- 8. brew
- Alright-this isn't technically a native command. But no OS X power user
- should be without [15]Homebrew. The website calls it "The missing
- package manager for OS X," and that couldn't be truer. If you've ever
- used apt-get in Linux, you will feel right at home in Homebrew.^[16]3
- brew gives you easy access to thousands of free utilities and libraries
- from the open source community. For instance, brew install imagemagick
- will set you up with [17]ImageMagick, a powerful utility that makes it
- possible to do anything from whipping up animated gifs to converting
- images between dozens of different types. brew install node will
- introduce you to [18]NodeJS, the hot new tool for developing and
- running server-side JavaScript apps.
- You can have fun with Homebrew too: brew install archey will get you
- Archey, a cool little script for displaying your Mac's specs next to a
- colourful Apple logo. The selection in Homebrew is huge--and because
- it's so easy to create [19]formulas, new packages are being added all
- the time.
- [archey.png] Archey--My command line brings all the boys to the yard.
- But the best part about Homebrew? It keeps all its files in a single
- directory: /usr/local/. That means you can install newer versions of
- system software, such as python and mysql, without interfering with the
- built-in equivalents. And if you ever want to get rid of your Homebrew
- installation, it's easy to remove.
- Edit--May 15: Someone suggested to me that that you should not blindly
- delete the contents of /usr/local/. That's a fair precaution. To remove
- Homebrew safely, use the [20]uninstall script.
- For more fun with Terminal.app, here is an A-Z list of [21]all
- available console commands in OS X 10.9 Mavericks.
- 1. Recall that OS X apps are not true executables, but actually
- special directories (bundles) with the extension .app. open is the
- only way to launch these programs from the command line. It can
- also launch other "files" that are truly bundles, such as Pages
- documents. [22]↩
- 2. https://www.youtube.com/watch?v=G0FtgZNOD44 [23]↩
- 3. In truth, Homebrew is more similar to FreeBSD's Ports system than
- Linux's apt. It uses a hybrid source/binary system: if no binary is
- available for a particular package it will simply download the
- source tarball and compile it--not a problem on today's multicore
- Macs. [24]↩
- [25] [PERMALINK]
- [26]´ Coding for Journalists, Part 2: HTML -- Workflows, Nesting and
- Paragraphs
- [27](And eight hundred more) ª
- References
- 1. http://mitchchn.me/feed.xml
- 2. http://www.mitchchn.me/
- 3. http://www.mitchchn.me/2014/os-x-terminal/
- 4. https://twitter.com/share?text=Eight%20Terminal%20Utilities%20Every%20OS%20X%20Command%20Line%20User%20Should%20Know%20via%20@mitchchn&url=http://mitchchn.me/2014/os-x-terminal/
- 5. http://www.mitchchn.me/feed.xml
- 6. http://www.mitchchn.me/archive
- 7. http://www.mitchchn.me/2014/and-eight-hundred-more/
- 8. http://www.mitchchn.me/2014/os-x-terminal/#fn:bundles
- 9. http://paul.annesley.cc/2012/09/mac-os-x-launchd-is-cool/
- 10. https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html
- 11. http://www.peterborgapps.com/lingon/
- 12. http://www.apple.com/accessibility/osx/voiceover/
- 13. http://www.mitchchn.me/2014/os-x-terminal/#fn:mac
- 14. http://www.noodlesoft.com/hazel.php
- 15. http://brew.sh/
- 16. http://www.mitchchn.me/2014/os-x-terminal/#fn:compiling
- 17. http://www.imagemagick.org/
- 18. http://nodejs.org/
- 19. https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook
- 20. https://gist.github.com/mxcl/1173223
- 21. http://ss64.com/osx/
- 22. http://www.mitchchn.me/2014/os-x-terminal/#fnref:bundles
- 23. http://www.mitchchn.me/2014/os-x-terminal/#fnref:mac
- 24. http://www.mitchchn.me/2014/os-x-terminal/#fnref:compiling
- 25. http://www.mitchchn.me/2014/os-x-terminal/
- 26. http://www.mitchchn.me/2014/coding-for-journalists-p2/
- 27. http://www.mitchchn.me/2014/and-eight-hundred-more/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement