使用 fakeroot 更改权限的问题

Sab*_*gea 5 ubuntu permissions chmod fakeroot

我不明白为什么当我chmod使用fakeroot.

最初,该文件具有以下权限:

-rwxr-xr-x  a.txt*
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 chmod 更改文件的权限时,它工作正常:

chmod 111 a.txt

---x--x--x  a.txt*
Run Code Online (Sandbox Code Playgroud)

当我用fakeroot它运行它时,它似乎不能正常工作。它正确设置了组和其他的权限,但不是为用户设置的。无论chmod命令中的第一个值是什么,读取和写入的权限都已设置。

fakeroot chmod 111 a.txt

-rwx--x--x  a.txt*
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Gil*_*il' 5

Fakeroot 不会执行所有文件元数据更改,这就是重点:它只是假装在其下运行的程序。Fakeroot 不会执行它无法执行的更改,例如更改所有者。它也不会执行会导致后续故障的更改。例如,下面的代码在以 root 身份运行时会成功,因为无论权限如何,root 始终可以打开文件:

chmod 111 a.txt
cp a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

但是当以非 root 用户身份运行时,cp失败,因为它无法读取a.txt. 为了避免这种情况,chmodfakeroot 下不会删除用户的权限。

Fakeroot 确实假装对其正在运行的程序执行更改。

$ stat -c "Before: %A" a.txt; fakeroot sh -c 'chmod 111 a.txt; stat -c "In fakeroot: %A" a.txt'; stat -c "After: %A" a.txt
Before: -rwx--x--x
In fakeroot: ---x--x--x
After: -rwx--x--x
Run Code Online (Sandbox Code Playgroud)

一般来说,在 fakeroot 内完成的文件元数据更改不能保证在 fakeroot 调用中继续存在。这才是重点。进行单个 fakeroot 调用,该调用既执行元数据更改,又执行您想要对更改的元数据执行的任何操作(例如打包存档)。