「Mac」カテゴリーアーカイブ

Mac OS XのtopはCPU順でない

Mac OS XのtopはデフォルトがCPU順でない。pidの降順となっている。
ソートを変更するには、

$ top -o cpu

または

$ top -o -cpu

で起動するか、top起動後に、o と入力後、cpu(または-cpu) と入力してReturnキーを押す。

+を付けると昇順になる。

その他のソート可能項目については、man top を参照。

cachegrind.out.xxxxxx が /private/var/tmp に大量に作成されてディスク容量を圧迫

Max OS X (Yosemite) で最近ディスクの空き容量がやたら少なくなっているので、調べてみた。

$ sudo du -sh /*

$ sudo du -sh /private/*

$ sudo du -sh /private/var/*

と調べて行くと、/private/var/tmp が200GBくらいある。
/private/var/tmp を見てみると、cachegrind.out.50526 のようなファイルが大量にあった。
これはXdebugのプロファイラーが出力するファイルらしい。(MacPortsのxdebugを使用している。)
Xdebugはエラー時にスタックトレースを表示したり、(Eclipseが必要だが)ステップ実行でデバッグできたりと便利なのだ。

で、この cachegrind.out.xxxxxx を rm で削除しようとしたら、

$ sudo rm cachegrind.out.*
-bash: sudo: Argument list too long

となって削除できない。
ファイルが多すぎるため、シェルが * を展開すると Argument list too long になってしまうのだ。

find -exec で削除した。

$ cd /private/var/tmp
$ sudo find . -name 'cachegrind.out.*' -maxdepth 1 -exec rm {} \;

200GBくらい空いた。

find -exec については、以前書いた以下の記事を参照してください。
findで検索した結果を削除したりgrepする方法

このままではまたどんどん cachegrind.out.xxxx がたまってくるので、xdebugの設定を変更して、プロファイラーが/private/var/tmp でなく、/tmp に出力するようにした。
(ついでにトレースファイル出力先も /tmp にしておいた。)
こうしておけば、再起動時に削除されるだろう。

/opt/local/etc/php53/php.ini
xdebug.profiler_output_dir と xdebug.trace_output_dir を追加。

[xdebug]
xdebug.profiler_enable=On
xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.idekey=ECLIPSE_DBGP
xdebug.profiler_output_dir=/tmp/ ; プロファイラーのファイル出力先
xdebug.trace_output_dir=/tmp/ ; トレースファイル出力先

Xdebug: Documentation.

iTerm2でoptionキーをmetaキーにする

iTerm2でEmacsを使う時、optionキーをmetaキーとして使用したい。

Preference > Profile > Keys の下の方にある、
Left option key acts as:
Right option key acts as:
で、+Esc を選択すると、optionキーをmetaキーとして使用できる。

ちなみに、Mac OS Xの標準のターミナルの場合は、環境設定 > プロファイル で選択したプロファイルの、「キーボード」タブで、「メタキーとして Option キーを使用」にチェックを入れればよい。

MovableType Perlのパスを一括変換

find -exec で sedで置き換えをすればいいのだが、sedの実装によって -i オプションの動作が異なるのでちょっとはまった。

Linux(GNU sed)の場合

バックアップを作成しない場合

$ find . -name "*.cgi" -exec sed -i 's/\/usr\/bin\/perl/\/usr\/local\/bin\/perl/' {} \;

バックアップを作成する場合は、-iに拡張子を指定。

$ find . -name "*.cgi" -exec sed -i.bak 's/\/usr\/bin\/perl/\/usr\/local\/bin\/perl/' {} \;

Mac OS X(BSD sed)の場合

Mac OS X のsedは、-i オプションに引数(バックアップファイルの拡張子)の指定が必須なので、-iに何も指定しないと、

sed: 1: "./mt-add-notify.cgi": invalid command code .
sed: 1: "./mt-atom.cgi": invalid command code .
sed: 1: "./mt-check.cgi": invalid command code .
...

というエラーになってしまう。
なので、バックアップを作成しない場合は、-i ''を指定する。

$ find . -name "*.cgi" -exec sed -i '' 's/\/usr\/bin\/perl/\/opt\/local\/bin\/perl/' {} \;

バックアップを作成する場合は、

$ find . -name "*.cgi" -exec sed -i '.bak' 's/\/usr\/bin\/perl/\/opt\/local\/bin\/perl/' {} \;

MovableType Perlのパスを一括変換:Jays Room.

Sed: ‘sed: 1: invalid command code R’ on Mac OS X at Mark Needham.

Mac OS X Lion RVMのRuby1.9.3でSegmentation fault

RVMでMac OS X LionにRuby1.9.3をインストール後、bundleしたらSegmentation faultが発生。

$ bundle
Fetching source index for https://rubygems.org/
/Users/pistolfly/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799: [BUG] Segmentation fault
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.3.0]
...

解決方法

$ rvm pkg install openssl
$ rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

Ruby 1.9.3 + Rails 3.2.1 で segmentation fault -> 解決 - さとうようぞうのblog
RVM: Ruby Version Manager - 'rvm pkg install openssl'