An open API service indexing awesome lists of open source software.

https://github.com/dearblue/ruby-extattr

extended filesystem attribute operator for ruby
https://github.com/dearblue/ruby-extattr

extattr ntfs-ads ntfs-ea ruby xattr

Last synced: about 2 months ago
JSON representation

extended filesystem attribute operator for ruby

Awesome Lists containing this project

README

        

# extattr - filesystem extended attributes manipurator for Ruby

extattr is filesystem extended attributes manipurator for Ruby on FreeBSD, GNU/Linux and Microsoft Windows.

- [Quick Reference](QUICKREF.ja.md) (in Japanese)
- [HISTORY](HISTORY.ja.md) (in Japanese)

extattr はファイルシステムの拡張属性を操作するライブラリで、FreeBSD、GNU/Linux、Windows に対応しています。

サポートされる環境で、統一的なメソッドを提供します。

実装については、以下のようになっています。

* FreeBSD: extattr (`extattr_list`, `extattr_get`, `extattr_set`, `extattr_delete`)
* GNU/Linux: xattr (`listxattr`, `getxattr`, `setxattr`, `removexattr`)
* Microsoft Windows: NTFS ADS (代替データストリーム) / 拡張ファイル属性 (`NtQueryEaFile`, `NtSetEaFile`)

## Tested system

* PC-BSD/AMD64 10.0
* lubuntu 13.10 (i386)
* Microsoft Windows XP Professional SP3
* Microsoft Windows 7 Professional SP1

## GNU/Linux における特記事項

* GNU/Linux で利用されている名前空間〈security〉〈trusted〉には未対応です。

## Microsoft Windows における特記事項

* Windows XP 以降を必要とします。Win2k でも動作するかもしれません (未検証)。

Windows 9x シリーズでは `require "extattr"` の段階で例外が発生すると思われます (未検証)。
* ``ExtAttr::USER`` は (比較的よく利用される) NTFS ADS に対する操作で、``ExtAttr::SYSTEM`` が本来の (あまり利用されていない) 拡張ファイル属性に対する操作となります。
* リパースポイント (ジャンクションやシンボリックリンク) に対する NTFS ADS は要素の取得や設定、削除は出来ません。

必ずリンク先に対する操作となります (やり方がわかりません)。
* 64 KiB を超える NTFS ADS は取得も設定も出来ません。

これは『拡張属性』と捉えた場合、巨大なデータを扱えるべきではないという考えによるためです
(本当のところは FreeBSD の拡張属性が最大 64KiB 弱であることが由来です)。
* 巨大な NTFS ADS を扱いたい場合は、``File.open`` でファイルとして扱えるので自由に読み書きできます。

これは Ruby に限ったことではなく、Windows による仕様です。

この場合の与えるファイル名は、``path + ":" + name`` という形になります。

``` ruby:ruby
filepath = "sample.txt"
extattrname = "category"
ntfs_ads_name = filepath + ":" + extattrname
File.open(ntfs_ads_name, "r") do |file|
...
end
```

## 既知のバグ

* ``extattr_list`` のブロック内で ``extattr_set`` ``extattr_delete`` を行うと正確な列挙がされない場合がある

解決方法: ``extattr_set`` か ``extattr_delete`` のどちらかを同時に利用したい場合、``extattr_list.each`` を用いてください。

## 参考資料

* extattr
*
* xattr
*
* windows
*
*
*
*
*
* FileTest

## Specification

- package name: [extattr](https://rubygems.org/gems/extattr)
- Author: dearblue
- Version: 0.4
- Product quality: technical preview
- License: [2-clause BSD License](LICENSE.md)
- Project page:
- Support Ruby: Ruby 2.5+