ライブラリはなぜ見えなくなったのか?ファイルフラグを探る

Snow LeopardからMountain Lionに移行して、最初に躓いたのがライブラリフォルダが見えなくなってしまったこと。ちゃんと存在するんだけど、Finderからは見えなくなってしまった...。

  • メニューから、option-移動 >> ライブラリ
  • あるいは、command-shift-G、「~/Library」

以上どちらかの操作でライブラリにはアクセスできるのだけど、Finderから素直に見えていないと頻繁にアクセスする自分としては不便を感じる。そこでMountain Lion移行当初に、さっそくSnow Leopard以前と同じようにライブラリが常時見える設定にしておいた。ところが、先日OSX 10.8.3のアップデートを適用したら、再びライブラリフォルダが見えなくなってしまった...。さて、ライブラリが常時見える設定ってどうやるのだっけ?(忘れてしまった)

正解は...

$ chflags nohidden ~/Library

これでライブラリフォルダが常時見えるようになった!

ファイルフラグとは

  • そもそもchflagsコマンドとは何かと言えば...

BSDUNIX にはパーミッションとは別にファイルフラグという仕組みがあり、変更禁止、追加禁止などの設定をすることができる。なお、ファイルフラグは chmod のパーミッションとは全く別のものである。

chflagsコマンドの使い方: UNIX/Linuxの部屋

なるほど。

  • そして、chflagsで指定したnohiddenは何をしているのかと言えば、ファイルフラグのhidden設定を削除しているのだ。
  • ちなにみ、ファイルフラグの状態は、ls -lOで確認できる。
$ ls -lO ~
total 0
drwx------+  15 bebe  staff  -        510  3 25 06:33 Desktop
drwx------+ 399 bebe  staff  -      13566  3 14 14:03 Documents
drwx------+ 204 bebe  staff  -       6936  3 25 10:34 Downloads
drwx------@  66 bebe  staff  hidden  2244  3 12 13:32 Library
drwx------+   6 bebe  staff  -        204  3 18 11:09 Movies
drwx------+   9 bebe  staff  -        306  2 28 09:28 Music
drwx------+  11 bebe  staff  -        374 10 23 16:53 Pictures
drwxr-xr-x+  11 bebe  staff  -        374  9 16  2012 Public
drwxr-xr-x    4 bebe  staff  -        136  2 25 10:59 Sites
  • 上記のようにLion以降の~/Libraryは、hiddenが設定されていたのだ!
  • ちなみに、ファイルフラグの設定がない項目は、- が表示されている。
  • nohiddenを設定すると、以下のように変化するのだ。
$ chflags nohidden ~/Library
$ ls -lO ~
total 0
drwx------+  15 bebe  staff  -   510  3 25 06:33 Desktop
drwx------+ 399 bebe  staff  - 13566  3 14 14:03 Documents
drwx------+ 204 bebe  staff  -  6936  3 25 10:34 Downloads
drwx------+  66 bebe  staff  -  2244  3 12 13:32 Library
drwx------+   6 bebe  staff  -   204  3 18 11:09 Movies
drwx------+   9 bebe  staff  -   306  2 28 09:28 Music
drwx------+  11 bebe  staff  -   374 10 23 16:53 Pictures
drwxr-xr-x+  11 bebe  staff  -   374  9 16  2012 Public
drwxr-xr-x    4 bebe  staff  -   136  2 25 10:59 Sites
  • hiddenは、OSX独自のファイルフラグで、GUI環境からファイルやフォルダ不可視にする。
  • つまり、hiddenが設定されていると、GUI環境≒Finderから見えなくなる*1
  • 一方、ターミナル等からlsコマンドを実行したときは、ちゃんと表示される。
  • 見えなくなるのはGUI環境からだけなのだ。

実験

  • ちなみに、二つ以上のファイルフラグが設定されている場合は、以下のように表示された。
$ ls -lO ~/Desktop
total 128
drwxr-xr-x@ 4 bebe  staff  uchg,hidden   136 10 16 16:08 folder/
  • uchg,hiddenを設定してみた。
  • するとカンマ区切りになった。

興味

  • デスクトップの項目にhidden属性を設定すれば、散らかったデスクトップも素早く非表示にできた!(根本的には何も改善されないのだけど)
$ chflags hidden ~/Desktop/*
または...
$ chflags -R hidden ~/Desktop
  • 上段chflags hidden ~/Desktop/* と 下段chflags -R hidden ~/Desktop の違いは...
    • 上段は、デスクトップの第一階層のみ見えなくなるが、
    • 下段は、デスクトップ以下すべての階層が見えなくなる。

ファイルフラグ一覧

ファイルフラグ 説明 意味
arch, archived set the archived flag (super-user only)
opaque set the opaque flag (owner or super-user only). [Directory is opaque when viewed through a union mount]
nodump set the nodump flag (owner or super-user only)
sappnd, sappend set the system append-only flag (super-user only) (フラグの変更には管理者権限が必要)
フォルダにおいて追加のみ可能。変更はできない。
schg, schange, simmutable set the system immutable flag (super-user only) (フラグの変更には管理者権限が必要)
変更不可フラグ。設定するとFinderのロック属性がオンになる。
uappnd, uappend set the user append-only flag (owner or super-user only) フォルダにおいて追加のみ可能。変更はできない。
uchg, uchange, uimmutable set the user immutable flag (owner or super-user only) 変更不可フラグ。設定するとFinderのロック属性がオンになる。
hidden set the hidden flag [Hide item from GUI] GUI環境からアイテムを隠す。
  • カンマ区切りの複数のファイルフラグは、どれか1つを設定すればOK。
    • すべて同じ意味の設定になる。(左側のファイルフラグほどより短縮形)
  • ファイルフラグの先頭にnoを付加すると、そのファイルフラグが削除される。
    • 但し、ファイルフラグnodumpのみ、dumpの設定によって削除されるようだ。

追記

  • ちなみに、Finderから見えないファイルには、もう1つある。
    • ファイルフラグにhiddenが設定されたファイル以外に、
    • ファイル名が .(ピリオド)で始まるファイルも見えない。
  • そういった不可視ファイルをすべてFinderで表示する方法もあるのだ。
# すべて表示する設定
$ defaults write com.apple.finder AppleShowAllFiles -boolean true; killall Finder

# デフォルト表示へ戻す
$ defaults delete com.apple.finder AppleShowAllFiles; killall Finder

*1:正確にはFinderだけでなく、各アプリケーションの開く・保存ダイアログ等からも見えなくなると思う