有时在绝望的情况下,为了测试我的问题是否不是权限问题,我会这样做:
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/
顺便问一下,关于调试权限问题有什么技巧吗?
答案1
有一种简单的方法可以使用 ACL 工具来备份和恢复目录树的权限和所有权。即使您没有在文件系统上启用 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