この記事は
YAMAP エンジニア Advent Calendar 2022 の第 21 日目の記事です。
経緯
とあるファイルを S3 バケットからダウンロードした後、たまたまターミナル上でとあるファイルをリストアップしてみたらファイルのパーミッションに @
が付いていたのが気になったので調べてみたメモです。
$ ls -l とあるファイル -rw-r--r--@ 1 user staff 3408385 12 19 20:01 とあるファイル
この @
って何だろうかー? 🤔
尚、この記事では以下の環境で動作確認等を行っております。
$ sw_vers ProductName: macOS ProductVersion: 12.6.1 BuildVersion: 21G217
man ls (man 1 ls)
まずは man してみると、ls コマンドに以下のようなオプションが利用出来ることを確認しました。
-@ Display extended attribute keys and sizes in long (-l) output.
ファイルに付与された拡張属性を表示する為のオプションのようです。
実際に @
が付いたファイルを ls -l@
してみると、以下のように表示されることを確認しました。
$ ls -l@ とあるファイル -rw-r--r--@ 1 user staff 3408385 12 19 20:01 とあるファイル com.apple.lastuseddate#PS 16 com.apple.macl 72 com.apple.quarantine
ということは、この @
はファイルに拡張属性が付いていることを示していることが解りました。
尚、macOS については xattr
コマンド (オプション -l
) で拡張属性の詳細を確認することが出来ます。
$ xattr -l とあるファイル com.apple.lastuseddate#PS: Dc com.apple.macl: com.apple.quarantine: 0083;1234567890;Safari;XXXXXXX-YYYY-ZZZZ-XXXX-ZZZZZZZZZZZZ
また、この拡張属性を削除したい場合には、以下のように実行します。
# xattr -d ${拡張属性名} ${対象となるファイル名} $ xattr -d com.apple.lastuseddate#PS とあるファイル
拡張属性を使いたい場合には以下のように実行します。
# xattr -w ${拡張属性名} ${拡張属性値} ${対象となるファイル名} $ xattr -w foo.bar.hoge bar とあるファイル $ xattr -l とあるファイル com.apple.macl: com.apple.quarantine: 0083;1234567890;Safari;XXXXXXX-YYYY-ZZZZ-XXXX-ZZZZZZZZZZZZ foo.bar.hoge: bar
ちなみに、拡張属性 (拡張ファイル属性) とは?
拡張ファイル属性とは、ファイルシステムが解釈しないメタデータをユーザーが付与出来るファイルシステムの一機能とのことです。
現場からは以上でした!