そのEAには何が書かれているのか?

EAとは、Extended Attributes=拡張属性。頭文字を拾ってEAと略されるのだ。普段はほとんど目立たないEAであるが、たかが付属情報と思ってはいけない。今時のOSXの便利な機能は、すべてEAによって支えられている。以前調べた、Time MachineやSpotlight、HFS+の圧縮機能が、それを物語っている。

EAなくして、便利なOSXは存在できないのだ。

覗き見る方法


  • 例えば、lsコマンドでテキストクリッピングファイル*1をリスト表示してみると、以下のように表示される。
$ ls -l ~/Desktop/sample.textClipping
−rw-r--r--@ 1 zari  staff  0  3  6 14:59 ~/Desktop/sample.textClipping
  • この時@が見えていたら、そのファイルにはEAが含まれているという暗示である。
  • lsコマンドのオプションに@を追加して実行してみると、EAのキーが表示される。
$ ls -l@ ~/Desktop/sample.textClipping
−rw-r--r--@ 1 zari  staff  0  3  6 14:59 ~/Desktop/sample.textClipping
	com.apple.FinderInfo	32 
	com.apple.ResourceFork	554 
  • この出力結果から、以下の情報が読み取れる。
    • com.apple.FinderInfoというキーには、32バイトの内容が保存されている。
    • com.apple.ResourceForkというキーには、554バイトの内容が保存されている。
  • すると当然、32バイトや554バイトの内容を見てみたくなる。xattrコマンドを使ってみる。
$ xattr -l ~/Desktop/sample.textClipping
com.apple.FinderInfo:
00000000  63 6C 70 74 4D 41 43 53 00 00 00 00 00 00 00 00  |clptMACS........|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020
com.apple.ResourceFork:
00000000  00 00 01 00 00 00 01 BC 00 00 00 BC 00 00 00 6E  |...............n|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000100  00 00 00 36 00 74 00 65 00 78 00 74 00 20 00 63  |...6.t.e.x.t. .c|
00000110  00 6C 00 69 00 70 00 70 00 69 00 6E 00 67 00 0D  |.l.i.p.p.i.n.g..|
00000120  00 54 00 68 00 69 00 73 00 20 00 69 00 73 00 20  |.T.h.i.s. .i.s. |
00000130  00 74 00 65 00 73 00 74 00 2E 00 00 00 1B 74 65  |.t.e.s.t......te|
00000140  78 74 20 63 6C 69 70 70 69 6E 67 0A 54 68 69 73  |xt clipping.This|
00000150  20 69 73 20 74 65 73 74 2E 00 00 00 1B 74 65 78  | is test.....tex|
00000160  74 20 63 6C 69 70 70 69 6E 67 0D 54 68 69 73 20  |t clipping.This |
00000170  69 73 20 74 65 73 74 2E 00 00 00 40 00 00 00 01  |is test....@....|
00000180  00 00 00 00 00 00 00 00 00 00 00 03 75 74 78 74  |............utxt|
00000190  00 00 01 00 00 00 00 00 00 00 00 00 75 74 66 38  |............utf8|
000001A0  00 00 01 00 00 00 00 00 00 00 00 00 54 45 58 54  |............TEXT|
000001B0  00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 00  |................|
000001C0  00 00 01 BC 00 00 00 BC 00 00 00 6E 00 00 00 00  |...........n....|
000001D0  8F 03 00 00 00 1C 00 6E 00 03 75 74 78 74 00 00  |.......n..utxt..|
000001E0  00 22 75 74 66 38 00 00 00 2E 54 45 58 54 00 00  |."utf8....TEXT..|
000001F0  00 3A 64 72 61 67 00 00 00 46 01 00 FF FF 00 00  |.:drag...F......|
00000200  00 00 08 00 00 00 01 00 FF FF 00 00 00 3A 09 00  |.............:..|
00000210  00 00 01 00 FF FF 00 00 00 59 0A 00 00 00 00 80  |.........Y......|
00000220  FF FF 00 00 00 78 0B 00 00 00                    |.....x....|
0000022a
  • なるほど、なるほど、こうゆうバイトコードの並びが書き込まれているのか。

今まではこのレベルで満足していたけど、その内容が示す意味も知りたい!

com.apple.FinderInfo

  • その内容は「clptMACS」というテキストの並びがすべてである。これは一体何か?
  • getFileInfoコマンドを実行することで、謎が解けた!
$ getFileInfo ~/Desktop/sample.textClipping
file: "~/Desktop/sample.textClipping"
type: "clpt"
creator: "MACS"
attributes: avbstclinmedz
created: 03/06/2014 14:59:48
modified: 03/06/2014 14:59:48
  • ファイルタイプ=clpt、クリエーター=MACS、

つまり、ファイルタイプとクリエーターの並びなのだ。

com.apple.ResourceFork

  • ところでリソースフォークへは、/..namedfork/rsrcを追記することで、アクセスできるらしい。catコマンドで表示してみた。
$ cat ~/Desktop/sample.textClipping/..namedfork/rsrc
This is test.ext clipping
This is test.@utxtutf8TEXT??n?nutxt"utf8.TEXT:dragF???:	??Y
???x
  • あまり代わり映えしない...。
  • それもそのはず、リソースフォークには独自のフォーマットがある。
  • OS9の頃であれば、ResEditで確認することができた。
  • OSXの現在は、DeRezコマンドで確認できるらしい。(Xcodeのインストールが必要)
$ DeRez ~/Desktop/sample.textClipping
data 'utxt' (256) {
	$"0074 0065 0078 0074 0020 0063 006C 0069"            /* .t.e.x.t. .c.l.i */
	$"0070 0070 0069 006E 0067 000D 0054 0068"            /* .p.p.i.n.g...T.h */
	$"0069 0073 0020 0069 0073 0020 0074 0065"            /* .i.s. .i.s. .t.e */
	$"0073 0074 002E"                                     /* .s.t.. */
};

data 'utf8' (256) {
	$"7465 7874 2063 6C69 7070 696E 670A 5468"            /* text clipping?Th */
	$"6973 2069 7320 7465 7374 2E"                        /* is is test. */
};

data 'TEXT' (256) {
	$"7465 7874 2063 6C69 7070 696E 670D 5468"            /* text clipping.Th */
	$"6973 2069 7320 7465 7374 2E"                        /* is is test. */
};

data 'drag' (128) {
	$"0000 0001 0000 0000 0000 0000 0000 0003"            /* ................ */
	$"7574 7874 0000 0100 0000 0000 0000 0000"            /* utxt............ */
	$"7574 6638 0000 0100 0000 0000 0000 0000"            /* utf8............ */
	$"5445 5854 0000 0100 0000 0000 0000 0000"            /* TEXT............ */
};

シンプルな「text clipping(改行コード)This is test.」という内容ながら、3つのデータ形式(utxt、utf8、TEXT)で重複して保存されているのだ!


次回に続く。

*1:テキストを選択して、デスクトップにドラッグ&ドロップすることで作成されるファイル。