Можно ли создать каталог кеша, который отказывается от отсоединения/удаления?

У меня была точно такая же проблема с WSL.

После комментария пользователя @Gilles я подтвердил, что попытка с emacs -qне выявила проблемы. После этого я покопался в custom-set-variablessexp auto -, сохраненном Emacs, и нашел оскорбительный unspecifiedв ansi-term-color-vector.

Я просто удалил весь ansi-term-color-vectorsexp и перезапустил Emacs с полными настройками. Теперь ранее проблемные приложения нормально работают в терминале emacs.

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(ansi-color-faces-vector
   [default bold shadow italic underline bold bold-italic bold])
 '(ansi-term-color-vector
   [unspecified "#272822" "#f92672" "#a6e22e" "#f4bf75" "#66d9ef" "#ae81ff" "#66d9ef" "#f8f8f2"] t))
1
22.11.2020, 05:23
1 ответ

В Linux уже реализована такая функция для некоторых файловых систем :атрибут режима добавления . Этот атрибут может быть изменен только пользователем root (или с соответствующими полномочиями ). Изchattr:

ATTRIBUTES

A file with the 'a' attribute set can only be open in append mode for writing. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

На самом деле, даже если это не описано явно, это также влияет на каталоги :в них можно добавлять (или связывать )файлы, но нельзя их больше удалять или переименовывать.

Атрибуты поддерживаются как минимум в ext4 , xfs и btrfs (, но, например, не поддерживаются в файловых системах tmpfs ).

Полный пример. Нормальное поведение:

$ mkdir mytest
$ echo 1 > mytest/foo
$ mv mytest/foo mytest/bar
$ echo 2 > mytest/foo
$ rm mytest/foo

Теперь с установленным атрибутом:

$ sudo chattr +a mytest
$ echo 3 > mytest/foo
$ rm mytest/foo
rm: cannot remove 'mytest/foo': Operation not permitted
$ rm mytest/bar
rm: cannot remove 'mytest/bar': Operation not permitted
$ mv mytest/foo mytest/baz
mv: cannot move 'mytest/foo' to 'mytest/baz': Operation not permitted

Это не влияет на сами файлы, так как они сами не получили атрибут режима добавления :

$ echo 4 >> mytest/foo
$ echo 5 >> mytest/bar
$ cat mytest/foo
3
4
$ cat mytest/bar
1
5

Они все еще могут быть усечены:

$ : > mytest/foo
$ cat mytest/foo
$

Или связанный/отключенный в другом месте:

$ mkdir mytest2
$ ln mytest/foo mytest2/foo
$ rm mytest2/foo
$ 

Единственный способ снять ограничение, которое даже применяется к root , — это для root удалить атрибут только добавление с chattr -a mytest.

1
18.03.2021, 22:48

Теги

Похожие вопросы