Linux 文件属性a
通常被记录为适用于文件。
chattr(1) 联机帮助页:
设置了“a”属性的文件只能以追加模式打开进行写入。
0x20 文件只能追加(EXT4_APPEND_FL)。
我的问题是:
- 仅限
chattr +a
于文件吗? - 它是否递归新的子目录和文件?
答案1
这仅附加flag ( chattr +a
) 防止删除目录,一个井以及直接在该目录内创建的文件和目录:
创建测试目录和文件:
# mkdir /tmp/foo
# chattr +a /tmp/foo
该目录无法删除:
# rmdir /tmp/foo
rmdir: failed to remove ‘/tmp/foo’: Operation not permitted
现在在其中创建文件和目录:
# touch /tmp/foo/bar
# mkdir /tmp/foo/baz
让我们检查一下:
# lsattr -d /tmp/foo /tmp/foo/ba*
-----a-------e-- /tmp/foo
-------------e-- /tmp/foo/bar
-------------e-- /tmp/foo/baz
尝试删除一些东西:
# rm /tmp/foo/bar
rm: cannot remove ‘/tmp/foo/bar’: Operation not permitted
# rmdir /tmp/foo/baz
rmdir: failed to remove ‘/tmp/foo/baz’: Operation not permitted
rm -Rf /tmp/foo
rm: cannot remove ‘/tmp/foo/bar’: Operation not permitted
rm: cannot remove ‘/tmp/foo/baz’: Operation not permitted
最后是子子目录和子目录中的文件不受保护:
# mkdir /tmp/foo/baz/bat
# touch /tmp/foo/baz/baff
# rm --verbose -Rf /tmp/foo/baz
removed directory: ‘/tmp/foo/baz/bat’
removed ‘/tmp/foo/baz/baff’
rm: cannot remove ‘/tmp/foo/baz’: Operation not permitted
再次注意,只有/tmp/foo
附加标志:
# lsattr -d /tmp/foo /tmp/foo/baz
-----a-------e-- /tmp/foo
-------------e-- /tmp/foo/baz