コマンドから引き出すGUIの機能
OSXが素晴らしいGUI環境を提供してくれるのだから、わざわざコマンド操作を覚えるまでもないと考えていた。ところが、OSXのGUI環境を素早く・便利に使いこなすためには、キー操作を組み合わせたショートカットが必須*1である。そして、ショートカットとは何かを考えれば、キー入力以外の何者でもなく、突き詰めればコマンド入力と大差ないことに気付く。
- Finderからcommand-Nで新規ウィンドウをを開くのも、ターミナルでlsと入力するのも、キー入力のタッチ数は同じである。
- Quicksilverなんて、高度な入力補完機能付きのターミナルのようなものかもしれない。
つまり、GUIはコマンド入力と組み合わせることで、最大の効率化を図れるのである。
ところで、OSXのGUI操作にはそれに対応するコマンドが用意されていることが多い。(どちかというと、コマンドが先でそれにGUIを着せた結果なのかもしれないが)GUIからは辿り着けない機能にアクセスできたり、長ったらしいAppleScriptがワンライナー(1行コマンド)で表現できたりと、知っているとメリットも多々ある。特に、AppleScriptと組み合わせてドロップレットにしたり、ショートカットを割り当てると、さらに手軽に使える可能性もある。状況に応じて、良きに計らうMacBookになるかもしれない。そんなコマンドを探し求めてみた。
スクリーンセーバー
# スクリーンセーバーを起動する $ /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine # スクリーンセーバーをデスクトップピクチャのレイヤーで起動する $ /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background # スクリーンセーバーをデスクトップピクチャのレイヤーで起動する(スクリーンセーバー名を拡張子なしで指定) $ /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background -module "RSS Visualizer" # あるいは... $ /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background -module RSS\ Visualizer
- GUIなシステム環境設定では出来ない、デスクトップピクチャのレイヤーに表示されるのが面白い!
- 記憶は曖昧だが、確かOSX 10.3の頃は、デスクトップのトップレベルに半透明レイヤーのように常時表示しながら、操作することも出来た気がする。
- 設定方法は忘れてしまった...。(OSX 10.6でも設定できるのだろうか?)
- でも、当時のPowerBookにとっては非常に重い処理で、とても実用的ではなかったが...。(派手なデモには良さそう。)
- 今の高性能GPUを有効活用できるマシンなら、常用できるのかもしれない。(Quartz Extreme)
Spotlight
# Spotlight検索 $ mdfind "検索語句" # ファイル名検索 $ mdfind -name "ファイル名の一部" # 書類フォルダに限定して、Spotlight検索 $ mdfind -onlyin ~/Documents "検索語句"
Spotlightは全てのファイルを検索している訳ではない。不可視ファイルやシステムファイル・root権限のファイルについては、デフォルトで除外されている。そのようなファイルを検索したい衝動に駆られた時は...
# 'bash_'を含むファイル名を検索 $ mdfind_all 'bash_' # 'swapfile'を含むファイル名を検索(仮想記憶で利用されるスワップファイル、root権限が必要) $ sudo mdfind_all 'swapfile'
- ちなみに、mdfind_allでのオプション指定(-name、-onlyinなど)も、ちゃんと反映されるように作り直さなくちゃいけない、と思った。
クイックルック
- 指定したファイルをQuick Lookで表示する。
$ qlmanage -p '/Library/Desktop Pictures/Nature/Dew Drop.jpg' $ qlmanage -p /Library/Desktop\ Pictures/Nature/Dew\ Drop.jpg
ネットワーク環境の切替
# ネットワーク環境の一覧、先頭に*が現在の設定 $ scselect Defined sets include: (* == current set) C2C4C07C-144B-419A-92BB-44760EFADBB2 (外) 3E0B1637-24BC-421D-A6CC-98990FA4DF2D (AirMac_off) * DE77591A-C72E-418C-8FC4-888A5B8429DE (AirMac_on) EAC29E89-E5AF-4E99-9E00-40A62EC653A4 (Automatic) 55310AE1-45AD-4E0F-807C-1C8A26414DDC (test) # ネットワーク環境を「自動」に切り換える $ scselect Automatic CurrentSet updated to EAC29E89-E5AF-4E99 -9E00-40A62EC653A4 (Automatic) # ネットワーク環境を「AirMac_on」に切り換える $ scselect AirMac_on CurrentSet updated to DE77591A-C72E-418C-8FC4-888A5B8429DE (AirMac_on)
- AirMac_onとAirMac_offという環境を作って交互に切り換えれば、AirMacの切・入をコマンドで実行できる。(スリープ復帰後、うまく接続できない時に活用した)
- WiFiから位置情報を取得する機能、あるいは接続ポイントの名前を取得して、ネットワーク環境を自動で切り換えることもできるかも。(まだ試したことない)
- 自宅・会社でファイル共有等を利用しているマシンが、うっかりすると、外出先でもファイル共有等が「入」になっているのはセキュリティ上好ましくないので。
コピー&ペースト
# lsの出力結果をクリップボードに転送する(その後、command-Vで好きなところにペーストできるのだ) $ ls | pbcopy # クリップボードの内容をファイルsample.txtとして保存する $ pbpaste > sample.txt
スクリーンキャプチャ
# command-shift-3と同等 $ screencapture "スクリーンショット.png" # command-shift-4と同等 $ screencapture -i "スクリーンショット.png" # command-shift-4と同等、但しpdf形式、ファイル名"スクリーンショット.pdf"として保存する $ screencapture -i -tpdf "スクリーンショット.pdf" # クリップボードに保存する、10秒後に撮影する $ screencapture -c -T10 # クリップボードに保存する、シャッター音なし $ screencapture -cx # クリップボードに保存する、ウィンドウの影なし $ screencapture -cwo
画像変換
- 基本的にプレビュー.appやAutomator.appのGUI環境で十分なのだけど、画像を回転させたくなったら便利かも。
- 360度、1度単位で、好みの角度を指定できた。
- また、プレビュー.appやAutomator.appの機能はすべてsipsコマンドから実行できそうなので、コードの中で画像変換したい時はとっても便利。
# sample.pngの情報を表示する $ sips -g all sample.png # sample.pngを時計回りに5度回転させる、上書き保存する $ sips -r 5 sample.png # sample.pngを反時計回りに5度回転させる、sample_rotate_left_5.pngとして別名で保存する # (-r -5 だと、-5が1文字オプションと解釈されて、-r に続くパラメータエラーになってしまう) $ sips -r -05 sample.png --out sample_rotate_left_5.png # デスクトップのtest_sipsフォルダのjpg画像すべてをpng画像に変換する、拡張子をpngに変更して別名で保存する $ sips -s format png ~/Desktop/test_sips/*.JPG --out ~/Desktop/test_sips
参考ページ(感謝です!)
しゃべる
- OSX標準でも英語は流暢にしゃべる
# 英語の達人 $ say "Hello world." # 日本語はダメ $ say "にほんごをはなそう。" (無言、ノーコメント...) # 英語なまりの日本語なら、どうにかしゃべる $ say "nihongo wo hanasou."
- saykanaコマンドをインストールすれば、日本語も話す。
# 棒読み $ saykana "にほんごをはなそう。" # アクセント記号を利用すれば、自然な日本語に $ saykana "に'ほんごをはなそ'う。" # ただし、仮名のみ。漢字は無理。 $ saykana "日本語を話そう。" ERR:(105) invalid kana string. 日本語を話そう。
- 独自拡張saykanjiコマンドを追加すれば、漢字・仮名・英単語まじりの文章も朗読する
$ saykanji "日本語を話そう。"
ソフトウェアアップデート
# ソフトウェアアップデートの確認 $ softwareupdate -l Software Update Tool Copyright 2002-2009 Apple Software Update found the following new or updated software: * RemoteDesktopClient-3.3.2 Remote Desktop Client Update (3.3.2), 5930K [recommended] * BonjourUpdate2010-001-1.0 Bonjour Update 2010-001 (1.0), 936K [recommended] * SecUpd2010-001Snow-1.0 Security Update 2010-001 (1.0), 21884K [recommended] [restart] # root権限で、推奨されるアップデート[recommended]をすべてインストール $ sudo softwareupdate -ir Software Update Tool Copyright 2002-2009 Apple Installing Waiting for other installations to complete… Validating packages…2010-01-26 10:13:41.784 softwareupdate[23909:7007] using receipt prefix of Writing files… Running package scripts… Optimizing system for installed software… Moving items into place… Running package scripts… Registering updated applications… Writing package receipts… Installed Remote Desktop Client Update Installed Bonjour Update 2010-001 Installed Security Update 2010-001 Done. You have installed one or more updates that requires that you restart your computer. Please restart immediately. # root権限で、表示されたアップデートをすべてインストール $ sudo softwareupdate -ia # root権限で、RemoteDesktopClient-3.3.2、BonjourUpdate2010-001-1.0の2項目のみインストール $ sudo softwareupdate -i RemoteDesktopClient-3.3.2 BonjourUpdate2010-001-1.0
AppleScript
- ターミナルやシェルスクリプトからAppleScriptを実行することができる。
# AppleScriptのファイルを実行する $ osascript ~/Library/Scripts/sample.scpt # AppleScriptのテキストを実行する(改行含めて5行目まで一連のコマンド) $ osascript -e ' tell application "Finder" activate display dialog "Hello!" end'
参考ページ(感謝です!)
開く
- Finderでダブルクリックするのと同等に開く。
# カレントディレクトリをfinderウィンドウで開く $ open . # sample.movをデフォルトアプリケーション(自分の環境ではQuickTime)で開く $ open sample.mov # sample.movをVLC.appで開く $ open -a VLC sample.mov # エイリアスコマンドcotを設定(CotEditor.appで開く) $ alias cot='open -a CotEditor' # sample.txtをCotEditor.appで開く $ cot sample.txt
このMacについて
- OSのバージョンとビルド番号が、テキストで取得できる。
$ sw_vers ProductName: Mac OS X ProductVersion: 10.6.2 BuildVersion: 10C540
システムプロフィラ
- システムプロフィラのすべての項目が、テキストで取得できる。
$ system_profiler Hardware: Hardware Overview: Model Name: MacBook Model Identifier: MacBook4,1 Processor Name: Intel Core 2 Duo Processor Speed: 2.1 GHz Number Of Processors: 1 Total Number Of Cores: 2 L2 Cache: 3 MB Memory: 4 GB Bus Speed: 800 MHz Boot ROM Version: MB41.00C1.B00 SMC Version (system): 1.31f0 ...(以下省略、すべての項目なのでかなりの行数、1000行以上ある)... # 欲しい項目だけ抽出する $ system_profiler | grep '^ *Memory:' Memory: 4 GB
メモリ
- メモリの状態をテキストで取得できる。
$ vm_stat Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 43834. Pages active: 573635. Pages inactive: 203730. Pages speculative: 63533. Pages wired down: 164092. "Translation faults": 88429820. Pages copy-on-write: 3487742. Pages zero filled: 45290802. Pages reactivated: 142216. Pageins: 295541. Pageouts: 42228. Object cache: 34 hits of 9789189 lookups (0% hit rate)
パッケージの中身を確認
- パッケージの中身を表示して、Archive.bomに対してlsbomを実行する。
# /Library/Receipts/RemoteDesktopClient.pkgがインストールするファイルを確認する $ lsbom /Library/Receipts/RemoteDesktopClient.pkg/Contents/Archive.bom . 41775 0/80 ./System 40755 0/0 ./System/Library 40755 0/0 ./System/Library/CoreServices 40755 0/0 ./System/Library/CoreServices/Menu Extras 40755 0/0 ./System/Library/CoreServices/Menu Extras/RemoteDesktop.menu-Leopard 40755 0/0 ./System/Library/CoreServices/Menu Extras/RemoteDesktop.menu-Leopard/Contents 40755 0/0 ...(以下省略)...
省エネルギー設定
# 現在のパワーマネジメントの設定を表示する $ pmset -g Active Profiles: Battery Power -1 AC Power -1* Currently in use: womp 1 lidwake 1 halfdim 1 sms 1 hibernatefile /var/vm/sleepimage disksleep 10 sleep 10 hibernatemode 0 ttyskeepawake 1 displaysleep 0 (imposed by 4397) acwake 0 autorestart 0 # モニタを開いてもスリープを解除しない設定 $ sudo pmset -a lidwake 0 # スリープで運用する(メモリの内容を省電力モードで維持する) $ sudo pmset -a hibernatemode 0 # ハイパネーションで運用する(メモリの内容をHDに保存して、電源を切る) $ sudo pmset -a hibernatemode 1 # セーフスリープで運用する(メモリの内容を省電力モードで維持しながら、HDにも保存する) $ sudo pmset -a hibernatemode 3
- ハイパネーション、あるいはセーフスリープで運用すると、HDに保存されるまで、毎回30秒以上処理が続く。(スリープなら数秒で完了)
- ハイパネーションは普段目にしない動作なので、その動きを知らないと不安になるかもしれない。以下のように動作した。
- ハイパネーションすると、メモリの内容をHDに保存して電源はOFFになる。
- 再び電源をONにすると、以前の作業状態に復帰する。
- 復帰するまでに30秒以上かかる。その間、以前のデスクトップの状態が白黒で表示され、プログレスバーが進行具合を表示している。
参考ページ(感謝です!)
Growl
- コマンドからGrowlメッセージを表示するgrowlnotifyコマンドが便利。(Growl.dmgのExtrasフォルダにあり)
# 基本 $ growlnotify "タイトル" -m "メッセージ" # インアクティブメモリの開放(ものかのさん、感謝!) $ du -sx / &> /dev/null & sleep 10 && kill $! ; growlnotify -m "終わったよ。"
- 時間のかかる処理の終了を告げたり、オートテストのメッセージにしたり、そんな時に活躍している。
launchd
- Lingon.appを使ってlaunchdのplistを修正した場合、設定を反映させるためには再ログインが必要と表示される。それが面倒だった。
- launchctlコマンドで一旦unloadして、その後再loadすることで、変更した設定が迅速に反映されるようになった。
# ジョブのアンロード $ launchctl unload ~/Library/LaunchAgents/com.bebekoubou.kernel.log.plist # ジョブのロード $ launchctl load ~/Library/LaunchAgents/com.bebekoubou.kernel.log.plist # ロードされたジョブの一覧 $ launchctl list
以前の日記
参考ページ(感謝です!)
コマンドの詳細
以上は、自分が気になった限定的な使い方だけ取り上げてみたが、そのコマンドにはさらなる可能性が秘められているはず。その詳細は、ヘルプ、マニュアル表示、あるいはWEB検索すると、さらなる発見があるかもしれない!
$ コマンド名 -h $ コマンド名 --help $ man コマンド名
音を鳴らす、音楽再生
- 好みの警告音を鳴らすとか、
- 普通に、音楽再生も出来る。
- AppleScript等で、ちょっと音を活用したい時に便利!
$ afplay /System/Library/Sounds/Submarine.aiff $ afplay /Users/bebe/Music/iTunes/iTunes\ Music/Ben\ E\ King/Romance\ Sundays/11\ Stand\ By\ Me.mp3
画面共有
- いざ、遠隔操作しようと思った時、システム環境設定 >> 共有 の画面共有が「切」になっていたりすると、非常にがっかりする。
- しかし、諦めるのはまだ早い。
- もし、システム環境設定 >> 共有 のリモートログインが「入」であれば、コマンド操作によって画面共有を「入」にできるのだ!
# OSX 10.5(上段:入 / 下段:切) $ sudo touch /Library/Preferences/com.apple.ScreenSharing.launchd $ sudo rm /Library/Preferences/com.apple.ScreenSharing.launchd # OSX 10.6(上段:入 / 下段:切) $ sudo touch /private/etc/ScreenSharing.launchd $ sudo rm /private/etc/ScreenSharing.launchd
- 接続先のマシン情報
# 管理者ユーザ名 $ whoami zari # コンピュータ名 $ hostname MacBook.local
- リモートログインして、
- 画面共有を有効にして、
- 画面共有を無効にして、
- ログアウトしてみた。
$ ssh zari@macbook.local Password: Last login: Wed May 19 03:48:18 2010 MacBook:~ zari$ sudo touch /private/etc/ScreenSharing.launchd Password: MacBook:~ zari$ sudo rm /private/etc/ScreenSharing.launchd MacBook:~ zari$ exit logout Connection to macbook.local closed.
- 大文字・小文字は区別されないようなので、MacBook.local = macbook.local
- MacBook.localの部分は、IPアドレス指定でもOK。(例:ssh zari@10.0.1.2)
詳細は以下の日記で...