由于答案(对我自己)难以理解,并且花了一些时间才能理解(此评论使我理解了),因此我将给出一个更好的解释。
1.在fakeroot中会发生什么
只不过是您自己的用户所发生的事情。绝对没有。如果您fakeroot
(被调用时会给您提供一个新的shell,就像sudo
这样),假装做您需要许可的工作,然后退出,则绝对不会发生任何事情。
如果您考虑一下,那完全是浪费时间。您为什么要做一些实际上不会发生的事情?太疯狂了 您可能根本没有做任何事情,也不会有任何区别,因为没有任何痕迹。
等一下...
2.假根的踪迹
有可能是留下的痕迹fakeroot
。让我们看一下MortenSickel的答案中的命令,它非常不错,值得推荐:
$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst
乍一看,似乎fakeroot
浪费了很多时间。最后,如果您没有使用过fakeroot
,您将拥有相同的东西。
这里的微妙之处是:
$ cat root.tst
Wow I have root access
这意味着文件的内容仍然记得是根。您可能会说不使用fakeroot
会产生相同的结果。没错,这个例子太简单了。
让我们再举一个例子:
$ fakeroot
# touch x
# touch y
# chown myuser:myuser x
# ls -l > listing
# exit
$ ls -l
total 4
-rw-rw-r-- 1 myuser myuser 152 Jan 7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x
-rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 y
$ cat listing
total 0
-rw-rw-r-- 1 root root 0 Jan 7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x
-rw-rw-r-- 1 root root 0 Jan 7 21:39 y
让我们看看发生什么了。我假装是root
,这完全无效,并且创建了x
和y
。我假装x
属于myuser
和y
属于root
。它们实际上都属于myuser
(最后我们可以看到),但是我只是假装这样。
然后,我创建了一个清单,并将我的想象力保存到文件中。稍后,当我回顾该文件时,可以看到我认为文件应归谁所有。再说一次,它们实际上并不是我想象的人所有,我只是简单地想像而已。
3.那么...你为什么又想要那个?
您可能会说,我真的不需要假冒自己的根来创建该列表。我可以简单地创建清单,然后对其进行编辑以反映我的想象力。没错,您不需fakeroot
要这样做。实际上,知道这fakeroot
实际上并没有做任何事情,就不可能获得以前没有的任何能力。
但是,这是什么fakeroot
是一回事,编辑上市可能是平凡的。与可以在您的系统上安装的软件包一样,您具有tar
ed,gzip
ed,xz
ed,bzip2
ed或任何其他格式可以将文件保存在一起并记住其权限和所有者。您可以轻松地修改压缩文件并编辑文件所有权吗?我不认识你,但我想不出办法。
是否可以构建一个工具,将所有内容压缩后,即可修改压缩文件并以编程方式编辑所有权和权限?是的,可以。因此,您可以在压缩之前伪造所有权,或者在压缩之后更改所有权。Debian人认为前者更容易。
4.为什么不只是使用sudo
?
首先,您不需要root用户特权即可构建软件,也不需要root用户特权即可对其进行压缩。因此,如果您不需要它,则必须真正成为Windows用户才能考虑获得该权限。但讽刺的是,您甚至可能没有root密码。
此外,假设您具有root权限。假设您要假装文件应该仅对根目录具有读取权限。因此sudo
,实际上您将文件所有者和权限更改为root
,就退出了root shell并尝试打包所有内容。您失败是因为现在由于您没有root用户访问权限而无法再读取文件。因此,您必须以sudo
根用户身份压缩和构建软件包。实际上,您必须以root用户身份执行所有操作。
这是不好的TM。
作为打包者,您不需要root权限,也不应该获得它。安装软件包时,您可能需要以A
root 身份安装一些文件(),而这正是您需要root权限的地方。所有fakeroot
要做的就是使这成为可能。它使打包程序列出A
由存档者拥有的根用户,以便在用户解压缩程序包时,存档者需要A
拥有root权限并创建由root拥有的用户。
sudo
或su
因为它是您的计算机。fakeroot
有两种用法:1)愚弄程序以使您相信您确实是root用户,即使不需要,某些编写不佳的专有软件也可能会需要它(通常是Windows开发人员改用Linux); 2)它允许模拟文件模式和所有权更改,而您不会否则,它主要是创建tar
具有正确权限和所有权的文件,例如在打包软件时很有用。