Иногда в отчаянии, чтобы проверить, не связана ли моя проблема с разрешением, которое я делаю:
sudo chmod -R 777 mydir/
В большинстве случаев это не помогает, и теперь у меня две проблемы;)
Файлы внутри mydir/
у каждого были разные разрешения и разные владельцы, и теперь мне нужно восстановить их до исходного состояния.
Есть ли какой-нибудь умный способ рекурсивного восстановления разрешений, кроме создания резервной копии? Например.
command_to_save_the_permissions_somewhere mydir/
chmod -R 777 mydir/
command_to_restore_the_permissions_from_somewhere mydir/
Кстати, какие-нибудь советы по отладке проблем с разрешением?
Существует простой способ резервного копирования и восстановления разрешений и прав собственности на дерево каталогов с помощью инструментов ACL. Он работает, даже если в файловой системе не включены списки контроля доступа.
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
Большинство проблем с разрешениями приводят к тому, что где-то на консоли или в каком-либо файле журнала появляется сообщение об ошибке «В разрешении отказано».
Мощным инструментом для исследования проблем с доступом к файлам является strace
. Он показывает системные вызовы, сделанные процессом. Вывод может быть трудным для понимания, но относительно легко увидеть, к каким файлам программа пытается получить доступ и почему она может или не может найти то, что хочет. Примеры использования:
strace -s9999 -o myprogram.strace myprogram # trace myprogram
strace -s9999 -fF ... # also trace subprocesses
strace -s9999 -p12345 # connect to running process by PID
strace -s9999 -efile ... # only show filesystem calls
strace -eaccess,open,stat,lstat # only show common file access calls