Mac OS X

2008/1/21更新

対応バージョン: 102A

これは容量の小さいUSBメモリなどを使用する場合に起こるエラーで、例えば32MBのUSBメモリに対して同コマンドを実行すると発生する。

% diskutil list /dev/disk5
/dev/disk5
   #:                   TYPE NAME      SIZE       IDENTIFIER
   0:  GUID_partition_scheme          *31.2 Mi    disk5
   1:              Apple_HFS test      31.2 Mi    disk5s1

% sudo diskutil partitiondisk /dev/disk5 GPTFormat ZFS %noformat% 100%
Started partitioning on disk disk5
Creating partition map
[ | 0%................................................... ] 
Partitioning encountered error on disk disk3s1: The chosen size 
is not valid for the chosen filesystem (-9962)

エラーは発生するもののGPTパーティション情報は書き込める。

% diskutil list /dev/disk5
/dev/disk5
   #:                   TYPE NAME      SIZE       IDENTIFIER
   0:  GUID_partition_scheme          *31.2 Mi    disk5
   1:                    ZFS           31.2 Mi    disk5s1

ただし、ZFSストレージプールに追加しようとすると容量不足エラーになるので結果的に使用できない。

% sudo zpool add foo disk5s1
cannot add to 'foo': device is less than the minimum size (64M)

関連資料・記事

2008/1/20更新

対応バージョン: 102A

ミラー対象となるパーティションの少なくとも1つが既に他のストレージプールの一部として使用されている。

% sudo zpool create m01 mirror disk3s2 disk4s1
cannot create 'm01': one or more vdevs refer to the same device

対処としては、ストレージプールとして使われていないパーティションを使用するか、以下のように当該パーティションが割り当てられているストレージプールを削除する。

例) disk3s2がストレージプール「foo」として使用されている場合

% zpool status foo
:
config:

        NAME        STATE     READ WRITE CKSUM
        foo         ONLINE       0     0     0
          disk3s2   ONLINE       0     0     0

% sudo zpool destroy foo

関連資料・記事

2008/4/19更新

対応バージョン: 102A

ZFSのストレージプールに作成したファイルシステムには様々なプロパティが設定されており、これを操作することで細かい制御ができる。

現在のプロパティの設定情報を参照するにはgetサブコマンドに続いて参照したいプロパティ名を指定する。

% zfs get <プロパティ> <ファイルシステム>

全てのプロパティを参照するにはプロパティ名に「all」を指定する。

例)

% sudo zfs get all foo/home/bar
NAME          PROPERTY       VALUE                  SOURCE
foo/home/bar  type           filesystem             -
foo/home/bar  creation       Wed Jan 23 10:14 2008  -
foo/home/bar  used           19K                    -
foo/home/bar  available      928M                   -
foo/home/bar  referenced     19K                    -
foo/home/bar  compressratio  1.00x                  -
foo/home/bar  mounted        yes                    -
foo/home/bar  quota          none                   default
foo/home/bar  reservation    none                   default
foo/home/bar  recordsize     128K                   default
foo/home/bar  mountpoint     /Volumes/foo/home/bar  default
foo/home/bar  sharenfs       off                    default
foo/home/bar  checksum       on                     default
foo/home/bar  compression    off                    default
foo/home/bar  atime          on                     default
foo/home/bar  devices        on                     default
foo/home/bar  exec           on                     default
foo/home/bar  setuid         on                     default
foo/home/bar  readonly       off                    default
foo/home/bar  zoned          off                    default
foo/home/bar  snapdir        hidden                 default
foo/home/bar  aclmode        groupmask              default
foo/home/bar  aclinherit     secure                 default
foo/home/bar  canmount       on                     default
foo/home/bar  shareiscsi     off                    default
foo/home/bar  xattr          on                     default
foo/home/bar  copies         1                      default
foo/home/bar  version        2                      -

以下、いくつかのプロパティの設定手順を紹介する。

quota

ディスククォータを設定する。

例えば以下のように一つのストレージプールを複数のファイルシステムに分割して使用している場合を考える。

% zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
foo            444K   928M   274K  /Volumes/foo
foo/home        60K   928M    22K  /Volumes/foo/home
foo/home/bar    19K   928M    19K  /Volumes/foo/home/bar
foo/home/baz    19K   928M    19K  /Volumes/foo/home/baz

この中でfoo/home/barに対して100MBのクォータを設定する場合は以下のようにする。

% sudo zfs set quota=100m foo/home/bar

これによりfoo/home/barの使用可能サイズは100MBになる。それ以外は以前と同じままである。

% zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
foo            444K   928M   274K  /Volumes/foo
foo/home        60K   928M    22K  /Volumes/foo/home
foo/home/bar    19K   100M    19K  /Volumes/foo/home/bar
foo/home/baz    19K   928M    19K  /Volumes/foo/home/baz

クォータの解除はサイズに「none」を指定して再設定すればよい。

% sudo zfs set quota=none foo/home/bar

reservation

ディスク領域を予約する。

これは前述のクォータのようにファイルシステムの最大サイズを制限するのとは逆に、あらかじめ指定したサイズの領域を確保する方法である。

例えば以下のように一つのストレージプールに2ユーザのホームディレクトリが確保されている場合を考える。

% zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
foo            444K   928M   274K  /Volumes/foo
foo/home        60K   928M    22K  /Volumes/foo/home
foo/home/bar    19K   928M    19K  /Volumes/foo/home/bar
foo/home/baz    19K   928M    19K  /Volumes/foo/home/baz

この中でfoo/home/barに対して100MBの領域を確保する場合は以下のようにする。

% sudo zfs set reservation=100m foo/home/bar

これによりfoo/homeの使用サイズが100MBになりbarのホームディレクトリのために100MBが確保されたことになる。

% zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
foo            100M   828M   274K  /Volumes/foo
foo/home       100M   828M    22K  /Volumes/foo/home
foo/home/bar    19K   928M    19K  /Volumes/foo/home/bar
foo/home/baz    19K   828M    19K  /Volumes/foo/home/baz

領域の予約解除はサイズに「none」を指定して再設定すればよい。

% sudo zfs set reservation=none foo/home/bar

compression

プール内を圧縮モードにする。

% sudo zfs set compression=on foo

2008/4/22更新

対応バージョン: 111

ZFSのストレージプールを削除する手順を示す。ここでは「m01」というプールに「disk3s2」「disk4s1」が割り当てられているものとする。

アンマウント

まず、ファイルシステムとしてマウントされている場合、アンマウントする。

% df -h m01
Filesystem   Size   Used  Avail Capacity  Mounted on
m01         928Mi  269Ki  928Mi     1%    /Volumes/m01

% sudo zfs unmount -f m01

ストレージプール削除

% zpool status m01
  pool: m01
 state: ONLINE
:
config:

        NAME         STATE     READ WRITE CKSUM
        m01          ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            disk3s2  ONLINE       0     0     0
            disk4s1  ONLINE       0     0     0

% sudo zpool destroy m01

これでストレージプールが削除され、別のプールとして割り当てたり、他のファイルシステムとして使用したりできる。

% diskutil list /dev/disk3
/dev/disk3
   #:                   TYPE NAME      SIZE       IDENTIFIER
   0:  GUID_partition_scheme          *38.2 Gi    disk3
   1:                    EFI           200.0 Mi   disk3s1
   2:                    ZFS           37.9 Gi    disk3s2

% diskutil list /dev/disk4
/dev/disk4
   #:                   TYPE NAME      SIZE       IDENTIFIER
   0:  GUID_partition_scheme          *967.5 Mi   disk4
   1:                    ZFS           967.5 Mi   disk4s1

2008/4/22更新

対応バージョン: 111

ZFSのストレージプールに未使用のディスクを追加する手順を示す。

まず現在のストレージプールが1つの物理ディスクで作成されているものとする。

% zpool status foo
  pool: foo
 state: ONLINE
:
config:

        NAME        STATE     READ WRITE CKSUM
        foo         ONLINE       0     0     0
          disk3s1   ONLINE       0     0     0
:

% diskutil list /dev/disk3
/dev/disk3
   #:                   TYPE NAME      SIZE       IDENTIFIER
   0:  GUID_partition_scheme          *967.5 Mi   disk3
   1:                    ZFS foo       967.5 Mi   disk3s1

ここに以下のディスクを追加する。

% diskutil list /dev/disk2
/dev/disk2
   #:                   TYPE NAME      SIZE       IDENTIFIER
   0:  GUID_partition_scheme          *38.2 Gi    disk2
   1:                    EFI           200.0 Mi   disk2s1
   2:                    ZFS           37.9 Gi    disk2s2

% zpool add foo disk2s2

これにより、fooストレージプールのサイズは以下のように拡張される。

拡張前
% df -h -t zfs
Filesystem   Size   Used  Avail Capacity  Mounted on
foo         928Mi  707Ki  927Mi     1%    /Volumes/foo
拡張後
% df -h -t zfs
Filesystem   Size   Used  Avail Capacity  Mounted on
foo          38Gi  707Ki   38Gi     1%    /Volumes/foo

また、ストレージプールに新たなディスクが追加されているのが確認できる。

% zpool status foo
  pool: foo
 state: ONLINE
:
config:

        NAME        STATE     READ WRITE CKSUM
        foo         ONLINE       0     0     0
          disk3s1   ONLINE       0     0     0
          disk2s2   ONLINE       0     0     0
:

関連資料・記事

2008/4/22更新

対応バージョン: 111

ZFSでミラーを作成する手順を示す。

ここでは外付けHDDとUSBメモリを使用してミラーを作成する。

% diskutil list /dev/disk3 (外付けHDD)
/dev/disk3
   #:                    TYPE NAME        SIZE      IDENTIFIER
   0:   GUID_partition_scheme            *38.2 Gi   disk3
   1:                     EFI             200.0 Mi  disk3s1
   2:                     ZFS             37.9 Gi   disk3s2

% diskutil list /dev/disk4 (USBメモリ)
/dev/disk4
   #:                    TYPE NAME        SIZE      IDENTIFIER
   0:   GUID_partition_scheme            *967.5 Mi  disk4
   1:                     ZFS             967.5 Mi  disk4s1

ミラー作成

% sudo zpool create m01 mirror disk3s2 disk4s1 

% zpool status m01
  pool: m01
 state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
        still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
        pool will no longer be accessible on older software versions.
 scrub: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        m01          ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            disk3s2  ONLINE       0     0     0
            disk4s1  ONLINE       0     0     0

errors: No known data errors

これでミラー化されたストレージプールが/Volumes/m01にマウントされファイルシステムとして使用可能になる。

% df -h /Volumes/m01
Filesystem   Size   Used  Avail Capacity  Mounted on
m01         928Mi  270Ki  928Mi     1%    /Volumes/m01

尚、違うサイズのパーティション同士でミラーを作成した場合、ストレージプールのサイズは(当然ではあるが)一番小さいパーティションと同サイズになる。

関連資料・記事

2008/4/22更新

対応バージョン: 111

単一パーティションを使ってZFSストレージプールを作成する手順を示す。

ここでは以前Linux用に使用していた以下のディスクを使用する。

% diskutil list
:
/dev/disk3
   #:                   TYPE NAME         SIZE       IDENTIFIER
   0: FDisk_partition_scheme             *38.2 Gi    disk3
   1:                  Linux              1.9 Gi     disk3s1
   2:                  Linux              36.3 Gi    disk3s2

パーティショニング

パーティションテーブルはGPT(GUID Partition Table)とし、ディスク全体をZFS用に使用する。

% sudo diskutil partitiondisk /dev/disk3 GPTFormat ZFS %noformat% 100%

Started partitioning on disk disk3
Creating partition map
[ + 0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..100% ]
Finished partitioning on disk disk3
/dev/disk3
   #:                   TYPE NAME         SIZE       IDENTIFIER
   0:  GUID_partition_scheme             *38.2 Gi    disk3
   1:                    EFI              200.0 Mi   disk3s1
   2:                    ZFS              37.9 Gi    disk3s2

ストレージプール作成

ZFS用パーティションにストレージプールを作成する。

% sudo zpool create foo disk3s2 

% zpool list 
NAME      SIZE  USED  AVAIL  CAP  HEALTH  ALTROOT
foo      37.8G  360K  37.7G   0%  ONLINE  -

% zpool status foo
  pool: foo
 state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
        still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
        pool will no longer be accessible on older software versions.
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        foo         ONLINE       0     0     0
          disk3s2   ONLINE       0     0     0

errors: No known data errors

これでストレージプールが/Volumes/fooにマウントされファイルシステムとして使用可能になる。

% df -h /Volumes/foo
Filesystem   Size   Used  Avail Capacity  Mounted on
foo          37Gi  269Ki   37Gi     1%    /Volumes/foo

アンマウントする時は以下のようにする。

% sudo zfs unmount [-f] foo

さらに上記プールから別のプールを切り出すこともできる。

% sudo zfs create foo/bar
% df -h -t zfs
Filesystem   Size   Used  Avail Capacity  Mounted on
foo          37Gi  269Ki   37Gi     1%    /Volumes/foo
foo/bar      37Gi   19Ki   37Gi     1%    /Volumes/foo/bar

こうすることで同じストレージプール内に独立したファイルシステムを生成することができる。

また、マウントポイントをデフォルト以外の場所にしたい場合は以下のようにする。

% sudo mkdir /Users/bar
% sudo zfs set mountpoint=/Users/bar foo/bar
% sudo zfs mount foo/bar
% df -h -t zfs
Filesystem   Size   Used  Avail Capacity  Mounted on
foo          37Gi  578Ki   37Gi     1%    /Volumes/foo
foo/bar      37Gi   22Ki   37Gi     1%    /Users/bar

関連資料・記事

2008/4/22更新

対応バージョン: 111

公式サイト

準備

導入OS

Mac OS X 10.5.2(Leopard)

インストール

デフォルトでインストールされているZFS(Readonly)関連ファイルを退避

% sudo mv /usr/sbin/zfs /usr/sbin/zfs.org
% sudo mv /usr/sbin/zpool /usr/sbin/zpool.org

% sudo mv /usr/lib/libzfs.dylib /usr/lib/libzfs.dylib.org

% sudo mv /System/Library/Filesystems/zfs.fs /System/Library/Filesystems/zfs.fs.org

インストール

% tar zxvf zfs-111_binaries.tgz

% cd zfs-111/build/Leopard_Release

% sudo cp zfs /usr/sbin
% sudo cp zpool /usr/sbin
% sudo cp libzfs.dylib /usr/lib

% sudo cp -R zfs.fs /System/Library/Filesystems
% sudo cp -R zfs.kext /System/Library/Extensions

インストール物 (man,infoは除く)

/usr/sbin/zfs
/usr/sbin/zpool

/usr/lib/libzfs.dylib

/System/Library/Filesystems/zfs.fs

/System/Library/Extensions/zfs.kext

2008/2/7更新

対応バージョン: 10.5(Leopard)

コマンドラインからカスタムアイコンを削除するにはEA(Extended Attribute)のcom.apple.FinderInfoを削除する。

例) JPEGファイルのカスタムアイコンを削除する

% xattr foo.jpg
com.apple.FinderInfo
com.apple.ResourceFork

% xattr -d com.apple.FinderInfo

% xattr foo.jpg
com.apple.ResourceFork

2008/8/4更新

対応バージョン: 10.5(Leopard)

Mac OS X 10.5にはデフォルトでVNCサーバの機能が組み込まれているので以下の手順で設定する。

「システム環境設定」>「共有」にて「画面共有」にチェックを付ける。

この設定によりTCPの5900番ポートが開く。

次に「コンピュータ設定...」を押し「VNC使用者が画面を操作することを許可」にチェックを付け、パスワードを設定する。

関連資料・記事

2008/2/11更新

対応バージョン: 10.5(Leopard)

mdutilを使用するとSpotlightのインデックスを再作成したり任意のボリュームをインデックス対象に加えたり除外することができる。

以下、主な操作方法を示す。

-s <ボリューム>

指定したボリューム(パーティション)がインデックス対象か調べる。

% mdutil -s /
/:
        Indexing enabled.

ただしmdutilはボリューム単位で制御を行うコマンドなので、サブディレクトリに対して実行しても意味はない。

% mdutil -s /Users
/Users:
        No index.

-E <ボリューム>

指定したボリュームに対するインデックスを再作成する。

% sudo mdutil -E /
/:
        Indexing enabled.

インデックスはいったん破棄されて新たに再作成されるので、Mac OS Xを最初に導入してインデックスを初めて作成した時のように時間がかかるがバックグラウンドで動作するので特に気にすることはない。

-i [on|off] <ボリューム>

指定したボリュームのインデックスを有効化(on)/無効化(off)できる。

% sudo mdutil -i on /foo
/foo:
        Indexing enabled.

% sudo mdutil -i off /foo
/foo:
        Indexing disabled.

2008/3/16更新

対応バージョン: 10.5(Leopard)

コマンドラインから画像ファイルを操作するにはsipsコマンドを使用する。

オプションによって様々な操作が可能なのでここでは代表的なものを示す。

-gオプション

サイズや画像フォーマットといった画像ファイルに含まれる情報を抽出する。

-gに続けて取得したいパラメータを指定するが、allと指定することで全てのパラメータが取得できる。

% sips -g format sample.jpg
  format: jpeg

% sips -g all sample.jpg
  pixelWidth: 160
  pixelHeight: 192
  typeIdentifier: public.jpeg
  format: jpeg
  formatOptions: default
  dpiWidth: 72.000
  dpiHeight: 72.000
  samplesPerPixel: 3
  bitsPerSample: 8
  hasAlpha: no
  space: RGB

また、allxmlと指定することでplist形式(XML)でも取得できる。

% sips -g allxml sample.jpg
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>bitsPerSample</key>
        <integer>8</integer>
        <key>dpiHeight</key>
        <real>72</real>
        <key>dpiWidth</key>
        <real>72</real>
        <key>format</key>
        <string>jpeg</string>
        <key>formatOptions</key>
        <string>default</string>
        <key>hasAlpha</key>
        <false/>
        <key>path</key>
        <string>/Users/neo/Desktop/sample.jpg</string>
        <key>pixelHeight</key>
        <integer>192</integer>
        <key>pixelWidth</key>
        <integer>160</integer>
        <key>samplesPerPixel</key>
        <integer>3</integer>
        <key>space</key>
        <string>RGB</string>
        <key>typeIdentifier</key>
        <string>public.jpeg</string>
</dict>
</plist>

関連資料・記事

-iオプション

画像ファイルに自身のサムネイルをカスタムアイコンとして設定する。

% sips -i sample.jpg

関連資料・記事

-zオプション

画像サイズを変更する。

サイズの単位はピクセル。

サイズは縦・横の順で指定する。

$ sips -z 300 400 sample.jpg

--outで別ファイルに出力することもできる(以降のオプションでも同様)。

% sips -z 300 400 sample.jpg --out new.jpg

-rオプション

画像を回転する。

度数は右回りで指定する。

% sips -r 30 sample.jpg --out new.jpg

-sオプション

画像のフォーマット変換を行う。

例えばJPEG画像をPNGに変換する場合は以下のようにする。

% sips -s format png sample.jpg --out sample.png

変換可能な画像フォーマットは-Hオプションで確認できる。

% sips -H
:
  format  string jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga
:

2008/12/24更新

対応バージョン: 10.5(Leopard)

ディスクユーティリティを使用するとディスクの修復ができるが、自分自身(起動ディスク)は修復できないので以下のいずれかの方法で修復する。

OSインストールメディアで起動し、メディア内のディスクユーティリティを使用する。

セーフブートモードで起動する。

電源を入れ「shift」キーを押し続ける。アップルロゴが表示され、ローディングアイコンがまわり始めたらキーを離してよい。

この状態で数分〜十数分待っている間に背後で起動ディスクの修復が行われる。

ログイン画面が表示され「セーフブート」と表示されるのでマシンを再起動する。

シングルユーザモードでfsckを実行する。

電源を入れ「command」+「s」キーを押し続けると数十秒〜数分でコマンドプロンプトが表示される。

コマンドからfsckを実行して起動ディスクを修復する。終了後はマシンを再起動する。

# /sbin/fsck -fy
# reboot

2008/1/18更新

対応バージョン: 10.5(Leopard)

plistをCUIでメンテナンスするにはplutilを使用する。

以下、主な使用方法を記す。

plistの文法チェック

plistが正しく記述されているかをチェックする。

正しい場合は「ok」、誤っている場合はその箇所が示される。

% plutil -lint <plistファイル>

例) 正しいplist

% plutil -lint foo.plist
foo.plist: OK

例) 誤ったplist (タグが正しく閉じられていない)

% plutil -lint bar.plist
bar.plist:
XML parser error:
        Close tag on line 62 does not match open tag integer
Old-style plist parser error:
        Malformed data byte group at line 1; invalid hex

plistの形式変更

plistの形式をバイナリ、XMLいずれかに変換する。

バイナリ形式へ変換する
% plutil -convert binary1 -o <出力ファイル名> <plistファイル>
XML形式へ変換する
% plutil -convert xml1 -o <出力ファイル名> <plistファイル>

尚、-oオプションを省略すると変換元のファイルそのものを書き換えるので注意が必要である。

2008/1/18更新

対応バージョン: 10.5(Leopard)

plistのDTDは/System/Library/DTDs/PropertyList.dtdで定義されており、特定のサービスやアプリケーションに依存しない汎用的な構造を持つ。

基本的にキーに対する値の組み合わせで構成され、値はplistObjectとして定義され以下のような種類を持つ。

制御

dict

keyとplistObjectの組み合わせを内部に持つ

array

plistObjectの配列を内部に持つ

key

キー

(*) key自身もplistObjectに含まれる。

string

文字列

date

日付

integer

数値

real

浮動小数点データ

data

任意のデータ

true

真 (boolean)

false

偽 (boolean)

例)

<dict>
  <key>ID</key>
  <integer>123</integer>

  <key>user</key>
  <string>foo</string>

  <key>purpose</key>
  <array>
    <string>test</string>
    <string>live</string>
  </array>

  <key>activate</key>
  <true/>
</dict>

使用例

参考までに、いくつかのアプリケーションでの実際の使用例を見てみる。

iTunesのライブラリを管理する~/Music/iTunes/iTunes Music Library.xml

このplistでは楽曲毎に以下のような情報が管理されている。

<dict>
  <key>Track ID</key><integer>200</integer> ... トラックID
  <key>Name</key><string>Luck</string> ........ 楽曲名
  <key>Artist</key><string>You</string> ....... アーティスト
  :
  <key>Location</key> ......................... 楽曲ファイル
  <string>
    file://localhost/Users/foo/Music/iTunes/iTunes%20Music/You/ALL/Luck.m4p
  </string>
  :
</dict>

Safariのブックマークを管理する~/Library/Safari/Bookmarks.plist

このファイルはバイナリ形式なので、エディタ等で中身を見る場合は以下のようにXML形式に変換する。

% plutil -convert xml1 -o foo.xml Bookmarks.plist

関連資料・記事

このplistでは登録サイト毎に以下のような情報が管理されている。

<dict>
  <key>URIDictionary</key>
  <dict>
    <key></key> ............................ URL(keyは未使用)
    <string>http://www.apple.com/</string>
    <key>title</key> ....................... タイトル
    <string>Apple</string>
  </dict>
  <key>URLString</key>
  <string>http://www.apple.com/</string>
  <key>WebBookmarkType</key>
  <string>WebBookmarkTypeLeaf</string>
  <key>WebBookmarkUUID</key> ... ブックマーク内におけるこのサイトのユニークID
  <string>061A15C1-047C-4B1F-93AB-013E01B22C21</string>
</dict>

2008/1/30更新

対応バージョン: 10.5(Leopard)

DVDをコピーするにはまずコピー元のディスクイメージを作成し、それをディスクユーティリティでDVD-R(RW)に焼けばよい。

以下、手順を示す。

OSExというフリーのツールを入手してインストールする。

OSExを起動してコピーしたいDVDをドライブにセットする。

[Fmt]ボタンから[DVD Image]を選択する。

任意のイメージファイル名を入力して[BEGIN]ボタンを押下すると作成先フォルダの指定ダイアログが開くのでフォルダを指定するとディスクイメージ作成が開始する。

ディスクイメージには「.IMG」の拡張子が付く。

ディスクユーティリティを起動し、作成されたディスクイメージを指定する。

空のDVD-R(RW)をセットして[ディスクを作成]ボタンを押す。

2008/1/18更新

対応バージョン: 10.5(Leopard)

OpenDirectoryではネットワーク設定やユーザ情報など、ホスト内で共通して利用する情報を一元管理している。

OpenDirectoryで管理している情報は/var/db/dslocal/nodes/Default配下に目的別にディレクトリが作られ、その下に各エントリのplistが格納されている。

デフォルトでは以下のようなファイルが存在する。

マシン管理

/var/db/dslocal/nodes/Default/machines/broadcasthost.plist (ブロードキャストホスト設定)
/var/db/dslocal/nodes/Default/machines/localhost.plist (ローカルホスト設定)
/var/db/dslocal/nodes/Default/networks/loopback.plist (ループバックインタフェース設定)

要認証サービス

/var/db/dslocal/nodes/Default/config/KerberosKDC.plist (Kerberos設定)
/var/db/dslocal/nodes/Default/config/SharePoints.plist (共有フォルダ設定格納場所)
/var/db/dslocal/nodes/Default/config/SharePoints/<共有フォルダ>.plist (共有フォルダ毎の設定)

ユーザ管理

/var/db/dslocal/nodes/Default/users/<ユーザ>.plist
/var/db/dslocal/nodes/Default/groups/<グループ>.plist

メールエイリアス

/var/db/dslocal/nodes/Default/aliases/<エイリアス>.plist

OpenDirectoryにCUIでアクセスするにはdsclを使用する。

各設定はディレクトリの/Local/Default配下に配置されているので、例えばネットワークのループバックインタフェースの設定情報を表示するには以下のようにする。

インタフェースの一覧を表示
% dscl localhost -list /Local/Default/networks
loopback
ループバックインタフェースの設定情報出力
% dscl localhost -read /Local/Default/networks/loopback
dsAttrTypeNative:address: 127
AppleMetaNodeLocation: /Local/Default
RecordName: loopback loopback-net
RecordType: dsRecTypeNative:networks

ちなみに設定情報はplistなのでmoreなどで実際の設定ファイルの中身を確認することができる(ファイルには一般ユーザの参照権がないのでsudoを使用する)。

% sudo more /var/db/dslocal/nodes/Default/networks/loopback.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.
com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>address</key>
        <array>
                <string>127</string>
        </array>
        <key>name</key>
        <array>
                <string>loopback</string>
                <string>loopback-net</string>
        </array>
</dict>
</plist>

dsclにはこの他に設定情報の追加/変更/削除/検索などのサブコマンドが用意されているので目的に応じて使用する。

2008/1/30更新

対応バージョン: 10.5(Leopard)

任意のサイズのファイルを新規に作成するにはmkfileを使用する。

以下の単位とともにサイズを指定する。

b(Byte)
k(KB)
m(MB)
g(GB)

例)

% mkfile 1k test

% ls -l test
-rw-------  1 foo  staff  1024  1 30 15:16 test

関連資料・記事

2008/1/18更新

対応バージョン: 10.5(Leopard)

Finder上で日本語(他国語)で表示されるフォルダ名は実際のファイルシステム上には英語名のディレクトリとして存在する。

例えばホームフォルダにある「ミュージック」フォルダは実際には「Music」というディレクトリである。

この両者の紐付けを行っているのは各フォルダ配下に存在する「.localized」という空ファイルで、このファイルが存在するとCocoa/Carbonの国際化機能を利用してシステム環境設定の言語環境パネルで指定した優先言語でフォルダ名が表示される。

もし英語表記に切り替えたい場合は希望するフォルダの.localizedファイルを削除すればよく、逆に日本語表記に戻したい場合は同ファイルを作成してFinderを再起動すればよい。

例) 「パブリック」フォルダを日本語表記にする場合

% cd ~/Public
% touch .localized
% killall Finder

2008/2/7更新

対応バージョン: 10.5(Leopard)

リソースフォーク格納場所

リソースフォークはFinderからは見えないようになっているが、com.apple.ResourceForkというEA(Extended Attribute)として存在する。

例えばWebサイトのURLを表すwebloc(Webインターネットロケーション)ファイルの場合、以下のように2つのEAが内包されている。

% ls -l@ Apple.webloc 
-rw-r--r--@ 1 foo  staff  0  2  5 16:11 Apple.webloc
        com.apple.ResourceFork  545 
        com.apple.quarantine    42 

リソースフォークは実際にファイルとしてアクセスすることもできる。

<ファイル>/rsrc
あるいは
<ファイル>/..namedfork/rsrc

リソースフォーク内容参照

リソースフォークファイルはプレーンテキストではないので内容を参照するにはDeRezコマンドを使用する。

ファイルの種類によって様々なデータが格納されるが、前述のweblocファイルの場合リソースフォーク内にURLが格納されている。

% DeRez Apple.webloc 
data 'drag' (128, "Apple.webloc") {
    $"0000 0001 0000 0000 0000 0000 0000 0003"  /* ................ */
    $"5445 5854 0000 0100 0000 0000 0000 0000"  /* TEXT............ */
    $"7572 6C20 0000 0100 0000 0000 0000 0000"  /* url ............ */
    $"7572 6C6E 0000 0100 0000 0000 0000 0000"  /* urln............ */
};

data 'url ' (256, "Apple.webloc") {
    $"6874 7470 3A2F 2F77 7777 2E61 7070 6C65"  /* http://www.apple */
    $"2E63 6F6D 2F"                             /* .com/ */
};

data 'TEXT' (256, "Apple.webloc") {
    $"6874 7470 3A2F 2F77 7777 2E61 7070 6C65"  /* http://www.apple */
    $"2E63 6F6D 2F"                             /* .com/ */
};

data 'urln' (256, "Apple.webloc") {
    $"4170 706C 65"                             /* Apple */
};

リソースフォーク削除

リソースフォークを全て削除するにはxattr -dを使用する。

% xattr -d com.apple.ResourceFork <ファイル>

リソースフォークから任意のデータを削除するには以下の手順で行う。

まずDeRezコマンドでリソースフォークから不要なデータを削除したテキストファイルを作成
% DeRez -skip '<キー>' foo > foo.tmp
次にRezコマンドで上記ファイルからリソースフォークを作成
% Rez foo.tmp -o foo.rsrc
作成されたリソースフォークをオリジナルと入れ替える
% cp foo.rsrc/rsrc foo/rsrc

2008/5/13更新

対応バージョン: 10.5(Leopard)

Finder上でWebDAV/NFS/AFP/CIFSといったリモートのファイルサーバにアクセスした際に「.DS_Store」ファイルの作成を抑制するには以下の設定を行ってFinderを再起動すればよい。

% defaults write com.apple.desktopservices DSDontWriteNetworkStores true
% killall Finder

この設定のplistファイルは~/Library/Preferences/com.apple.desktopservices.plistである。

設定を元に戻すにはこのパラメータを削除するか、設定値をfalseに変更する。

パラメータを削除する場合
% defaults delete com.apple.desktopservices DSDontWriteNetworkStores
% killall Finder
設定値をfalseに変更する場合
% defaults write com.apple.desktopservices DSDontWriteNetworkStores false
% killall Finder

なお、この設定はローカルボリュームには適用されない。

2008/1/18更新

対応バージョン: 10.5(Leopard)

Finderの初期設定では「.*」(ドットファイル)が表示されない設定になっているが、以下の設定を行ってFinderを再起動すれば表示可能になる。

% defaults write com.apple.finder AppleShowAllFiles -bool true
% killall Finder

この設定のplistファイルは~/Library/Preferences/com.apple.finder.plistである。

設定を元に戻すにはこのパラメータを削除するか、設定値をfalseに変更する。

パラメータを削除する場合
% defaults delete com.apple.finder AppleShowAllFiles
% killall Finder
設定値をfalseに変更する場合
% defaults write com.apple.finder AppleShowAllFiles -bool false
% killall Finder

なお、この設定はコマンドラインからのls等の操作には影響を与えない。

2008/5/3更新

対応バージョン: 10.5(Leopard)

デーモン実行用などに使用しログインが不要なユーザをログインウィンドウに表示させないようにするにはパスワードを「*」固定にすればよい。

% sudo dscl . -create /Users/foo Password '*'
% sudo dscl . -read /Users/foo Password
Password: *

関連資料・記事

2008/1/18更新

対応バージョン: 10.5(Leopard)

新規ユーザの作成はdsclの-createサブコマンドを使用する。

Linuxのuseraddコマンド等と違い一つ一つのパラメータ毎にdsclを実行する点に注意する。

ここでは例として以下のようなユーザを作成する。他にも様々なパラメータがあるが割愛する。

アカウント (UID)

foo (601)

グループ

users (601)

ホームディレクトリ

/Users/foo

ログインシェル

/bin/bash

% sudo dscl . -create /Groups/users gid 601

% sudo dscl . -create /Users/foo
% sudo dscl . -create /Users/foo RealName foo
% sudo dscl . -create /Users/foo UniqueID 601
% sudo dscl . -create /Users/foo PrimaryGroupID 601
% sudo dscl . -create /Users/foo NFSHomeDirectory /Users/foo
% sudo dscl . -create /Users/foo UserShell /bin/bash

% sudo passwd foo ← パスワード設定

作成されたユーザ情報を確認する。

% sudo dscl . -read /Groups/users
AppleMetaNodeLocation: /Local/Default
GeneratedUID: 05416EC7-AD6E-47AB-A7D1-7752821BF5CE
PrimaryGroupID: 601
RecordName: users
RecordType: dsRecTypeStandard:Groups

% sudo dscl . -read /Users/foo
AppleMetaNodeLocation: /Local/Default
AuthenticationAuthority: ;ShadowHash; ;Kerberosv5;;foo@LKDC:SHA1.E5FB873ECB88A3928DE07A18294D98A61EB3BFEE;LKDC:SHA1.E5FB873ECB88A3928DE07A18294D98A61EB3BFEE;
GeneratedUID: BD01036A-109A-4005-8932-D2358643061F
NFSHomeDirectory: /Users/foo
Password: ********
PrimaryGroupID: 601
RealName: foo
RecordName: foo
RecordType: dsRecTypeStandard:Users
UniqueID: 601
UserShell: /bin/bash

% id foo
uid=601(foo) gid=601(users) groups=601(users)

ホームディレクトリはFinderから次回ログイン時に自動的に作成される。

関連資料・記事

2008/1/18更新

対応バージョン: 10.5(Leopard)

ユーザ管理はMac OS X 10.4以前のNetInfoや一般的な/etc/passwdなどを使用せず、OpenDirectoryを使用する。

OpenDirectoryにCUIでアクセスするにはdsclを使用する。

ユーザ情報は/Local/Default/Usersに定義されているので、ユーザの一覧を表示したり各ユーザの詳細情報を参照するには以下のようにする。

ユーザの一覧を表示
% dscl localhost -list /Local/Default/Users
:
_windowserver
_www
_xgridagent
_xgridcontroller
daemon
nobody
root
user1
user2

この例ではデフォルトのユーザの他にuser1,user2が定義されている。

特定ユーザの詳細情報を参照
% dscl localhost -read /Local/Default/Users/user1
dsAttrTypeNative:_writers_hint: user1
dsAttrTypeNative:_writers_jpegphoto: user1
dsAttrTypeNative:_writers_LinkedIdentity: user1
dsAttrTypeNative:_writers_passwd: user1
dsAttrTypeNative:_writers_picture: user1
dsAttrTypeNative:_writers_realname: user1
dsAttrTypeNative:_writers_UserCertificate: user1
AppleMetaNodeLocation: /Local/Default
AuthenticationAuthority: ;ShadowHash; ;Kerberosv5;;user1@LKDC:SHA1.E5FB873ECB88A3928DE07A18294D98A61EB3BFEE;LKDC:SHA1.E5FB873ECB88A3928DE07A18294D98A61EB3BFEE;
AuthenticationHint:
GeneratedUID: 7E9BF1B4-217E-4ABC-8985-BF41E702CF3D
JPEGPhoto:
 ffd8ffe0 00104a46 ... (略)
NFSHomeDirectory: /Users/user1
Password: ********
Picture: /Library/User Pictures/Animals/Jaguar.tif
PrimaryGroupID: 20
RealName: user1
RecordName: user1
RecordType: dsRecTypeStandard:Users
UniqueID: 501
UserShell: /bin/bash
adminグループの詳細情報を参照
% dscl localhost -read /Local/Default/Groups/admin
AppleMetaNodeLocation: /Local/Default
GeneratedUID: ABCDEFAB-CDEF-ABCD-EFAB-CDEF00000050
GroupMembership: root user1
Password: *
PrimaryGroupID: 80
RealName: Administrators
RecordName: admin
RecordType: dsRecTypeStandard:Groups
SMBSID: S-1-5-32-544

この例ではadminグループにrootとuser1ユーザが所属していることが分かる。つまりuser1ユーザは管理者権限を有している。

関連資料・記事

2008/3/3更新

対応バージョン: 10.5(Leopard)

モジュールのファイル構成

アプリケーションやフレームワークなど、バンドル構造を持つモジュールは以下のようなファイル/ディレクトリ構成になっている。

まず対象となるモジュール名のディレクトリの中にContentsディレクトリを持つ。

例)

% ls -l /Applications/Safari.app
drwxrwxr-x  8 root  admin  272  2 13 02:24 Contents/

その中に以下のファイル/ディレクトリを持つ。モジュールによっては必要ないファイルやディレクトリもある。

CodeResources

Resourcesディレクトリ配下のファイルの使用目的などが定義されている。

Frameworksディレクトリ

アプリケーションで使用するライブラリがディレクトリ毎にまとめられている。

Info.plist

拡張子などの情報やアプリケーションの属性などが定義されている。

MacOS/<アプリケーション>

アプリケーション本体のバイナリが格納されている。

PkgInfo

バンドルの種類が定義されている。

例)

APPLemal (Mail)

APPLsfri (Safari)

APPLiPho (iPhoto)

APPLhook (iTunes)

APPLkeyn (Keynote)

Resourcesディレクトリ

アイコンファイルや言語別リソースが格納されている。

version.plist

アプリケーションのバージョン情報やビルド番号などが定義されている。

モジュールの種類

バンドル構造を持つモジュールには以下のような種類がある。

アプリケーション

Cocoaアプリと一部のCarbonアプリ。拡張子は「.app」。

例) iTunes

/Applications/iTunes.app

バンドル

バンドル構造を持つプログラム。拡張子は「.bundle」。

例) メールのデフォルトメッセージ

/private/etc/mail/DefaultMessages.bundle

コンポーネント

他のアプリケーションのコンポーネント(部品)として利用されるプログラム。拡張子は「.component」。

例) QuickTimeのコーデック

/Library/QuickTime/AppleIntermediateCodec.component

フレームワーク

ヘッダファイルや共有ライブラリなど。拡張子は「.framework」。

カーネルエクステンション(機能拡張)

カーネルの機能を拡張するモジュール。拡張子は「.kext」。

エクストラメニュー

メニューバーの右側に表示されるアドオン。拡張子は「.menu」。

パッケージ

インストーラが使用するパッケージファイル。拡張子は「.pkg」。

プラグイン

アプリケーションでアドオン利用可能なモジュール。拡張子は「.plugin」。

例) QuickTimeプラグイン

/Library/Internet Plug-Ins/QuickTime Plugin.plugin

システム環境パネル

システム環境設定に表示されるパネル。拡張子は「.prefPane」。

例) ネットワーク設定

System/Library/PreferencePanes/Network.prefPane

スクリーンセーバ

スクリーンセーバ。拡張子は「.saver」「.slideSaver」。

例) iTunesアートワークスクリーンセーバ

System/Library/Screen Savers/iTunes Artwork.saver

サービス

システムに常駐するタイプのサービス。拡張子は「.service」。

例) Spotlightサービス

System/Library/Services/Spotlight.service

ダウンロードファイル

Safariでダウンロード中のファイル。拡張子は「.download」。

Spotlightプラグイン

Spotlightで検索可能にするファイル種別毎のプログラム。拡張子は「.mdimporter」。

例) PDFファイル用プラグイン

/System/Library/Spotlight/PDF.mdimporter