Mac OS X 上で消せないファイルがある時に
そして消したいと思っても消せないので── そのうちボクはカーズ状態に陥って考えるのをやめた.
http://june29.jp/2008/10/26/un-removable-files/
ぼくは convmv で入力コードや出力コードを間違えて指定したファイルがこうなってしまいました。
この場合は single-user mode *1 で起動して
fsck -fy
を実行したら消えてくれました。お試しあれ :)
いやでも、もしHDDが死に掛けで、とかいう理由だったりすると、fsckがトドメになる気がするんだけど。。。一応そこら辺触れたほうがいい気がする。
http://b.hatena.ne.jp/m-bird/20081027#bookmark-10573201
おっと失念しておりました……。実行される方はその可能性も考慮しておいてくださいね >_<
ACL や permission が壊れていて消せない事もありますので、fcsk 後も件のファイルが残っているようでしたら
diskutil repairPermissions /
もお試しください*2。こちらは通常起動後でも動きます。
なお AppleJack ( http://applejack.sourceforge.net/ ) を使うと、これらを半自動的に行えるので大変便利です。
AppleJack 導入後に single-user mode で起動し
applejack auto shutdown
と打込めば連続で以下を行ってくれます。
- repair disks
- repair permissions
- cleanup cache files
- validate preference files
- clean up virtual memory
詳細は man を参照ください*3。
executable-find
exec-path 内に指定の実行ファイルがあるか、現在の OS の実行ファイル拡張子を補いつつ検索します。
見付かった場合はパスを文字列として返します。見付からなかった場合は nil が返ります。
例
使用例
- exec-path 内に
- 以上が全て non-nil を返した場合に続きを実行する
(and (executable-find "fastri-server") (executable-find "fri") (setq ri-ruby-script (executable-find "ri-emacs")) (load "ri-ruby" t) ;;...snip...http://github.com/elim/dotemacs/tree/1b1e99d1fb077d26f7e0bde1a827e5c338eb0ab2/init-ruby.el
実装
HEAD
(defun executable-find (command) "Search for COMMAND in `exec-path' and return the absolute file name. Return nil if COMMAND is not found anywhere in `exec-path'." ;; Use 1 rather than file-executable-p to better match the behavior of ;; call-process. (locate-file command exec-path exec-suffixes 1))http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/files.el?revision=1.1005&view=markup
Emacs21 時代
(defun executable-find (command) "Search for COMMAND in exec-path and return the absolute file name. Return nil if COMMAND is not found anywhere in `exec-path'." (let ((list exec-path) file) (while list (setq list (if (and (setq file (expand-file-name command (car list))) (let ((suffixes executable-binary-suffixes) candidate) (while suffixes (setq candidate (concat file (car suffixes))) (if (and (file-executable-p candidate) (not (file-directory-p candidate))) (setq suffixes nil) (setq suffixes (cdr suffixes)) (setq candidate nil))) (setq file candidate))) nil (setq file nil) (cdr list)))) file))http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/progmodes/executable.el?revision=1.26.4.4&view=markup
ではこれの初出はいつ頃なのかと探りましたところ、どうやら Emacs CVS 内最古の executable.el でも実装されていたようです。
初出?
(defun executable (command) "If COMMAND is an executable in $PATH its full name is returned. Else nil." (let ((list exec-path) path) (while list (setq list (if (and (setq path (expand-file-name command (car list))) (file-executable-p path) (not (file-directory-p path))) nil (setq path nil) (cdr list)))) path))http://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/progmodes/executable.el?revision=1.1&view=markup
1995 年のことですね。
実はこの関数に気付かないで、ほぼ同じ実装の locate-executable という関数書いて使っていました。
13 年も前からある関数を使っていなかったなんて……。よく調べないと無駄に再実装してしまうものですね。お恥ずかしい*1。
drutil and hdiutil.
CLI で ISO9660 image の作成/書き込みを行いたかったので MacPorts で cdrtools を導入しました……が。
mkisofs は他のプラットフォーム同様に使えたものの、 cdrecode の dev= に何を指定するか分からず、書き込みが行えませんでした :(
対処
これらは GUI では Disk Utility.app で行う作業です。Apple の事だから多分 Disk Utility.app の CLI があるだろうと探したところ、やはりありました。
機能ごとにいくつかに分かれていて diskutil(8), hdiutil(8), drutil(8) などがあるようです*1。
名称 | 機能 | 相当する別コマンド |
---|---|---|
diskutil | 主にローカルディスクに対する操作 | fdisk, fsck など |
hdiutil | ディスクイメージの作成や操作 | mkisofs(genisoimage)など |
drutil | ディスクイメージをメディアに書き込む | cdrecode(wodim)など |
ということで、 hdiutil でイメージを作成し、drutil で書き込んでみることにします。
イメージ作成
% hdiutil makehybrid -iso -joliet -default-volume-name 'Volume name' -verbose -o path/to/foo.iso path/to/source
イメージ書き込み
% drutil burn -speed 4 -verify -mount path/to/foo.iso
日本語のファイル名も問題なく通りました*2。
便利なオプションが沢山ありますので、是非 man を一読ください。それぞれに EXAMPLES セクションが付いていますので、感覚を掴むのにも便利です。
追記
cdrecord の dev= へ渡す引数が分かりました。
% cdrecord dev=IODVDServices path/to/foo.iso
だそうです。
% cdrecord -scanbus
の出力に有効な値が現れなかったので諦めていたのですが
% cdrecord dev=help
してみれば良かったのですね……。先達に感謝です :)
dbcli.py - Linux CLI in python
新しめの Emacs をフルスクリーンにする設定
既出も良いところですが、Goolge Groups 内の Carbon Emacs グループに新しめの Emacs (含む Carbon) をフルスクリーンにする設定が流れていましたので書き留めておきます。
Re: the command for full screen never works
手元の .emacs にも取り入れてみました。
(when window-system (setq-default line-spacing (if (featurep 'mac-carbon) nil 2)) (setq default-frame-alist (append '((foreground-color . "gray") (background-color . "black") (cursor-color . "blue") (alpha . (90 95))) default-frame-alist)) (setq initial-frame-alist (append '((fullscreen . fullboth)) default-frame-alist)) ;; http://groups.google.com/group/carbon-emacs/msg/287876a967948923 (defun toggle-fullscreen () (interactive) (set-frame-parameter nil 'fullscreen (if (frame-parameter nil 'fullscreen) nil 'fullboth))) (global-set-key [(meta return)] 'toggle-fullscreen))
initial-frame-alist だけ fullscreen 設定にしてあります。lookup などが開くフレームは小さいままでいいかなーと思いまして。
Google Groups のスレッドから特定のメッセージの URL を取り出す
スレッドのままではポインタとして不適当なことがあるので。
- スレッド中の当該メッセージの More options をクリックします。
- Individual message をクリックします。
以上です。簡単ですね。