メインコンテンツへスキップ
レッスン 5 / 8推定時間: 20

ファイル属性とメタデータ

拡張属性、ACL、特殊なファイル属性を理解し、高度なファイル管理を行う方法を学びます

このレッスンの学習目標

  • 拡張属性(xattr)を操作できる
  • ACL(アクセス制御リスト)を設定できる
  • 特殊なファイル属性を理解する
  • ファイルのメタデータを効率的に管理できる

拡張属性(Extended Attributes)

拡張属性は、ファイルやディレクトリに追加のメタデータを格納する仕組みです。

拡張属性の基本

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

拡張属性の名前空間:

  • user. : ユーザー定義属性
  • system. : システム属性
  • security. : セキュリティ属性
  • trusted. : 信頼された属性

xattrの操作

# 拡張属性の設定
setfattr -n user.author -v "John Doe" test_file.txt
setfattr -n user.project -v "WebApp" test_file.txt

# 拡張属性の確認
getfattr -d test_file.txt
getfattr -n user.author test_file.txt

# すべての拡張属性を表示
ls -l --time-style=long-iso test_file.txt
getfattr -d test_file.txt

# 拡張属性の削除
setfattr -x user.author test_file.txt

実践的な拡張属性の使用例

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# プロジェクト管理情報を付与
setfattr -n user.status -v "draft" doc1.txt
setfattr -n user.status -v "review" doc2.txt
setfattr -n user.status -v "approved" doc3.txt

# 作成者情報
setfattr -n user.author -v "Alice" doc1.txt
setfattr -n user.author -v "Bob" doc2.txt

# バージョン情報
setfattr -n user.version -v "1.0" doc1.txt
setfattr -n user.version -v "2.1" doc2.txt

# ステータス別にファイルを検索
find . -name "*.txt" -exec sh -c 'getfattr -n user.status "$1" 2>/dev/null | grep -q "review" && echo "$1"' _ {} \;

ACL (Access Control Lists)

ACLは、通常のUNIXパーミッション(rwx)を拡張した、より細かいアクセス制御を提供します。

ACLの基本概念

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

ACLを使うと:

  • 複数のユーザー/グループに個別の権限設定
  • デフォルトACLでディレクトリ内の新規ファイルに自動適用
  • より詳細な権限管理が可能

ACLの設定と確認

# 現在のACLを確認
getfacl document.txt

# 特定ユーザーに権限を付与
setfacl -m u:alice:rw document.txt
setfacl -m u:bob:r document.txt

# グループに権限を付与
setfacl -m g:developers:rw document.txt

# ACLの確認
getfacl document.txt
ls -l document.txt  # +マークが付く

# 特定のエントリを削除
setfacl -x u:alice document.txt

# すべてのACLを削除
setfacl -b document.txt

ディレクトリのデフォルトACL

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# ディレクトリにデフォルトACLを設定
setfacl -d -m u:alice:rwx shared_folder/
setfacl -d -m g:team:rw shared_folder/

# デフォルトACLの確認
getfacl shared_folder/

# 新しいファイルを作成してACLを確認
touch shared_folder/new_file.txt
getfacl shared_folder/new_file.txt

# 再帰的にACLを適用
setfacl -R -m u:bob:r shared_folder/

ファイル属性(File Attributes)

Linuxファイルシステムには、特殊な属性を設定できるものがあります。

基本的なファイル属性

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

主要なファイル属性:

  • i : 変更不可(immutable)
  • a : 追記のみ(append-only)
  • c : 圧縮
  • d : ダンプ対象外
  • s : 安全削除
  • u : 削除取り消し可能

属性の設定と確認

# 現在の属性を確認
lsattr important.txt

# 変更不可属性を設定
chattr +i important.txt

# 変更を試みる(エラーになる)
echo "test" >> important.txt
rm important.txt

# 属性を解除
chattr -i important.txt

# 追記のみ属性
chattr +a secret.txt
echo "log entry" >> secret.txt  # 成功
echo "overwrite" > secret.txt   # エラー

# 複数属性の設定
chattr +ai backup.txt

システム管理での活用

# 重要な設定ファイルを保護
sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow

# ログファイルを追記のみに
sudo chattr +a /var/log/messages

# バックアップファイルを圧縮属性に
chattr +c *.backup

# 一時ファイルを安全削除対象に
chattr +s /tmp/sensitive_data

メタデータ管理の実践例

ドキュメント管理システム

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# ドキュメントに管理情報を付与
for doc in docs/drafts/*.md; do
    setfattr -n user.status -v "draft" "$doc"
    setfattr -n user.created -v "$(date +%Y-%m-%d)" "$doc"
    setfattr -n user.author -v "$USER" "$doc"
done

# レビュー用ディレクトリにACL設定
setfacl -m u:reviewer:rwx docs/review/
setfacl -d -m u:reviewer:rw docs/review/

# 公開済みファイルを変更不可に
for file in docs/published/*; do
    [ -f "$file" ] && chattr +i "$file"
done

バックアップシステム

#!/bin/bash
# backup_with_metadata.sh

BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"

# ファイルをコピーし、メタデータを保持
find /home -type f -newer /tmp/last_backup -print0 | while IFS= read -r -d '' file; do
    # ファイルをコピー
    cp -p "$file" "$BACKUP_DIR/"
    
    # バックアップ情報を拡張属性に記録
    setfattr -n user.backup_date -v "$(date)" "$BACKUP_DIR/$(basename "$file")"
    setfattr -n user.original_path -v "$file" "$BACKUP_DIR/$(basename "$file")"
done

# バックアップファイルを追記のみに
chattr +a "$BACKUP_DIR"/*

実践演習

演習1:プロジェクト管理システム

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

プロジェクト内のファイルに適切なメタデータとACLを設定してください。

解答例:

# 拡張属性でファイル分類
setfattr -n user.type -v "source" project/src/*
setfattr -n user.type -v "documentation" project/docs/*
setfattr -n user.type -v "test" project/tests/*

# 作成日時を記録
find project -type f -exec setfattr -n user.created -v "$(date +%Y-%m-%d)" {} \;

# 開発者グループにソースコードの読み書き権限
setfacl -R -m g:developers:rw project/src/

# ドキュメントは全員読み取り可能
setfacl -R -m g:all:r project/docs/

# テストファイルはテスターグループのみ
setfacl -R -m g:testers:rw project/tests/

演習2:セキュアファイル管理

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

機密ファイルとログファイルに適切な属性を設定してください。

解答例:

# 機密ファイルを変更不可に
chattr +i secret.txt

# ログファイルを追記のみに
chattr +a audit.log

# 機密情報を拡張属性で記録
setfattr -n user.classification -v "confidential" secret.txt
setfattr -n user.access_level -v "admin_only" secret.txt

# ACLで管理者のみアクセス可能に
setfacl -m u:admin:rw secret.txt
setfacl -m u::--- secret.txt  # 所有者の権限も制限
setfacl -m g::--- secret.txt
setfacl -m o::--- secret.txt

トラブルシューティング

よくある問題と解決策

1. 拡張属性がサポートされていない

# ファイルシステムが拡張属性をサポートしているか確認
mount | grep -E '(ext[234]|xfs|btrfs)'

# マウントオプションを確認
mount | grep user_xattr

# 必要に応じて再マウント
sudo mount -o remount,user_xattr /dev/sda1

2. ACLが効かない

# ファイルシステムがACLをサポートしているか確認
tune2fs -l /dev/sda1 | grep acl

# ACLマウントオプション追加
sudo mount -o remount,acl /dev/sda1

3. ファイル属性が設定できない

# ファイルシステムの対応確認
lsattr / 2>/dev/null && echo "Supported" || echo "Not supported"

# 権限確認(root権限が必要な属性もある)
sudo chattr +i filename

まとめ

このレッスンでは、高度なファイル属性とメタデータ管理について学びました:

  • 拡張属性による柔軟なメタデータ管理
  • ACLによる詳細なアクセス制御
  • ファイル属性による特殊な動作制御
  • セキュリティと効率性を両立した管理手法

これらの機能を適切に活用することで、より安全で効率的なファイル管理が可能になります。

💡 次のレッスンでは、高度なファイル同期について学びます。

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行