Я пытаюсь отладить проблему разрешения в довольно сложной иерархии подключенных и общих томов. Неудачная операция фиксируется в следующих выходных данных strace:
open("/git/project.git/objects/12/tmp_obj_FNNWoD", O_RDWR|O_CREAT|O_EXCL, 0444) = 5
write(5, "x\1%\3121\16\3020\f@QfK\276\203\325=\250]\30\262q\222(\5\27,\245\216U\233\242"..., 109) = 109
close(5) = -1 EPERM (Operation not permitted)
Обратите внимание, что новый файл создан для чтения-записи, но с разрешениями 0444, что делает его доступным только для чтения. Что-то записано в файл, и файл закрыт. Так git создает временные файлы. Обычно это работает. Но он надежно отказывает на одном из подключенных томов, которые у меня есть.
Мне нужно выяснить, какой слой в иерархии общих папок вызывает проблему, поэтому я хотел бы попробовать его на разных уровнях иерархии. Проблема в том, что эту ошибку сложно симулировать. Для этого требуется установить git, мне нужно инициализировать новый репозиторий git, добавить в него файлы и т.д.
Есть ли способ сделать эту последовательность системных вызовов с помощью некоторых распространенных инструментов Linux? Под стандартной программой я имею в виду что-то вроде sed
, vim
, cat
, echo
, awk
... Может быть, скрипт на python тоже подойдет.
Каждая команда, которую я пробовал, просто создает новый файл с разрешением 0644.