- ターミナルだけでスリープ、クリップボード、Finder、Spotlight、アップデートといった macOS 固有の機能 を扱えるため、GUI での反復作業を減らせる
caffeinate、pmset、taskpolicy は、スリープ防止や電源状態の確認、プロセス実行優先度の調整のように システム動作 に直接影響する
pbcopy、pbpaste、open、screencapture、say を使えば、クリップボード、ファイルを開く、スクリーンショット、音声出力といった 日常作業 をスクリプトに組み込みやすい
sips、textutil、mdfind、mdls は、画像・文書の変換や Spotlight ベースの検索、メタデータ確認を自動化する ファイル処理ツール として活用できる
networkQuality、networksetup、softwareupdate、system_profiler は、ネットワーク品質、Wi‑Fi/DNS、OS アップデート、ハードウェア・ソフトウェア情報をすばやく点検できる
macOS 専用コマンドの範囲
- macOS には標準 Unix ツールに加えて、OS の機能にアクセスする 専用コマンドラインツール が含まれている
- 各コマンドの詳しい使い方は
man <command> で確認できる
- 基準環境は macOS Sonoma
電源、スリープ、プロセス制御
-
caffeinate - Mac のスリープ防止
caffeinate をフラグや引数なしで実行すると、コマンドの実行中は Mac がスリープ状態に入らない
caffeinate -u -t <seconds> は、指定した秒数の間 スリープ防止 を適用する
-d フラグを追加するとディスプレイのスリープも防ぐ
-w <pid> で既存プロセスを指定すると、そのプロセスが終了したときに caffeinate も一緒に終了する
caffeinate <command> は、与えられたコマンドを新しいプロセスとして開始し、そのプロセスが終わるまでスリープを防止する
-
pmset - 電源管理状態の確認と制御
pmset -g は利用可能な 電源設定情報 を出力する
pmset -g assertions は、ほかのプロセスが作成した電源関連 assertion を表示し、Mac のスリープを妨げているプロセスを探すのに役立つ
pmset -g thermlog はスロットリングされたプロセス情報を表示し、ベンチマーク実行時の参考になる
pmset displaysleepnow はシステム全体をスリープさせず、ディスプレイだけを即座にスリープ状態へ切り替える
pmset sleepnow はシステム全体を即座にスリープ状態へ切り替える
-
taskpolicy - プロセススケジューリング制御
taskpolicy -b <command> は、与えられたコマンドを バックグラウンド で実行し、Apple silicon Mac では効率コアのみで実行される
taskpolicy -b -p <pid> は既存プロセスをバックグラウンド実行へ落とす
taskpolicy -B -p <pid> は指定したプロセスのバックグラウンド実行状態を解除する
- Apple silicon Mac では、その後は効率コアまたは性能コアで実行されうる
- この動作はバックグラウンドへ落とされたプロセスにのみ適用され、最初からバックグラウンドで開始したプロセスには適用されない
taskpolicy -s <command> は、与えられたコマンドを 一時停止状態 で開始し、実行開始時点でデバッガをアタッチできるようにする
クリップボード、アプリ起動、スクリーンショット、音声出力
-
pbcopy, pbpaste - システムクリップボードの利用
<command> | pbcopy はコマンド出力結果を クリップボード にコピーする
pbpaste はクリップボードの内容を標準出力へ出力する
-
open - ファイルとアプリケーションを開く
open -a <app> <file> は指定したファイルを特定のアプリケーションで開く
-g フラグを追加すると、現在のアプリケーションのフォーカスを維持したままファイルを バックグラウンド で開く
open . は現在のディレクトリを新しい Finder ウインドウで開く
open -R <file> は指定したファイルを新しい Finder ウインドウで表示する
-
screencapture - スクリーンショット撮影
screencapture -c はスクリーンショットを撮って クリップボード にコピーする
screencapture <file> はスクリーンショットを指定したファイルに保存する
-T <seconds> フラグを追加すると、指定した秒数だけ待ってから撮影する
-
say - テキスト読み上げ
say <message> は、与えられたメッセージを音声で出力する
say -f input.txt -o output.aiff は指定したテキストファイルから オーディオブック を生成する
画像、文書、検索とメタデータ
-
sips - 画像操作
sips -z <height> <width> <image> は既存の縦横比を無視して画像を指定サイズにリサイズする
sips -Z <size> <image> は縦横比を維持したまま最長辺を指定サイズに合わせる
sips -c <height> <width> <image> は元画像の中央を基準に指定サイズへ クロップ する
sips -r <degrees> <image> は画像を指定した角度だけ回転する
- 既定の動作では入力画像を 破壊的に上書き するため、別の出力パスが必要な場合は
-o フラグを使う
- 出力ファイルは入力画像と同じ拡張子である必要がある
-
textutil - 文書ファイル変換
textutil は Microsoft Word、プレーンテキスト、リッチテキスト、HTML フォーマットの間でファイルを変換できる
textutil -convert html journal.doc は journal.doc を journal.html に変換する
-convert に使用できる値は txt、html、rtf、rtfd、doc、docx
-
mdfind, mdls - Spotlight 検索とメタデータ
mdfind <query> は指定したクエリで Spotlight キーワード検索 を実行する
mdfind kMDItemAppStoreHasReceipt=1 は Mac App Store からインストールされたすべてのアプリを探す
mdfind -name <name> は指定した名前と一致するすべてのファイルを検索する
-onlyin <dir> フラグで検索範囲を特定のディレクトリに限定できる
mdls <file-path> は指定したファイルに関連付けられたすべての Spotlight メタデータを出力する
ネットワーク、アップデート、システム情報
-
networkQuality - インターネット速度測定
networkQuality は Mac で インターネット速度テスト を実行する
-v フラグを追加すると、より詳しい情報を見られる
-I フラグは特定のネットワークインターフェースでテストを実行する
-
networksetup - ネットワーク設定の確認と構成
networksetup -listnetworkserviceorder は利用可能なネットワークサービスの一覧を出力する
networksetup -getinfo <networkservice> は指定したネットワークサービスの情報を表示する
networksetup -getdnsservers <networkservice> は指定したネットワークサービスの DNS サーバーを出力する
networksetup -setairportnetwork <device> <network> [password] は指定した Wi‑Fi ネットワークに接続する
- 多くの場合、
<device> 引数は "en0"
-
softwareupdate - OS アップデート管理
softwareupdate --list は利用可能な ソフトウェアアップデート を出力する
sudo softwareupdate -ia は利用可能なすべてのアップデートをインストールする
softwareupdate --fetch-full-installer --full-installer-version <version> は、指定した macOS バージョンのフルインストーラを /Applications にダウンロードしようとする
-
system_profiler - システム情報の取得
system_profiler は既定で利用可能なすべてのシステム情報を出力し、出力量は概して多い
system_profiler <datatype> は指定したサブシステム情報だけを出力する
system_profiler -listDataTypes は、情報を取得できるすべてのサブシステム一覧を表示する
- 便利なデータタイプは次のとおり
system_profiler SPHardwareDataType: 現在の Mac のハードウェア概要、モデル名、シリアル番号を出力する
system_profiler SPSoftwareDataType: 現在の Mac のソフトウェア概要と正確な macOS バージョン番号を出力する
system_profiler SPPowerDataType: 現在の AC 電力値とバッテリーサイクル数を含む電源・バッテリー情報を出力する
system_profiler SPDeveloperToolsDataType: 現在有効な Xcode 開発ツールと SDK バージョンを出力する
5件のコメント
人生の役に立つMacBookのちょっと高度なターミナルコマンド集(一般向け)
https://www.youtube.com/watch?v=EhiqpFtmjig
macOSの高度なCLIコマンド
同じ記事を私が7か月前に要約して投稿したことがあるのですが、こちらの要約のほうがもっと読み応えがありますね.. うう
要約してくださった程度まで短くしても理解するのに無理がないので、むしろそのほうがいいですね(笑)
そうではありません……(笑)
Hacker Newsのコメント
sips と iconutil を組み合わせると、サードパーティーツールなしで 1024×1024 の PNG 1枚からアプリ用の
.icnsファイルを作成できるmkdir MyIcon.iconsetでアイコンセットを作り、sips -zで 16/32/128/256/512 サイズと@2xファイルを生成してから、iconutil -c icns MyIcon.iconsetを実行すればよいおまけに
ffmpeg -i MyIcon.iconset/icon_256x256.png icon.icoで.icoも作れるただ、
sipsが PNG を縮小する方式を考えると、16px 版を 1024px から直接作るのがよいのか、32px から段階的に縮小するのがよいのかは気になるcpの代わりにまず qlmanage を使って 1024×1024 の PNG を作れるqlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svgただ、macOS のシステムアイコンを見る限り、最近はもう手作業で調整していないようにも思える
この一覧の中では pbcopy と pbpaste が特に気に入っている
圧縮された JSON を扱うときは、iTerm に移って
pbpaste | json_pp | pbcopyを実行すると、整形済みの出力がクリップボードに入るのでとても便利だpbpaste | something | pbcopyというパターンをよく使うので、シェル関数にしておく価値があるpbfilter json_pp,pbfilter base64 -d,pbfilter sed 's/this/that/'のように使える引数なしで
pbfilterだけを実行すると、クリップボードの書式を取り除いてプレーンテキストだけを残すフィルターとしても動くただし、エイリアスやパイプライン、複雑な式には使えず、フィルターコマンドは通常のコマンドまたは関数とその引数である必要がある
たとえば、Windows 風のコピー&ペーストで生じる二重空行は
alias winlines="sed '/^$/{$!{N;s/\n//;};}'"とalias pbw="pbpaste | winlines | pbcopy"で整理できるLinux でも
alias pbcopy='xsel --clipboard --input',alias pbpaste='xsel --clipboard --output'とすれば macOS 風にまねできるX11 には
xclip[0]、Wayland にはwl-clipboard[1] があり、ヘッダー解析や明示的な MIME タイプ指定によってバイナリファイル形式もサポートしているそのため、ターミナルから画像をコピーしてブラウザーやチャットクライアントのような GUI プログラムに貼り付けたり、その逆を行ったりでき、デスクトップ自動化シェルスクリプトにも役立つ
macOS では
osascriptで AppleScript を呼び出し、set the clipboard to...を使うという回避策が必要になる[0] https://github.com/astrand/xclip
[1] https://github.com/bugaevc/wl-clipboard
スマートフォンでテキストをコピーすると、Mac のコマンドラインからすぐに
pbpasteで取り出せるpbpaste | vipe | pbcopyを使っているここで vipe はパイプの途中にエディター、たいていは vim を差し込むユーティリティで、https://joeyh.name/code/moreutils/ で見られる
コマンドラインツールではないが、Network Link Conditioner も本当に優れている
遅延、帯域幅、パケットロスなどを加えて非常に劣悪なネットワークをシミュレートできるので、テストに役立つ
カメラを必ずオンにしろと言われる会議でも、接続をわざとひどい状態にしてブロックノイズだらけの映像やロボットのような音声を見せたうえで、全員がビデオを切れと言い出したら「魔法のように」正常化させることもできる
https://developer.apple.com/download/all/
https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
プロファイルに応じてパケット遅延を注入したり、一定割合のパケットをドロップするルールを設定したりする
macOS では
dnctlやpfctlを使えば、同様のこと、さらにそれ以上のことも可能だオーディオ再生用の afplay もぜひ触れておくべき
これで簡単なコマンドライン MP3 プレーヤーを作れる
音声合成用の
sayユーティリティもあり、TUNE 形式をサポートしているので、発話全体のメロディーやタイミングを調整して、感情がこもっているように聞かせることができるApple の Speech Synthesis Programming Guide は https://josh8.com/blog/img/speech-synthesis.pdf にあり、関連する記事は https://josh8.com/blog/commandline-audio-mac.html にまとまっている
これをサポートした最後の世代の音声合成は 2007 年に含まれていた Alex 音声で、再び目にする可能性はかなり低そう
合成を精密に制御することと自然さは本質的に緊張関係にあり、後者のほうがはるかに価値が高い
say -v '?'です生産性を上げたいときや発表するときは、デスクトップのアイコンとフォルダをすべて隠している
defaults write com.apple.finder CreateDesktop 0のあとにkillall Finderを実行すると隠れ、値を1に戻せば再表示されるこれを切り替える bash エイリアスも作ってあり、gist は https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d... にある
それでも
~/Desktopはよく使うので、Dock に置いている 2 つのフォルダのうちの 1 つで、もう 1 つは~/Downloads一方で、macOS のデスクトップに Stacks が入ったのは素晴らしく、デスクトップがファイルで散らかっている人にはいつも見せている機能
発表時に役立ちそうなほかの設定とまとめておくとよい
良いリストだし、hidutil もある
https://developer.apple.com/library/archive/technotes/tn2450...
たとえば PC キーボードで、macOS ではほとんど役に立たない
InsキーをPC Executeのようなキーに変えてから、Keyboard Maestro で拾って再マッピングできるhidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}'で、欧州配列キーボードの左上にあるparagraphキーを、より便利な backtick に変えられるhttps://hidutil-generator.netlify.app/
たとえば
hdiutil detach /Volumes/some-usb-driveで USB ドライブを取り外したり、hdiutil makehybrid -joliet -o foo.iso ./srcfolder/で ISO を作れたりする数年前、大きなデータの塊から何かを探し、終わったら知らせてくれるスクリプトを作ったとき、最後に say コマンドを入れておいたことがある
それを忘れたまま寝てしまい、数時間後にホームオフィスから「侵入者」が共犯者に話しかけるような声で飛び起きて、何が起きたのか分かってからようやく心底ほっとした
pushという小さな bash スクリプトを作った./longRunningCommand && push "Task Done" "Here is a body"のように使えて便利で、PC の前にいるときは完了を知らせる音だけを鳴らすbeepスクリプトとも一緒に使っていたsayコマンドを実行させる Metasploit モジュールもある実際に使われているのは見たことがないけれど、いつか「顧客のノート PC で
sayを呼ぶ msf モジュールを使った」で始まる Twitter スレッドが出てくるのを期待してしまうなので、処理に 5 秒以上 かかったら
afplayでビープ音を鳴らす fish のコマンド完了スクリプトを追加した「ちょうど忘れるくらいの長さ」の作業で集中を戻すのに役立つ
macOS の diskutil コマンドラインユーティリティも称賛に値する
今日、ディスクのあるスライスに問題があったが、macOS のグラフィカルな Disk Utility では修復できず、以前 Asahi Linux を試したときの残骸だった
diskutilCLI で解決する方法があるはずだと思い、次のスレッドで解決策を見つけたhttps://apple.stackexchange.com/questions/411544/cant-reclai...
これでディスク全体を再び macOS で使えるようになった
diskutilは素晴らしいが、Disk Utility.app がこんな状態になってしまったのは痛ましいAPFS への移行以降きちんと手入れされておらず、
diskutilならできる作業を GUI アプリでは完全に失敗することがあるインターフェースの再設計前は、失敗してもその理由を教えてくれる堅実なツールだったのに、今ではフラッシュドライブのフォーマットくらいしかろくにできない、子ども向けの LEGO Duplo みたいなインターフェースになってしまった
コマンドや引数を思い出せないときは、umも見てみる価値がある
https://github.com/promptops/cli
たとえば
um prevent my mac from sleeping for 30mと入力すると、caffeinate -u -t 1800のような結果を返してくれるopen はいつも使う、シンプルで優れたコマンド
alias tab='open . -a iterm',alias phpstorm='open -a "PhpStorm"',alias smerge='open -a "Sublime Merge"'のように作っておくと、各アプリの Open/Recents ダイアログよりも頻繁に使うopen -a ...のタブ補完は、Apple が補完定義を更新していないせいで、ここ数年ずっとひどいままこの Stack Overflow の回答に回避策を書いておいた: https://stackoverflow.com/a/63097652
-nもある同じアプリケーションを 複数インスタンス で実行できるようにしてくれて、以前は個人的に最もよく使っていたユーティリティだった
最近はそれほど深刻な設計上の問題を抱えたアプリが減ったので、使う頻度も下がった
/Applications/Sublime Merge.app/Contents/SharedSupport/bin/smergeと/Applications/Sublime Text.app/Contents/SharedSupport/bin/sublが使えるhttps://github.com/davatorium/rofi
見た目は https://i.imgur.com/Hm9TGeV.jpg のような感じ
VS Code のターミナルでは、エイリアス
oを使えば現在位置から開けて、そこからファイルを探してエディタで開けるalias finder='open .'を使えばよい