Сделать папку неудаляемой для не -root, но она должна быть доступна для записи

Со стандартнымfind:

find "$PWD" -type f -exec sh -c '
    for pathname do
        printf "%s\t%s\n" "${pathname##*/}" "$pathname"
    done' sh {} +

Это напечатает список всех файлов, разделенных табуляцией -, в текущем каталоге или ниже него. Первый столбец будет содержать имя файла, а второй столбец будет содержать путь к файлу относительно абсолютного пути текущего каталога ($PWDв пути поиска ).

Это делается путем подачи пакетов найденных путей к короткому -строковому сценарию, который просто выводит имена в предпочтительном формате. Подстановка параметра ${pathname##*/}расширяется до значения $pathnameс удалением всего до последнего /.

Обратите внимание, что имена файлов, содержащие символы новой строки, будут представлены на нескольких строках, и будет трудно правильно различить имена файлов, содержащие символы табуляции -. Предполагая, что результат будет предназначен для просмотра, а не для анализа, это может быть нормально.

0
01.05.2020, 19:52
2 ответа

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

$ tree -pu
.
└── [drwxr-xr-x root    ]  testDir
    └── [drwxrwxrwx user    ]  subDir

Как вы можете видеть выше, каталог testDirпринадлежит rootи только rootимеет доступ к нему для записи. Каталог testDir/subDirпринадлежит моему пользователю, и все имеют к нему полный доступ. Это означает, что я могу свободно создавать и удалять файлы там:

$ touch testDir/subDir/file
$ echo "hello World" > testDir/subDir/file2
$ ls -l testDir/subDir/
total 4
-rw-r--r-- 1 terdon terdon  0 May  1 17:56 file
-rw-r--r-- 1 terdon terdon 12 May  1 17:57 file2
$ rm testDir/subDir/file
$ ls -l testDir/subDir/
total 4
-rw-r--r-- 1 terdon terdon 12 May  1 17:57 file2

Однако я не могу удалить сам каталог:

$ rm -r testDir/subDir
rm: cannot remove 'testDir/subDir': Permission denied

Нет, даже если он пуст:

$ rm testDir/subDir/*
$ rmdir testDir/subDir/
rmdir: failed to remove 'testDir/subDir/': Permission denied
1
28.04.2021, 23:16

Вы можете пометить каталог как добавление -только с помощью chattr +a <dir>, что означает, что в нем можно создавать новые файлы, но не удалять.

0
28.04.2021, 23:16

Теги

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