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
公式サイト
http://trac.macosforge.org/projects/zfs/wiki/
準備
導入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で定義されており、特定のサービスやアプリケーションに依存しない汎用的な構造を持つ。
基本的に
制御
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というフリーのツールを入手してインストールする。
http://www.macupdate.com/info.php/id/9830
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